Я использую библиотеку оптимизации MIP для решения проблемы, но не могу правильно объявить целевую функцию. Я написал код, прежде чем использовать Gurobi для решения, и я просто пытаюсь перевести код поверх. У меня проблемы с переписыванием целевой функции с правильным синтаксисом, любая помощь будет очень признательна, спасибо!
from mip import *
from mip import xsum, minimize
import pandas as pd
import numpy as np
import scipy as sp
m = Model()
m = Model(sense=MINIMIZE, solver_name=GRB)
n = 80
# #x is charging, discharging variable
x = [m.add_var(name='x', var_type = INTEGER, lb=-1.5, ub = 1.5) for i in range(n)]
# #Y is SOC variable
Y = [m.add_var(name='Y', var_type = CONTINUOUS, lb=0, ub = 100) for i in range(n+1)]
# # Add constraint: SOC[start]=50, initial SOC
m += Y[0] == 50 , 'c1'
# #Final targeted SOC
m += Y[n] >= 65 , 'c2'
# # This is the constrain defines relationship between SOCs and charging steps. 3.75% SOC increase decrease are for 15min steps
m += (Y[i+1]-Y[i] == 3.75*x[i] for i in range(n)), 'c0'
step=80
f1load=[44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48,38,32,44,48,53,28,32,36,41,48,38,32,38,34,44,36,41,48]
fload=f1load[0:step+1]
i1load=[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40]
iload=i1load[0:step+1]
(iload)-np.array(fload)
load1
#This command converts array to list so we can use it as a list in the rest of the code
load2=load1.tolist()
load=load2
# #Objective function. 6 comes from capacity of inverter. The line below is the Gurobi version of the obj function, that works.
# obj1=sum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n)))
m.objective = xsum((load[i+1]-(6*x[i])) * (load[i+1]-(6*x[i])) for i in range (n))
Полная трассировка стека ошибок:
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-31-ca98b7470c5c> in <module>
2 # obj1=sum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n)))
3 # m.objective = minimize(xsum(c[i]*x[i] for i in range(n)))
----> 4 m.objective = minimize(xsum((load[i+1]-(6*x[i])) * (load[i+1]-(6*x[i])) for i in range (n)))
5 # m.objective = minimize(xsum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n))))
~/opt/anaconda3/lib/python3.7/site-packages/mip/model.py in xsum(terms)
1321 """
1322 result = LinExpr()
-> 1323 for term in terms:
1324 result.add_term(term)
1325 return result
<ipython-input-31-ca98b7470c5c> in <genexpr>(.0)
2 # obj1=sum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n)))
3 # m.objective = minimize(xsum(c[i]*x[i] for i in range(n)))
----> 4 m.objective = minimize(xsum((load[i+1]-(6*x[i])) * (load[i+1]-(6*x[i])) for i in range (n)))
5 # m.objective = minimize(xsum(((load[i+1]-(6*x[i]))*(load[i+1]-(6*x[i])) for i in range (n))))
~/opt/anaconda3/lib/python3.7/site-packages/mip/entities.py in __mul__(self, other)
137
138 def __mul__(self: "LinExpr", other: Union[int, float]) -> "LinExpr":
--> 139 assert isinstance(other, (int, float))
140 result = self.copy()
141 result.__const *= other
AssertionError: