Originally posted by: hennou1
please i need your help, i am trying to resolve pickup and delivery problem with preemption and i can't do it
/*********************************************
* OPL 12.3 Model
* Author: HENI
* Creation Date: 13 juin 2013 at 12:01:47
*********************************************/
int M=30000;
//tuples
tuple indnoeud{
float i;
}
tuple inddepot{
float i;
}
tuple indcltfrs{
float i;
}
tuple indfrs{
float i;
}
tuple indclt{
float i;
}
tuple indveh{
float v;
}
tuple inddek{
float k;
}
tuple oriddek{
float k;
float i;
}
tuple desddek{
float k;
float i;
}
tuple qtiteddek{
float k;
float quantite;
}
tuple coutveh{
float v;
float coutvehicule;
}
tuple capv{
float v;
float capacite;
}
tuple distance{
float i;
float j;
float valeur;
}
tuple time{
float i;
float j;
float temp;
}
tuple segplus{
float n;
float s;
}
tuple segmoins{
float n;
float e;
}
{indnoeud}I=...;
//{indnoeud2}J=...;
{inddepot}ID=...;
{indcltfrs}ICF=...;
{indfrs}IFR=...;
{indclt}ICL=...;
{indveh}V=...;
{inddek}K=...;
{oriddek}OK=...;
{desddek}DK=...;
{qtiteddek}qK=...;
{coutveh}CV=...;
{capv}QV=...;
{distance}DIJ=...;
{time}TIJ=...;
{segplus}SEGP=...;
{segmoins}SEGM=...;
//définition des indices
{float} Is={i|<i> in I};
{float} Js={j|<j> in I};
{float} Ss={s|<s> in I};
{float} IDs={i|<i> in ID};
{float} Ks={k|<k> in K};
{float} Vs={v|<v> in V};
{float} ICFs={i|<i> in ICF};
{float} IFRs={i|<i> in IFR};
{float} ICLs={i|<i> in ICL};
//{string} OKs={i|<i> in OK};
//{string} DKs={i|<i> in DK};
//définition des paramètres
float qKs[Ks];
float QVs[Vs];
float SEGPs[Is];
float SEGMs[Is];
float F0v[Vs]=0;
float CVs [Vs];
float OKs [Ks];
float DKs [Ks];
float DIJs [Is][Js];
float TIJs [Is][Js];
//float TPs[Ps];
//float QVs[Vs];
// float CTkpjs[Js][Kps];
//lire les paramètres
execute {
for (var ook in OK){
OKs[ook.k]=ook.i;
}}
execute {
for (var ddk in DK){
DKs[ddk.k]=ddk.i;
}}
execute {
for (var nnn in SEGP){
SEGPs[nnn.n]=nnn.s;
}
}
//execute {
//for (var mmm in SEGM){
//SEGMs[mmm.n]=mmm.e;
//}
//}
execute {
for (var jjj in TIJ)
{
TIJs[jjj.i][jjj.j]=jjj.temp;
}
}
execute {
for (var iii in DIJ)
{
DIJs[iii.i][iii.j]=iii.valeur;
}
}
execute {
for (var Ks in qK){
qKs[Ks.k]=Ks.quantite;
}}
execute {
for (var Vs in QV){
QVs[Vs.v]=Vs.capacite;
}}
execute {
for (var Vs in CV){
CVs[Vs.v]=Vs.coutvehicule;
}}
//*************************************decision variables*********************************************************
dvar int+ Yijvk[Is,Vs,Ks] in 0..1;
dvar int+ Xijv[Is,Vs] in 0..1;
//*****************************************constraint naming**************************************.
constraint c1;
constraint c2;
constraint c3;
constraint c4;
constraint c5;
constraint c6;
constraint c7;
constraint c8;
constraint c9;
constraint c10;
constraint c11;
constraint c12;
constraint c13;
constraint c14;
//*******************************MODEL*********************************************************
dexpr float Cobj= sum (v in Vs, i in Is, j in Js)(CVs[v]*DIJs[i,j]*Xijv[i,j,v]);
//fonction objectif : min coût de transport
minimize sum (v in Vs, i in Is, j in Js)(CVs[v]*DIJs[i,j]*Xijv[i,j,v]);
subject to
{
// contraintes de gestion de stocks
c1= forall (i in ICFs)
sum (v in Vs, j in SEGPs[i][2])Xijv[i,j,v]==1;
c2 = forall (i in ICFs)
sum (v in Vs, j in SEGMs[i][2])Xjiv[i,j,v]==1;
// contrainte des veh au depot
c3 = forall (v in Vs)
sum(i in SEGPs [0][2])Xi0v[i,0,v]==1;
c4= forall (v in Vs)
sum (i in SEGMs[0][2])X0iv[o,i,v]==1;
/// sommet visité doit imperativement etre quitté
c5= forall (i in ICFs, v in Vs)
sum (j in SEGPs[i][2]) Xijv[i,j,v] - sum (j in SEGMs[i][2]) Xjiv[i,j,v] ==0;
// conservation des flot: permet transbordement
//c6= forall ((k in Ks ,i in ICFs: i!= OKs) AND (i!= DKs))
c6= forall (k in Ks ,i in ICFs: i!= OKs, i in ICFs:i!= DKs)
sum (v in Vs, j in SEGPs[i][2]) Yijvk[i,j,v,k]-sum (v in Vs, j in SEGMs[i][2])Yjivk[i,j,v,k] ==0;
c7= forall (k in Ks, i in OKs)
sum (v in Vs, j in SEGPs[i][2]) Yijvk[i,j,v,k]-sum (v in Vs, j in SEGMs[i][2])Yjivk[i,j,v,k] == 1;
c8= forall (k in Ks, i in DKs)
sum (v in Vs, j in SEGPs[i][2]) Yijvk[i,j,v,k]-sum (v in Vs, j in SEGMs[i][2])Yjivk[i,j,v,k] == -1;
/// respect capacite
c9= forall (i in Is, j in Js, v in Vs)
sum (k in Ks) Yijvk[i,j,v,k]*qKs[k] <= QVs[v]*Xijv[i,j,v];
c10= forall (i in ICFs, v in Vs, k in Ks)
Y0iv[i,j,v] == Yi0v[i,j,v] ==0;
// passage sur un arc sans transporter une demande
c11= forall (i in Is, j in Js, v in Vs, k in Ks)
Yijvk[i,j,v,k]<= Xijv[i,j,v];
// contrainte elemination des sous tours
c12 = forall (i in Is, j in Js, v in Vs)
Xijv[i,j,v] == 1 => Fiv[i,v] + TIJs[i,j,v] <= Fjv[j,v];
c13= forall (v in Vs, i in IFRs, j in ICLs)
Fiv[i,v] <= Fjv[j,v];
c14 = forall ( v in Vs)
F0v[v] == 0;
}
}
execute {
writeln ("objectif=", Cobj)
}
#DecisionOptimization#OPLusingCPLEXOptimizer