Почему объектный объект в моем коде 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 улучшения, которые вы должны сделать, чтобы ваш код работал.

  1. return(thing) заявление должно быть написано return thing, Это потому return это отдельное слово и нет смысла в скобках.

  2. В той же строке, summation не правильное слово, вы должны использовать sum,

  3. Не забудьте поставить смысл оптимизации (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)
Другие вопросы по тегам