Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
gnu_mathprog [2008/10/04 19:44] mmarquez |
gnu_mathprog [2010/01/14 11:59] (actual) mmarquez |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== GNU MathProg ====== | ====== GNU MathProg ====== | ||
- | Nota: Esta página es la traducción | + | Nota: Esta página es la traducción al español de [[http:// |
---- | ---- | ||
+ | |||
+ | ===== Introducción ===== | ||
GNU MathProg es un lenguaje de modelización para la descripción de modelos de programación matemática lineal. Un modelo escrito el lenguaje GNU MathProg consiste en un conjunto de instrucciones y bloques de datos construidos por el usuario. | GNU MathProg es un lenguaje de modelización para la descripción de modelos de programación matemática lineal. Un modelo escrito el lenguaje GNU MathProg consiste en un conjunto de instrucciones y bloques de datos construidos por el usuario. | ||
Línea 9: | Línea 11: | ||
GNU MathProg es parte de GLPK solver. Las páginas principales son [[http:// | GNU MathProg es parte de GLPK solver. Las páginas principales son [[http:// | ||
- | ---- | + | Obsérvese que MathProg es un subconjunto del lenguaje de modelización AMPL. Véase [[http:// |
- | Note that MathProg | + | lp_solve puede leer, escribir y resolver estos modelos |
- | The XLI used by lp_solve to read these models is derived from this code. | + | |
- | lp_solve can read/write and solve these MathProg models directly via the xli_MathProg XLI driver (see External Language Interfaces). It reads such a model in above format and can solve it then. | + | Por ejemplo: |
- | For example: | + | |
- | lp_solve -rxli xli_MathProg Diet1.mod | + | Que da como resultado: |
- | This gives as result: | + | Value of objective function: 88.2 |
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | Value of objective function: 88.2 | + | MathProg tiene también la posibilidad de tener el modelo y los datos en dos ficheros separados. lp_solve puede tratar esta situación. Por ejemplo: |
- | Actual values of the variables: | + | |
- | Buy[BEEF] | + | |
- | Buy[CHK] | + | |
- | Buy[FISH] | + | |
- | Buy[HAM] | + | |
- | Buy[MCH] | + | |
- | Buy[MTL] | + | |
- | Buy[SPG] | + | |
- | Buy[TUR] | + | |
- | MathProg has also the possibility to have the model and data in two separate files. lp_solve can handle this also. For example: | + | Que da como resultado: |
- | lp_solve -rxli xli_MathProg diet.mod -rxlidata diet.dat | + | Value of objective function: 88.2 |
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | This gives as result: | ||
- | Value of objective function: 88.2 | + | ===== Generación de modelos MathProg ===== |
- | Actual values of the variables: | + | El XLI puede crear modelos MathProg, no obstante no usa las capacidades del lenguaje. Las restricciones se escriben línea a línea. Pero puede ser el comienzo. Por ejemplo: |
- | Buy[BEEF] | + | |
- | Buy[CHK] | + | |
- | Buy[FISH] | + | |
- | Buy[HAM] | + | |
- | Buy[MCH] | + | |
- | Buy[MTL] | + | |
- | Buy[SPG] | + | |
- | Buy[TUR] | + | |
- | Generating MathProg models | + | |
- | The XLI can also create a MathProg | + | Resulta |
- | lp_solve model.lp -wxli xli_MathProg model.mod | + | /* Variable definitions */ |
+ | var x >= 0; | ||
+ | var y >= 0; | ||
+ | |||
+ | /* Objective function */ | ||
+ | | ||
+ | |||
+ | /* Constraints */ | ||
+ | R1: +120*x +210*y <= 15000; | ||
+ | R2: +110*x +30*y <= 4000; | ||
+ | R3: +x +y <= 75; | ||
- | This gives as model.mod: | + | ===== API ===== |
- | /* Variable definitions */ | + | Use la llamada a [[http://lpsolve.sourceforge.net/ |
- | var x >= 0; | + | |
- | var y >= 0; | + | |
- | /* Objective function */ | ||
- | maximize obj: +143*x +60*y; | ||
- | /* Constraints */ | + | El XLI puede ser usado desde el IDE. No obstante, algunas líneas deben ser añadidas en LpSolveIDE.ini (en la carpeta de instalación del IDE). |
- | R1: +120*x +210*y <= 15000; | + | |
- | R2: +110*x +30*y <= 4000; | + | |
- | R3: +x +y <= 75; | + | |
- | API | + | En la sección [XLI] debe añadirse lo siguiente: |
- | Use the lpsolve API call read_XLI to read a model and write_XLI to write a model. See also External Language Interfaces. | + | |
- | IDE | + | |
- | Also from within the IDE, this XLI can be used. However, some entries must be added in LpSolveIDE.ini (in the folder where the IDE is installed). | + | Además, debe añadirse una nueva sección para MathProg |
- | In the [XLI] section the following must be added: | + | [xli_MathProg] |
+ | | ||
+ | | ||
- | lib1=xli_MathProg | + | Asegúrese de que xli_MathProg.dll está disponible para el IDE. Para ello ponga este dll en la carpeta del IDE o en la carpeta system32 de Windows. |
- | And a new section for the MathProg XLI must also be added: | + | ===== Ejemplos ===== |
- | [xli_MathProg] | + | ==== Diet1.mod ==== |
- | extension=.mod | + | |
- | language=MATHPROG | + | |
- | Then make sure that the xli_MathProg.dll is available for the IDE. This must be done by placing this dll in the IDE folder or in the Windows system32 folder. | + | set NUTR; |
- | Example models/ | + | |
- | Diet1.mod | + | |
- | + | | |
- | set NUTR; | + | |
- | set FOOD; | + | |
- | + | ||
- | param cost {FOOD} > 0; | + | |
- | param f_min {FOOD} >= 0; | + | |
- | param f_max {j in FOOD} >= f_min[j]; | + | |
- | + | | |
- | param n_min {NUTR} >= 0; | + | |
- | param n_max {i in NUTR} >= n_min[i]; | + | |
- | + | ||
- | param amt {NUTR,FOOD} >= 0; | + | |
- | + | ||
- | var Buy {j in FOOD} >= f_min[j], <= f_max[j]; | + | |
- | + | ||
- | minimize total_cost: | + | |
- | + | ||
- | subject to diet {i in NUTR}: | + | |
| | ||
- | + | | |
- | + | ||
- | data; | + | |
- | + | ||
- | set NUTR := A B1 B2 C ; | + | |
- | set FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ; | + | |
- | + | ||
- | param: | + | |
- | BEEF | + | BEEF |
- | CHK 2.59 0 100 | + | CHK 2.59 0 100 |
- | FISH | + | FISH |
- | HAM 2.89 0 100 | + | HAM 2.89 0 100 |
- | MCH 1.89 0 100 | + | MCH 1.89 0 100 |
- | MTL 1.99 0 100 | + | MTL 1.99 0 100 |
- | SPG 1.99 0 100 | + | SPG 1.99 0 100 |
- | TUR 2.49 0 100 ; | + | TUR 2.49 0 100 ; |
- | + | ||
- | param: | + | |
- | | + | A 700 |
- | | + | C 700 |
- | | + | B1 |
- | | + | B2 |
- | + | ||
- | param amt (tr): | + | |
| | ||
- | BEEF | + | |
- | | + | CHK |
- | | + | FISH 8 |
- | | + | HAM 40 |
- | | + | MCH 15 |
- | | + | MTL 70 |
- | | + | SPG 25 |
- | | + | TUR 60 |
- | end; | + | |
- | diet.mod | + | ==== diet.mod |
- | set NUTR; | + | set NUTR; |
- | set FOOD; | + | |
- | + | ||
- | param cost {FOOD} > 0; | + | |
- | param f_min {FOOD} >= 0; | + | |
- | param f_max {j in FOOD} >= f_min[j]; | + | |
- | + | ||
- | param n_min {NUTR} >= 0; | + | |
- | param n_max {i in NUTR} >= n_min[i]; | + | |
- | + | ||
- | param amt {NUTR,FOOD} >= 0; | + | |
- | + | ||
- | var Buy {j in FOOD} >= f_min[j], <= f_max[j]; | + | |
- | + | ||
- | minimize total_cost: | + | |
- | + | ||
- | subject to diet {i in NUTR}: | + | |
| | ||
- | diet.dat | + | ==== diet.dat |
- | set NUTR := A B1 B2 C ; | + | set NUTR := A B1 B2 C ; |
- | set FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ; | + | |
- | + | ||
- | param: | + | |
- | BEEF | + | BEEF |
- | CHK 2.59 0 100 | + | CHK 2.59 0 100 |
- | FISH | + | FISH |
- | HAM 2.89 0 100 | + | HAM 2.89 0 100 |
- | MCH 1.89 0 100 | + | MCH 1.89 0 100 |
- | MTL 1.99 0 100 | + | MTL 1.99 0 100 |
- | SPG 1.99 0 100 | + | SPG 1.99 0 100 |
- | TUR 2.49 0 100 ; | + | TUR 2.49 0 100 ; |
- | + | ||
- | param: | + | |
- | | + | A 700 |
- | | + | C 700 |
- | | + | B1 |
- | | + | B2 |
- | + | ||
- | param amt (tr): | + | |
| | ||
- | BEEF | + | |
- | | + | CHK |
- | | + | FISH 8 |
- | | + | HAM 40 |
- | | + | MCH 15 |
- | | + | MTL 70 |
- | | + | SPG 25 |
- | | + | TUR 60 |
- | + | ||
- | model.lp | + | |
- | + | ||
- | /* model.lp */ | + | |
- | max: 143 x + 60 y; | + | ==== model.lp ==== |
- | 120 x + 210 y <= 15000; | + | /* model.lp */ |
- | 110 x + 30 y <= 4000; | + | |
- | x + y <= 75; | + | max: 143 x + 60 y; |
+ | |||
+ | 120 x + 210 y <= 15000; | ||
+ | | ||
+ | | ||