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 中的每一个的上限或下限(每次我 运行 求解器时都会有不同的值) .
我的问题:
是否可以根据 IntVar 的值而不是 IntVar 本身来定义 objective?
如果是,solution_value()
是要使用的正确属性吗?从文档来看,它似乎是最合适的,但我可能误解了它的用法。
谢谢
您只能将objective表示为变量的线性组合。
我正在尝试定义一个 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 中的每一个的上限或下限(每次我 运行 求解器时都会有不同的值) .
我的问题:
是否可以根据 IntVar 的值而不是 IntVar 本身来定义 objective?
如果是,
solution_value()
是要使用的正确属性吗?从文档来看,它似乎是最合适的,但我可能误解了它的用法。
谢谢
您只能将objective表示为变量的线性组合。