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 求解器) - 如何访问求解器找到的中间解决方案?