当我在 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'>
(根据我的经验,cplex 不能很好地处理 np 类型的使用:例如作为 SparsePair
vals 中的因素)
我确认 CPLEX Python API 不处理 numpy 数字类型,numpy 整数类型或浮点类型。
调用 Python 转换函数(例如 int(x) 或 float(z) )应该有效。
我想在 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'>
(根据我的经验,cplex 不能很好地处理 np 类型的使用:例如作为 SparsePair
vals 中的因素)
我确认 CPLEX Python API 不处理 numpy 数字类型,numpy 整数类型或浮点类型。 调用 Python 转换函数(例如 int(x) 或 float(z) )应该有效。