繁体   English   中英

Python/CPLEX“参数不一致”错误

[英]Python/CPLEX "inconsistent arguments" error

我正在尝试在基于 Jupyter 的 Python 中使用 CPLEX 解决以下简单的 LP 问题,并收到以下错误。

任何人都可以帮助解释错误。 LP 问题有 6 个变量和 3 个约束。 我检查了定义的列表的维度,它们与问题的大小一致。

Maximize {obj: - 28.44 x1 - 27.38 x2 - 26.44 x3 - 25.38 x4 - 26.44 x5
- 25.38 x6} 
Subject To 
 c1:   x1 + x2 = 0
 c2:   x3 + x4 = 0
 c3:   x5 + x6 = 0
Bounds
    -2.1 <= x1 <= 2.1
    -2.1 <= x2 <= 2.1
    -2.1 <= x3 <= 2.1
    -2.1 <= x4 <= 2.1
    -2.1 <= x5 <= 2.1
    -2.1 <= x6 <= 2.1

import cplex
from cplex.exceptions import CplexError
import sys

my_obj = [-28.44, -27.38, -26.44, -25.38, -26.44, -25.38]
my_ub =  [2.1, 2.1, 2.1, 2.1, 2.1, 2.1]
my_lb  = [-2.1, -2.1, -2.1, -2.1, -2.1, -2.1]
my_rhs = [0,0,0]
my_sense    = "EE"
rows = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
cols = [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
vals = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0]

my_prob = cplex.Cplex()
my_prob.objective.set_sense(my_prob.objective.sense.maximize)
my_prob.linear_constraints.add(rhs = my_rhs, senses = my_sense, names = [])
my_prob.variables.add(obj = my_obj, ub = my_ub, lb = my_lb, names = [])
my_prob.linear_constraints.set_coefficients(zip(rows, cols, vals))
my_prob.solve()

看来这个问题已经在评论中得到了回答。 总之, my_sensemy_rhs的长度是不同的。 长答案如下。

当我们运行您的脚本时,我们会看到这样的回溯:

Traceback (most recent call last):
  File "20200106.py", line 16, in <module>
    my_prob.linear_constraints.add(rhs = my_rhs, senses = my_sense, names = [])
  File "/home/rkersh/virtualenv/3.6/cplex/lib64/python3.6/site-packages/cplex/_internal/_subinterfaces.py", line 1259, in add
    lin_expr, senses, rhs, range_values, names)
  File "/home/rkersh/virtualenv/3.6/cplex/lib64/python3.6/site-packages/cplex/_internal/_baseinterface.py", line 41, in _add_iter
    addfun(*args, **kwargs)
  File "/home/rkersh/virtualenv/3.6/cplex/lib64/python3.6/site-packages/cplex/_internal/_subinterfaces.py", line 1181, in _add
    validate_arg_lengths(arg_list)
  File "/home/rkersh/virtualenv/3.6/cplex/lib64/python3.6/site-packages/cplex/_internal/_aux_functions.py", line 99, in validate_arg_lengths
    raise CplexError("inconsistent arguments" + extra_msg)
cplex.exceptions.errors.CplexError: inconsistent arguments

从第一行,我们知道问题出在哪里:

my_prob.linear_constraints.add(rhs = my_rhs, senses = my_sense, names = [])

从最后一行,我们知道为什么:

cplex.exceptions.errors.CplexError: inconsistent arguments

此外,此方法的文档指出:

如果指定了多个参数,则所有参数必须具有相同的长度。

好吧,文档所说的并不完全正确。 正如在您的脚本中所做的那样,用户可以为某些参数提供空列表并省略可选参数。

至于错误信息是否可以更好。 CPLEX 无法轻易确定哪些参数本身是错误的(用户可以提供一个太长、太短或两者都有的列表)。 相反,它只能指出参数的长度是否不一致。 也许,可以通过说“不一致的参数长度”来改进错误消息。 从 Traceback 中已经很清楚哪些参数有问题,但参数名称也可以包括在内,就像这样:“不一致的参数长度:len_expr、senses、rhs、range_values、names”。 那会有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM