Gurobi 中一个目标函数的两个表达式

Posted

技术标签:

【中文标题】Gurobi 中一个目标函数的两个表达式【英文标题】:Two Expressions for one objective function in Gurobi 【发布时间】:2021-05-16 06:10:18 【问题描述】:

使用 Gurobi (Java),是否可以为一个目标函数编写两个表达式,以便随后仅优化目标函数?

更准确地说:我有以下目标函数:

f = -(a-b)

a 和 b 都包含我的优化变量。由于这些条款不是很简单,我正在考虑将两者分开。然而,它们不是单独优化的,而只是目标函数(以及差异)被最小化。因此,在我看来,多重目标的可能性不复存在,但我也可能是错的。也许有人可以帮助我。

非常感谢

【问题讨论】:

【参考方案1】:

您可以使用一个 Java 变量来保存 a 和 b 的 LinExpr。

或者您可以创建额外的约束和决策变量。添加一些额外的约束和决策变量的开销非常小。这样做的好处是您可以在 lp 和解决方案文件中看到 a 和 b。

【讨论】:

感谢您的回答,但是,我有点担心。对于我的优化,我必须根据我的优化变量“x”指定一个方程。如前所述,在 a 和 b 后面有更复杂的方程,很难“过滤掉”优化变量。因此,我想考虑 a 并分开。但是,如果我现在将 a 和 b 作为 LinExpr 与一个新变量结合起来,那么目标函数中的优化变量又会丢失吗? 也许你有一个代码示例给我,或者我没有正确理解某些东西。我需要目标函数中的优化变量是否正确? 对不起,我不明白你在说什么。我不认为我曾经“过滤”任何东西。我假设你的意思是替换。你也不应该那样做。 抱歉,过滤措辞有点不妥。我的意思是我的目标函数必须依赖于优化变量......类似于 -(a-b)*x。但目前 x 还不存在,但仍在 a 和 b 中,部分是线性的,部分甚至是二次的,有许多附加项,包括 sum() 超过 12 个月。当然,我可以将所有偏方程写在一个方程中,但我认为可能会有更聪明的解决方案。 你不应该替换掉东西。线性表达式可能取决于它不知道其值的决策变量。这些值由求解器在求解完整模型后确定。

以上是关于Gurobi 中一个目标函数的两个表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何计算目标函数中的子和? Gurobi优化

如何绘制Gurobi得到的结果?

gurobi 6.0.2 / setPWLObj 的分段线性目标崩溃

多目标优化在推荐中的应用

为啥表达式'I_VALUE'不能用作函数中的赋值目标

请教matlab,已知优化目标函数表达式和约束条件,如何求一个使目标极值的参数对应的一般表达式!