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:55] 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:// | + | Obsérvese que MathProg es un subconjunto del lenguaje de modelización AMPL. Véase [[http:// |
| lp_solve puede leer, escribir y resolver estos modelos MathProg directamente vía el driver xli_MathProg (véase [[http:// | lp_solve puede leer, escribir y resolver estos modelos MathProg directamente vía el driver xli_MathProg (véase [[http:// | ||
| - | ---- | + | 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; | ||
| + | | ||
| + | | ||