Sei sulla pagina 1di 9

Documentacin trabajo de EPD:

Resolucin problemas de
optimizacin

Trabajo realizado por:


ngel Crujera Mora

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

ndice:
1. Introduccin
2. Problemas de optimizacin
1. Problema del cambio con monedas
2. Problema del agente viajero (TSP)
3. Algoritmo
4. Experimentos
5. Conclusiones

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

1. Introduccin
En este documento reflejaremos la resolucin a dos problemas de optimizacin como son el problema del
cambio, tambin conocido como problema de las monedas, y el problema del agente viajero (TSP).
El primero de ellos, es un problema que dado un sistema monetario S, con x tipos de monedas diferentes,
hay que hallar la combinacin de monedas usando el menor nmero posible. El nmero de cada tipo de
monedas que se pueden utilizar es ilimitado.
El segundo es el problema del viajante, en el que dada una lista de ciudades y las distancias entre cada par
de ellas, hay que averiguar la ruta ms corta sin pasar dos veces por la misma ciudad y volviendo a la
ciudad de origen.
El algoritmo elegido para la resolucin de los problemas ha sido el algoritmo voraz. Ms adelante en este
documento hablaremos con ms detalle sobre este algoritmo.

2. Problemas de optimizacin
2.1. Problema del cambio con monedas
Como hemos comentado anteriormente, este problema trata de resolver la problemtica de la eleccin de las monedas
adecuadas a la hora de tener que devolver un cambio, para que tengamos que utilizar el menor nmero de monedas
posibles.
Para poder solucionar este problema necesitamos dos datos:

El sistema monetario, es decir, el conjunto de los posibles valores de las monedas que podemos utilizar para el
cambio. Por ejemplo podemos denominarlo S, al conjunto, y x1, x2, , xi a los diferentes valores que tienen
las monedas. Recordemos que el nmero de monedas de cada valor que podemos utilizar para devolver el
cambio es ilimitado.
Necesitamos tambin la cantidad que tenemos que devolver, es decir, el cambio.
2.2. Problema del agente viajero (TSP)

Este problema intenta resolver el problema a la hora de seleccionar una ruta, conocido todos los puntos por
los que sta tiene que pasar, las distancias entre todos ellos par a par. Adems la ruta no podr pasar dos
veces por el mismo punto, y el punto de partida ser tambin el de final. Este problema tiene multitud de
variantes, donde se aade una carga que hay que repartir, tiempo, etc. Nosotros aplicaremos el algoritmo
para el caso bsico.
Este problema tiene multitud de aplicaciones, no solo en temas de logstica, sino que tambin se utiliza para
problemas de planificacin, para la creacin de microchips y algunas de sus variantes aparece como subproblema en otros problemas de mayor envergadura como la secuencia de ADN.
La complejidad de este problema radica en que al aumentar el nmero de ciudades por las que debe de
pasar la ruta, el nmero de posibles rutas crece de forma exponencial, ms concretamente es (N-1)!. Esto
hace que para un nmero de ciudades no demasiado elevado, el nmero de rutas posibles sea enorme. Por
ejemplo para 30 ciudades, el nmero de rutas posibles es 4.10^31.
El problema del viajante se puede ver tambin como un problema de grafo ponderado no dirigido, es decir
donde las aristas tienen valor y no siguen una direccin determinada sino que unen ambos vrtices a los
que estn conectados de forma bidireccional.

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

Pongamos un ejemplo, supongamos que tenemos este grafo:

En este caso es relativamente fcil ver la ruta ptima, partiendo desde A:

Pero si tendramos que pararnos a comprobarlo, imaginaros si tuvisemos 3 ciudades ms, tardaramos
mucho tiempo en hacerlo. Por ello, este problema tiene especial relevancia en las ciencias de la
computacin, ya que se toma en multitud de ocasiones como referente.

3. Algoritmo
Como se ha mencionado en la introduccin, el algoritmo seleccionado para la resolucin de estos
problemas es el algoritmo voraz.
Este algoritmo se utiliza sobre todo para la resolucin de problemas de optimizacin o de decisin.
La heurstica que sigue este algoritmo es la siguiente, en cada paso elige la solucin ptima local, sin
preocuparse de si la decisin tomada es la mejor o no para la solucin global del problema. Las decisiones
tomadas no vuelven a ser reconsideradas.
Los elementos que normalmente intervienen en este tipo de algoritmo son:

Conjunto de candidatos, al que denominaremos C (por ejemplo: los vertices del TSP, ciudades).

Conjunto de candidatos ya seleccionados, conjunto solucin S.

Una funcin que seleccione a los candidatos.

Una funcin que determine los candidatos que son prometedores, es decir que se puedan aadir a
la solucin.

Una funcin que determine el valor de la solucin,

Una funcin que determine si el conjunto S es solucin o no del problema.

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

El pseudocdigo del algoritmo es el siguiente:


Procedimiento AV (C:conjunto):conjunto {
S = : conjunto;
f = funcin objetivo;
while (C 6= && !esSolucion(S)) {
x = seleccionarElemento(C) / max/min{f(x)} x C;
C = C \ {x};
if esPrometedor(x, S) {
S = S {x};
}
}
if (!esSolucion(S)) {
S = ;
}
return S;
}

Problema cambio de monedas.

public static void monedas_voraz(int valores[], int cantidad[], int importe) {


for (int i = 0; i < valores.length; i++) {
while (valores[i] <= importe) { // Comprobamos que el valor de la moneda no sea superior al importe
importe = importe valores[i]; // Restamos el valor de la moneda al importe
cantidad[i]++; // Aumentamos en uno el contador de la moneda usada
}
}
}
Valores es el conjunto donde tenemos a los candidatos.
Cantidad es el conjunto donde guardamos la solucin, es decir, donde vamos introduciendo el nmero de
monedas de cada tipo que usamos para devolver el cambio.
Importe es la cantidad a devolver.

Problema TSP

private static double TSP_Voraz(double[][] distancias, int[] solucion) {


double recorrido = 0;
boolean stop;
Random r = new Random();
int ciudad_actual = r.nextInt(solucion.length); //Empezamos en un punto aleatorio
int ciudad_inicio = ciudad_actual;
double aux = 0; // La usamos para ir comprobando cual es la distancia mnima hasta el siguiente punto
int ciudad_siguiente = 0;
for (int i = 0; i < solucion.length - 1; i++) {
aux = 0;
for (int j = 0; j < solucion.length - 1 && j <= i; j++) {
if(ciudad_actual < j){ //Condicin necesaria por ser una matriz triangular distancias
if (aux == 0 && solucion[j] == -1) {
aux = distancias[j][ciudad_actual];
ciudad_siguiente = j;
} else if (distancias[j][ciudad_actual] != 0 && distancias[j][ciudad_actual] < aux && solucion[j]
== -1 && j < ciudad_actual) {
aux = distancias[j][ciudad_actual];
ciudad_siguiente = j;
}

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

}else {
if (aux == 0 && solucion[j] == -1) {
aux = distancias[ciudad_actual][j];
ciudad_siguiente = j;
} else if (distancias[ciudad_actual][j] != 0 && distancias[ciudad_actual][j] < aux && solucion[j]
== -1 ) {
aux = distancias[ciudad_actual][j];
ciudad_siguiente = j;
}
}

}
solucion[ciudad_siguiente] = ciudad_actual + 1;
if(ciudad_siguiente>ciudad_actual)
recorrido += distancias[ciudad_siguiente][ciudad_actual]; // Sumamos la distancia
else
recorrido += distancias[ciudad_actual][ciudad_siguiente]; // Sumamos la distancia
ciudad_actual = ciudad_siguiente;
}
recorrido += distancias[ciudad_actual][ciudad_inicio]; //recorrido desde la ltima ciudad hasta la ciudad
origen
return recorrido;
}

4. Experimentacin.
4.1 Problema cambio de monedas.
Para hacer la experimentacin se han usados los ficheros facilitados en blackboard. Se ha ejecutado el
cdigo por haciendo una llamada por consola de la siguiente forma:
java --jar Monedas_Voraz <nombre del fichero>.txt
Alguna de las capturas de dichas ejecuciones:

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

A continuacin se encuentra la tabla con los resultados de las ejecuciones:

niteraciones
p_01_eu
p_01_us
p_01_uk
P_02_eu
P_02_us
P_02_uk
P_03_eu
P_03_us
P_03_uk

1000
0,004
0,005
0,004
0,007
0,007
0,009
0,256
0,246
0,425

2500
0,0024
0,002
0,0024
0,0044
0,0048
0,006
0,2528
0,244
0,4232

Universidad Pablo de Olavide, Algortmica I

5000
0,0014
0,0012
0,0014
0,0038
0,0038
0,006
0,2556
0,2436
0,4252

7500 Media (ms)


0,001066667
0,0022166668
0,00093333
0,0022833325
0,0012
0,00225
0,003466665
0,0046666663
0,003466665
0,0047666663
0,005333333
0,0065833333
0,252666665
0,2542666663
0,244133334
0,2444333335
0,4208
0,42355

ngel Crujera Mora

Y la grfica correspondientes a las medias:

Monedas_Voraz
0,45
0,4
0,35

Tiempo

0,3
0,25
Media (ms)

0,2
0,15
0,1
0,05
0
p_01_us
P_02_eu
P_02_uk
P_03_us
p_01_eu
p_01_uk
P_02_us
P_03_eu
P_03_uk
Ficheros

Los archivos p_01 tienen un importe a devolver = 12500.


Los archivos p_02 tienen un importe a devolver = 125349.
Los archivos p_03 tienen un importe a devolver = 10834567.
El sistema monetario eu, tiene monedas de los siguientes valores: 1, 2, 5, 10, 20, 50, 100.
El sistema monetario us, tiene monedas de los siguientes valores: 1, 5, 10, 25, 50, 100.
El sistema monetario uk, tiene monedas de los siguientes valores: 1, 2, 6, 12, 24, 48, 60.
4.2. Problema del agente viajero
En este problema la experimentacin nos demuestra que este algoritmo no es el ms apropiado para
resolver este problema. Un ejemplo de ello es la ejecucin del mismo con el fichero berlin52.tsp. Vamos a
comprobar que pasa al ejecutar varias veces el mismo fichero con el algoritmo:

Podemos observar que ni el tiempo ni la distancia recorrida es la misma en todo los casos, esto se debe a
que cambiamos el punto de partida, y para cada punto de partida el algoritmo haya una ruta diferente.

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

5. Conclusiones
En el caso del problema del cambio, podemos sacar varias deducciones:
El importe a devolver es el factor que ms influencia en el tiempo de ejecucin tiene. Esto es lgico,
ya que cuanto ms grande sea este, ms veces deber de ejecutarse el bucle hasta que el importe
llegue a cero.
El sistema monetario, es decir, el valor de las monedas que disponemos para dar el cambio,
tambin juega un factor en el tiempo de ejecucin. Aunque podemos ver que este no es tan
importante con el importe. Solo en el ltimo caso se ha podido apreciar un aumento del tiempo de
ejecucin significativo en este aspecto.
En el caso del problema del agente viajante, el algoritmo voraz no nos tiene porque proporcionar la solucin
ptima al problema, al no considerar la solucin global del problema, va eligiendo en cada momento la ruta
ms corta, sin considerar que a lo mejor esa no es la mejor opcin de cara a la solucin global.

Universidad Pablo de Olavide, Algortmica I

ngel Crujera Mora

Potrebbero piacerti anche