Cómo crear un software de algoritmo combinado

Para probar simultáneamente muchas combinaciones, necesitará hardware masivamente paralelo.

Sin dicho hardware, podría utilizar conjuntos de cortes, octrees o alguna otra representación matemática para eliminar grandes cantidades de combinaciones sin tener que probarlas. Como ejemplo trivial, suponga que su mochila contiene 20 libras y uno de sus artículos pesa 25 libras; puedes eliminar de inmediato todas las combinaciones que usarían ese elemento.

Otros encuestados han mencionado algoritmos para búsqueda exhaustiva.

También puedes buscar heurística. Puede encontrar, por ejemplo, que no necesita la mejor respuesta absoluta, sino solo una respuesta lo suficientemente buena, en cuyo caso puede intentar dividir sus datos en elementos grandes, medianos y pequeños y empaquetar primero con elementos grandes, luego mediano cuando no haya más ajuste grande, luego pequeño cuando no haya más ajuste mediano.

Otro enfoque a considerar es un enfoque genético / de aprendizaje automático / Monte Carlo. Desarrolle un algoritmo de evaluación de cuán “buena” es una combinación, luego genere (como en “crear una generación de”) muchas combinaciones al azar y evalúenlas. Use lo que aprendió de esta primera generación para crear una segunda generación “mejor”, y así sucesivamente durante varias generaciones hasta que tenga un ajuste adecuado. Fácil de describir, difícil de hacer, bastante interesante técnicamente.

¡Buena suerte en tu búsqueda!

problema interesante

Entonces, ¿qué has intentado y qué ha funcionado?

puedes escribir en código psuedo, o c ++ o java, para que pueda ver dónde estás

o diagramas, así puedo ver dónde están tus pensamientos actualmente

y lo que está cerca de una posible solución

y lo que está lejos

Tengo mucha curiosidad en tus pensamientos.

La forma estándar de generar las diferentes formas de “n elegir m” para elegir una combinación de m objetos de n es hacerlo lexicográficamente (es decir, alfabéticamente).

Suponga que los elementos están almacenados en una matriz o tamaño n. Y, por ejemplo, m = 3.

para i = 1 a n-2

para j = i + 1 a n-1

para k = j + 1 a n

generar combo (i, j, k)

Puede modificar esto fácilmente para otros m.