2012-04-14 5 views
5

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, empiezo a escribir código, quería preguntarlo aquí.Solver Foundation Optimization - 1D Bin Packing

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

META - El objetivo es cargar bloques de mármol en el envío mínimo de camiones.

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

¿Puedo usar Microsoft Solver Foundation para tal fin?

He leído 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 solo camión de envío.

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

Gracias

+0

¿Estás tratando de deshacerte de tu tarea o ...? – mellamokb

+0

no, no hay tal tarea o tarea en la vida real. Estoy tratando de aprender para mi auto conocimiento. Creo que puedo usar este conocimiento en el futuro. Además, no soy un estudiante. ¡Todo lo que quiero es aprender mejor la codificación! –

+1

¿Está familiarizado con los algoritmos de empaque de bandejas? Ahí es donde comenzaría por abordar este problema. Hay buena información sobre WikiPedia: http://en.wikipedia.org/wiki/Bin_packing_problem – mellamokb

Respuesta

5

Puede usar Microsoft Solver Foundation para resolver este problema. Un ejemplo de tal solución se puede encontrar here donde el OML para el problema de embalaje bin 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 simplemente 24 en su caso)

Cuestiones relacionadas