我正在尝试为大学工作解决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,z> | 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[<p,h,k>]==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[<i,j,k>] <=q[k];
 }    


        forall(k in K)
        forall(h in cliente: h!=0){
      sum(i in cliente: i!=h && i!=6) x[<i,h,k>] == sum(j in cliente: j!=h && h!=6 && j!=0) x[<h,j,k>];
}    



forall(k in K){
      sum(i in cliente: i!=6) x[<i,6,k>] ==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[<i,j,k>]- 1000*(1-x[<i,j,k>]) <= s[j][k]; 

}

我正在使用2辆车(nveiculos)和5个客户,使用一系列客户来添加家庭仓库和最后一个仓库 . a和b代表客户的开放时间,b代表关闭时间 . d是每个客户的需求,q是车辆容量 . s变量代表车辆到达客户端的时间 .

我已经有了很多简单的解决方案,虽然它与我基于的文章中的算法不匹配,我有点顽固,想要解决这个问题 .

如果有人可以帮助我,那真是太棒了 . 最好的祝福