我用纸浆来解决一个优化问题。我的目标函数包含非常量值的乘法 代码:
import pulp as plp
from pulp import *
opt_model = plp.LpProblem(name="PHEV") #plug-in hybrid electric vehicle
# adding variables
steps = 80
iSOC = 50
tSOC = 65
set_I = range(0, steps+1)
x_var = {(i): pulp.LpVariable(name = 'x', lowBound=-1, upBound=1, cat='Integer') for i in set_I}
Y_var = {(i): pulp.LpVariable(name = 'Y', lowBound=0, upBound=100, cat='Continuous') for i in set_I}
opt_model += Y_var[0] == iSOC
opt_model += Y_var[len(Y_var)-1] == tSOC
opt_model.addConstraint(plp.LpConstraint(e = plp.lpSum(Y_var[i+1] - Y_var[i] - (3.75*x_var[i]) for i in range(steps)),sense=plp.LpConstraintEQ, rhs= 0)
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]
load1=np.array(iload)-np.array(fload)
load1
load2 = load1.tolist()
load=load2
objective = plp.lpSum((load[i+1]-(6*x_var[i])) * (load[i+1]-(6*x_var[i])) for i in set_I )
错误的完整堆栈跟踪:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-53-98e34fc93d51> in <module>
----> 1 objective = plp.lpSum((load[i+1]-(6*x_var[i])) * (load[i+1]-(6*x_var[i])) for i in set_I )
2
3
4 # objective = plp.lpSum(x_vars[i,j] * c[i,j]
5 # for i in set_I
~/opt/anaconda3/lib/python3.7/site-packages/pulp/pulp.py in lpSum(vector)
2052 :param vector: A list of linear expressions
2053 """
-> 2054 return LpAffineExpression().addInPlace(vector)
2055
2056 def lpDot(v1, v2):
~/opt/anaconda3/lib/python3.7/site-packages/pulp/pulp.py in addInPlace(self, other)
740 elif (isinstance(other,list)
741 or isinstance(other, Iterable)):
--> 742 for e in other:
743 self.addInPlace(e)
744 else:
<ipython-input-53-98e34fc93d51> in <genexpr>(.0)
----> 1 objective = plp.lpSum((load[i+1]-(6*x_var[i])) * (load[i+1]-(6*x_var[i])) for i in set_I )
2
3
4 # objective = plp.lpSum(x_vars[i,j] * c[i,j]
5 # for i in set_I
~/opt/anaconda3/lib/python3.7/site-packages/pulp/pulp.py in __mul__(self, other)
801 if len(other):
802 if len(self):
--> 803 raise TypeError("Non-constant expressions cannot be multiplied")
804 else:
805 c = self.constant
TypeError: Non-constant expressions cannot be multiplied
我已经看到,通过在https://medium.com/opex-analytics/optimization-modeling-in-python-pulp-gurobi-and-cplex-83a62129807a运行示例代码,可以使用纸浆来解决非线性程序,但我无法将目标函数转换为正确的语法。任何帮助都将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐