在Python的CPLEX中对决策变量排序的代码写法是否正确?
在Python中使用CPLEX对决策变量排序的代码正确性问题
我在Python环境中使用CPLEX时定义了决策变量数组x,想要将这些决策变量排序后存入S,请问以下代码是否正确?
x = np.empty((Total_T,1), dtype= object) for i in range(Total_T): x[i] = mdl.continuous_var(lb= 0, ub= inf, name='x' + str(i+1)) S = sorted(x)
附上PyCharm截图:
这段代码不正确,问题出在两个地方:
- 你创建的
x是二维NumPy数组(形状为(Total_T,1)),直接用sorted(x)会尝试对子数组而非决策变量本身排序,逻辑不符合预期。 - CPLEX的
continuous_var对象默认没有内置比较规则,直接调用sorted会触发类型错误,Python无法判断两个决策变量的大小关系。
正确的实现方式:
- 先将二维数组转为一维决策变量列表:
x_list = x.flatten().tolist() - 指定排序规则,比如按变量名称排序:
S = sorted(x_list, key=lambda var: var.name)
如果需要按其他维度排序,只需修改key函数即可,比如按变量下界排序:key=lambda var: var.lb
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

