Python Gurobi: Как я могу реализовать максимальное значение переменной решения в целевой функции? - PullRequest
0 голосов
/ 14 февраля 2020

Надеюсь, кто-нибудь может мне помочь. Я разрабатываю модель оптимизации, в которой я минимизирую затраты на электроэнергию с течением времени ( t ) и по различным транзакциям ( s ). (где: стандартная мощность ( p ) * затраты на электроэнергию (c) = затраты на электроэнергию).

Теперь я пытаюсь реализовать компонент затрат в целевая функция, основанная на максимальном потреблении энергии (например, max (P [s, t]) ). Однако np.max () возвращает ошибку, потому что P [s, t] является неподдерживаемым классом для np.max (). Также функция Gurobi gp.max_ (P [s, t]) также выдает неподдерживаемую ошибку класса. Есть кто-то, у кого есть решение?

Код:

obj = gp.quicksum(p[s, t] * Cost_elect[t]e for t in range(T) for s in range(S)) + gp.max_(p_batt_ch[s,t]*fixed_cost for t in range(T) for s in range(S))

1 Ответ

0 голосов
/ 14 февраля 2020

Необходимо присвоить ограничение max новой вспомогательной переменной и поместить эту переменную в цель вместо фактического ограничения.

maxobj = model.addVar()
max_constr = model.addConstr(maxobj == gp.max_(p_batt_ch[s,t] * fixed_cost
                             for t in range(T) for s in range(S)))

obj = gp.quicksum(p[s,t] * Cost_elect[t] for t in range(T) for s in range(S)) + maxobj)

Документация Gurobi

...