Así que estaba pensando,algoritmo de programación dinámica para una variación de la mochila Problema
Yo quería hacer una variación sobre el problema de la mochila.
Imagine el problema original, con elementos con varios pesos/valor.
Mi versión tendrá, junto con los pesos/valores normales, un valor de "grupo".
por ejemplo. Elemento1 [5 kg, $ 600, electrónicas] ELEMENTO2 [1 kg, $ 50, los alimentos]
Ahora, tener un conjunto de este tipo de elementos, ¿cómo iba a codificar el problema de la mochila para asegurarse de que un máximo de 1 artículo de cada "grupo" está seleccionado.
Notas:
- No es necesario para seleccionar un elemento de ese grupo
- Hay varios elementos en cada grupo
- usted todavía está minimizando el peso, maximizando el valor
- El la cantidad de grupos está predefinida, junto con sus valores.
Estoy escribiendo un borrador del código en esta etapa, y he elegido utilizar un enfoque dinámico. Entiendo la idea detrás de la solución dinámica para el problema habitual de la mochila, ¿cómo modifico esta solución para incorporar estos "grupos"?
KnapSackVariation(v,w,g,n,W)
{
for (w = 0 to W)
V[0,w] = 0;
for(i = 1 to n)
for(w = 0 to W)
if(w[i] <= w)
V[i,w] = max{V[i-1, w], v[i] + V[i-1, w-w[i]]};
else
V[i,w] = V[i-1, w];
return V[n,W];
}
Eso es lo que tengo hasta ahora, tengo que añadir que para que se retire todos los artículos correspondientes del grupo que está en cada vez que se soluciona esto.
¡Agregue un artículo de grupo al estado! – quasiverse
¿Qué tal resolverlo como un problema de optimización combinatoria? Para cada elemento, elige un elemento o ningún elemento. Es posible que desee utilizar la bifurcación y la búsqueda encuadernada para resolverlo. – ysdx