OR-Tools MIP 求解器 - 根据 int 而非 IntVar 定义 objective

OR-Tools MIP Solver - Defining an objective in terms of int, instead of IntVar

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

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 是 IntVars。

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

当我尝试最大化 objective_that_does_not_work 时,它会随机给出 x0、x1、x2 中的每一个的上限或下限(每次我 运行 求解器时都会有不同的值) .

我的问题:

  1. 是否可以根据 IntVar 的值而不是 IntVar 本身来定义 objective?

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

谢谢

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