Почему объектный объект в моем коде pyomo имеет неизвестный тип «генератор»? - PullRequest
0 голосов
/ 31 января 2019

Я создаю проблему оптимизации с множеством ограничений, используя библиотеку 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> 'как константа, потому что у нее неизвестный тип' generator '

Я не понимаю, что именно не так с кодом, тем более что это относительно простая задача, и я следовалСинтаксис подобных примеров я видел, используя Pyomo.У кого-нибудь есть идеи о том, что мне делать дальше?

1 Ответ

0 голосов
/ 31 января 2019

Может быть, это опечатка в вашем вопросе, но если это не так, я вижу 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...