python - 使用 element() 函数将决策变量与 docplex python 相加
问题描述
我是 docplex 的新手,我正在尝试用 python 来解决放置问题,我想用 cplex 来解决它,但是当我试图将它复制到 python API 时,我得到了乘法错误。我正在使用 CpoModel 因为我有非线性目标函数来最小化。
我的代码:
from docplex.cp.model import CpoModel
B = [9,7,4]
k=3
W = [2,5,4]
V = [1,6,4]
P = [5,2,1]
N = len(B)
UV = 10
Ni = [1.168,12.818,8]
mdl = CpoModel()
set_task = list(range(0, N, 1))
set_agent = list(range(0, N, 1))
Xij_list = [[mdl.integer_var(min=0, max=1, name=f'X_{i}_{j}' ) for j in set_agent] for i in
set_task]
for i in set_task:
Xj_list = [Xij_list[i][j] for j in set_agent]
mdl.add(mdl.sum(Xj_list) == 1)
for j in set_agent:
Xj_list = [Xij_list[i][j] for i in set_task]
mdl.add(mdl.sum(Xj_list) == 1)
c1 = 0
for i in set_task:
for j in set_agent:
c1 = c1 + P[i]*B[j]*mdl.element(Xij_list,[i,j])
c2 = 0
for i in set_task:
for j in set_agent:
c2 = c2 + Ni[j]*pow(P[i],1/(k+1))*mdl.element(Xij_list,[i,j])
z = c1 + pow(UV, -k)*pow(c2,k+1)
mdl.add( mdl.minimize(z))
msol = mdl.solve()
当我尝试运行代码时,在以下部分中出现错误-
mdl.element(Xij_list,[i,j])
我还尝试了Xij_list[i,j]
错误注释。可以请人帮助我做错了什么吗?
原始的 cplex 代码(工作正常!):
using CP;
int N =3;
range task = 1..N;
range agent = 1..N;
dvar boolean x[task][agent];
int B[agent] = [9,7,4];
int W[agent] = [2,5,4];
int V[agent] = [1,6,4];
int P[task] = [5,2,1];
int K = 3;
float UV = 10;
float Ni[j in agent] = pow(W[j]*V[j],(K/(K+1)));
dexpr float c2 = sum(i in task, j in agent) Ni[j]*pow(P[i],1/(K+1))*x[i,j];
dexpr float c1 = sum(i in task, j in agent) P[i]*B[j]*x[i,j];
dexpr float z = c1 + pow(UV,-K)*pow(c2,K+1);
minimize z;
subject to {
forall (i in task)
sum(j in agent) x[i,j]==1;
forall ( j in agent)
sum(i in task) x[i,j]==1;
}
解决方案
推荐阅读
- liquid - 我正在尝试通过在液体中使用 round 来四舍五入十进制值。但是回合没有用
- python - python和oracle sql中的哈希不匹配
- jhipster - jhipster registerModule 收到错误“无法添加 jhipster 模块配置”
- python - 如何将任意字典存储到文件中,以便它也可以在 Fortran 中读取?
- excel - Excel IF公式从多个空白单元格中提取文本单元格
- c# - 如何监视文本文件并仅检索添加的行?
- c# - .net 核心应用程序中是否有 DependentUpon 选项?
- google-chrome - 为拥有多个帐户的 Chrome 用户获取正确的 Google 客户端 ID
- struts2 - 面临 log4j2 的问题:java.lang.ExceptionInInitializerError
- node.js - 如何在 heroku 服务器上启用 POST 方法(用于 React 应用程序)?我得到 405 方法不允许