OR-Tools MIP Solver - 根据 int 定义目标,而不是 IntVar

Posted

技术标签:

【中文标题】OR-Tools MIP Solver - 根据 int 定义目标,而不是 IntVar【英文标题】:OR-Tools MIP Solver - Defining an objective in terms of int, instead of IntVar 【发布时间】:2020-10-14 18:25:37 【问题描述】:

我正在尝试定义一个目标函数,它使用变量的当前值作为整数进行计算(如下所示):

def foo(arg1, arg2, arg3):
   return arg1 - arg2 + arg3
    
def objective_that_does_not_work(x0, x1, x2):
   y = foo(x0.solution_value(), x1.solution_value(), x2.solution_value())
   return y

def objective_that_works(x0, x1, x2):
   y = foo(x0, x1, x2)
   return y

其中 x0、x1、x2 是 IntVar。

在我的用例中,函数 foo 以需要 int 参数的方式定义。

当我尝试最大化 objective_that_does_not_work 时,它会随机为我提供 x0、x1、x2 的上限或下限(每次运行求解器时都有不同的值)。

我的问题:

    是否可以根据 IntVar 的值而不是 IntVar 本身来定义目标?

    如果是,solution_value() 是使用正确的属性吗?从文档来看,它似乎是最合适的,但我可能误解了它的用法。

谢谢

【问题讨论】:

在求解之前不可能知道答案,所以你必须手动写下 foo 函数 怕我不跟。据我所知,优化器会反复搜索下一个“最佳”解决方案,因此每一步都应该有一个起点(或当前解决方案)。如果我对它们的工作原理的理解不正确,请告诉我。 (参考 - acrogenesis.com/or-tools/documentation/user_manual/manual/…) 【参考方案1】:

您只能将目标表示为变量的线性组合。

【讨论】:

以上是关于OR-Tools MIP Solver - 根据 int 定义目标,而不是 IntVar的主要内容,如果未能解决你的问题,请参考以下文章

OR-Tools / SCIP - 如何使用指标约束来解决 MIP 问题?

如何在我们的 MIP 问题中使用 or-tools 设置像 y = max(x1,x2,x3) 这样的等式约束?

Google OR-Tools(使用 SCIP 求解器) - 如何访问求解器找到的中间解决方案?

如何通过 SCIP 求解器获得 Google OR-Tools 和 Python 中的相对 MIP 差距?

OR-Tools:获取每一个最优解

如果条件与 OR-Tools CP Solver 一起应用约束