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 Próxima revisión Ambos lados, revisión siguiente | ||
gnu_mathprog [2008/10/04 20:04] mmarquez |
gnu_mathprog [2008/10/05 20:14] mmarquez |
||
---|---|---|---|
Línea 2: | Línea 2: | ||
Nota: Esta página es la traducción (en curso) al español de [[http:// | Nota: Esta página es la traducción (en curso) 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 49: | Línea 50: | ||
| | ||
- | ---- | ||
+ | ===== Generación de modelos MathProg ===== | ||
- | Generating | + | El XLI puede crear modelos |
- | The XLI can also create a MathProg | + | |
- | lp_solve model.lp -wxli xli_MathProg | + | Resulta |
- | This gives as model.mod: | + | /* Variable definitions */ |
- | + | | |
- | /* Variable definitions */ | + | |
- | var x >= 0; | + | |
- | var y >= 0; | + | |
- | + | | |
- | /* Objective function */ | + | |
- | maximize obj: +143*x +60*y; | + | /* Constraints */ |
+ | R1: +120*x +210*y <= 15000; | ||
+ | R2: +110*x +30*y <= 4000; | ||
+ | R3: +x +y <= 75; | ||
- | /* Constraints */ | + | ===== API ===== |
- | R1: +120*x +210*y <= 15000; | + | |
- | R2: +110*x +30*y <= 4000; | + | |
- | R3: +x +y <= 75; | + | |
- | API | + | Use la llamada a [[http:// |
- | 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). | 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). | ||
Línea 81: | Línea 80: | ||
In the [XLI] section the following must be added: | In the [XLI] section the following must be added: | ||
- | lib1=xli_MathProg | + | lib1=xli_MathProg |
And a new section for the MathProg XLI must also be added: | And a new section for the MathProg XLI must also be added: | ||
- | [xli_MathProg] | + | [xli_MathProg] |
- | 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. | 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. | ||
- | Example models/data | ||
- | Diet1.mod | ||
- | set NUTR; | + | ===== Ejemplos ===== |
- | set FOOD; | + | |
- | param cost {FOOD} > 0; | + | ==== Diet1.mod ==== |
- | param f_min {FOOD} >= 0; | + | |
- | param f_max {j in FOOD} >= f_min[j]; | + | |
- | param n_min {NUTR} >= 0; | + | set NUTR; |
- | param n_max {i in NUTR} >= n_min[i]; | + | set FOOD; |
- | + | ||
- | param amt {NUTR,FOOD} >= 0; | + | param cost {FOOD} > 0; |
- | + | param f_min {FOOD} >= 0; | |
- | var Buy {j in FOOD} >= f_min[j], <= f_max[j]; | + | param f_max {j in FOOD} >= f_min[j]; |
- | + | ||
- | minimize total_cost: | + | param n_min {NUTR} >= 0; |
- | + | | |
- | 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 FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ; | + | |
- | + | ||
- | param: | + | |
- | BEEF | + | |
- | CHK 2.59 0 100 | + | |
- | FISH | + | |
- | HAM 2.89 0 100 | + | |
- | MCH 1.89 0 100 | + | |
- | MTL 1.99 0 100 | + | |
- | SPG 1.99 0 100 | + | |
- | TUR 2.49 0 100 ; | + | |
- | param: | + | set NUTR := A B1 B2 C ; |
- | | + | set FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ; |
- | | + | |
- | | + | |
- | | + | BEEF |
- | + | CHK 2.59 0 100 | |
- | param amt (tr): | + | FISH |
+ | HAM 2.89 0 100 | ||
+ | MCH 1.89 0 100 | ||
+ | MTL 1.99 0 100 | ||
+ | SPG 1.99 0 100 | ||
+ | TUR 2.49 0 100 ; | ||
+ | |||
+ | param: | ||
+ | A 700 | ||
+ | C 700 | ||
+ | B1 | ||
+ | B2 | ||
+ | |||
+ | | ||
| | ||
- | BEEF | + | |
- | | + | CHK |
- | | + | FISH 8 |
- | | + | HAM 40 |
- | | + | MCH 15 |
- | | + | MTL 70 |
- | | + | SPG 25 |
- | | + | TUR 60 |
- | model.lp | + | ==== model.lp |
- | /* model.lp */ | + | /* model.lp */ |
- | + | ||
- | max: 143 x + 60 y; | + | |
- | + | ||
- | 120 x + 210 y <= 15000; | + | |
- | 110 x + 30 y <= 4000; | + | |
- | x + y <= 75; | + | |