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

Tecnología
Por jamarier
departamento La mochila binaria , Sección Tecnología
Puesto a las Fri Jan 9th, 2004 at 12:35:51 PM CET

El problema de la mochila o como yo lo he llamado: «soluciones de empaquetamiento» es el problema de optimizar un espacio introduciendo objetos de diverso tamaño. En mi caso concreto, como repartir unos directorios de mi disco duro para grabarlos en CDs y sobre el menor espacio posible en cada CD. Tal y como se ha planteado es un problema denominado NP completo (gracias a Jorginius por recordarnoslo). Esto significa que aunque es un problema que tiene solución, no existe un atajo para encontrarla y que nos obliga a probar por fuerza bruta.

¿Cómo lo he hecho?

Métodos de optimización existen muchos y son conocidos desde hace tiempo. El que yo siempre suelo implementar es la ya nombrada busqueda por 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.
  • 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 ne el segundo y tercero no tengo tan claro que siempre se pueda solventar. Para poder tener constancia de que soluciones se han recorrido y cuales quedan por visitar, puede ser necesario usar complejas extructuras de datos. Por ejemplo, para recorrer un plano completo puede ser necesario trazar una curva de Peano cuyos puntos de paso son ¡¡infinitos!!. La cantidad de memoria que requiere almacenarlos puede ser terrible.

El enfoque empleado en esta ocasión será la busqueda de una solución satisfactoria por medio de un algoritmo de los llamados inteligentes: Algoritmos genéticos.

Todas las explicaciones que voy a dar son solo válidas en el ámbito de la 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 una veta). Aquellas prospecciones con bajo contenido en carbono son desechadas y se efectúan nuevas prospecciones en las zonas cercanas a donde medimos la mayor densidad (las nuevas ubicaciones son escogidas al azar pero en función de las densidades y distancias a las antiguas).

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

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. (*) Un conjunto de individuos representa una población.

¿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:

  • Se puede determinar a priori las necesidades de cálculo que van a existir, en función de la población (determinada en fase de diseño), 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 si se hace un buen diseño, tenderá a soluciones aceptables en muy poco tiempo.
  • El tiempo máximo de busqueda de soluciones se puede establecer.
  • Conservando una copia de la población, se puede interrumpir y continuar búsquedas; incluso aunque se varíen los parámetros de la búsqueda

¿Sirve para todo este método?

No. Este sistema nos permite acercarnos a los óptimos aunque no asegura que lo hemos hallado. Así que cuando se exige la mejor solución, hará falta combinarlo con otros sistemas para poder confirmarla. Además hay que asegurarse de que no caemos en un máximo/mínimo local que dé una falsa mejor solución.

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) | ¿Está KDE en decadencia? (29 comments) >
Enlaces Relacionados
· escomposlinux.org
· Jorginius
· curva de Peano
· More on Tecnología
· Also by jamarier

Encuesta
AA x Aa. Su descendencia será:
· AAAa 2%
· Es un vector perpendicular al plano definido por los vectores AA y Aa 9%
· 50% AA y 50% Aa 33%
· Ahhhhh 5%
· La genética era para el COU Biosanitario y yo hice otro 3%
· A la rubia si que se le daba bien esto 23%
· 75% AA y 25% aa porque aa es recesivo 13%
· Ops no me acuerdo. 8%

Votos: 93
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 | 12 comentarios (8 temáticos, 4 editoriales, 0 ocultos)
Definición de NP completo (4.00 / 3) (#5)
por bibu (bibu arroba begira punto com) a las Fri Jan 9th, 2004 at 10:07:22 AM CET
(Información Usuario) http://diariolinux.com

El artículo me parece interesante. Además ayuda a difundir diversos paradigmas de optimización, entre los cuales el problema de la mochila suele ser uno de los problemas de referencia (junto con el problema del agente viajero, el de la satisfactibilidad o el del coloreado de un grafo). Sin embargo no estoy de acuerdo en la definición de problema NP completo. Consultando cualquier libro de bibliografía básica sobre complejidad se tiene que: Un problema de asigna a la clase NP si puede resolverse en tiempo polinomial por una máquina de Turing no determinista. En mi experiencia, los problemas NP completos no pueden atacarse por fuerza bruta y hay que usar algoritmos heurísticos tipo genéticos, búsqueda tabú, algoritmos de estimación de distribuciones o cualquiera de los muchos heurísticos de búsqueda que se pueden encontrar.



La solución de problemas concretos (3.00 / 1) (#6)
por jorginius ("jorginius" en Google Mail) a las Fri Jan 9th, 2004 at 01:29:21 PM CET
(Información Usuario) http://www.rodriguezmoreno.com

Un problema de asigna a la clase NP si puede resolverse en tiempo polinomial por una máquina de Turing no determinista

Aún así la definición no es muy buena porque primero tendrías que explicar qué es una máquina de Turing no determinista :-).

En mi experiencia, los problemas NP completos no pueden atacarse por fuerza bruta

Bueno, eso dependerá del número de elementos, como todo. A priori no se pueden atacar así, pero en la práctica puede que sí sea viable.

Se me ocurre que el problema de llenar cd's de canciones MP3 (una variante de la mochila :-)) se podría atacar por fuerza bruta: sabemos que la desviación en el tamaño de los archivos es pequeña (cada canción vienen a ocupar más o menos lo mismo respecto al tamaño del cd, entorno al 0.25%) así que quizás se podría simplemente llenar los cds al azar hasta ocupar, pongamos por caso, un 80 o un 90% de los mismo (la pequeña desviación asegura que el número de canciones será prácticamente el mismo en todos los cd) y luego encontrar el subconjunto que mejor se ajusta al espacio restante de cada cd por fuerza bruta. Como ya quedan pocas canciones por distribuir (presumiblmente), sí podríamos hacer la búsqueda por todo el espacio de soluciones.

Ojo, que sólo estoy especulando y esto es sólo un ejemplo. No digo que esta manera sería mejor la que manera genética para este problema: no voy a echar números.

De acuerdo en que la solución no sería optima pero el algoritmo es mucho más sencillo que uno genético (incluso más rápido a lo mejor) y quizás sería lo suficientemente bueno para ese problema concreto, y lo hemos hecho por fuerza bruta.

[para los NP-completos] hay que usar algoritmos heurísticos

En general sí pero ya digo que depediendo del problema concreto no siempre es ese el camino más corto.

Mismamente, el problema general de la mochila y la particularización de suma de subconjuntos son NP completos, sin embargo el criptosistema de llave pública Merkle-Hellman, que está basado en él, en la dificultad de encontrar la suma de subconjuntos apropiada, fue roto en los 80 al encontrarse algoritmos deterministas que resolvían su problema particular en tiempo polinomial.

La idea es que mientras el problema matemático es poco menos que irresoluble, un problema concreto real puede ser practicable no sólo por métodos heurísticos e incluso mejor que con ellos.

[ Padre ]


 
Excelente Resumen (2.50 / 2) (#7)
por tecnocrata a las Fri Jan 9th, 2004 at 11:58:01 PM CET
(Información Usuario)

Decirte que me parece excelente el resumen que hiciste y estoy a la espera de tu siguiente entrega.. por mi parte tambien estuve entrandole a los Algoritmos Geneticos hace algunos meses pero lo deje temporalmente por motivos laborales, estoy consciente de sus enormes ventajas y me encantaria tambien compartir mi codigo en Visual C# que estuve realizando, funcionaba algo pero no del todo... :)

Adicionalmente me gustaria que puedan crear un nuevo articulo donde explique (por favor) los problemas de la mochila y creo que mencionaron otros o si tienen algun sitio donde se encuentren ese tipo de problemas.

Gracias



Está en el horno (2.00 / 1) (#8)
por jamarier a las Sat Jan 10th, 2004 at 01:13:10 AM CET
(Información Usuario) http://barbacana.net/blog/

El programa está operativo y la segunda parte está en el horno. Estén atentos a sus pantallas B-)

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



 
AA x Aa (none / 0) (#9)
por Envite a las Sun Jan 11th, 2004 at 03:18:21 AM CET
(Información Usuario)

La respuesta correcta en genética es:

Del primer progenitor tenemos A y A
Del segundo progenitor tenemos A y a

x | A | A
--+----+----
A | AA | AA
--+----+----
a | Aa | Aa

Es decir, 50% AA y 50% Aa (la tercera de la encuesta)
No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a decirlo.
Voltaire



Como chicos y chicas (2.00 / 1) (#10)
por gonzotba a las Sun Jan 11th, 2004 at 12:12:59 PM CET
(Información Usuario)

No recuerdo muy bien toda la teoría genética de 8º de EGB, pero supongo que será como de XY e YY, que salen 50 y 50% aproximadamente, ¿no?

[ Padre ]


Sasto (none / 0) (#11)
por Envite a las Tue Jan 13th, 2004 at 04:04:30 PM CET
(Información Usuario)

Solo que los chicos somos XY y las chicas, XX (unas incomprensibles totales). Y que seria coXXonuo que ellas fueran 75% y nosotros 25%. El planeta estaria mas limpio, habria menos guerras, mas cultura, y, sobre todo, ligariamos mas. Hasta los feos como yo.
No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a decirlo.
Voltaire

[ Padre ]


[OT] Porcentajes (none / 0) (#12)
por nya a las Tue Jan 13th, 2004 at 10:27:41 PM CET
(Información Usuario)

Y que seria coXXonuo que ellas fueran 75% y nosotros 25%.

Jeje. Bueno, en cierta manera... Se supone que nacen más niños que niñas (1'05 niños por niña), pero mueren más hombres que mujeres a todas (o casi) las edades. El porcentaje está equilibrado cuando se supone que empieza el periodo reproductor, más o menos (20 años, poco más, poco menos), y a partir de ahí, todo son ventajas :) (si sobrevives, claro).

[ Padre ]


 
Buscando soluciones de Empaquetamiento | 12 comentarios (8 temáticos, 4 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