ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS ALGORITMOS (SIC324) GRUPO: No. 1 INFORME No: 7
Alu!o: "#$%o Mo#&l' D&!!$ A!#* A!#* PROFESORA: MS+. M&,#& CARRION FEC-A DE ENTREGA: 1/0/210
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
Laboratorio de: Algoritmos. Práctica No.: 7 Tema: Algoritmos Voraces: Cambio de moneda y la Mochila Objetivos: •
•
Comprender la lógica detrás de los algoritmos de Cambio de Moneda y Mochila. Implementar los algoritmos en lenguaje JAVA
Marco Teórico
n algoritmo !ora" #tambi$n conocido como á!ido% de!orador o goloso& es a'uel 'ue% para resol!er un determinado problema% sigue una heur(stica consistente en elegir la opción óptima en cada paso local con la esperan"a de llegar a una solución general óptima. )ste es'uema algor(tmico es el 'ue menos di*cultades plantea a la hora de dise+ar y comprobar su ,uncionamiento. -ormalmente se aplica a los problemas de optimi"ación. )s'uema ado un conjunto *nito de entradas C% un algoritmo !ora" de!uel!e un conjunto / #seleccionados& tal 'ue / subconjunto propio C y 'ue además cumple con las restricciones del problema inicial. A cada conjunto / 'ue satis,aga las restricciones se le suele denominar prometedor% y si este además logra 'ue la ,unción objeti!o se minimice o ma0imice #seg1n corresponda& diremos 'ue / es una solución óptima. )lementos 'ue inter!ienen • •
•
•
)l conjunto C de candidatos% entradas del problema. 2unción solución. Comprueba% en cada paso% si el subconjunto actual de candidatos elegidos ,orma una solución #no importa si es óptima o no lo es&. 2unción de selección. In,orma de cuál es el elemento más prometedor para completar la solución. 3ste no puede haber sido escogido con anterioridad. Cada elemento es considerado una sola !e". 4uego% puede ser recha"ado o aceptado y pertenecerá a C 5 / 2unción de factibilidad. In,orma si a partir de un conjunto se puede llegar a una solución. 4o aplicaremos al conjunto de seleccionados unido con el elemento más prometedor.
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
•
2unción objetivo. )s a'uella 'ue 'ueremos ma0imi"ar o minimi"ar% el n1cleo del problema.
Funcionamiento
)l algoritmo escoge en cada paso al mejor elemento 0 pertenece a C posible% conocido como el elemento más prometedor. /e elimina ese elemento del conjunto de candidatos #C 6 0 anali"arlo en C& y% acto seguido% comprueba si la inclusión de este elemento en el conjunto de elementos seleccionados #/ unión 0& produce una solución ,actible. )n caso de 'ue as( sea% se incluye ese elemento en /. /i la inclusión no ,uera ,actible% se descarta el elemento. Iteramos el bucle% comprobando si el conjunto de seleccionados es una solución y% si no es as(% pasando al siguiente elemento del conjunto de candidatos. Algoritmo ambio de moneda
)ste algoritmo de programación dinámica sir!e para calcular el n1mero de monedas a retornar de una determinada suma y la cantidad de cada tipo de moneda. ara ello pasaremos como parámetro la cantidad a retornar y un !ector con el !alor de los di,erentes tipos de monedas. 2inalmente% el algoritmo retorna un !ector con la cantidad de cada tipo de monedas a de!ol!er. Problema
)n primer lugar% debemos pensar como plantear el problema de ,orma incremental. Consideramos el tipo de moneda de mayor !alor% 8-. /i 8- 9 C entonces la descartamos y pasamos a considerar monedas de menor !alor. /i 8- C tenemos dos opciones: o tomar una moneda de tipo 8-% ; completar la cantidad restante C 6 8- con otras monedas% o no tomar ninguna moneda de tipo 8- ; completar la cantidad C con monedas de menor !alor. e las dos opciones nos 'uedamos con la 'ue re'uiera un n1mero menor de monedas. )l problema lo podemos e0presar de la siguiente ,orma cuando consideramos - tipos de monedas: cambio #- 6 =% C& si 8- 9 C Cambio #-% C& <
MI- >cambio #-5=% C&% cambio #-% C 6 8-& ? =& si 8- < C
odemos ra"onar análogamente para monedas de !alores @ menores 'ue - y para cantidades C menores 'ue C: Cambio#cd& Cambio#@5= % C& si 0@ 9 C
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
Min>cambio#@5=%C&%cambio#-%C5 0@&?=& si @ 9
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
actual a la 'ue se le ha restado el !alor de la moneda actual. omar como resultado el !alor de la 1ltima celda. /aber 'u$ tipo de monedas hay 'ue de!ol!er artimos de la casilla *nal. ara cada casilla tDi%jE el algoritmo !a comprobando si su !alor ha !ariado respecto a la casilla de la *la superior. /i no ha !ariado podemos deducir 'ue no se ha empleado ninguna moneda del tipo de la *la i% y pasamos a comprobar la casilla superior tDi5l jE. /i ha !ariado% anotamos 'ue se ha utili"ado una moneda de ese tipo 8i y nos mo!emos a la casilla tDi% j5monedaDiEE% para !er 'u$ monedas se han utili"ado para dar la cantidad restante. /iguiendo esta estrategia terminaremos alcan"ando la casilla tDB%BE en la 'ue ya no 'ueda ninguna cantidad pendiente. )sto se hace en el m$todo seleccionMonedas#& Kesumiendo si tenemos un !ector con los tipos de monedas >=%G%=BL y 'ueremos saber la cantidad de monedas necesarias para dicho cambio y 'ue tipo de monedas es% el !ector 'ue retornara será >B%F%BL es decir B monedas de la cantidad =% F monedas de la cantidad G y B monedas de la cantidad =B.
oste
ara estudiar el coste del algoritmo calculamos el tama+o de la tabla 'ue hay 'ue construir: - 0 #C ? =&. Como las operaciones aritm$ticas in!olucradas son de coste constante% el tiempo de ejecución está en H#-C&. Algoritmo Moc!ila
)n algoritmia% el problema de la mochila% com1nmente abre!iado por #del ingl$s napsac@ problem& es un problema de optimi"ación combinatoria% es decir% 'ue busca la mejor solución entre un conjunto #*nito& de posibles soluciones a un problema. Modela una situación análoga al llenar una mochila% incapa" de soportar más de un peso determinado% con todo o parte de un conjunto de objetos% cada uno con un peso y !alor espec(*cos. 4os objetos colocados en la mochila deben ma0imi"ar el !alor total sin e0ceder el peso má0imo. "istoria
)l problema de la mochila es uno de los F= problemas -5 completos de Kichard arp% establecidos por el in,ormático teórico en un ,amoso art(culo de =N7F.= Oa sido intensamente estudiado desde mediados del siglo 88 y se hace re,erencia a $l en el a+o =PN7% en un art(culo de Qeorge MatheRs Sallard.F
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
/i bien la ,ormulación del problema es sencilla% su resolución es más compleja. Algunos algoritmos e0istentes pueden resol!erlo en la práctica para casos de un gran tama+o. /in embargo% la estructura 1nica del problema% y el hecho de 'ue se presente como un subproblema de otros problemas más generales% lo con!ierten en un problema ,recuente en la in!estigación. #e$nición
A continuación se de*ne ,ormalmente el problema. /upongamos 'ue tenemos distintos tipos de (tems% 'ue !an del = al . e cada tipo de (tem se tienen (tems disponibles% donde es un entero positi!o 'ue cumple . Cada tipo de (tem i tiene un bene*cio asociado dado por v y un peso #o !olumen& w . sualmente se asume 'ue el bene*cio y el peso no son negati!os. ara simpli*car la representación% se suele asumir 'ue los (tems están listados en orden creciente seg1n el peso #o !olumen&. or otro lado se tiene una mochila% donde se pueden introducir los (tems% 'ue soporta un peso má0imo #o !olumen má0imo& W . )l problema consiste en meter en la mochila (tems de tal ,orma 'ue se ma0imice el !alor de los (tems 'ue contiene y siempre 'ue no se supere el peso má0imo 'ue puede soportar la misma. 4a solución al problema !endrá dado por la secuencia de !ariables x % x % ...% x donde el !alor de x indica cuantas copias se meterán en la mochila del tipo de (tem i. )l problema se puede e0presar matemáticamente por medio del siguiente programa lineal: /i para se dice 'ue se trata del problema de la mochila B5=. /i uno o más es in*nito entonces se dice 'ue se trata del problema de la mochila no acotado tambi$n llamado a !eces problema de la mochila entera. )n otro caso se dice 'ue se trata del problema de la mochila acotado. i
i
1
2
n
i
M%todos de resolución
)ste problema se ha resuelto tradicionalmente mediante programación lineal entera. )l hecho de 'ue se trate de programación lineal hace re,erencia a 'ue la ,unción a optimi"ar y las inecuaciones 'ue constituyen las restricciones han de ser lineales% es decir% han de ser ,unciones cuyas incógnitas est$n ele!adas e0clusi!amente a la unidad. )0iste otra ,orma de resol!er este tipo de problema% a tra!$s de los denominados algoritmos !oraces. na apro0imación !ora" consiste en 'ue cada elemento a considerar se e!al1a una 1nica !e"% siendo descartado o seleccionado% de tal ,orma 'ue si es seleccionado ,orma
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
parte de la solución% y si es descartado% no ,orma parte de la solución ni !ol!erá a ser considerado para la misma. Con este m$todo no siempre es posible dar una solución a un problema. Htro sistema para resol!er el problema de la mochila es mediante algoritmos gen$ticos 'ue son m$todos de optimi"ación 'ue tratan de hallar tales 'ue sea má0imo. lase Main
public class Main >
L
public static !oid main#/tringDE args& > CambioMonedas cambio < neR CambioMonedas#&T cambio.setatos#&T cambio.cambio#&T Mochila mochila < neR Mochila#&T mochila.setMochila#&T mochila.llenarMochila#&T L lase ambio de Monedas
public class CambioMonedas > pri!ate intDE denominacionesT pri!ate intDE tiposMonedaT pri!ate int importeT public !oid setatos#& > int au0 < Integer.parseInt#JHptionane.shoRInputialog#null% UIngrese el numero de denominaciones de monedas e0istentesU&&T this.denominaciones < neR intDau0ET this.tiposMoneda < neR intDau0ET this.importe < Integer.parseInt#JHptionane.shoRInputialog#null% UIngrese el importeU&&T do > /tring datos < JHptionane.shoRInputialog#null% UIngrese el !alor de la moneda y la cantidad de monedas respecti!amente. 4os datos deben estar separados con una coma #%&U&T /tringo@eni"er to@ens < neR /tringo@eni"er#datos% U%U&T this.denominacionesDthis.denominaciones.length 5 au0E < Integer.parseInt#
[email protected]o@en#&&T this.tiposMonedaDthis.tiposMoneda.length 5 au0E < Integer.parseInt#
[email protected]o@en#&&T
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
L
au055T L Rhile #au0 9 B&T
public !oid cambio#& > intDE cambio < neR intDtiposMoneda.lengthETT int m < BT int n < cambio.length 5 =T Rhile ##importe 9 B& #m < n&& > i, ##denominacionesDmE < importe& #tiposMonedaDmE 9 B&& > tiposMonedaDmE55T cambioDmE??T importe < importe 5 denominacionesDmET L else > m??T L L i, #importe 9 B& > JHptionane.shoRMessageialog#null% U)rror: no es posible reali"ar cambioU&T L else > /tring salida < Arrays.to/tring#tiposMoneda& ? U MonedasWnU ? Arrays.to/tring#denominaciones& ? UValor de la monedaUT JHptionane.shoRMessageialog#null% salida ? UWnU ? UCambio reali"ado con e0itoU&T L L L lase Moc!ila
public class Mochila >
pri!ate double capacidadT pri!ate intDE pesoT pri!ate intDE bene*cioT
public !oid setMochila#& >
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
this.capacidad ouble.parseouble#JHptionane.shoRInputialog#null% UIngrese capacidad de la mochilaU&&T
< la
int au0 < Integer.parseInt#JHptionane.shoRInputialog#null% UIngrese la !ariedad de objetosU&&T this.peso < neR intDau0ET this.bene*cio < neR intDau0ET do > /tring dato < JHptionane.shoRInputialog#null% UIngrese el peso y el bene*cio del objeto.Wn/epare los datos con una coma#%&U&T /tringo@eni"er to@ens < neR /tringo@eni"er#dato% U%U&T this.pesoDthis.peso.length Integer.parseInt#
[email protected]o@en#&&T this.bene*cioDthis.bene*cio.length Integer.parseInt#
[email protected]o@en#&&T
au055T L Rhile #au0 9 B&T L
public !oid llenarMochila#& > double resto < this.capacidadT doubleDE resultado < neR doubleDthis.peso.lengthET int n < this.bene*cio.lengthT ,or #int i < BT i nT i??& > resultadoDiE < BT L ,or #int i < BT i nT i??& > i, #this.pesoDiE < resto& > resultadoDiE < =T
5 5
au0E
<
au0E
<
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
resto < resto 5 pesoDiET L else > resultadoDiE < resto X pesoDiET resto < BT L L /tring mostrar < Arrays.to/tring#this.peso& ? U esosWnUT mostrar ?< Arrays.to/tring#this.bene*cio& ? U Sene*cioWnUT mostrar ?< Arrays.to/tring#resultado& ? U KesultadoUT JHptionane.shoRMessageialog#null% mostrar&T L L
ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA DE SISTEMAS INGENIERÍA DE SISTEMAS INFORMTICOS DE COMPUTACIN
onclusiones & 'ecomendaciones:
)l principal problema de los algoritmos !oraces es su optimi"ación. )ste tipo de algoritmos a !eces no dan la respuesta correcta. /olo bajo ciertas condiciones se dan las respuestas correctas en el cambio de moneda (ibliograf)a: •
•
•
http:XXRebdiis.uni"ar.esXasignaturasX)AXeaXslidesXF5Algoritmos YFBVoraces.pd, http:XXdiBBF.ed!.unio!i.esXZdaniXasignaturasXtransparencias5 leccion=P.2 https:XXRebs.um.esXmpulidoXmiRi@iXlibXe0eX,etch.php[ id