DOcplexException:表达式 xx 不能用作 xxx 的分隔符

DOcplexException: Expression xx cannot be used as divider of xxx

我是 CPLEX 的新手,我试图找到一个示例,其中决策变量位于 objective 函数的分母中,但找不到。我的优化问题;

我在 Python3;

上尝试了以下方法
from docplex.mp.model import Model
import numpy as np
N = 1000
S = 10
k = 2

u_i = np.random.rand(N)[:,np.newaxis]
u_ij = np.random.rand(N*S).reshape(N, S)
beta = np.random.rand(N)[:,np.newaxis]

m = Model(name = 'model')
R = range(1, S+1)

idx = [(j) for j in R]
I = m.binary_var_dict(idx)
m.add_constraint(m.sum(I[j] for j in R)<= k)

total_rev = m.sum(beta[i,0] / ( 1 + u_i[i,0]/sum(I[j] * u_ij[j,i-1]  for j in R) ) for i in range(N) )

m.maximize(total_rev)
sol = m.solve()
sol.display()

但是当 运行 行时出现以下错误;

total_rev = m.sum(beta[i,0] / ( 1 + u_i[i,0]/sum(I[j] * u_ij[j,i-1]  for j in R) ) for i in range(N) )

错误:

DOcplexException: Expression 0.564x1+0.057x2+0.342x3+0.835x4+0.452x5+0.802x6+0.324x7+0.763x8+0.264x9+0.226x10 cannot be used as divider of 0.17966220449798675

你能帮我克服这个错误吗?

由于您的 objective 不是线性的,您应该在 CPLEX

中使用 CPO
from docplex.cp.model import CpoModel



import numpy as np
N = 10
S = 10
k = 2

u_i = np.random.rand(N)[:,np.newaxis]
u_ij = np.random.rand(N*S).reshape(N, S)
beta = np.random.rand(N)[:,np.newaxis]

m = CpoModel(name = 'model')
R = range(1, S)

idx = [(j) for j in R]
I = m.binary_var_dict(idx)
m.add_constraint(m.sum(I[j] for j in R)<= k)

total_rev = m.sum(beta[i,0] / ( 1 + u_i[i,0]/sum(I[j] * u_ij[j,i-1]  for j in R) ) for i in range(N) )

m.maximize(total_rev)

sol=m.solve()

for i in R:
    print(sol[I[i]])

工作正常