cplex Python 总和约束
cplex Python sum constraint
我刚开始使用 cplex Python API,但在为我的模型创建 linear_constraints
时遇到了问题。
我想做这样的事情:
dvar float+ x[]
Minimize: Sum(i in I) C[i] * x[i]
subject to:
sum(i in I) x[i] <= constantValue
我的问题是我不知道如何在 Python API
中进行约束
cpx.linear_constraints.add(
lin_expr= 1,
senses=["L"],
rhs=constantValue,
range_values= 2,
我需要在 1) 和 2) 中输入什么才能得到 x[i]
table 的总和,这也需要是一个决策变量?
这是一个例子:
>>> import cplex
>>> c = cplex.Cplex()
>>> c.variables.add(names = ["x1", "x2", "x3"])
>>> c.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = ["x1", "x3"], val = [1.0, -1.0]),
cplex.SparsePair(ind = ["x1", "x2"], val = [1.0, 1.0]),
cplex.SparsePair(ind = ["x1", "x2", "x3"], val = [-1.0] * 3),
cplex.SparsePair(ind = ["x2", "x3"], val = [10.0, -2.0])],
senses = ["E", "L", "G", "R"],
rhs = [0.0, 1.0, -1.0, 2.0],
range_values = [0.0, 0.0, 0.0, -10.0],
names = ["c0", "c1", "c2", "c3"],)
>>> c.linear_constraints.get_rhs()
[0.0, 1.0, -1.0, 2.0]
其中 range_values 是一个浮点数列表,指定每个线性约束的左侧和右侧之间的差异。如果 range_values[i] > 0(零),则约束 i 定义为 rhs[i] <= rhs[i] + range_values[i]。如果 range_values[i] < 0(零),则约束 i 定义为 rhs[i] + range_value[i] <= a*x <= rhs[i]。我建议将其保留为默认值(空白)。
要定义总和,只需指出所有变量和向量,例如,
NumCols = 10
vars = [ 'x'+str(n) for n in xrange(1,NumCols+1) ]
coef = [1]*NumCols
cpx.linear_constraints.add(
lin_expr= [cplex.SparsePair(ind = vars, val = coef)] ,
senses=["L"],
rhs=[constantValue] )
我刚开始使用 cplex Python API,但在为我的模型创建 linear_constraints
时遇到了问题。
我想做这样的事情:
dvar float+ x[]
Minimize: Sum(i in I) C[i] * x[i]
subject to:
sum(i in I) x[i] <= constantValue
我的问题是我不知道如何在 Python API
中进行约束 cpx.linear_constraints.add(
lin_expr= 1,
senses=["L"],
rhs=constantValue,
range_values= 2,
我需要在 1) 和 2) 中输入什么才能得到 x[i]
table 的总和,这也需要是一个决策变量?
这是一个例子:
>>> import cplex
>>> c = cplex.Cplex()
>>> c.variables.add(names = ["x1", "x2", "x3"])
>>> c.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = ["x1", "x3"], val = [1.0, -1.0]),
cplex.SparsePair(ind = ["x1", "x2"], val = [1.0, 1.0]),
cplex.SparsePair(ind = ["x1", "x2", "x3"], val = [-1.0] * 3),
cplex.SparsePair(ind = ["x2", "x3"], val = [10.0, -2.0])],
senses = ["E", "L", "G", "R"],
rhs = [0.0, 1.0, -1.0, 2.0],
range_values = [0.0, 0.0, 0.0, -10.0],
names = ["c0", "c1", "c2", "c3"],)
>>> c.linear_constraints.get_rhs()
[0.0, 1.0, -1.0, 2.0]
其中 range_values 是一个浮点数列表,指定每个线性约束的左侧和右侧之间的差异。如果 range_values[i] > 0(零),则约束 i 定义为 rhs[i] <= rhs[i] + range_values[i]。如果 range_values[i] < 0(零),则约束 i 定义为 rhs[i] + range_value[i] <= a*x <= rhs[i]。我建议将其保留为默认值(空白)。
要定义总和,只需指出所有变量和向量,例如,
NumCols = 10
vars = [ 'x'+str(n) for n in xrange(1,NumCols+1) ]
coef = [1]*NumCols
cpx.linear_constraints.add(
lin_expr= [cplex.SparsePair(ind = vars, val = coef)] ,
senses=["L"],
rhs=[constantValue] )