具有矩阵约束的scipy.optimize问题

时间:2019-08-20 22:05:06

标签: python optimization scipy

我有一个优化问题,如下所示: 最小化:     总和'(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')

0 个答案:

没有答案