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

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


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 的上限或下限(每次运行求解器时都有不同的值)。

我的问题:

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

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


隔江千里
浏览 104回答 1
1回答

牛魔王的故事

您只能将目标表示为变量的线性组合。
打开App,查看更多内容
随时随地看视频慕课网APP