试图解决带有时间窗的车辆路径问题

时间:2018-12-08 19:55:01

标签: cplex

我正在尝试为大学工作解决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变量代表车辆到达客户的时间。

我已经有很多简单的解决方案,尽管它与im所基于的文章中的算法不匹配,而且我有点固执,想解决这个问题。

如果有人可以帮助我,那将是非常棒的。 最好的问候

0 个答案:

没有答案