混合整数规划
回答我想解决这个问题通过使用混合整数规划,我知道如果有一个目标函数的二次项,称为一个混合整数二次规划问题(MIQP)。你能帮我更多detial细节MIQP如数学公式,算法和方法的流程图impementation吗。如果我想使用GUROBI impement这个问题解决者,我开始手机万博登录
m.addVar ()
m。setobjective (obj)
m.addConstr ()
m.optimize ()
谢谢你的帮助
##目标函数
英国《金融时报》= fa + fb
fa =爱+ bi * X1 + ci * X1 ^ 2
fb =爱+ bi * X2 + ci * X2 ^ 2
#绑定约束 X1 + B X2 = B(线性约束) |
0
-
给你的感觉如何在Gurobi实现示例中,我适应我们qcp.py例子给你:
#这是改编自//m.a-toku.com/documentation/9.1/examples/qcp_pmanbet体育手机客户端y.html中的示例subsubsection: qcp.py
进口gurobipy全科医生
从gurobipy进口伽马线暴
#创建一个新的模型
m = gp。模型(“Ehab MIQP”)
#创建变量
从你的帖子:
# l X1≤≤u
# l≤X2≤u
#为了便于说明,我做了X1连续和X2整数
l = 0
u = 5
X1 = m。addVar (name = " X1, vtype =伽马线暴。连续,磅= l,乌兰巴托= u)
X2 = m。addVar (name =“X2”, vtype =伽马线暴。整数磅= l,乌兰巴托= u)
#设置目的:
从你的帖子:
#英尺= fa + fb
# fa =爱+ bi * X1 + ci * X1 ^ 2
# fb =爱+ bi * X2 + ci * X2 ^ 2
ai = 1
bi = 2
ci = 3
fa =爱+ bi * X1 + ci * X1 * * 2 #这创建一个gurobipy。QuadExpr对象
fb X2 =爱+ bi * X2 + ci * * * 2 #这创建一个gurobipy。QuadExpr对象
英国《金融时报》= fa + fb
m。GRB.MINIMIZE setObjective(英国《金融时报》)
#添加约束
从你的帖子:
# X1 + B X2 = B(线性约束)
一个= 2
B = 4
b = 10
m。addConstr (* X1 + B * X2 = = B,“c0”)
m.optimize ()
在m.getVars v ():
打印(' % s % g ' % (v。varName, v.x))
print (Obj: % g’% ft.getValue ())更多的信息,我建议你看看Gurobi示例页面和Python API的细节。
0 -
亲爱的艾莉森Cozad
非常感谢伟大的解释
0 -
亲爱的艾莉森Cozad,
我适应的问题但是跑后得到这个错误代码
你能帮我解决吗?
#一个= int1
# B = int2
# X1 =柴油
# X2 =蝙蝠
l1 = 0
l2 = 0
u1 = maxDiesel
u2 = bat_ub
m = gp。模型(“Ehab MIQP”)
因为我在范围(0,len0):
如果netload(我)< = 0:#在这种情况下不会发生
通过
其他:#太阳能+风能<负载、柴油和电池供应
如果bat_now > bat_min:
bat_gap = bat_now - bat_min
bat_ub = min (maxBat bat_gap) #更新蝙蝠每一步
#创建变量
柴油= m。addVar (name =“柴油”,vtype =伽马线暴。连续的,磅= l1,乌兰巴托= u1)
蝙蝠= m。addVar (name =“蝙蝠”,vtype =伽马线暴。整数,磅= l2,乌兰巴托= u2)
int1 = m.addVar (vtype =伽马线暴。二进制名称= int1)
int2 = m.addVar (vtype =伽马线暴。二进制,name = ' int2 ')
m.update ()
#目标函数
fa柴油+ 0.05 = 2.6975 + 1.1153 * *柴油* * 2 #这创建一个gurobipy。QuadExpr对象
fb = 0.1154 + 0.7975 *蝙蝠蝙蝠+ 0.1409 * * * 2 #这创建一个gurobipy。QuadExpr对象
英国《金融时报》= fa + fb
m。GRB.MINIMIZE setObjective(英国《金融时报》)
#添加约束
m。addConstr(柴油* int1 +蝙蝠* int2,伽马线暴。平等,netload[我],“c0”)
m。addConstr(柴油< = maxDiesel * int1,“c1”)
m。addConstr (bat < = bat_ub * int2, c2)
m.optimize ()
set_diesel[我]= diesel.x
set_bat[我]= bat.x
set_int1[我]= int1.x
set_int2[我]= int2.x
bat_now = bat_now - set_bat[我]
其他:#电池在能量最低,不能排出,柴油完全提供
set_diesel[我]= min (maxDiesel netload[我])
在m.getVars v ():
打印(' % s % g ' % (v。varName, v.x))
print (Obj: % g’% ft.getValue ())0 -
0
-
嗨Ehab,
它看起来像你不能检索解决方案价值变量(\ (\ texttt {variable.X} \)),因为解决方案是不可行的。你是聪明添加检查\ (\ texttt {m.status} \)之前试图检索这个属性值。
如果你想要一些建议处理不可行性,我建议检查一下:我怎么确定为什么我的模型是不可行吗?
0 -
亲爱的艾莉森Cozad谢谢你的关心和帮助
其实我读这篇文章,但我找不到解决问题的步骤
0 -
嗨Ehab,
你不能检索值,因为模型是不可行的解决方案。你可以看到这个日志文件:
…
模型是不可行的
-最好的目标,,最好绑定,差距为了得到解决方案值,您将需要解决为什么你的模型是不可行的。我只是包括文章来帮助您确定为什么你的模型是不可行的。
0
请登录留下你的评论。
评论
7评论