You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gurobi C++ API中实现max{x₁-x₂,0}≥1约束的问题咨询

C++ Gurobi 实现max{x_1-x_2, 0} >= 1约束的方法

通用实现方案(适用于所有最大值约束加阈值的场景)

addGenConstrMax接口的作用是定义「某个变量等于指定多个表达式的最大值」,你只需要额外引入1个辅助变量承接最大值,再给辅助变量添加阈值约束即可:

  • 首先新增一个连续类型的辅助变量,用于存储max{x_1-x_2, 0}的计算结果
  • 调用addGenConstrMax完成辅助变量和最大值的绑定
  • 给辅助变量添加>=1的普通线性约束即可

对应代码示例:

// 假设你已经定义好了变量x1、x2,模型对象为model
// 1. 定义辅助变量,连续型,上下界设为无穷即可
GRBVar max_aux = model.addVar(-GRB_INFINITY, GRB_INFINITY, 0.0, GRB_CONTINUOUS);
// 2. 构造待取最大值的两个表达式:x1-x2 和 0
GRBLinExpr diff_expr = x1 - x2;
GRBLinExpr max_candidates[2] = {diff_expr, 0};
// 3. 绑定辅助变量为两个候选值的最大值
model.addGenConstrMax(max_aux, 2, max_candidates, 0.0, "max_bind_constr");
// 4. 添加最大值>=1的约束
model.addConstr(max_aux >= 1, "max_threshold_constr");

本场景简化方案

对于max{表达式, 0} >= 1这个特定约束,0显然无法满足>=1的要求,因此该约束可以直接等价为x_1 - x_2 >= 1,无需引入辅助变量和广义约束,求解效率更高:

model.addConstr(x1 - x2 >= 1, "simplified_constr");

内容的提问来源于stack exchange,提问作者Farah Mind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:54:06