Changeset 2089 for coopr.pyomo/trunk/CHANGELOG.txt
 Timestamp:
 Dec 30, 2009 2:22:19 AM (12 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

coopr.pyomo/trunk/CHANGELOG.txt
r1806 r2089 7 7  8 8 9  Under development. 9  Removed some TBD notes in the Benders example, and checked in the full 10 benders script (a debug version was committed initially, that only 11 dealt with iteration 1). This version replicates, to within precision, 12 the AMPL execution. Should terminate in 5 master iterations. 10 13 14  Misc rework of variable presolving. Now, model statistics are 15 stored in a more obvious location, and using more verbose names. 16 17  Added functions that can (1) extract a canonical representation 18 from an expressions, and (2) generate an expression from a canonical 19 representation. 20 21  Adding ability to load a list or tuple of values into a Pyomo 22 model. These are loaded into the variables in the order in which the 23 variables are identified. 24 25  Updated variable naming. Special symbols are mapped to 26 a name that contains _Q#_, where # the ASCII decimal representation 27 for that symbol. 28 29  Added support for denoting constraint inequalities as 'strict'. Added 30 tests to verify that strict inequalities are recognized. 31 32  Resolved #3970. When a parameter is specified with a default 33 value, we should be able to refer to its index set directly, since 34 all values are tacitly defined. 35 36  Added a 'random' solver for the pmedian example. 37 38  Added ".solvermipgap" option to the pyomo script, mirroring recent useful 39 updates to the PH script. 40 41  Simplified the syntax for adding a constraint to a Constraint object. 42 43  Reworking how components interact with models. Now, components can 44 only be initialized using data from the model that they are associated 45 with. Thus, models and components are tightly coupled. This allows 46 the following syntax: 47 48 model.x = Param(model.A) 49 model.construct() 50 51 The construction process uses the model data that is associated with 52 the parameter. Also, this commmit allows models to be components of 53 another model: 54 55 m1=Model() 56 m2=Model() 57 m2.m1 = m1 58 59 Note, however, that model construct is required to be done 60 separately. When model m2 is constructed, the m1 component is not 61 constructed. 62 63  Added check to avoid printing an objective with an empty linear sum. 64 65  Rework of the amplbook2 examples, and other Pyomo examples. 66 67  A change in semantics for setting up dimen and dim. This change requires 68 that users specify dimen in situtations where it is not obvious from the 69 component declaration. For example, if you initialize from a function, 70 then you'll need to specify dimen if the function returns ntuples. 71 72  Added an extension point for plugins that suport model transformations. 73 Two transformations have been defined: a transformation for eliminating 74 fixed variables, and a transformation for relaxing integrality. These 75 can be generically accessed with the apply_transformation() function. 76 77  Extended API of the PyomoModel class to add a variety of helper 78 functions (e.g. accessing constraints, variables and objectives). 79 Adding a method for getting the model solution, as a vector. 80 81  Added tests to exercise the Pyomo commandline. 82 83  Updates to Pyomo commandline options: 84 85 Added modelname option, which allows the specification of an object 86 other than 'model' for the model that is optimized. 87 88 Added support for create_model(), which accepts a dictionary or 89 pyutilib.misc.Container object containing the options specified with the 90 modeloptions option. This function returns a model that is optimized. 91 92 Added the 'errors' debugging mode. When specified, exceptions dump 93 a traceback. Otherwise, exceptions are caught and only the exception 94 string is printed. 95 96  Adding support for component index deactivation. This supports the 97 following semantics: 98 99 model.C = Constraint(model.A) 100 model.C[index].deactivate() 101 102 Note that the current implementation requires the user to query whether 103 each index is active: 104 105 if model.C[index].active: 106 # Do something 107 108 I could have alternatively changed the iterator for the constraint, 109 but then that could mask the existence of a constraint, making it 110 difficult to reactivate. 111 112 Finally, note that this activation mechanism is independent 113 of the component level activation/deactivation: 114 115 model.C.deactivate() 116 # All C constraints are deactivated 117 model.C[index].deactivate 118 # You can still manipulate the C constraint 119 model.C.activate() 120 # Now, the C constraint is active, except for the ' 121 # 'index' constraint 122 123  A rework of component management in Pyomo. Component types are now 124 managed with the natural class types (e.g. Var for variables, rather 125 than _VarBase). Further, the components should now be accessed with 126 model methods: components() or active_components(). For example, 127 128 model.components(Var) 129 130 returns a dictionary of the Var components. 131 132  Created the ComponentBase class, which manages the initialization of 133 components. This consolidates the mechanism needed to generalize 134 the component indexing operations. 135 136  Reworking SetArray constructor to create temporary set objects for nonset 137 index arguments. These arguments are passed into a Set object 138 with the 'initialize' argument. 139 140  Extended the constraint generation logic to evaluate whether the 141 constraint expression contains constant values. This extension allows 142 the following types of constraints to be specified: 143 144 def f(model) 145 return 0 < model.x 146 147 def g(model) 148 return model.x == model.y 149 150 def h(model) 151 return model.y > model.z 152 153 However, it's pretty clear now that the following cannot be supported in 154 Python: 155 156 def j(model) 157 return 0 < model.x < 1 158 159 To add upper and lower bounds, a user will need to return a tuple value: 160 161 def j(model) 162 return (0, model.x, 1) 163 164 or return an expression that is generated incrementally: 165 166 def j(model) 167 e = 0 < model.x 168 return e < 1 169 170  Significantly changed  and improved  the handling of variable lower 171 and upper bounds. In the old version of pyomo, if parameters were 172 supplied as bounds, the lb/ub were silently ignored when writing 173 LP/NL/etc files. 174 175 In the new version of pyomo, these parameters are stored and handled 176 to avoid this issue. In particular, the "lb" and "ub" attributes 177 of a variable are either (1) None, (2) a NumericConstant?, or (3) a 178 _ParamBase. The latter two objects share the common () operator. Thus, 179 to access the lb and ub attributes of a variable, one should either 180 test for None, or use lb() or ub() to extract the value. 181 182  Added constraint symbol maps when writing NL files, so the constraint names 183 can be mapped back (e.g., when dealing with dual variables in SOL files) 184 into the userrecognized names. 11 185 12 186 
Note: See TracChangeset
for help on using the changeset viewer.