如何在CPLEX Python API中添加线性约束?

如何在CPLEX Python API中添加线性约束?,python,constraints,cplex,Python,Constraints,Cplex,线性规划: Decision Variables: x[] Maximize: Sum(i to n) (fare[i] * x[i]) subject to: x[i] <= demand[i] 我得到这个错误: raise CplexError(" %d: Invalid name -- '%s'\n" % tuple(self._mat)) cplex.exceptions.errors.CplexError: 1210: Invalid name -- 'X' 在cpl

线性规划:

Decision Variables:
x[]

Maximize:  Sum(i to n) (fare[i] * x[i])

subject to:
x[i] <= demand[i]
我得到这个错误:

raise CplexError(" %d: Invalid name -- '%s'\n" % tuple(self._mat))
cplex.exceptions.errors.CplexError:  1210: Invalid name -- 'X'

cplex.SparcePair
中,需要在
val
下指定非零元素,并在
ind
下指定相应的变量。另外,在线性程序中,您的右侧应该是
dmd

c.linear_constraints.add(lin_expr  = [cplex.SparsePair(ind = xname,
                                                 val = [1.0])
                                      for xname in varnames],
                         senses = ["L"],
                         rhs   = dmd,
                         names = ["capacity_"+str(i)
                                  for i in i_iten])
此外,我建议在添加变量时指出目标函数:

c.variables.add(obj = fare, names = varnames, lb=[0.0, 0, 0], ub=[10.0, 10, 10])

cplex.SparcePair
中,需要在
val
下指定非零元素,并在
ind
下指定相应的变量。另外,在线性程序中,您的右侧应该是
dmd

c.linear_constraints.add(lin_expr  = [cplex.SparsePair(ind = xname,
                                                 val = [1.0])
                                      for xname in varnames],
                         senses = ["L"],
                         rhs   = dmd,
                         names = ["capacity_"+str(i)
                                  for i in i_iten])
此外,我建议在添加变量时指出目标函数:

c.variables.add(obj = fare, names = varnames, lb=[0.0, 0, 0], ub=[10.0, 10, 10])

c.linear\u constraints.add(lin\u expr=[cplex.SparsePair(ind=[xname],val=[1.0]),用于varn中的xname],senses=[“L”]*len(varnames),rhs=dmd)

但是,在添加变量约束之前,请记住,应该将变量名添加到函数中。我花了4个小时周而复始地想弄清楚到底出了什么问题

这一行应该排在第一位。
c.variables.add(varnames)


感谢serge_k为您提供的初步建议

c.linear\u constraints.add(lin\u expr=[cplex.SparsePair(ind=[xname],val=[1.0]),用于varn中的xname],senses=[L]*len(varnames),rhs=dmd)

但是,在添加变量约束之前,请记住,应该将变量名添加到函数中。我花了4个小时周而复始地想弄清楚到底出了什么问题

这一行应该排在第一位。
c.variables.add(varnames)


感谢serge_k为您提供的初步建议

你能写一个你正在试图解决的线性程序吗?@serge_k:增加了线性问题。它试图最大化受约束的收入(票价*数量)。添加变量时,您有奇怪的边界类型:
lb
ub
中的第一个元素是
float
,其他元素是
int
x[1]
x[2]
是否假定为整数类型?在这种情况下,您需要指定类型,因为默认情况下,变量初始化为连续变量。谢谢serge_k,这只是为了让它工作。我正在努力掌握python API。但是,是的,它们被假定为整数类型。你能写一个你正在试图解决的线性程序吗?@serge_k:增加了线性问题。它试图最大化受约束的收入(票价*数量)。添加变量时,您有奇怪的边界类型:
lb
ub
中的第一个元素是
float
,其他元素是
int
x[1]
x[2]
是否假定为整数类型?在这种情况下,您需要指定类型,因为默认情况下,变量初始化为连续变量。谢谢serge_k,这只是为了让它工作。我正在努力掌握python API。但是,是的,它们被假定为整数类型。尝试了这个,但是它说,我让它工作了。非常轻微的修改
c.linear\u constraints.add(lin\u expr=[cplex.SparsePair(ind=[xname],val=[1.0]),用于varn中的xname],senses=[“L”]*len(varnames),rhs=dmd)
但面临一个奇怪的问题。添加一个新的线性约束的代码行在python交互环境中运行良好。但是当我通过一个文件运行代码时,它失败了。有什么想法吗?试过了,但上面写着“不一致的论点”,我成功了。非常轻微的修改
c.linear\u constraints.add(lin\u expr=[cplex.SparsePair(ind=[xname],val=[1.0]),用于varn中的xname],senses=[“L”]*len(varnames),rhs=dmd)
但面临一个奇怪的问题。添加一个新的线性约束的代码行在python交互环境中运行良好。但是当我通过一个文件运行代码时,它失败了。有什么想法吗?