Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加约束CPLEX Python API_Python_Cplex - Fatal编程技术网

添加约束CPLEX Python API

添加约束CPLEX Python API,python,cplex,Python,Cplex,我处理的数据不像文档中的数据那么简单。由于我的变量基本上取决于数据输入文件,因此我将使用以下简单示例来解释我试图实现的目标。我有以下限制: x1 + x2 + x3 = 1 x4 + x5 + x6 + x7 =1 x8 + x9 = 1 我正在考虑使用for循环反复调用c.linear\u constraints.add()函数。有更好的方法吗?通常,如果您创建成批的线性约束,而不是一次创建一个约束,您将获得更好的性能。例如(使用上面的示例),最好执行以下操作: import cplex c

我处理的数据不像文档中的数据那么简单。由于我的变量基本上取决于数据输入文件,因此我将使用以下简单示例来解释我试图实现的目标。我有以下限制:

x1 + x2 + x3 = 1
x4 + x5 + x6 + x7 =1
x8 + x9 = 1

我正在考虑使用for循环反复调用
c.linear\u 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\u constraints。在末尾添加一次
(如果您的输入文件非常大,则每X个约束一次)。

非常感谢!我预先生成了索引,并将其放入单个
c.linear\u constraints.add()
函数中。