微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Gurobi Python API添加'For'循环

如何解决如何使用Gurobi Python API添加'For'循环

变量定义为列表:

    var_week = [1,2,3,4,5]
    var_pool = ['ALBANY','ROCHESTER']
    var_zone = ['NEW YORK','FLORIDA']
    var_cg = ['PREMIUM','CONVERTIBLE','MIDSIZE']
    var_bu = ['AP','OAP']
    var_pi = [0,1,5]

需求变量在需求(w,p,bu,cg,pi)级别定义,如下所示。

    demand = {(1,'ALBANY','OAP','PREMIUM',1): -0.0863039944029772,(1,1): -0.0538715896861709,'REGULAR SUV',2): 0.0203727503604571,(2,'SMALL SUV',3): 1.66739983969337}

#Decision变量

    dec_move = m.addVars(var_week,var_cg,var_pool,var_bu,name="Dec_Move")
    dec_upgrade = m.addVars(var_week,name="Dec_Upgrade")
    dec_endfleet = m.addVars(var_week,name="Dec_Endfleet")
    dec_accepted_demand = m.addVars(var_week,var_pi,name="Dec_Accepted_Demand")
    dec_delete = m.addVars(var_vin_group,var_week,name="Dec_Delete")
    dec_addition_adds = m.addVars(var_week,name="Dec_Addition_Adds")

约束应检查pi 0且需求(w,p,bu,cg,pi)> 0,然后创建约束:

for w in var_week:
   for p in var_pool:
       for bu in var_bu:
           for cg in var_cg:
              for pi in var_pi:
                  dec_accepted_demand(w,p,bu,cg,pi) <= demand(w,pi)     .

我写为:

    m.addConstrs((dec_accepted_demand(w,pi) if pi <>0 and demand(w,pi)>0) <= 
    demand(w,pi) for w in var_week for p in var_pool for bu in var_bu for cg in var_cg for pi in 
    var_pi,"Accepted_demand")

我收到无效的语法错误。构造此约束的正确方法是什么?

解决方法

generator expression中,if过滤器需要放在末尾。从字面上看,您的代码应为:

m.addConstrs(
  ( dec_accepted_demand[w,p,bu,cg,pi] <= demand[w,pi]
    for w in var_week
    for p in var_pool
    for bu in var_bu 
    for cg in var_cg
    for pi in var_pi
    if pi != 0 and demand[w,pi]>0 ),"Accepted_demand")

但是,我更喜欢迭代需求值,例如:

m.addConstrs(
  ( dec_accepted_demand[w,pi]
    for w,pi in demand
    if pi != 0 and demand[w,"Accepted_demand")

我假设您的样本数据不完整;您将需要确保真实数据包括正确的组合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。