【问题标题】:My cplex logical constraint is not working with no error我的 cplex 逻辑约束不能正常工作
【发布时间】:2020-07-07 10:18:55
【问题描述】:

我是 cplex python 的新手。我有一个具有不同约束的模型,除了我的 if-then 约束之外,它们都可以正常工作。 x 是一个二进制变量。 我的约束解释是

"如果 x[i,j,t1] == 1 (对于 t 在 T 的范围内) 那么所有 x[j,i,t2]== 0 对于 t2 in[t+1 ,t+2 ,t+3 ]"。

我的代码:

        for i in I:
            for j in J:
              for t in T:
                mdl.add_constraint(mdl.if_then(x[i,j,t]==1, x[j,i,t+1]+x[j,i,t+2]+y[j,i,t+3]==0))

解出模型后,解法就是打破这个规则。关于这个问题没有错误,所以我不明白我做错了什么。

【问题讨论】:

    标签: python-3.x cplex


    【解决方案1】:

    要了解正在发生的事情,您可以做的是显示 if then 的所有布尔值。

    例如,我可以将 ifthen 示例从 this file 重写为

    from docplex.mp.model import Model
    
    mdl = Model(name='buses')
    nbbus40 = mdl.integer_var(name='nbBus40')
    nbbus30 = mdl.integer_var(name='nbBus30')
    mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
    mdl.minimize(nbbus40*500 + nbbus30*400)
    
    mdl.solve()
    
    for v in mdl.iter_integer_vars():
       print(v," = ",v.solution_value)
    
    print()
    print("with if nb buses 40 more than 3  then nbBuses30 more than 7")
    
    #if then constraint
    mdl.add(mdl.if_then(nbbus40>=3,nbbus30>=7))
    mdl.minimize(nbbus40*500 + nbbus30*400)
    
    mdl.solve()
    
    print("if ",nbbus40.solution_value>=3)
    print("then ",nbbus30.solution_value>=7)
    
    
    for v in mdl.iter_integer_vars():
        print(v," = ",v.solution_value) 
    

    给了

    with if nb buses 40 more than 3  then nbBuses30 more than 7
    if  False
    then  True
    

    这有助于了解正在发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多