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 中一个目标函数的两个表达式的主要内容,如果未能解决你的问题,请参考以下文章