m0_70218345 2023-06-02 21:09 采纳率: 66.7%
浏览 72
已结题

python gurobi建模0-1变量的判断

python gurobi
我在写一个约束时遇到了困难:

Y[i][j]是大于等于零的变量,我需要对他做一个非零判断,从而确定另一个零一变量的值,大概如下:

q=model.addConstr(name=f'q{i},vtype=GRB.BINARY)
if Y[i][j]>=0:
  model.addConstr(q[i]>=1)
else
  model.addConstr(q[i]<=0)

一直出现错误:对于Y[i][j]的非零判断,一直报错:inequality constraints not supported,请问要怎么解决这个问题

  • 写回答

1条回答 默认 最新

  • 瞬间动力 2023-06-02 21:16
    关注

    这个是这样的。
    出现错误的原因是在截止到目前最新的 Gurobi 版本中,不支持直接将变量的大小与0进行比较的约束。需要使用一些代替方法。
    如果需要对 Y[i][j] 进行非零判断,然后基于判断结果确定另一个 0-1 变量 q[i] 的取值,可以使用以下代替方法:

    # add variables
    Y[i][j] = model.addVar(lb=0.0, vtype=GRB.CONTINUOUS, name=f'Y_{i}_{j}')
    q[i] = model.addVar(lb=0.0, ub=1.0, vtype=GRB.CONTINUOUS, name=f'q_{i}')
    
    # add constraints
    M = 1000000    # 设置一个足够大的 M 值,以确保线性规划的正确性
    model.addConstr(Y[i][j] - M * q[i] <= 0)
    model.addConstr(Y[i][j] >= 0)
    
    # 设置 obj,求解
    model.setObjective(...)
    model.optimize()
    

    以上代码中,我们将 Y[i][j] 定义为连续型变量(GRB.CONTINUOUS),并使用 M 值将其与Q[i]相关联。具体来说,如果 Y[i][j] 大于等于 0,则将 q[i] 的上界设为 1;否则将 q[i] 的下界设为 0。通过这种代替方法,可以避免在 Gurobi 中使用非等式约束。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月2日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题