Почему объектный объект в моем коде pyomo имеет неизвестный тип "генератор"?
Я создаю проблему оптимизации с множеством ограничений, используя библиотеку pyomo в Python, но продолжаю получать ошибку в моем, казалось бы, простом определении Objective и не понимаю почему.
Я создаю абстрактную модель, где целью является минимизация затрат (ab_mdl.c)
раз сила (ab_mdl.x)
за каждый час (i)
и каждый ресурс (j)
, Вот целевая функция, написанная ниже:
def TOU_rule(ab_mdl):
return(summation(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars)
ab_mdl.cost_obj=Objective(rule=TOU_rule)
Но когда я запускаю полный код, я получаю эту ошибку:
Невозможно обработать значение ". в 0x21427670>'как константа, потому что у него есть неизвестный тип' генератор '
Я не понимаю, что именно не так с кодом, тем более что это относительно простая задача, и я следовал синтаксису похожих примеров, которые я видел, используя Pyomo. У кого-нибудь есть идеи о том, что мне делать дальше?
1 ответ
Может быть, это опечатка в вашем вопросе, но если это не так, я вижу 3 улучшения, которые вы должны сделать, чтобы ваш код работал.
return(thing)
заявление должно быть написаноreturn thing
, Это потомуreturn
это отдельное слово и нет смысла в скобках.В той же строке,
summation
не правильное слово, вы должны использоватьsum
,- Не забудьте поставить смысл оптимизации (
maximize
или жеminimize
) при звонке, чтобы построить свою цель.
Тогда ваш код будет:
def TOU_rule(ab_mdl):
return sum(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars
ab_mdl.cost_obj=Objective(rule=TOU_rule, sense=minimize)