跳转到主要内容

混合整数规划

回答

评论

7评论

  • 艾莉森Cozad
    Gurobi员工Gurobi员工

    给你的感觉如何在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
  • Ehab伊萨
    Gurobi-versary
    健谈的人
    第一个问题

    亲爱的艾莉森Cozad

    非常感谢伟大的解释

    0
  • Ehab伊萨
    Gurobi-versary
    健谈的人
    第一个问题

    亲爱的艾莉森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
  • Ehab伊萨
    Gurobi-versary
    健谈的人
    第一个问题

    艾莉森Cozad,

    0
  • 艾莉森Cozad
    Gurobi员工Gurobi员工

    嗨Ehab,

    它看起来像你不能检索解决方案价值变量(\ (\ texttt {variable.X} \)),因为解决方案是不可行的。你是聪明添加检查\ (\ texttt {m.status} \)之前试图检索这个属性值。

    如果你想要一些建议处理不可行性,我建议检查一下:我怎么确定为什么我的模型是不可行吗?

    0
  • Ehab伊萨
    Gurobi-versary
    健谈的人
    第一个问题

    亲爱的艾莉森Cozad谢谢你的关心和帮助

    其实我读这篇文章,但我找不到解决问题的步骤

    0
  • 艾莉森Cozad
    Gurobi员工Gurobi员工

    嗨Ehab,

    你不能检索值,因为模型是不可行的解决方案。你可以看到这个日志文件:


    模型是不可行的
    -最好的目标,,最好绑定,差距

    为了得到解决方案值,您将需要解决为什么你的模型是不可行的。我只是包括文章来帮助您确定为什么你的模型是不可行的。

    0

登录留下你的评论。