我正在尝试为大学工作解决VRPWT问题,而且我遇到了一些麻烦,CPLEX一直在告诉我这是不可行的 .
有人可以检查我的代码,看看我错过了什么?
int n=...;
range cliente=0..n+1;
int nveiculos=...;
range K=1..nveiculos;
tuple edge {
int i;
int j;
int z;
}
{edge} edges = { | i,j in cliente : i!=j && i!=6 && j!=0 , z in K};
int custo[edges]=...;
int d[cliente]=...;
int t[edges]=...;
float a[cliente]=...;
float b[cliente]=...;
float q[K]=...;
dvar boolean x[edges];
dvar int s[cliente][K];
minimize sum(j in edges) sum(i in edges) custo[i]*x[j];
subject to {
forall(k in K){
sum( j in cliente: j!=0) x[<0,j,k>] ==1;
}
forall(k in K)
forall(p in cliente: p!=6 ){
sum( h in cliente: h!=p && h!=0) x[
]==1; }
forall(k in K){
sum(i in cliente) sum(j in cliente: i!=j && i!=6 && j!=0, k in K) d[i]* x[] <=q[k];
}
forall(k in K)
forall(h in cliente: h!=0){
sum(i in cliente: i!=h && i!=6) x[] == sum(j in cliente: j!=h && h!=6 && j!=0) x[];
}
forall(k in K){
sum(i in cliente: i!=6) x[] ==1;
}
forall(k in K)
forall(i in cliente){
a[i]<= s[i][k]<=b[i];
}
forall(k in K)
forall(i,j in cliente: i!=j && i!=6 && j!=0)
s[i][k]+t[]- 1000*(1-x[]) <= s[j][k];
}
我正在使用2辆车(nveiculos)和5个客户,使用一系列客户来添加家庭仓库和最后一个仓库 . a和b代表客户的开放时间,b代表关闭时间 . d是每个客户的需求,q是车辆容量 . s变量代表车辆到达客户端的时间 .
我已经有了很多简单的解决方案,虽然它与我基于的文章中的算法不匹配,我有点顽固,想要解决这个问题 .
如果有人可以帮助我,那真是太棒了 . 最好的祝福