Quiero optimizar la carga de bloques de mármol en camiones. No sé si puedo usar la clase Solver Foundation para ese propósito. Antes, empecé a escribir código, quería preguntarlo aquí.

  • El mármol puede tener cualquier peso entre 1 y 24 toneladas.
  • Un camión puede contener un máximo de 24 toneladas.
  • Puede cargar tantos cubos de mármol, como puede tomar hasta 24 tonos, lo que significa que no hay limitación de volumen.
  • Puede haber entre 200 y 500 bloques de mármol diferentes según el tiempo.

OBJETIVO: el objetivo es cargar bloques de mármol en un mínimo de envío de camiones.

¿Cómo puedo hacer eso sin escribir muchas condiciones if y bucles for?

¿Puedo usar Microsoft Solver Foundation para ese propósito?

Leí la documentación proporcionada por Microsoft, sin embargo, no pude encontrar un escenario similar al mío.

M1+ M2 + M3 + .... Mn <=24 esto es para un envío de camión.

Digamos que hay 200 pesos de mármol diferentes y los pesos de mármol son flotantes.

Gracias

6
Val Nolav 15 abr. 2012 a las 01:01
¿Estás tratando de no hacer tu tarea o ...?
 – 
mellamokb
15 abr. 2012 a las 01:08
No, no existe tal tarea o tarea en la vida real. Estoy tratando de aprender por mi autoconocimiento. Creo que puedo utilizar este conocimiento en el futuro. Además, no soy estudiante. ¡Todo lo que quiero es aprender a codificar mejor!
 – 
Val Nolav
15 abr. 2012 a las 01:11
1
¿Está familiarizado con los algoritmos de empaquetado en contenedores? Ahí es donde empezaría a abordar este problema. Hay buena información en WikiPedia: en.wikipedia.org/wiki/Bin_packing_problem
 – 
mellamokb
15 abr. 2012 a las 01:13
Gracias por la pista. Ahora estoy buscando en Google y leo documentos sobre algoritmos de empaquetado en contenedores.
 – 
Val Nolav
15 abr. 2012 a las 01:13
Mellakomb. He leído el artículo. Escribí mi propio código con First Fit Algorithm. Pero como se dijo en el artículo, no es eficiente. Nuevamente, el artículo dice que es más eficiente ordenar elementos en orden decreciente, lo que también probé en mi código. Seguiré leyendo
 – 
Val Nolav
15 abr. 2012 a las 02:13

1 respuesta

La mejor respuesta

Puede utilizar Microsoft Solver Foundation para resolver este problema. Un ejemplo de una solución de este tipo se puede encontrar aquí, donde el OML para el problema de embalaje del contenedor es el siguiente:

Model[ 
  Parameters[Sets,Items,Bins], 
  Parameters[Integers,OrderWidth[Items],BinWidth[Bins]], 

  Decisions[Integers[0,1],x[Items,Bins]], 
  Decisions[Integers[0,1],y[Bins]], 

  Constraints[    
    Foreach[{i,Items},Sum[{j,Bins}, x[i,j]]==1 ], 
    Foreach[{j,Bins}, Sum[{i,Items}, OrderWidth[i]*x[i,j]] <= BinWidth[j]], 
    Foreach[{i,Items},{j,Bins}, y[j] >= x[i,j]] 
  ], 

  Goals[Minimize[UsedBins->Sum[{j,Bins},y[j]]]] 
]

Sería fácil cambiar OrderWidth a MarbleWeight y BinWidth a TruckCapacity (o solo 24 en su caso)

5
Dave Maff 17 abr. 2012 a las 16:07