Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Buscando Soluciones de empaquetamiento

jamarier's Diary
Por jamarier
departamento idea y desarrollos , Sección Diarios
Puesto a las Wed Jan 7th, 2004 at 10:34:37 PM CET

Hoy he realizado un programa «inteligente». Consiste en resolver el típico problema del empaquetamiento: tienes unas cajas y quieres llenarlas con cosas de diversos tamaños y quieres aprovechar al máximo cada caja para que sobre lo mínimo. Si bueno lo confieso, era para aprovechar al máximo la capacidad de los CDs que grabo.

¿Cómo lo he hecho?

Métodos de optimización existen muchos y son conocidos desde hace tiempo. El que yo siempre suelo implementar son los de búsqueda de fuerza bruta. Que no es más que probar todas las posibilidades para encontrar la mejor (o al menos una suficientemente buena). Este método no falla; pero...

 


... tiene varios inconvenientes:
  • Son lentas.
  • Hay que establecer un sistema para recorrer todas las posibilidades por el camino más corto y en la medida de lo posible sin repetir ( una repetición conlleva a tiempo de cálculo perdido ).
  • En ocasiones es imposible o simplemente no es practico recorrer todas las posibilidades. Vease la nota (*) al final.

Ante el primer problema, solo queda la paciencia o buscarse un ordenador más potente/rápido; pero el segundo no tengo tan claro que siempre tenga solución. Para poder tener constancia de que soluciones se han recorrido y cuales quedan por visitar, puede ser necesario usar complejas extructuras de datos para ir marcando cada solución visitada. Requiriendo gran cantidad de memoria para este comentido. En otros casos es simplemente imposible dado que existen infinitos puntos posibles.

El que sea un poco sagaz deducirá por la palabra que empleé antes que enfoque he usado en esta ocasión: «inteligente». He realizado el sistema de búsqueda por medio de un algoritmo genético. Y como funciona y solo he tardado una mañana en plantear y programar el problema (obteniendo solución satisfactoria, escribo aquí para goce mio y de ajenos. (Y por si esta información le interesa a alguien).

Todas las explicaciones que voy a dar son solo para ambitos de divulgación y no es mi intención hacerme pasar por un experto. En caso de dudas, ya buscaremos a quien preguntarselas B-)

¿Qué es un algoritmo genético?

Un algoritmo genético es un sistema de busqueda de soluciones usando el azar como nuestro aliado (estocástico lo llaman los expertos). E intenta imitar los mecanismos de selección/evolución de la naturaleza de los más aptos.

Pongamos un ejemplo: Sea una montaña en la que queremos localizar una mina de carbón. Podemos intentar localizarla por fuerza bruta, es decir, hacemos un plano de la montaña y levantamos un recorrido que pase por todos los rincones de la montaña. A partir de ese recorrido, vamos haciendo prospecciones hasta encontrar una veta de carbon. El otro método consiste en hacer una serie de prospecciones al azar. Y mirar el porcentaje de carbono de cada una (podemos suponer que la densidad de carbono va subiendo conforme nos acercamos a la veta principal). Aquellas prospecciones con bajo contenido en carbono son desechadas y se efectúan más prospecciones en las zonas de mayor densidad (al azar pero cerca de las mejores de las anteriores).

¿Qué tiene que ver la minería con la genética? mucho. Las prospecciones representan a una población. Las prospecciones menos aptos son despreciadas y olvidados y a partir de los individuos más aptos se calculan cuales serán los siguientes intentos de encontrar el filón. Vemos reflejados los mecanismos de selección (supervivencia de los más útiles) y de evolución (como escoger nuevos elementos a partir de los más aptos).

Y ahora hablemos de algorítmos genéticos: Para poder aplicarlos hacen falta tres elementos: una forma de representar cada posible solucion, una forma de determinar si nos acercamos o no a lo ideal (la llamaremos función de evaluación) y una forma de obtener nuevos intentos de solución a partir de la población anterior. Y esto último es lo que nos queda por hablar para ser todos unos expertos en algoritmos genéticos. B-)

Cada posible solución (que llamaremos individuo) está representado por una variable de estado que lo discrimina del resto. Esa variable de estado es como la cadena de ADN de un ser vivo. Dentro están los genes que en nuestro caso serían distintas variables que lo definen. Por ejemplo si nuestro individuo fuese una posición del espacio representado por tres coordenadas enteras de 16 bit, el individuo quedaría representado por una variable de 3*16= 48 bits donde los 16 primero serían la coordenada X, los segundos la coordenada Y y los terceros la coordenada Z. (*)

¿Cómo evolucionan estos sistemas? pues igual que el material genético de los seres vivos. Podemos coger «material genético» de un padre y de una madre y combinarlos formando una nueva cadena ADN mezcla de la de los padres, puede suceder una mutación espontánea de un individuo alterando algún bit de su ADN, procesos de recombinación entre diversos elementos, ... La función de evaluación determina si el resultado es viable (si está dentro del campo de las soluciones) y cual es su nivel de aptitud. Y por tanto de supervivencia.

Ventajas de este sistema: A bote pronto se me ocurre los siguientes:

  • Se puede determinar a priori las necesidades de cálculo que van a existir, en función de la función de evaluación (conocida), la población (se selecciona en fase de diseño) y los mecanismos de reproducción (se selecciona igualmente en fase de diseño).
  • La efectividad de este método es en su límite inferior equivalente a una busqueda totalmente al azar. Pero en la mayoria de ocasiones si se hace un buen diseño, tenderá rapidamente a soluciones aceptables en muy poco tiempo.
  • El tiempo máximo de busqueda de soluciones se puede establecer.
  • Permite interrumpir y continuar búsquedas. Incluso aunque se varíen los parámetros de la búsqueda (solo es necesario guardar la población de un instante).

¿Sirve para todo este método?

No. Digamos que cuando la función de evaluación da valores al azar por el espacio de las soluciones, me parece que «azar con azar se contrarrestan» y las soluciones no tienden a ningún máximo estable. Esto obligaría a replantear la descripción de los individuos o buscar otro método de búsqueda de soluciones.

Además este sistema nos permite acercarnos a los óptimos aunque no asegura que lo hemos hallado. Así que cuando se exige la mejor solución, hara falta combinarlo con otros algorítmos.

Bueno, me he quedado ya sin espacio, Si interesa el tema haré otra entrada con el caso práctico del empaquetamiento y explicando mi programa, dando los fuentes para que lo podais usar los que querais y como querais

--
* Un «ADN» de 48 bits da un campo de soluciones de 2^48 posibles individuos, si miramos a millon de soluciones por segundo, tardaríamos 8.9 años en ver todas las posibles soluciones, ¿entendeis porque la fuerza bruta no es siempre lo mejor?

< "Hackeo" de libertonia por parte de BaDoPi (0 comments) | Buscando soluciones de Empaquetamiento (12 comments) >
Enlaces Relacionados
· More on jamarier's Diary
· Also by jamarier

Encuesta
Sobre algoritmos Genéticos.
· Interesante, quiero ver la segunda parte y el programa empaquetador 78%
· Me interesa el tema pero no el enfoque dado. (doy sugerencia). 0%
· Solo me interesa el programa empaquetador 5%
· No me interesa el asunto 5%
· Si la rubia es rubia y yo soy ... entonces nuestro niños serán... 10%

Votos: 19
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Buscando Soluciones de empaquetamiento | 5 comentarios (5 temáticos, editoriales, 0 ocultos)
Hombre, el problema de la mochila binaria :-) (none / 0) (#1)
por jorginius ("jorginius" en Google Mail) a las Thu Jan 8th, 2004 at 01:51:09 AM CET
(Información Usuario) http://www.rodriguezmoreno.com

... Particularizado, también conocido como problema de la suma de subconjuntos. Un clásico de los problema NP completos :-).

En el apartado de desventajas de los algoritmos genéticos hablas que "nos acercan a los optimos aunque no asegura que los hemos hallado". Me gustaría matizar que acercanos a los optimos a veces no es suficiente para hallar una buena solución: dependiendo de la función que estemos optimizando y de las poblaciones iniciales, la búsqueda podría quedar atrapada en un máximo relativo muy por debajo de la solución aceptable.

Llegado a este punto, o reiniciamos el algoritmo probando con otra población de partida (con lo que el tiempo máximo de búsqueda no lo podemos fijar, como apuntas en el apartado de ventajas) o lo complicamos manteniendo varias poblaciones e implementando entrecruzamientos entre ellas, minimizando (pero no anulando) las posibilidad de caer en un máximo relativo.



Métodos para evitar la endogamia (none / 0) (#2)
por jamarier a las Thu Jan 8th, 2004 at 07:29:06 AM CET
(Información Usuario) http://barbacana.net/blog/

Uno de los problemas que tienen todos los métodos de optimización es entrar en un pozo de un mínimo relativo (o máximo, claro). En el caso de los algoritmos genéticos se puede llamar caso de endogamia. Las familias donde los ascendentes de uno siempre son de la misma familia terminan teniendo un empobrecimiento genético que hace que aparezcan enfermedades. (Un ejemplo de ello lo podemos ver el la familia de los Borbones).

Afortunadamente existen métodos para alejarse de estas trampas, cito las siguientes:
  • Mantener familias menos optimas para que al cruzarse con los mejores «refresquen» la sangre.
  • Usar poblaciones más númerosas para aumentar las posibilidades de obtener distintas soluciones optimas.
  • Dotar de mecanismos de mutación que generen nuevos elementos distintos a sus padre y fuera de estos pozos.


Con estos sistemas podemos garantizar la variedad genética de la población evitando fenómenos como el dominio de fenotipos recesivos. Si no queda claro lo mejoro en otro comentario. B-)

-----
- Porque mañana será un gran día.
[ Padre ]



Todos, todos no... (none / 0) (#4)
por jorginius ("jorginius" en Google Mail) a las Thu Jan 8th, 2004 at 10:35:03 AM CET
(Información Usuario) http://www.rodriguezmoreno.com

Uno de los problemas que tienen todos los métodos de optimización es entrar en un pozo de un mínimo relativo (o máximo, claro).

Por fuerza bruta no encuentras este problema :-), ni empleando ningún otro metódo determinista, o una adaptación ingeniosa de una algoritmo determinista para hallar una solución suboptima que nos puede valer.

Por cierto, yo hubiera votado esto a portada, a pesar de que no es noticia :-)

[ Padre ]


Yo también lo hubiera votado a portada B-) (none / 0) (#5)
por jamarier a las Thu Jan 8th, 2004 at 04:23:17 PM CET
(Información Usuario) http://barbacana.net/blog/

Pero ya he encontrado un par de errores. Así que esta tarde cuando escriba la segunda parte, corrigo los errores de bulto y las propongo ambas para portada.

Y en el peor de los casos siempre nos quedará París; perdón los diarios B-)

Si no lo hice es por no considerarlo ni noticia ni nada de «reciente actualidad»

-----
- Porque mañana será un gran día.
[ Padre ]



 
Pues sí que parece interesante... (none / 0) (#3)
por arturop a las Thu Jan 8th, 2004 at 08:45:13 AM CET
(Información Usuario)

He leído y releído el artículo y me interesa lo que planteáis. Por ello quisiera pedirte desde estas líneas que continúes con tu propuesta (hace mucho tiempo que terminé mis estudios y estos nuevos enfoques no los conozco).

Agradezco de antemano vuestra atención.

Un saludo



 
Buscando Soluciones de empaquetamiento | 5 comentarios (5 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda