2010-09-14 47 views
6

Estoy tratando de desarrollar una aplicación C# que genere una lista de todas las permutaciones posibles, dentro de un límite y costo. Por ejemplo, tengo una lista de 80 trabajos. Cada trabajo tiene un valor (1-5) (típicamente 3) y cada ingeniero tiene un límite de cuánto pueden hacer, generalmente un valor de 20.Algoritmo de combinaciones ordenadas de C#

En este momento he comenzado produciendo una lista de todos combinaciones posibles (n!/(k! * (nk)! donde n es el número total de trabajos yk es 2). El vínculo entre cada trabajo debe ponderarse con la distancia entre cada trabajo.

Desde aquí I Quisiera elegir un trabajo de inicio inicial y generar una lista de todas las combinaciones posibles de trabajos (desde el trabajo de inicio) hasta el límite de 20 y luego ordenar por la suma del peso. La ruta de menor peso ganaría y se asignaría a el ingeniero. Mi problema es que no sé cómo abordar esto, ¿qué estructura de datos sería la mejor?

Normalmente hay aproximadamente 6-8 ingenieros (dependiendo de la carga de trabajo). Tenía planeado enrutar a cada ingeniero de uno en uno: una vez que se asignó una ruta a otro ingeniero, esos trabajos se eliminarían de la lista y un nuevo iniciar el trabajo seleccionado con un nuevo conjunto de combinaciones generadas. ¿Esto suena como un enfoque aceptable?

Cualquier asistencia sería bienvenida.

+1

esto suena básicamente como un problema de matemáticas, en lugar de un problema de C#. (aunque ambos están muy cerca): –

+1

¿Problema repetido de la mochila? – dtb

+6

Hay una biblioteca de C# para realizar permutaciones, combinaciones, productos cartesianos y otras prácticas funciones combinatorias aquí: http://www.codeproject.com/KB/recipes/Combinatorics.aspx –

Respuesta

1

No existe un algoritmo eficiente para resolver este problema. Usaría un algoritmo genético (no necesariamente encuentra la solución óptima, pero encuentra una solución aceptable).

Cuestiones relacionadas