PyOMO: переменная с двоичным доменом оптимизируется для получения значений b / w 0 и 1 - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я пытаюсь оптимизировать мое уравнение затрат, используя несколько переменных NonNegativeReal и несколько двоичных переменных, используя Xpress Solver. У меня есть следующая проблема:

  1. Решатель возвращает значения с плавающей запятой в черно-белом 0 и 1, тогда как ожидаемый результат равен 0 или 1.
  2. Я предполагаю, что что-то не так при объявлении переменной , Может кто-нибудь указать на ошибку?

Определение переменной

M.U1=Var(M.T, domain=Boolean, bounds=(0,1), initialize=1)
M.U2=Var(M.T, domain=Boolean, bounds=(0,1), initialize=1)
M.U3=Var(M.T, domain=Boolean, bounds=(0,1), initialize=1)
M.U4=Var(M.T, domain=Boolean, bounds=(0,1), initialize=1)

Ограничения

M.aL=Constraint(expr=M.a[t]>=constraint_data['Minimum Stable Output - Pmin (MW)'][0]*M.U1[t])
M.aU=Constraint(expr=M.a[t]<=constraint_data['Maximum Stable Output - Pmax (MW)'][0]*M.U1[t])
M.bL=Constraint(expr=M.b[t]>=constraint_data['Minimum Stable Output - Pmin (MW)'][1]*M.U2[t])
M.bU=Constraint(expr=M.b[t]<=constraint_data['Maximum Stable Output - Pmax (MW)'][1]*M.U2[t])
M.cL=Constraint(expr=M.c[t]>=constraint_data['Minimum Stable Output - Pmin (MW)'][2]*M.U3[t])
M.cU=Constraint(expr=M.c[t]<=constraint_data['Maximum Stable Output - Pmax (MW)'][2]*M.U3[t])
M.dL=Constraint(expr=M.d[t]>=constraint_data['Minimum Stable Output - Pmin (MW)'][3]*M.U4[t])
M.dU=Constraint(expr=M.d[t]<=constraint_data['Maximum Stable Output - Pmax (MW)'][3]*M.U4[t])

M.C1=Constraint(expr=(M.a[t]+M.b[t]+M.c[t]+M.d[t])==data['Utility Load (MW)'][t])

Целевая функция

 expression1=M.U1[t]*M.a[t]*cost_data['Price ($/MWh)'][0]+M.U2[t]*M.b[t]*cost_data['Price ($/MWh)'] [1]+M.U3[t]*M.c[t]*cost_data['Price ($/MWh)'][1]+M.U4[t]*M.d[t]*cost_data['Price ($/MWh)'][2]
 M.obj = Objective(expr=expression1 ,sense= minimize)

Оптимизация

optimizer=SolverFactory('xpress')
optimizer.solve(M)
...