Я решаю задачу по лесному хозяйству с помощью PuLP и потратил много часов на выяснение того, почему CPLEX выдает бессмысленные ответы. По сути, у меня были некоторые переменные, не связанные с остальной частью проблемы из-за понимания пустого списка. Мои ограничения всегда имеют вид:
for year in YEARS:
lp+=pulp.lpSum([vol[i]*x[i] for i in possible_combinations
if test(i)])==yearly_volume[year], "yearly_volume[%d]" %(year)
А в некоторых случаях условие, определяющее понимание списка (проверка), никогда не выполнялось, что приводило к неприсоединенным переменным. Кто-нибудь еще думает, что PuLP должна предупреждать нас, когда это происходит? Я должен получить ограничение, которое выглядит как
0==yearly_volume[2025]
но вместо этого ограничение не добавляется!