You are on page 1of 5

1

Problema de asignacin de hospitales,


Comparacin entre Optimizacin Lineal,
Templado simulado y algoritmos genticos
Daniel Stevenson Grass, Juan Pablo Roberto

RESUMEN
En este documento se encuentra un problema de Localizacin
de Hospitales el cual ser resuelto por tres mtodos, el primero es
programacin Lineal utilizando GAMS, el segundo de templado
simulado y el tercero de Algoritmos genticos. Finalmente se
presenta la comparacin entre los mtodos para solucionar el
problema.
Palabras
ClaveOptimizacin,
Algoritmos
Templado Simulado, Problemas de Localizacin.

Gneticos,

I. PLANTEAMIENTO DEL PROBLEMA

La ciudad Bellavilla est organizada en N localidades. El


gobierno de esta ciudad desea analizar la posibilidad de
construir nuevos centros de servicios de salud o de modificar
el alcance de los servicios prestados en cada uno de los centros
existentes. A continuacin se da informacin fundamental
para poder llevar a cabo este proceso.
Los centros prestadores de servicios de salud pueden ser de:

Nivel 1: Centros de atencin primaria, conocidos


como centros de salud.
Nivel 2: Centros de especialidades y hospitales de
rea. Cuentan con alguno medios tecnolgicos que
debido a su costo no pueden ser adquiridos y tenerse
en todos los centros de atencin primaria, y porque,
tal vez, no se usan con la suficiente frecuencia en un
solo centro.
Nivel 3: Hospitales de referencia. Aquellos
hospitales que estn especializados en algn tipo de
patologa. Por ejemplo, hospitales de referencia para
algunos trasplantes.

La ciudad cuenta con informacin sobre las localidades tal


como el rea comprendida, nmero de habitantes, indicadores
sobre el tipo de localidad que determina si es en su gran
{dsgrassg,jproberto}@unal.edu.co, estudiantes de Maestra en Ingeniera Ingeniera de Sistemas, Universidad Nacional de Colombia.

mayora residencial o comercial. Tambin se tienen otros


indicadores sobre los requerimientos esperados de servicios de
salud: nmero de usuarios esperado que requieren servicios de
nivel 1, 2 y 3 por mes. La inversin necesaria para la
implementacin de cada centro prestador de servicios de salud
es de F pesos si es de nivel 1, G pesos si es de nivel 2 y H si es
de nivel 3. As mismo se estima que el valor que se debe
invertir por cada persona que use los servicios de nivel 1, 2 y 3
es de A, B y C pesos, respectivamente. Se desea entonces
disear un sistema de salud que cuenta con recursos limitados
para cubrir los requerimientos de servicios de salud de cada
una de las N localidades. Especficamente, la ciudad Bellavilla
cuenta con M pesos para distribuirlos en las diferentes centros
de servicios de salud.
Se desea entonces realizar un anlisis para determinar el
nmero de centros prestadores de servicios de salud y tipo de
servicios que presta (de nivel 1, 2 y 3), as como su ubicacin.

II. PROGRAMACIN LINEAL


Se defini el siguiente modelo de optimizacin para el
problema planteado anteriormente:
Parmetros:

Variables de decisin:

Funcin Objetivo:

2
//Inv(j) Inversin necesaria para la implementacin de cada tipo de centro
prestador de servicios de salud de nivel j
Inv=[10000 20000 30000]

Restricciones:

Se modelo en GAMS, obteniendo el siguiente resultado:

Se observa que se tiene que construir hospitales de nivel1 en


las localidades 4,7,11,14. De nivel 2 en 1,4,11,14 y de nivel 3
en 1,9,11,14. Si se suma el nmero de personas atendidas
cumple con la demanda mnima por cada localidad.

III. TEMPLADO SIMULADO


Se desarrollo en Scilab el siguiente cdigo para solucionar el
recocido simulado obteniendo los siguientes reultados:

//V(j,i,k) Matriz de costos de ser atendido del servicio j en la localidad i


proveniente de la localidad k
V=[
0.05 0.05 9 9 9 0.05 0.05 9 9 9 9 9 9 9 9 9 9 9 9 9;
0.1 0.1 9 9 9 0.1 0.1 9 9 9 9 9 9 9 9 9 9 9 9 9;
0.15 0.15 9 9 9 0.15 0.15 9 9 9 9 9 9 9 9 9 9 9 9 9;
]
V(:,:,2)=[
0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9 9 9 9 9 9 9 9;
0.1 0.1 0.1 9 9 0.1 0.1 9 9 9 9 9 9 9 9 9 9 9 9 9;
0.15 0.15 0.15 9 9 0.15 0.15 9 9 9 9 9 9 9 9 9 9 9 9 9;
]
V(:,:,3)=[
9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9 9 9 9 9 9 9;
9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 9 9 9 9 9 9 9 9 9;
9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 9 9 9 9 9 9 9 9 9;
]
V(:,:,4)=[
9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9 9 9 9 9 9;
9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 9 9 9 9 9 9 9 9;
9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 9 9 9 9 9 9 9 9;
]
V(:,:,5)=[
9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 9 9 9 9 9 9 9;
9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 9 9 9 9 9 9 9;
9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 9 9 9 9 9 9 9;
]
V(:,:,6)=[
0.05 0.05 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 9 9 9 9 9;
0.1 0.1 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 9 9 9 9 9;
0.15 0.15 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 9 9 9 9 9;
]
V(:,:,7)=[
0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9 9 9;
0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 9 9 9 9 9;
0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 9 9 9 9 9;
]
V(:,:,8)=[
9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9 9;
9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 9 9 9 9;
9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 9 9 9 9;
]
V(:,:,9)=[
9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 9 9 9;
9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 9 9 9;
9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 9 9 9;
]
V(:,:,10)=[
9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 9 9;
9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 9 9;
9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 9 9;
]
V(:,:,11)=[
9 9 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9;
9 9 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9;
9 9 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9;
]
V(:,:,12)=[
9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9;
9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9;
9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9;
]
V(:,:,13)=[
9 9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9;
9 9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9;
9 9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.05 0.15 9;
]
V(:,:,14)=[
9 9 9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05;
9 9 9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1;
9 9 9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15;
]
V(:,:,15)=[
9 9 9 9 9 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9 0.05 0.05;
9 9 9 9 9 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9 0.1 0.1;
9 9 9 9 9 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9 0.15 0.15;

3
]
V(:,:,16)=[
9 9 9 9 9 9 9 9 9 9 0.05 0.05 9 9 9 0.05 0.05 9 9 9;
9 9 9 9 9 9 9 9 9 9 0.1 0.1 9 9 9 0.1 0.1 9 9 9;
9 9 9 9 9 9 9 9 9 9 0.15 0.15 9 9 9 0.15 0.15 9 9 9;
]
V(:,:,17)=[
9 9 9 9 9 9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9 9;
9 9 9 9 9 9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9 9;
9 9 9 9 9 9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9 9;
]
V(:,:,18)=[
9 9 9 9 9 9 9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05 9;
9 9 9 9 9 9 9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1 9;
9 9 9 9 9 9 9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15 9;
]
V(:,:,19)=[
9 9 9 9 9 9 9 9 9 9 9 9 0.05 0.05 0.05 9 9 0.05 0.05 0.05;
9 9 9 9 9 9 9 9 9 9 9 9 0.1 0.1 0.1 9 9 0.1 0.1 0.1;
9 9 9 9 9 9 9 9 9 9 9 9 0.15 0.15 0.15 9 9 0.15 0.15 0.15;
]
V(:,:,20)=[
9 9 9 9 9 9 9 9 9 9 9 9 9 0.05 0.05 9 9 9 0.05 0.05;
9 9 9 9 9 9 9 9 9 9 9 9 9 0.1 0.1 9 9 9 0.1 0.1;
9 9 9 9 9 9 9 9 9 9 9 9 9 0.15 0.15 9 9 9 0.15 0.15;
]
//D(i,j) nmero de usuarios de la localidad i esperado que requieren servicios de
nivel j
D=[
10000 1000 800;
5000 1000 700;
3000 600 500;
4000 700 500;
7000 1200 1000;
6000 1000 900;
8000 1300 1100;
1000 200 100;
2000 400 200;
5000 900 700;
2000 1000 800;
3000 1000 700;
5000 600 500;
5000 400 700;
7000 1200 900;
6000 800 1000;
7000 1300 1100;
1000 100 200;
2000 400 300;
8000 900 800;
]
//x(i,j) NVariable binaria de abrir un hospital en la localidad i prestando el nivel
de servicio j
//c(i,k,j) Numero de personas atendidas de la localidad i provenientes de la
localidad k para el nivel de servicio j
//z funcion objetivo
function z=Hospitales(x, c)//Define la funcin Objetivo Minimizar el costo fijo de
montar un hospital mas el costo variable de cada persona atendida
//z = sum((i,j),x(i,j)*Inv(j))+ sum((i,k,j),c(i,k,j)*InvxPer(j));
z=0
for i=1:20
for j=1:3
z=z+(x(i,j)*Inv(j));
end
end
for i=1:20
for k=1:20
for j=1:3
z=z+(c(j,i,k)*V(j,i,k));
end
end
end
endfunction
//Define el cubo inicial de soluciones de c y la matriz inicial de soluciones de x
c0=[
0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0;
1000 1000 0 0 0 1000 1300 0 0 0 0 0 0 0 0 0 0 0 0 0;
800 700 0 0 0 900 1100 0 0 0 0 0 0 0 0 0 0 0 0 0;
]

c0(:,:,2)=[
0 0 0 0 0 0 0 0 0 0 0 0 2000 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000 0 0 0 0 0;
]
c0(:,:,3)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6000 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,4)=[
0 0 3000 4000 7000 0 0 1000 2000 5000 0 0 0 0 0 0 0 0 0 0;
0 0 600 700 1200 0 0 200 400 900 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,5)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,6)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 10 0 0 0 0 0 0 0 100 0 90 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0;
]
c0(:,:,7)=[
10000 5000 6000 0 0 0 0 8000 0 0 2000 3000 5000 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 999 0 0 0 0 0;
0 0 0 0 0 0 999 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,8)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0;
0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0;
]
c0(:,:,9)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1000 0 0 0;
0 0 0 0 14 0 0 0 0 44 0 0 0 0 0 0 0 0 0 0;
0 0 500 2000 1000 0 0 100 200 700 0 0 500 700 2000 0 0 0 0 0;
]
c0(:,:,10)=[
0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,11)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6000 7000 0 0 0;
0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 800 1300 0 0 0;
0 0 0 0 0 0 0 0 0 0 800 700 0 0 0 1000 1100 0 0 0;
]
c0(:,:,12)=[
0 0 0 0 0 0 0 0 0 1610 0 0 0 0 0 0 0 0 0 0;
0 0 200 0 0 0 0 0 3000 0 0 0 0 0 4000 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1050 0;
]
c0(:,:,13)=[
0 0 0 0 1610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 2014 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,14)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 5000 7000 0 0 1000 2500 8000;
0 0 0 0 0 0 0 0 0 0 0 0 0 400 1200 0 0 100 400 900;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 300 800;
]
c0(:,:,15)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,16)=[
0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,17)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 5000 7000 0 0 1000 2500 8000;
0 0 0 0 0 0 0 0 0 0 0 0 0 400 1200 0 0 100 400 900;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 300 800;

4
]
c0(:,:,18)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 1230 0 4210 0 0 0 0 0 4110 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,19)=[
0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 800 0 0;
0 0 4000 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]
c0(:,:,20)=[
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
]

for i=1:20
for k=1:20
for j=1:3
c1(j,i,k)=c0(j,i,k)
copt(j,i,k)=c0(j,i,k)
if c0(j,i,k)>0 then
x0(i,j)=1
x1(i,j)=1
xopt(i,j)=1
else
x0(i,j)=0
end
end
end
end
fopt=Hospitales(x0,c0)
printf("Estado INICIAl= %f\n", fopt);
Proba_start = 0.7; // probabilidad inicial de aceptar una mala solucin (por lo
general alrededor de 0.7)
It_Pre = 5; //# de iteraciones de caminata aleatoria
It_extern = 10; // # de decremento en la Temperatura
It_intern = 50; //# de iteraciones durante un escaln de Temperatura
fc=0.8 //Factor decrecimiento temperatura
for l=1:It_Pre
printf("Numero de interaccion de caminata aleatoria= %f\n", l);
T=100; //Temperatura inicial
for temp=1:It_extern
T=T*fc
printf("Numero de decremento temperatura= %f\n", temp);
printf("Nueva temperatura= %f\n", T);
for It_int=1:It_intern
//Seleccionar vecino
ACP= int(rand()*10)//Cuantos cambios de posicion
for vec=1:ACP
Aleatorio_Vecino_j=int(rand()*3)
while Aleatorio_Vecino_j==0
Aleatorio_Vecino_j=int(rand()*3)
end
Aleatorio_Vecino_i=int(rand()*20)
while Aleatorio_Vecino_i==0
Aleatorio_Vecino_i=int(rand()*20)
end
Aleatorio_Vecino_k=int(rand()*20)
while Aleatorio_Vecino_k==0
Aleatorio_Vecino_k=int(rand()*20)
end
ACod=int(rand()*1000)
if c0(Aleatorio_Vecino_j,Aleatorio_Vecino_i,Aleatorio_Vecino_k)
- ACod<0 then
c1(Aleatorio_Vecino_j,Aleatorio_Vecino_i,Aleatorio_Vecino_k)=c0(Aleatorio_Ve
cino_j,Aleatorio_Vecino_i,Aleatorio_Vecino_k) + ACod
else
c1(Aleatorio_Vecino_j,Aleatorio_Vecino_i,Aleatorio_Vecino_k)=c0(Aleatorio_Ve
cino_j,Aleatorio_Vecino_i,Aleatorio_Vecino_k) - ACod
end
end
//Rellenamos la matriz x1 de acuerdo a si utiliza o no un sevicio de
localidad i de nivel j

for j=1:3
for i=1:20
Atendidos=0
for k=1:20
Atendidos=Atendidos+c1(j,i,k)
end
if Atendidos==0 then
x1(i,j)=0
else
x1(i,j)=1
end
end
end
//Evaluamos la funcin F
if Hospitales(x1,c1)<= Hospitales(x0,c0) then
c0=c1
x0=x1
if Hospitales(x0,c0)<= fopt then
fopt=Hospitales(x0,c0)
xopt=x0
copt=c0
printf("Nuevo Optimo= %f\n", fopt);
end
else
p_aleatorio=rand()
p_calculado=exp(-(1/T)*(Hospitales(x0,c0)-Hospitales(x1,c1)))
if p_aleatorio <=p_calculado then
c0=c1
x0=x1
end
end
end
end
end

Se simulo 5 veces el algoritmo obteniendo los siguientes


resultados:

Se observa que en la interaccin 4 alcanzo el minimo costo


para la localizacin de los hospitales, pero este es mayor que
el calculado por optimizacin lineal. En la tabla se observa en
que localidad se debe construir un hospital de nivel 1, 2 y3.

IV. ALGORITMOS GENTICOS


Se planteo una matriz de binarios como cromosoma:

//Inv(j) Inversin necesaria para la implementacin de cada tipo de centro


prestador de servicios de salud de nivel j
Inv=[10000 20000 30000]
//V(j) Matriz de costos de ser atendido del servicio j
V=[0.05 0.1 0.15]
//D(i,j) nmero de usuarios de la localidad i esperado que requieren servicios de
nivel j
D=[
10000 1000 800;
5000 1000 700;

5
3000 600 500;
4000 700 500;
7000 1200 1000;
6000 1000 900;
8000 1300 1100;
1000 200 100;
2000 400 200;
5000 900 700;
2000 1000 800;
3000 1000 700;
5000 600 500;
5000 400 700;
7000 1200 900;
6000 800 1000;
7000 1300 1100;
1000 100 200;
2000 400 300;
8000 900 800;
]
//x(i,j) NVariable binaria de abrir un hospital en la localidad i prestando el nivel
de servicio j
//c(i,k,j) Numero de personas atendidas de la localidad i provenientes de la
localidad k para el nivel de servicio j
//z funcion objetivo
cx=[1,0,0;0,1,0;1,1,0;0,1,1;1,0,0;0,0,0;1,1,1;0,1,1;0,1,0;1,0,1;1,0,1;1,0,0;0,0,1;1,1,0
;1,1,1;0,0,1;1,1,0;1,0,1;0,1,0;1,1,1];
cy=[1,0,0;1,0,0;1,0,0;0,0,1;1,0,1;0,1,0;1,0,0;0,1,0;0,1,0;1,0,1;1,0,1;1,0,0;0,1,1;1,1,0
;1,1,1;0,0,1;1,1,0;1,0,1;0,1,1;1,1,1];
function y=f(x)
z=0
for i=1:20
for j=1:3
z=z+(x(i,j)*Inv(j))+(D(i,j)*V(j)*x(i,j));
end
end
endfunction
PopSize = 100;
Proba_cross = 0.5;
Proba_mut = 0.2;
NbGen = 10;
NbCouples = 110;
Log = %T;
ga_params = init_param();
// Parameters to control the initial population.
ga_params = add_param(ga_params,"dimension",60);
ga_params = add_param(ga_params,"minbound",0*ones(1,60));
ga_params = add_param(ga_params,"maxbound",1*ones(1,60));
[pop_opt, fobj_pop_opt] = ..
optim_ga(f, PopSize, NbGen, Proba_mut, Proba_cross, Log, ga_params);
disp([min(fobj_pop_opt) mean(fobj_pop_opt) max(fobj_pop_opt)]);
// Get the best x (i.e. the one which achieves the minimum function value)
[fmin ,k] = min(fobj_pop_opt);
xmin = matrix(round(pop_opt(k)),20,3);
[atendidos noAtendidos]=calcUsos(xmin);
// Get the worst x
[fmax ,k] = max(fobj_pop_opt);
xmax = matrix(round(pop_opt(k)),20,3);

El resultado obtenido se resume en la siguiente tabla:

Donde la iteracin nmero 2 obtuvo el menor costo, con una


inversin de 406821$ (En miles). Indicando que los hospitales
de nivel 1 se deben construir en la localidad 4,7,11,15. Los
hospitales de nivel 2 en 2,5,9,11,14 y los de 3 en 2,13,14.

V. CONCLUSIN
El mejor resultado obtenido fue por programacin lineal, con
un valor de 248475 $(en miles), seguido por el obtenido por
templado simulado 345256,6 $ (en miles) y finalmente el de
Algoritmos genticos 406821.5$(en miles). El primer mtodo
utilizado asegura el optimo ya qu es un mtodo exacto y no
aleatorio. En los otros dos mtodos hay procesos estocsticos
que pueden irse acercando progresivamente al ptimo, pero no
se puede garantizar.

You might also like