22

Soy un novato para la programación lineal entera. Planeo usar un solucionador de programación lineal entero para resolver mi problema de optimización combinatoria. Estoy más familiarizado con C++/programación orientada a objetos en un IDE. Ahora estoy usando NetBeans con Cygwin para escribir mis aplicaciones la mayor parte del tiempo.¿Cómo elegir un solucionador de programación lineal entero?

¿Puedo preguntar si hay un solucionador de ILP de uso fácil para mí? O depende del problema que quiero resolver? Estoy tratando de hacer algunos recursos de optimización de mapeo. Por favor, avíseme si se requiere más información.

Muchas gracias, Cassie.

Respuesta

1

Linear Programming de Wikipedia cubre algunos algoritmos diferentes que podría investigar para ver cuál puede funcionar mejor para usted. ¿Eso ayuda o querías algo más específico?

4

Para problemas grandes, puede consultar AMPL, que es un intérprete de optimización con muchos backend solvers disponibles. Funciona como a separate process; C++ se usaría para escribir los datos de entrada.

Luego puede probar varios solucionadores de última generación.

8

Si lo que quieres es una programación lineal de enteros mixtos, apuntaré a Coin-OR (y específicamente al módulo CBC). Es software gratuito (como voz) Puede usarlo con un idioma específico o usar C++.

Use C++ si sus datos requieren mucho preprocesamiento, o si quiere poner sus manos en el solucionador (elegir puntos de pivote, generación de columnas, agregar cortes, etc.).

Utilice el lenguaje integrado si desea utilizar el solucionador como una caja negra (simplemente está interesado en el resultado y el problema es fácil o lo suficientemente clásico para ser resuelto sin ajustar).

Pero en las etiquetas mencionas algoritmos genéticos y algoritmos de gráficos. Tal vez debería empezar por una APP mejor su problema ... Para gráficos me gusta un montón Boost :: Gráfico

+0

Muchas gracias. Mi problema es básicamente mapeo de trabajos a máquinas en un gráfico de tareas para la programación. Supongamos que tengo un gráfico de tareas. Cada nodo representa un trabajo que necesita ser operado en una máquina. El mapeo diferente de trabajos a máquinas da como resultado un tiempo de programación total diferente en la ruta crítica. Mi objetivo es encontrar el tiempo mínimo de planificación de algunas asignaciones de trabajos a máquinas. Entonces, ¿alguien sabe algún solucionador de uso fácil que no requiera un fuerte programa de programación para usar? Muchas gracias.Cassie – Cassie

+2

Bueno, este tipo de programación es un dominio de investigación completo por sí mismo. Algunos problemas se pueden resolver mediante un algoritmo de ruta más corto (si no tiene restricciones en tareas simultáneas). Si sus máquinas son reemplazables, existen algoritmos polinomiales simples. De lo contrario, es probable que tenga un problema difícil. Intenta usar CBC como blackbox (pero tendrás que aprender a modelar esos problemas en un modelo lineal) o intenta codificar tu propio código de bifurcación :) –

8

he utilizado lp_solve (http://lpsolve.sourceforge.net/5.5/) en un par de ocasiones con éxito. Es maduro, tiene muchas funciones y está muy bien documentado con muchos buenos consejos si tus habilidades de programación lineal están oxidadas. La programación lineal entera no es solo un complemento, sino que se enfatiza fuertemente con este paquete.

Acabo de notar que dices que eres un "novato" en esto. Bueno, entonces recomiendo este paquete ya que la documentación está llena de ejemplos y tutoriales amables. Otros paquetes que he probado tienden a suponer mucho del usuario.

2

Busque en GLPK. Viene con algunos ejemplos y funciona con un subconjunto de AMPL, aunque en mi humilde opinión funciona mejor cuando se apega a C/C++ para la configuración del modelo. Se las arregla con modelos bastante grandes también.

Cuestiones relacionadas