Está en la página 1de 3

int n=...

;
range Nodes=1..n;

tuple Arc{int i; int j;}


{Arc} Arcs=...;

int c_j [Nodes]=...; //costo de localizar y/o mantener un centro de distribuci�n en


el nodo j
int f_j [Nodes]=...; //costo de localizar y/o mantener una planta en el nodo j
int d_j [Nodes]=...; //demanda en el centro de distribuci�n en el nodo j
int q_j [Nodes]=...; //capacidad de una planta en el nodo j
int g_j [Nodes]=...; //ingreso por unidad de productos en el nodo j
int h_ij [Arcs]=...; //costo por enviar una unidad de producto por el arco (i,j)
int p=...; // cantidad de centros de distribuci�n se desean localizar
int a_ij [Arcs]=...; //1, si existe arco desde el nodo i al nodo j. 0, en otro caso

dvar int+ y_j[Nodes]; //cantidad de producto que sale desde un nodo j


dvar int+ x_ij [Arcs]; // unidades del producto enviadas desde el nodo i hasta el
nodo j
dvar boolean z_j[Nodes]; //1, si se localiza un centro de distribuci�n en el nodo
j, 0. en otro caso
dvar boolean w_j[Nodes]; //1, si se localiza una planta en el nodo j. 0 en otro
caso

maximize sum (j in Nodes) ((g_j[j]*d_j[j] - c_j[j])*z_j[j]) - (sum(j in Nodes)


f_j[j]*w_j[j] + sum(<i,j> in Arcs) h_ij[<i,j>]*x_ij[<i,j>]);

subject to {
sum (j in Nodes) z_j[j]==p;
forall (j in Nodes)
w_j[j] + z_j[j] <= 1;
forall (j in Nodes)
y_j[j] <= q_j[j]*w_j[j];

forall (j in Nodes) sum (i in Nodes: <i,j> in Arcs) a_ij[<i,j>]*x_ij[<i,j>] - sum


(i in Nodes: <j,i> in Arcs) a_ij[<j,i>]*x_ij[<j,i>] == d_j[j]*z_j[j] - y_j[j];
}

-------------------
.dat

n=10;
p=2;

Arcs= {<1,1>, <1,2>, <1,3>, <1,4>, <1,5>, <1,6>, <1,7>, <1,8>, <1,9>, <1,10>
<2,1>, <2,2>, <2,3>, <2,4>, <2,5>, <2,6>, <2,7>, <2,8>, <2,9>, <2,10>
<3,1>, <3,2>, <3,3> <3,4>, <3,5>, <3,6>, <3,7>, <3,8>, <3,9>, <3,10>
<4,1>, <4,2>, <4,3>, <4,4>, <4,5>, <4,6>, <4,7>, <4,8>, <4,9>, <4,10>
<5,1>, <5,2>, <5,3>, <5,4>, <5,5>, <5,6>, <5,7>, <5,8>, <5,9>, <5,10>
<6,1>, <6,2>, <6,3>, <6,4>, <6,5>, <6,6>, <6,7>, <6,8>, <6,9>, <6,10>
<7,1>, <7,2>, <7,3>, <7,4>, <7,5>, <7,6>, <7,7>, <7,8>, <7,9>, <7,10>
<8,1>, <8,2>, <8,3>, <8,4>, <8,5>, <8,6>, <8,7>, <8,8>, <8,9>, <8,10>
<9,1>, <9,2>, <9,3>, <9,4>, <9,5>, <9,6>, <9,7>, <9,8>, <9,9>, <9,10>
<10,1>, <10,2>, <10,3>, <10,4>, <10,5>, <10,6>, <10,7>, <10,8>, <10,9>,
<10,10>};

h_ij=[0 1 0 2 0 0 0 0 1 0
1 0 2 0 0 0 0 0 0 0
0 2 0 2 0 2 0 0 0 0
2 0 2 0 1 0 0 0 2 0
0 0 0 1 0 1 0 2 0 0
0 0 2 0 1 0 0 0 0 2
0 0 0 0 0 0 0 2 0 2
0 0 0 0 2 0 2 0 2 0
1 0 0 2 0 0 0 2 0 0
0 0 0 0 0 2 2 0 0 0];

//Arcs= {<1,1>, <1,2>, <1,3>, <1,4>, <1,5>, <1,6>, <1,7>, <1,8>, <1,9>, <1,10>
// <2,1>, <2,2>, <2,3>, <2,4>, <2,5>, <2,6>, <2,7>, <2,8>, <2,9>, <2,10>
// <3,1>, <3,2>, <3,3> <3,4>, <3,5>, <3,6>, <3,7>, <3,8>, <3,9>, <3,10>
// <4,1>, <4,2>, <4,3>, <4,4>, <4,5>, <4,6>, <4,7>, <4,8>, <4,9>, <4,10>
// <5,1>, <5,2>, <5,3>, <5,4>, <5,5>, <5,6>, <5,7>, <5,8>, <5,9>, <5,10>
// <6,1>, <6,2>, <6,3>, <6,4>, <6,5>, <6,6>, <6,7>, <6,8>, <6,9>, <6,10>
// <7,1>, <7,2>, <7,3>, <7,4>, <7,5>, <7,6>, <7,7>, <7,8>, <7,9>, <7,10>
// <8,1>, <8,2>, <8,3>, <8,4>, <8,5>, <8,6>, <8,7>, <8,8>, <8,9>, <8,10>
// <9,1>, <9,2>, <9,3>, <9,4>, <9,5>, <9,6>, <9,7>, <9,8>, <9,9>, <9,10>
// <10,1>, <10,2>, <10,3>, <10,4>, <10,5>, <10,6>, <10,7>, <10,8>, <10,9>,
<10,10>};

q_j=[74
108
129
60
84
78
54
77
143
96];

g_j=[93
91
40
32
55
83
98
87
50
40];

c_j=[1416
1822
1329
1679
1790
1074
1914
1492
1349
1469];

f_j= [1215
1644
1711
1980
1351
1268
1851
1588
1570
1580];

d_j= [83
63
41
10
63
75
88
34
33
87];

a_ij=[0 1 0 1 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 0
0 1 0 1 0 1 0 0 0 0
1 0 1 0 1 0 0 0 1 0
0 0 0 1 0 1 0 1 0 0
0 0 1 0 1 0 0 0 0 1
0 0 0 0 0 0 0 1 0 1
0 0 0 0 1 0 1 0 1 0
1 0 0 1 0 0 0 1 0 0
0 0 0 0 0 1 1 0 0 0];

También podría gustarte