添加约束 CPLEX Python API
Adding constraints CPLEX Python API
我处理的数据并不像文档中的那么简单。由于我的变量基本上取决于数据输入文件,我将使用以下简单示例来解释我想要实现的目标。我有以下限制:
x1 + x2 + x3 = 1
x4 + x5 + x6 + x7 =1
x8 + x9 = 1
我正在考虑使用for循环来重复调用c.linear_constraints.add()
函数。有更好的方法吗?
一般来说,如果您创建一批线性约束而不是一次创建一个,您将获得更好的性能。例如(使用上面的示例),最好执行以下操作:
import cplex
c = cplex.Cplex()
c.variables.add(names=["x{0}".format(i+1) for i in range(9)])
c.linear_constraints.add(lin_expr=[[[0, 1, 2], [1.0, 1.0, 1.0]],
[[3, 4, 5, 6], [1.0, 1.0, 1.0, 1.0]],
[[7, 8], [1.0, 1.0]]],
rhs=[1.0, 1.0, 1.0],
names=["c{0}".format(i+1) for i in range(3)])
c.write("example.lp")
这将生成以下 LP 文件:
Minimize
obj:
Subject To
c1: x1 + x2 + x3 = 1
c2: x4 + x5 + x6 + x7 = 1
c3: x8 + x9 = 1
End
所以,最好读入你的输入文件,将约束信息保存在一些数据结构(列表或其他)中,然后在最后调用一次 c.linear_constraints.add
(或者如果每个 X 约束您的输入文件非常大)。
我处理的数据并不像文档中的那么简单。由于我的变量基本上取决于数据输入文件,我将使用以下简单示例来解释我想要实现的目标。我有以下限制:
x1 + x2 + x3 = 1
x4 + x5 + x6 + x7 =1
x8 + x9 = 1
我正在考虑使用for循环来重复调用c.linear_constraints.add()
函数。有更好的方法吗?
一般来说,如果您创建一批线性约束而不是一次创建一个,您将获得更好的性能。例如(使用上面的示例),最好执行以下操作:
import cplex
c = cplex.Cplex()
c.variables.add(names=["x{0}".format(i+1) for i in range(9)])
c.linear_constraints.add(lin_expr=[[[0, 1, 2], [1.0, 1.0, 1.0]],
[[3, 4, 5, 6], [1.0, 1.0, 1.0, 1.0]],
[[7, 8], [1.0, 1.0]]],
rhs=[1.0, 1.0, 1.0],
names=["c{0}".format(i+1) for i in range(3)])
c.write("example.lp")
这将生成以下 LP 文件:
Minimize
obj:
Subject To
c1: x1 + x2 + x3 = 1
c2: x4 + x5 + x6 + x7 = 1
c3: x8 + x9 = 1
End
所以,最好读入你的输入文件,将约束信息保存在一些数据结构(列表或其他)中,然后在最后调用一次 c.linear_constraints.add
(或者如果每个 X 约束您的输入文件非常大)。