Changeset 2255


Ignore:
Timestamp:
Feb 3, 2010 11:38:35 PM (10 years ago)
Author:
jwatson
Message:

Re-factoring of PH options parser code to accomodate MRP work being done by DLW.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • coopr.pysp/trunk/coopr/pysp/ph_script.py

    r2248 r2255  
    3737
    3838#
    39 # Setup command-line options
     39# utility method to construct an option parser for ph arguments, to be
     40# supplied as an argument to the runph method.
    4041#
    4142
    42 parser = OptionParser()
    43 parser.add_option("--verbose",
    44                   help="Generate verbose output for both initialization and execution. Default is False.",
    45                   action="store_true",
    46                   dest="verbose",
    47                   default=False)
    48 parser.add_option("--report-solutions",
    49                   help="Always report PH solutions after each iteration. Enabled if --verbose is enabled. Default is False.",
    50                   action="store_true",
    51                   dest="report_solutions",
    52                   default=False)
    53 parser.add_option("--report-weights",
    54                   help="Always report PH weights prior to each iteration. Enabled if --verbose is enabled. Default is False.",
    55                   action="store_true",
    56                   dest="report_weights",
    57                   default=False)
    58 parser.add_option("--model-directory",
    59                   help="The directory in which all model (reference and scenario) definitions are stored. Default is \".\".",
    60                   action="store",
    61                   dest="model_directory",
    62                   type="string",
    63                   default=".")
    64 parser.add_option("--instance-directory",
    65                   help="The directory in which all instance (reference and scenario) definitions are stored. Default is \".\".",
    66                   action="store",
    67                   dest="instance_directory",
    68                   type="string",
    69                   default=".")
    70 parser.add_option("--solver",
    71                   help="The type of solver used to solve scenario sub-problems. Default is cplex.",
    72                   action="store",
    73                   dest="solver_type",
    74                   type="string",
    75                   default="cplex")
    76 parser.add_option("--solver-manager",
    77                   help="The type of solver manager used to coordinate scenario sub-problem solves. Default is serial.",
    78                   action="store",
    79                   dest="solver_manager_type",
    80                   type="string",
    81                   default="serial")
    82 parser.add_option("--scenario-solver-options",
    83                   help="Solver options for all PH scenario sub-problems",
    84                   action="append",
    85                   dest="scenario_solver_options",
    86                   type="string",
    87                   default=[])
    88 parser.add_option("--scenario-mipgap",
    89                   help="Specifies the mipgap for all PH scenario sub-problems",
    90                   action="store",
    91                   dest="scenario_mipgap",
    92                   type="float",
    93                   default=None)
    94 parser.add_option("--ef-solver-options",
    95                   help="Solver options for the extension form problem",
    96                   action="append",
    97                   dest="ef_solver_options",
    98                   type="string",
    99                   default=[])
    100 parser.add_option("--ef-mipgap",
    101                   help="Specifies the mipgap for the EF solve",
    102                   action="store",
    103                   dest="ef_mipgap",
    104                   type="float",
    105                   default=None)
    106 parser.add_option("--max-iterations",
    107                   help="The maximal number of PH iterations. Default is 100.",
    108                   action="store",
    109                   dest="max_iterations",
    110                   type="int",
    111                   default=100)
    112 parser.add_option("--default-rho",
    113                   help="The default (global) rho for all blended variables. Default is 1.",
    114                   action="store",
    115                   dest="default_rho",
    116                   type="float",
    117                   default=1.0)
    118 parser.add_option("--rho-cfgfile",
    119                   help="The name of a configuration script to compute PH rho values. Default is None.",
    120                   action="store",
    121                   dest="rho_cfgfile",
    122                   type="string",
    123                   default=None)
    124 parser.add_option("--bounds-cfgfile",
    125                   help="The name of a configuration script to set variable bound values. Default is None.",
    126                   action="store",
    127                   dest="bounds_cfgfile",
    128                   default=None)
    129 parser.add_option("--enable-termdiff-convergence",
    130                   help="Terminate PH based on the termdiff convergence metric. Default is True.",
    131                   action="store_true",
    132                   dest="enable_termdiff_convergence",
    133                   default=True)
    134 parser.add_option("--enable-normalized-termdiff-convergence",
    135                   help="Terminate PH based on the normalized termdiff convergence metric. Default is True.",
    136                   action="store_true",
    137                   dest="enable_normalized_termdiff_convergence",
    138                   default=False)
    139 parser.add_option("--termdiff-threshold",
    140                   help="The convergence threshold used in the term-diff and normalized term-diff convergence criteria. Default is 0.01.",
    141                   action="store",
    142                   dest="termdiff_threshold",
    143                   type="float",
    144                   default=0.01)
    145 parser.add_option("--enable-free-discrete-count-convergence",
    146                   help="Terminate PH based on the free discrete variable count convergence metric. Default is False.",
    147                   action="store_true",
    148                   dest="enable_free_discrete_count_convergence",
    149                   default=False)
    150 parser.add_option("--free-discrete-count-threshold",
    151                   help="The convergence threshold used in the criterion based on when the free discrete variable count convergence criterion. Default is 20.",
    152                   action="store",
    153                   dest="free_discrete_count_threshold",
    154                   type="float",
    155                   default=20)
    156 parser.add_option("--enable-ww-extensions",
    157                   help="Enable the Watson-Woodruff PH extensions plugin. Default is False.",
    158                   action="store_true",
    159                   dest="enable_ww_extensions",
    160                   default=False)
    161 parser.add_option("--ww-extension-cfgfile",
    162                   help="The name of a configuration file for the Watson-Woodruff PH extensions plugin. Default is wwph.cfg.",
    163                   action="store",
    164                   dest="ww_extension_cfgfile",
    165                   type="string",
    166                   default="")
    167 parser.add_option("--ww-extension-suffixfile",
    168                   help="The name of a variable suffix file for the Watson-Woodruff PH extensions plugin. Default is wwph.suffixes.",
    169                   action="store",
    170                   dest="ww_extension_suffixfile",
    171                   type="string",
    172                   default="")
    173 parser.add_option("--user-defined-extension",
    174                   help="The name of a python module specifying a user-defined PH extension plugin.",
    175                   action="store",
    176                   dest="user_defined_extension",
    177                   type="string",
    178                   default=None)
    179 parser.add_option("--write-ef",
    180                   help="Upon termination, write the extensive form of the model - accounting for all fixed variables.",
    181                   action="store_true",
    182                   dest="write_ef",
    183                   default=False)
    184 parser.add_option("--solve-ef",
    185                   help="Following write of the extensive form model, solve it.",
    186                   action="store_true",
    187                   dest="solve_ef",
    188                   default=False)
    189 parser.add_option("--ef-output-file",
    190                   help="The name of the extensive form output file (currently only LP format is supported), if writing of the extensive form is enabled. Default is efout.lp.",
    191                   action="store",
    192                   dest="ef_output_file",
    193                   type="string",
    194                   default="efout.lp")
    195 parser.add_option("--suppress-continuous-variable-output",
    196                   help="Eliminate PH-related output involving continuous variables.",
    197                   action="store_true",
    198                   dest="suppress_continuous_variable_output",
    199                   default=False)
    200 parser.add_option("--keep-solver-files",
    201                   help="Retain temporary input and output files for scenario sub-problem solves",
    202                   action="store_true",
    203                   dest="keep_solver_files",
    204                   default=False)
    205 parser.add_option("--output-solver-logs",
    206                   help="Output solver logs during scenario sub-problem solves",
    207                   action="store_true",
    208                   dest="output_solver_logs",
    209                   default=False)
    210 parser.add_option("--output-ef-solver-log",
    211                   help="Output solver log during the extensive form solve",
    212                   action="store_true",
    213                   dest="output_ef_solver_log",
    214                   default=False)
    215 parser.add_option("--output-solver-results",
    216                   help="Output solutions obtained after each scenario sub-problem solve",
    217                   action="store_true",
    218                   dest="output_solver_results",
    219                   default=False)
    220 parser.add_option("--output-times",
    221                   help="Output timing statistics for various PH components",
    222                   action="store_true",
    223                   dest="output_times",
    224                   default=False)
    225 parser.add_option("--disable-warmstarts",
    226                   help="Disable warm-start of scenario sub-problem solves in PH iterations >= 1. Default is False.",
    227                   action="store_true",
    228                   dest="disable_warmstarts",
    229                   default=False)
    230 parser.add_option("--drop-proximal-terms",
    231                   help="Eliminate proximal terms (i.e., the quadratic penalty terms) from the weighted PH objective. Default is False.",
    232                   action="store_true",
    233                   dest="drop_proximal_terms",
    234                   default=False)
    235 parser.add_option("--retain-quadratic-binary-terms",
    236                   help="Do not linearize PH objective terms involving binary decision variables",
    237                   action="store_true",
    238                   dest="retain_quadratic_binary_terms",
    239                   default=False)
    240 parser.add_option("--linearize-nonbinary-penalty-terms",
    241                   help="Approximate the PH quadratic term for non-binary variables with a piece-wise linear function, using the supplied number of equal-length pieces from each bound to the average",
    242                   action="store",
    243                   dest="linearize_nonbinary_penalty_terms",
    244                   type="int",
    245                   default=0)
    246 parser.add_option("--breakpoint-strategy",
    247                   help="Specify the strategy to distribute breakpoints on the [lb, ub] interval of each variable when linearizing. 0 indicates uniform distribution. 1 indicates breakpoints at the node min and max, uniformly in-between. 2 indicates more aggressive concentration of breakpoints near the observed node min/max.",
    248                   action="store",
    249                   dest="breakpoint_strategy",
    250                   type="int",
    251                   default=0)
    252 parser.add_option("--checkpoint-interval",
    253                   help="The number of iterations between writing of a checkpoint file. Default is 0, indicating never.",
    254                   action="store",
    255                   dest="checkpoint_interval",
    256                   type="int",
    257                   default=0)
    258 parser.add_option("--restore-from-checkpoint",
    259                   help="The name of the checkpoint file from which PH should be initialized. Default is \"\", indicating no checkpoint restoration",
    260                   action="store",
    261                   dest="restore_from_checkpoint",
    262                   type="string",
    263                   default="")
    264 parser.add_option("--profile",
    265                   help="Enable profiling of Python code.  The value of this option is the number of functions that are summarized.",
    266                   action="store",
    267                   dest="profile",
    268                   type="int",
    269                   default=0)
    270 parser.add_option("--enable-gc",
    271                   help="Enable the python garbage collecter. Default is True.",
    272                   action="store_true",
    273                   dest="enable_gc",
    274                   default=True)
    275 
    276 
    277 parser.usage="runph [options]"
     43def construct_ph_options_parser():
     44
     45   parser = OptionParser()
     46   parser.add_option("--verbose",
     47                     help="Generate verbose output for both initialization and execution. Default is False.",
     48                     action="store_true",
     49                     dest="verbose",
     50                     default=False)
     51   parser.add_option("--report-solutions",
     52                     help="Always report PH solutions after each iteration. Enabled if --verbose is enabled. Default is False.",
     53                     action="store_true",
     54                     dest="report_solutions",
     55                     default=False)
     56   parser.add_option("--report-weights",
     57                     help="Always report PH weights prior to each iteration. Enabled if --verbose is enabled. Default is False.",
     58                     action="store_true",
     59                     dest="report_weights",
     60                     default=False)
     61   parser.add_option("--model-directory",
     62                     help="The directory in which all model (reference and scenario) definitions are stored. Default is \".\".",
     63                     action="store",
     64                     dest="model_directory",
     65                     type="string",
     66                     default=".")
     67   parser.add_option("--instance-directory",
     68                     help="The directory in which all instance (reference and scenario) definitions are stored. Default is \".\".",
     69                     action="store",
     70                     dest="instance_directory",
     71                     type="string",
     72                     default=".")
     73   parser.add_option("--solver",
     74                     help="The type of solver used to solve scenario sub-problems. Default is cplex.",
     75                     action="store",
     76                     dest="solver_type",
     77                     type="string",
     78                     default="cplex")
     79   parser.add_option("--solver-manager",
     80                     help="The type of solver manager used to coordinate scenario sub-problem solves. Default is serial.",
     81                     action="store",
     82                     dest="solver_manager_type",
     83                     type="string",
     84                     default="serial")
     85   parser.add_option("--scenario-solver-options",
     86                     help="Solver options for all PH scenario sub-problems",
     87                     action="append",
     88                     dest="scenario_solver_options",
     89                     type="string",
     90                     default=[])
     91   parser.add_option("--scenario-mipgap",
     92                     help="Specifies the mipgap for all PH scenario sub-problems",
     93                     action="store",
     94                     dest="scenario_mipgap",
     95                     type="float",
     96                     default=None)
     97   parser.add_option("--ef-solver-options",
     98                     help="Solver options for the extension form problem",
     99                     action="append",
     100                     dest="ef_solver_options",
     101                     type="string",
     102                     default=[])
     103   parser.add_option("--ef-mipgap",
     104                     help="Specifies the mipgap for the EF solve",
     105                     action="store",
     106                     dest="ef_mipgap",
     107                     type="float",
     108                     default=None)
     109   parser.add_option("--max-iterations",
     110                     help="The maximal number of PH iterations. Default is 100.",
     111                     action="store",
     112                     dest="max_iterations",
     113                     type="int",
     114                     default=100)
     115   parser.add_option("--default-rho",
     116                     help="The default (global) rho for all blended variables. Default is 1.",
     117                     action="store",
     118                     dest="default_rho",
     119                     type="float",
     120                     default=1.0)
     121   parser.add_option("--rho-cfgfile",
     122                     help="The name of a configuration script to compute PH rho values. Default is None.",
     123                     action="store",
     124                     dest="rho_cfgfile",
     125                     type="string",
     126                     default=None)
     127   parser.add_option("--bounds-cfgfile",
     128                     help="The name of a configuration script to set variable bound values. Default is None.",
     129                     action="store",
     130                     dest="bounds_cfgfile",
     131                     default=None)
     132   parser.add_option("--enable-termdiff-convergence",
     133                     help="Terminate PH based on the termdiff convergence metric. Default is True.",
     134                     action="store_true",
     135                     dest="enable_termdiff_convergence",
     136                     default=True)
     137   parser.add_option("--enable-normalized-termdiff-convergence",
     138                     help="Terminate PH based on the normalized termdiff convergence metric. Default is True.",
     139                     action="store_true",
     140                     dest="enable_normalized_termdiff_convergence",
     141                     default=False)
     142   parser.add_option("--termdiff-threshold",
     143                     help="The convergence threshold used in the term-diff and normalized term-diff convergence criteria. Default is 0.01.",
     144                     action="store",
     145                     dest="termdiff_threshold",
     146                     type="float",
     147                     default=0.01)
     148   parser.add_option("--enable-free-discrete-count-convergence",
     149                     help="Terminate PH based on the free discrete variable count convergence metric. Default is False.",
     150                     action="store_true",
     151                     dest="enable_free_discrete_count_convergence",
     152                     default=False)
     153   parser.add_option("--free-discrete-count-threshold",
     154                     help="The convergence threshold used in the criterion based on when the free discrete variable count convergence criterion. Default is 20.",
     155                     action="store",
     156                     dest="free_discrete_count_threshold",
     157                     type="float",
     158                     default=20)
     159   parser.add_option("--enable-ww-extensions",
     160                     help="Enable the Watson-Woodruff PH extensions plugin. Default is False.",
     161                     action="store_true",
     162                     dest="enable_ww_extensions",
     163                     default=False)
     164   parser.add_option("--ww-extension-cfgfile",
     165                     help="The name of a configuration file for the Watson-Woodruff PH extensions plugin. Default is wwph.cfg.",
     166                     action="store",
     167                     dest="ww_extension_cfgfile",
     168                     type="string",
     169                     default="")
     170   parser.add_option("--ww-extension-suffixfile",
     171                     help="The name of a variable suffix file for the Watson-Woodruff PH extensions plugin. Default is wwph.suffixes.",
     172                     action="store",
     173                     dest="ww_extension_suffixfile",
     174                     type="string",
     175                     default="")
     176   parser.add_option("--user-defined-extension",
     177                     help="The name of a python module specifying a user-defined PH extension plugin.",
     178                     action="store",
     179                     dest="user_defined_extension",
     180                     type="string",
     181                     default=None)
     182   parser.add_option("--write-ef",
     183                     help="Upon termination, write the extensive form of the model - accounting for all fixed variables.",
     184                     action="store_true",
     185                     dest="write_ef",
     186                     default=False)
     187   parser.add_option("--solve-ef",
     188                     help="Following write of the extensive form model, solve it.",
     189                     action="store_true",
     190                     dest="solve_ef",
     191                     default=False)
     192   parser.add_option("--ef-output-file",
     193                     help="The name of the extensive form output file (currently only LP format is supported), if writing of the extensive form is enabled. Default is efout.lp.",
     194                     action="store",
     195                     dest="ef_output_file",
     196                     type="string",
     197                     default="efout.lp")
     198   parser.add_option("--suppress-continuous-variable-output",
     199                     help="Eliminate PH-related output involving continuous variables.",
     200                     action="store_true",
     201                     dest="suppress_continuous_variable_output",
     202                     default=False)
     203   parser.add_option("--keep-solver-files",
     204                     help="Retain temporary input and output files for scenario sub-problem solves",
     205                     action="store_true",
     206                     dest="keep_solver_files",
     207                     default=False)
     208   parser.add_option("--output-solver-logs",
     209                     help="Output solver logs during scenario sub-problem solves",
     210                     action="store_true",
     211                     dest="output_solver_logs",
     212                     default=False)
     213   parser.add_option("--output-ef-solver-log",
     214                     help="Output solver log during the extensive form solve",
     215                     action="store_true",
     216                     dest="output_ef_solver_log",
     217                     default=False)
     218   parser.add_option("--output-solver-results",
     219                     help="Output solutions obtained after each scenario sub-problem solve",
     220                     action="store_true",
     221                     dest="output_solver_results",
     222                     default=False)
     223   parser.add_option("--output-times",
     224                     help="Output timing statistics for various PH components",
     225                     action="store_true",
     226                     dest="output_times",
     227                     default=False)
     228   parser.add_option("--disable-warmstarts",
     229                     help="Disable warm-start of scenario sub-problem solves in PH iterations >= 1. Default is False.",
     230                     action="store_true",
     231                     dest="disable_warmstarts",
     232                     default=False)
     233   parser.add_option("--drop-proximal-terms",
     234                     help="Eliminate proximal terms (i.e., the quadratic penalty terms) from the weighted PH objective. Default is False.",
     235                     action="store_true",
     236                     dest="drop_proximal_terms",
     237                     default=False)
     238   parser.add_option("--retain-quadratic-binary-terms",
     239                     help="Do not linearize PH objective terms involving binary decision variables",
     240                     action="store_true",
     241                     dest="retain_quadratic_binary_terms",
     242                     default=False)
     243   parser.add_option("--linearize-nonbinary-penalty-terms",
     244                     help="Approximate the PH quadratic term for non-binary variables with a piece-wise linear function, using the supplied number of equal-length pieces from each bound to the average",
     245                     action="store",
     246                     dest="linearize_nonbinary_penalty_terms",
     247                     type="int",
     248                     default=0)
     249   parser.add_option("--breakpoint-strategy",
     250                     help="Specify the strategy to distribute breakpoints on the [lb, ub] interval of each variable when linearizing. 0 indicates uniform distribution. 1 indicates breakpoints at the node min and max, uniformly in-between. 2 indicates more aggressive concentration of breakpoints near the observed node min/max.",
     251                     action="store",
     252                     dest="breakpoint_strategy",
     253                     type="int",
     254                     default=0)
     255   parser.add_option("--checkpoint-interval",
     256                     help="The number of iterations between writing of a checkpoint file. Default is 0, indicating never.",
     257                     action="store",
     258                     dest="checkpoint_interval",
     259                     type="int",
     260                     default=0)
     261   parser.add_option("--restore-from-checkpoint",
     262                     help="The name of the checkpoint file from which PH should be initialized. Default is \"\", indicating no checkpoint restoration",
     263                     action="store",
     264                     dest="restore_from_checkpoint",
     265                     type="string",
     266                     default="")
     267   parser.add_option("--profile",
     268                     help="Enable profiling of Python code.  The value of this option is the number of functions that are summarized.",
     269                     action="store",
     270                     dest="profile",
     271                     type="int",
     272                     default=0)
     273   parser.add_option("--enable-gc",
     274                     help="Enable the python garbage collecter. Default is True.",
     275                     action="store_true",
     276                     dest="enable_gc",
     277                     default=True)
     278
     279   parser.usage="runph [options]"
     280
     281   return parser
    278282
    279283#
     
    572576    #
    573577    try:
    574        (options, args) = parser.parse_args(args=args)
     578       ph_options_parser = construct_ph_options_parser()
     579       (options, args) = ph_options_parser.parse_args(args=args)
    575580    except SystemExit:
    576581       # the parser throws a system exit if "-h" is specified - catch
Note: See TracChangeset for help on using the changeset viewer.