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]])