¿Por qué la solución de Dantzig al problema de la mochila es solo aproximada?

Para un montón de artículos con valores v i y pesos w i , y con un peso total W que nuestra bolsa puede llevar, ¿cómo logramos el máximo valor total sin romper la bolsa? Dantzig propuso que consideráramos la relación v i / w j , y agregue artículos para los que esta proporción sea mayor hasta que se llene la bolsa. Pero esto se considera como una solución aproximada.

También he estado pensando en este problema. Se me ocurrió la misma solución que Dantzig e incluso la probé para el 0 1 problema. Por supuesto, sospeché de mi prueba incluso antes de saber que el método había sido propuesto antes (ya que implicaría que PAG = norte PAG ). Ahora sospecho aún más.

Así que sácame de mi miseria. ¿Por qué no funciona?

Bueno, ¿cómo demostraría que este método es el mejor en un entorno general?
Este método no es de ayuda si v i = w i para todos i esencialmente dice elegir elementos al azar. Esta objeción se aplica a la 0 1 problema también ¡Así que no puede ser correcto!

Respuestas (2)

No funciona porque no funciona.

di que tienes W = 10 y hay tres clases de objetos:

  1. Tipo A tiene peso 9 y valor 90.
  2. Tipo B tiene peso 2 y valor 19.
  3. Tipo C tiene peso 1 y valor 1.

Si miras v / w , tipo A gana, entonces tomas un tipo A objeto y llene el espacio restante con un tipo C , por valor total 91 .

Pero la solución óptima requiere cinco tipos B objetos por valor total 95 .

Podríamos caracterizar la dificultad general de la siguiente manera: una elección que parecía buena al principio se topó con problemas más tarde, porque nuestra elección inicial de A , óptimo a corto plazo, nos obliga a tomar lo muy malo C después. La solución óptima toma muchas opciones que parecen subóptimas a corto plazo, pero que funcionan bien juntas.

Esto es bastante típico de los problemas NP-completos. Tienen muchas partes que interactúan de manera complicada, por lo que los efectos de una elección particular en una parte del problema no pueden localizarse, pero tienen implicaciones de gran alcance para las elecciones realizadas en otros lugares. Compare esto con el prototípico problema NP-completo, CNF-SAT, donde las partes son cláusulas lógicas que contienen varios componentes cada una, pero cada componente puede aparecer en múltiples cláusulas. Cada elección sobre el valor de un componente de una cláusula puede tener efectos de largo alcance en las otras cláusulas.

O de manera similar, considere el embalaje en contenedores. Los artículos que encajan de manera óptima en el primer contenedor pueden resultar justo lo que se necesita para llenar el espacio en los contenedores posteriores, de modo que un empaque óptimo del primer contenedor puede generar una ganancia a corto plazo a expensas del empaque general; una solución óptima general puede empacar el primer contenedor de manera subóptima para guardar ciertos artículos especiales para más adelante.

Para el 0 1 problema me parece que elegir A es óptimo Supongo que debería tratar de encontrar un contraejemplo que funcione en el 0 1 caso, sin embargo.
@Mateo es el 0 1 caso el caso donde se puede tomar como máximo uno de cada elemento? Si es así, tipo dividido B en tipos B 1 B 5 cada uno con peso 2 y valor 19, o si quieres que sean diferentes, dale B i peso 2 ϵ i y valor 19 + ϵ i .
Genial. Gracias. Creo que identifiqué mi paso defectuoso. Creo que da la solución óptima si obtiene exactamente el límite de peso, y no de otra manera.
@MatthewMatic: Si está interesado en implementar un solucionador de mochila, consulte esta publicación: codereview.stackexchange.com/questions/44421/…
@ Mateo No lo creo. Es fácil perturbar mi A , B i , C ejemplo a uno donde la solución óptima obtiene exactamente el límite de peso. Solo asegúrate de que ϵ i = 0 .
@MJD Quiero decir que si el método obtiene el límite de peso, es óptimo. No es que si la solución óptima obtiene el límite de peso, este método lo encontrará.
Yo tampoco creo que eso sea cierto. En el caso 0-1 con W = 10, considere A con (peso 6, valor 60), B y C ambos con (peso 5, valor 49) y D,E,F,G todos con (peso 1, valor 1) su método elige A (con v/w = 10) primero, luego B y C no encajan, y luego elige D, E, F y G para cumplir exactamente con el límite de peso, con un valor total de 64; mientras que la solución óptima es B+C con valor total 98.

Para que quede claro: si llena artículos de acuerdo con su relación valor/peso hasta que no pueda caber más artículos en este pedido, el resultado es óptimo , si el peso acumulado para entonces coincide exactamente con el espacio disponible. En otras palabras, SIEMPRE es óptimo para el peso total que acumuló. Supongo que este es el resultado que tenías en mente. No es difícil de probar y se puede encontrar en cualquier introducción a los problemas de la mochila, por ejemplo en "Martello, S. & Toth, P. Problemas de la mochila: algoritmos e implementaciones informáticas. John Wiley & Sons, 1990"

Sin embargo, como se discutió en la primera respuesta y los comentarios allí, su método obviamente no siempre es óptimo si termina sin llenar la bolsa por completo. Pensar en W = 10 norte para grande norte y artículos A (peso 1 , valor 1 ) B (peso 10 norte , valor 10 norte 1 ). Entonces tu algoritmo termina con A y un valor de 1 , cuando en cambio podría haber tenido B con un valor de 10 norte 1 . Sin embargo, A es trivialmente óptimo para el peso que alcanza, es decir, óptimo para una mochila con peso total 1 .

Esta respuesta puede ser engañosa? Considere el caso mencionado en la publicación de @MJD, si llena con avidez los elementos de acuerdo con su v/w para W=12, termina con [A, B, C] por un valor de 110 mientras que 6xB da un valor de 114.
@JeroenVuurens esto no contradice lo que digo en la respuesta. Tenga en cuenta que digo "hasta que no pueda colocar más artículos en este pedido". Por lo tanto, suponiendo que hay varios elementos de tipo B ya que habla de un escenario en el que se utilizan varios elementos B, mi respuesta no cubre la situación en la que comienza a insertar C. Si tiene una idea de cómo expresar la declaración más claramente, l Editaré felizmente mi respuesta, pero el contenido matemático es correcto como lo es ahora
@JeroenVuurens si está de acuerdo conmigo, puede votar mi respuesta para dar a otros confianza en la declaración detrás de ella. Me pareció muy preocupante que la respuesta existente solo dé un resultado negativo, cuando la realidad es que el empaquetado codicioso funciona bien en la mayoría de los casos (y mi respuesta muestra por qué)
todavía no estoy de acuerdo. En el ejemplo dado para W=12, ordenar los tipos de elementos por v/w da como resultado [A, B, C] (o [A, B, B, B, B, B, B, C] si insiste en 0 /1 asignación). Entonces, si lo entiendo correctamente, afirma que el algoritmo será óptimo si llenamos los elementos con avidez si comenzamos con el elemento A porque tiene el v/w más alto antes de pasar al siguiente. En este ejemplo, llenará la mochila con ABC mientras que BBBBBB es mejor.
@JeroenVuurens mi publicación dice "llene los artículos de acuerdo con su relación valor/peso hasta que no pueda caber más artículos en este pedido". Por lo tanto, comenzaría por incluir A porque tiene la mejor v/w y se ajusta. Entonces incluiría B porque tiene la mejor v/w de los elementos restantes y también encaja. Después de esto, la siguiente B tiene la mejor v/w, pero como no encaja, se detiene. Terminas con [A,B] que tiene peso 11 y valor 109. Ninguna otra combinación con peso 11 tiene mejor valor