Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(lib/solvers/glpk): parse file following GLPK LP/MIP format #2

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

kyrantonia
Copy link

@kyrantonia kyrantonia commented Sep 15, 2021

Contexto

Rulp es una librería que permite obtener soluciones a problemas de programación lineal (LP) y programación entera mixta (MIP) facilitando la generación del archivo con el problema y la lectura del archivo con la solución.
Para utilizarla se debe instalar un solver, para el caso de Platanus se utilizar GLPK en la versión 4.64.

Problema

Se encontró un bug utilizando la librería que generaba que el archivo de respuesta no se leyera correctamente.

Solución

Se cambiará la manera en que se lee la respuesta utilizando el formato estándarizado llamado GLPK LP/MIP. La documentación aparece en el Manual de referencia GNU Linear Programming Kit en el capitulo Utility API routines secciones Problem data reading/writing routines y Problem solution reading/writing routines.

Qué se está haciendo

  • Se agregan las flags --write y --wglp para obtener la solución y el problema respectivamente en este formato.
  • Se lee el archivo del problema para obtener el id interno de las variables del problema original. Esto sigue el formato n j COL NAME (ver foto Problema nuevo formato).
  • Se lee el archivo solución hasta llegar a la linea correspondiente a la solución la cual contiene el estado de ésta (SST o PST), el tipo de problema(bas, ipt o mip) y la respuesta para la función objetivo (OBJ). Se tienen los siguientes formatos dependiendo del tipo de problema:
    s bas ROWS COLS PST DST OBJ
    s ipt ROWS COLS SST OBJ
    s mip ROWS COLS SST OBJ
  • Se lee nuevamente el archivo solución pero esta vez completo para obtener las respuestas de las variables (PRIM o VAL). Se tienen los siguientes formatos dependiendo del tipo de problema:
    j COL ST PRIM DUAL
    j COL PRIM DUAL
    j COL VAL
  • Finalmente utilizando los ids internos, se le asigna a las variables entregadas en store_results sus respectivas soluciones.

Otros

Solución formato antiguo
image
Problema nuevo formato
image
Solución nuevo formato
image

Copy link
Member

@rjherrera rjherrera left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahí te puse unos comentarios! se ve bien pero en verdad mucho no entiendo jajaja

command = "#{executable} --lp #{@filename} %s --cuts --output #{@outfile}"
command %= "--write #{glpk_filename}glpk.sol --wglp #{glpk_filename}glpk.prob"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

esto no es opcional? como los de abajo que hace options[:gap] ? "--...."? y no cacho muy bien si tiene sentido o no, pero podría ir dentro de ese arreglo

Copy link
Author

@kyrantonia kyrantonia Sep 15, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah no no es opcional, debería ponerla arriba 😱

variables.each do |var|
var.value = vars_by_name[var.to_s].to_f
id = column_ids[var&.to_s]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cuando es nil la var qué pasa? no importa que var.value al final quede nil?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mm creo que var no puede ser nil, quizas en ese caso es mejor sacarle el & para que no quede raro 🤔

Previously, a monkeypatch to Kernel#method_missing and Object#const_missing was used. The first one was causing significant app slowing in development, so this attempts to fix that
…-apps

Fix kernel method missing slowing apps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants