Получение ошибки утверждения при объявлении целевой функции с использованием библиотеки MIP - PullRequest
0 голосов
/ 22 февраля 2020

Я использую библиотеку оптимизации 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:
...