我有一个优化问题,如下所示: 最小化: 总和'(load [i] -6 * X [i])^ 2,i = 1,.. N',其中load是已知的。 约束: X [i] = {-1或0或1} 和 Y [i + 1] -Y [i] = 1.25x [i] 哪里 Y [1] =常数1 Y [N] = Constant2
首先,我尝试解决以下数字:
p.s:我尝试过Gurobi或MIP,但没有成功
n=10
load = [2,.5,1,1.5,1,1.45,2.25,2.45,2.36,1,1.4]
Y[1]=50
Y[11]=58.75
我的问题:scipy.optimization是否可以解决此问题?任何想法都欢迎。谢谢。
编辑:
我想出了以下Gurobi代码:
from gurobipy import *
import numpy as np
import pandas as pd
n=11
# Create a new model
m = Model()
# Create variables
x = m.addVars(n,lb=-1,ub=1,vtype=GRB.INTEGER, name="x")
Y = m.addVars(n,lb=50,ub=59,vtype=GRB.CONTINUOUS, name="Y")
load = [2,.5,1,1.5,1,1.45,2.25,2.45,2.36,1,1.4]
#Y[0]=50
#Y[10]=59
# Add constraint: SOC[start]=50
m.addConstr(Y[0]==50,name='c1')
m.addConstr(Y[n-1]==58.75,name='c2')
m.addConstrs((Y[i+1]-Y[i] == 1.25*x[i] for i in range(n-1)), name='c0')
m.update()
#Y = m.addVar(lb=50,ub=59,vtype=GRB.INTEGER, name="Y")
#m.addConstr (Y[0]==50)
# Set objective
#obj1=quicksum(((load[i]-float(6*x[i]))*(load[i]-float(6*x[i])) for i in
range (n)))
obj1=quicksum(((load[i]-(6*x[i]))*(load[i]-(6*x[i])) for i in range (n)))
#obj1=quicksum((load[i]-float(6*x[i]) for i in range (n))
m.setObjective(obj1,GRB.MINIMIZE)
m.optimize()
# display solution
m.printAttr('x')