300 likes | 602 Views
Advanced GAMS. Good Modeling Practices Fixing Misbehaving Models Linking GAMS Advanced GAMS Syntax. 1 Good Modeling Practices. Document Descriptive Names Sensible Structure Efficient Programming. Documentation. Use “*” comments Symbol descriptions & units at declaration
E N D
Advanced GAMS • Good Modeling Practices • Fixing Misbehaving Models • Linking GAMS • Advanced GAMS Syntax
1 Good Modeling Practices • Document • Descriptive Names • Sensible Structure • Efficient Programming
Documentation • Use “*” comments • Symbol descriptions & units at declaration • $ontext $offtext • $oneolcom, $eolcom, $oninlinecom, … • Put all data in named parameters • Keep original data files • Track gams program versions
Naming • Choose Descriptive Names up to 64 Characters • Avoid Special Characters • Avoid set elements which look like numbers • Use …_var, …_equ, …_data • Use desired capitalization on 1st occurrence, be aware of unique element ordering • Name files which need to be run sequentially 1_..., 2_..., 3_...
Structure • Number and size of files • Number and organization of directories • Arrangement of sets, data, model, and base report • Scenarios, Scenario Report
Efficient GAMS usage • Use indexes, keep order index consistent • Automate data processing (gdx, awk, put) • Experiment with small models
Efficient GAMS usage • Taylor output • Check aggregate solutions first • Check speed and memory • Avoid irrelevant computations - use conditions
Efficiency and Errors • Avoid copies of the same piece of code to facilitate model development and to reduce errors from incomplete updating • use indexes • may introduce accounting variables to reduce code copies in report statements
2 Fixing Misbehaving Models • Unboundedness • Infeasibility • Bad solution • Scaling, Memory, Speed Problems
Using GAMSCHK • Option LP=GAMSCHK; • Option MIP=GAMSCHK; • Option NLP=GAMSCHK; Place option before solve statement Works best for large LP models where variables and equations have many indexes
GAMSCHK • Use on single solve statements (not in a scenario loop) • Start with small model versions • For larger models consider variable and equation selections
Tayloring GAMSCHK • Create <filename>.gck, where filename is the name of the file that is executed • Create gamschk.opt and use <modelname>.optfile = 1; • Create/modify <defaultsolver>.opt
Content of <filename>.gck • Major keywords: • Analysis • Postopt • Displaycr • Blockpic • Variable/Equation selection possible under each keyword • … see solver manual or McCarl user guide for more exampels
Unboundedness • Place artificial bound on objective or other variables • Use GAMSCHK nonopt • Set filter in gamschk.opt
Infeasibility • Need artificial variables • Use BLOCKPIC to find candidate equations for artificial variables • GAMSCHK analysis • GAMSCHK postopt on non-zero artificial variables
Equation Candidates for Artificial Variables using Blockpic Output | V V V V | R | a a a a | H | 1 2 3 4 | S --------------------- Equ_1 | + + + - | E 0 Equ_2 | + | L - Equ_3 | - m m | L 0 Equ_4 | + | G + --------------------- Typ | + + + u Assume that all variables are zero and then check which equations would be violated (infeasible). Thus, look for “L –”, “G +”, “E -“, or “E +”
Artificial Variables, 1 • Declare artificial variables as nonnegative variables • Place a high penalty for artificial variables in the objective function • High negative values in max problems • High positive values in min problems • Use each artificial variable only in one constraint
Artificial Variables, 2 • For each =L= equation with a negative r.h.s. value add the artificial variable to the l.h.s with a coefficient of -1. • For each =G= equation with a positive r.h.s. value add the artificial variable to the l.h.s with a coefficient of 1. • For each =E= equation with a non-zero r.h.s. value add two artificial variables to the l.h.s one with a coefficient of 1 and one with a coefficient of -1.
Bad solution • GAMSCHK analysis routine • GAMSCHK postopt routine • Trace from symptom to cause(s)
Tracing unrealistic solutions • No need to guess or remember all changes from the last working model • Decompose solution • Get rid of generic errors using GAMSCHK ANALYSIS routine
Tracing unrealistic solutions • Alternate between variables and equations in GAMSCHK • Alternate between individual GAMSCHK output and aggregated model structure • Use display statements (don‘t look at original data)
Fixing Analysis Errors • First decide between 2 general cases • A) Variable/Equation is present but shouldn‘t be present • B) Variable/Equation is not present but should be present
Case A) Variable/Equation is present but shouldn‘t be present Solution (99%): • Impose conditions
Case B) Variable/Equation is not present but should be present Solution: • Check conditions and data • Display data right before solve statement
Postopt Output • Output for Variables • Aij coefficients • Ui shadow prices • Aij * Ui • True reduced costs • Output for Equations • Aij coefficients • Xj variable levels • Aij*Xj • Shadow price
Conditions • Rule of thumb: Every variable block should have the same conditions in each equation block