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

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

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

f = -(a-b)

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

非常感谢

【问题讨论】:

    标签: java optimization gurobi objective-function


    【解决方案1】:

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

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

    【讨论】:

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