integer - 如何在 CPLEX 中制定这些 ConVRP 约束?
问题描述
我正在尝试构建具有硬时间窗口约束的 conVRP 模型。但是,我被流入和流出限制所困扰。
我有四套:
range N = 1..20 // set of Nodes
range P = 1..19 // set of customers
range D = 1..5 // set of Days
range K = 1..2 // set of Vehicles
然后我有一些其他的输入参数
int q[D][N] = ...; //demand matrix of 5*20
int cap = ...; // capacity of a truck
三个决策变量:
dvar boolean x[N][N][D][K]; //= one if node i visits node j on day d with vehicle k
dvar float+ y[N][D][K]; // arrival time
dvar boolean z[N][K]; // = one if node n is visisted by vehicle k
//客观的
minimize sum(i,j in N, d in D, k in K) x[i][j][d][k] * c[i][j];
我遇到的限制是:
forall(d in D, i in N: q[i][d]>=1)
sum (j in N, k in K) x[i][j][k][d] == 1; //outflow
forall(d in D, j in N : q[j][d]>=1)
sum(i in N, k in K) x[j][i][k][d] == 1; //inflow
我收到这些错误消息:
我很想知道如何解决这个问题。您的帮助将不胜感激!
解决方案
你得到一个索引超出范围的错误。这是因为你有这个定义
int q[D][N] = ...; //demand matrix of 5*20
但是然后做
forall(d in D, i in N: q[i][d]>=1)
看起来你在q
这里交换了索引。根据您的定义,d
应该是第一个并且i
应该是第二个索引。请注意,对于 的最后两个索引似乎存在相同的问题x
。
推荐阅读
- java - 在带空格的行上显示用户输入的 int 值
- android - com.google.cloud.translate.TranslateException:请求缺少有效的 API 密钥
- angular - 类型'可观察的
' 不可分配给类型 'Observable ' - jenkins - 在 Jenkins 中安装 JDK jdk-9.0.1-oth-JPR 时出错
- sql-server - 如何获取回历年的格鲁吉亚日期开始和结束我的查询附加
- c - 传输端点未连接
- xamarin - 单击按钮时,如何在 Xamarin.Android 应用程序中更改按钮颜色
- c++ - 更改指针后 free() 将释放多少字节?
- oracle - Oracle 序列的 MAXVALUE 的目的是什么?
- wget - wget download 在外部 HD 中运行但不创建文件夹