Ich versuche, mithilfe von IBM CPLEX eine binäre Variable für mein Optimierungsproblem in Python einzurichten. In meiner Zielfunktion habe ich eine Linie eingerichtet, die sich je nach Marktpreis in t ein- und ausschaltet:
mdl.maximize(
mdl.sum( (1-b[t]) * (prod_diff[t] * price_diff[t]) + \
(b[t]) * (vol_t * price[t] + prod_diff[t] * price_spot[t]) for t in time
)
Vorbehaltlich:
mdl.add_constraint(
if prod_diff[t] <= 0:
b= 0
else:
b= 1
)
Anscheinend gibt es so etwas wie logische und bedingte Einschränkungen, aber leider schaffe ich es nicht, es in Python einzurichten. Ich bin neu auf diesem Gebiet, also wenn jemand etwas Licht auf das Problem werfen kann, wäre ich dankbar
Lösung des Problems
In der einfachen Python-Optimierung siehe
wenn, dann
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print()
print("with if nb buses 40 more than 3 then nbBuses30 more than 7")
#if then constraint
mdl.add(mdl.if_then(nbbus40>=3,nbbus30>=7))
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
Keine Kommentare:
Kommentar veröffentlichen