如何在OR-TOOLS中的FOR循环内声明动态变量

时间:2019-06-20 21:10:11

标签: python optimization or-tools mixed-integer-programming

我从Google开始使用OR-TOOLS,我不知道如何动态声明变量。

OR-TOOLS网站中的一个非常简单的示例,如下所示

x = solver.NumVar(0, 10, 'x')
y = solver.NumVar(0, 10, 'y')
solver.Add(x + 7 * y <= 17.5)
solver.Maximize(x + 10 * y)`

由于我正在建模Benders分解,因此尝试在循环内声明一些变量。因此,我可以动态创建其变量。

我尝试过类似的操作:

for i in range(3):
    x[i] = solver.NumVar(0, 10, 'x[i]')
    y[i] = solver.IntVar(0, 10, 'y[i]')
    solver.Add(x[i] + 7 * y[i] <= 17.5)

但是,那显然不起作用。

有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这种方法肯定有效,并且可能在examples的很多示例中都有显示。

未经测试,您的想法可能如下:

# prepare some data-structure to hold variables returned
x = [None] * 3
y = [None] * 3

for i in range(3):
    x[i] = solver.NumVar(0, 10, 'x[{}]'.format(i))
    y[i] = solver.IntVar(0, 10, 'y[{}]'.format(i))
    solver.Add(x[i] + 7 * y[i] <= 17.5)  # invariant is important!
                                         # we only access available indices

从概念上讲没错。

您的变量现在可以通过访问列表来使用/消费了。