当我在 CPLEX 中使用指定数据创建分支时出现错误

I got the error when I make a branch with the specified data in CPLEX

我想在 CPLEX 的 Python API 中使用每个节点的指定数据创建一个分支,但我的代码出现错误。该问题与 indexmax 有关。 错误:

"in method 'intArray___setitem__', argument 3 of type 'int'".   

代码:

class CB6Callback(CPX_CB.BranchCallback):
def __call__(self):
       objval   = self.get_objective_value()
       Xval     = self.get_values()
       ...
       if not Df7.empty:                  
              colYTest = Df7.YTest
              indexmax = colYTest.idxmax()
              xj_lo = floor(Xval[indexmax])
              self.make_branch(objval, variables=[(indexmax, "L", xj_lo +1)], 
                                                   node_data=(indexmax, xj_lo, "UP"))
              self.make_branch(objval, variables=[(indexmax, "U", xj_lo)],
                                                   node_data=(indexmax, xj_lo, "DOWN"))

根据 OP 的评论,这应该足够了:

x = np.int64(3)
print(type(x))
# <class 'numpy.int64'>

y = x.item()   # !!!
print(type(y))
# <class 'int'>

numpy.ndarray.item¶

(根据我的经验,cplex 不能很好地处理 np 类型的使用:例如作为 SparsePair vals 中的因素)

我确认 CPLEX Python API 不处理 numpy 数字类型,numpy 整数类型或浮点类型。 调用 Python 转换函数(例如 int(x) 或 float(z) )应该有效。