在Python中使用Cplex调用set_coefficients时遇非整数值错误求助
解决CPLEX
linear_constraints.set_coefficients 报 TypeError: non-integral value in input sequence (0) 的问题 针对你遇到的报错,以下是几个实际可行的排查和解决方向:
强制转换索引为原生Python整数类型
如果你传入的rows或cols是numpy整数类型(比如numpy.int64),即使数值是整数,CPLEX的Python API也可能无法识别为合法的整数索引。可以显式转换为原生int:rows = [int(r) for r in rows] cols = [int(c) for c in cols] prob.linear_constraints.set_coefficients(list(zip(rows, cols, vals)))将zip迭代器转为列表
Python3中zip()返回的是迭代器而非列表,部分版本的CPLEX API可能对迭代器的处理存在问题,转为列表后再传入:coeffs = list(zip(rows, cols, vals)) prob.linear_constraints.set_coefficients(coeffs)排查索引范围合法性
确认rows中的每个元素都小于你添加的约束总数(即len(my_rhs)),cols中的每个元素都小于变量总数(即len(c))。索引越界有时会触发非预期的类型错误提示。检查vals的数值有效性
虽然错误提示指向整数问题,但也可以确认vals中没有NaN、inf这类非法数值,确保所有系数都是有效的浮点数或整数。
内容的提问来源于stack exchange,提问作者Iñaki Rodríguez Longarela
相关产品推荐
相关产品推荐

