如何在 OR-TOOLS 中的 FOR 循环内声明动态变量
How to declare dynamic variables inside FOR loop in OR-TOOLS
我从 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)
然而,这显然行不通。
有人可以帮我吗?谢谢!
这种方法肯定有效,并且可能在很多 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
从概念上讲没有错。
您的变量现在可以通过访问您的列表来使用/消耗了。
我从 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)
然而,这显然行不通。
有人可以帮我吗?谢谢!
这种方法肯定有效,并且可能在很多 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
从概念上讲没有错。
您的变量现在可以通过访问您的列表来使用/消耗了。