Python 3.x DOcplexException:表达式xx不能用作xxx的除法器

Python 3.x DOcplexException:表达式xx不能用作xxx的除法器,python-3.x,cplex,docplex,Python 3.x,Cplex,Docplex,我是新来的CPLEX,我试图找到一个例子,其中决策变量在目标函数的分母中,但不能。我的优化问题 我在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)[:

我是新来的
CPLEX
,我试图找到一个例子,其中决策变量在目标函数的分母中,但不能。我的优化问题

我在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()
错误:

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

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

因为您的目标不是线性的,所以您应该在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]])
从docplex.cp.model导入CpoModel
将numpy作为np导入
N=10
S=10
k=2
u_i=np.random.rand(N)[:,np.newaxis]
u_ij=np.random.rand(N*S).重塑(N,S)
beta=np.random.rand(N)[:,np.newaxis]
m=CpoModel(名称='model')
R=范围(1,S)
idx=[(j)表示R中的j]
I=m.binary\u var\u dict(idx)

m、 添加_约束(m.sum(I[j]表示R中的j)非常感谢@Alex Fleischer。以防有人想知道docplex.cp.model和docplex.mp.model之间的区别
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]])