Прежде всего, все происходит, когда вы добавляете запятую: ,s!=p
.
Я просто эмулировал ваш код с моделью, над которой я работаю, и, очевидно, получил ту же ошибку.Посмотрите вокруг (например, , если еще в понимании списка ), и вы увидите, что единственной ошибкой, с которой вы столкнулись, было то, что итератор в генераторе не был точно указан.Это означает, что вам нужно было использовать предложение if
, чтобы достичь того, что вы хотели:
for s in S:
m.addConstr(
quicksum(x[s,s0,c,i] for s0 in S0 for c in C for i in D if s!=p) == 1,
'C_3_'+str(s) )
Кстати, как указано в коде, вы должны использовать quicksum
вместо sum
,Кроме того, я бы предложил попробовать изменить порядок итераторов;Другими словами, для компьютера не то же самое, что перечислять список из 5 элементов 1000 раз, чем 5 раз перечислять список из 1000 элементов, и это очень важно для синхронизации Python.
В качестве стороныобратите внимание, я попал в этот вопрос, когда искал следующее: TypeError: неподдерживаемые типы операндов для +: 'generator' и 'generator'