我通过 C# API 使用 CPLEX 12.5.0.0。
到现在为止,我从来没有遇到过一个有固定期限的目标——只有约束。有了约束,我总是能够重新排列方程,所以常数总是在一边,这意味着每个ILinearNumExpr
常数都没有自己的常数项。
现在我有一个二次规划问题,目标类型如下:
MAX Z =
c[1,2] * a[1] * a[2] - c[1,2] * (1 - a[1] * a[2]) +
c[1,3] * a[1] * a[3] - c[1,2] * (1 - a[1] * a[3]) +
c[2,3] * a[2] * a[3] - c[2,2] * (1 - a[2] * a[3])
c[,] 是一个恒定的对称成本矩阵。a[i] 是二进制变量。
因此,查看上面 3 行的左半部分,将 a[i] 和 a[j] 放在一起将为目标值贡献 c[i,j]。这是目前正在实施、测试和工作的内容。
我想修改目标,如果 a[i] 和 a[j] 不都等于 1,而不是不将 c[i,j] 贡献给目标值,它将减去它。
现在,我查看了 CPLEX 文档(其作者显然对提供清晰的解释或示例很敏感),并且似乎有一个ILinearNumExpr.Constant
属性允许我为给定的表达式设置一个常量。
当我尝试使用 修改我的代码时IQuadNumExpr
,我注意到它没有该.Constant
属性。
有没有办法将常数项添加到CPLEX中的二次目标函数?