source: coopr/trunk/CHANGELOG.txt @ 4278

Revision 4278, 16.6 KB checked in by wehart, 3 years ago (diff)

Initial setup of setup.py for Coopr 3.0

Need to add release documentation here.

Line 
1===============
2Coopr CHANGELOG
3===============
4
5-------------------------------------------------------------------------------
6Coopr 3.0
7-------------------------------------------------------------------------------
8
9- TODO
10
11-------------------------------------------------------------------------------
12Coopr 2.5.3978
13-------------------------------------------------------------------------------
14
15- Performance improvements in Pyomo
16
17- Bug fix when updating a results object that contains suffix data.
18
19-------------------------------------------------------------------------------
20Coopr 2.5.3890
21-------------------------------------------------------------------------------
22
23- Solvers
24    * MIP solver interface updates to use appropriate objective names
25    * Added support for suffixes in GUROBI solver interface
26    * Improved diagnostic analysis of PH solver for the extensive form
27
28- Usability enhancements
29    * Improved robustness of coopr_install
30    * Fixed Coopr installation problem when using easy_install
31    * Added a script to launch the CooprAge GUI.
32    * LP files now are written with the true objective name
33    * Rework of pyomo command line to create a concise output
34    * Many efficiency improvements during model generation!
35    * Many improvements to diagnostic output and error handling
36    * Expressions like "model.p > 1" can now be used within generation rules
37
38- Modeling
39    * Added support for generalized disjunctive programs (in coopr.gdp)
40    * Constraints can now be specified in "compound" form:  lb <= expr <= ub
41    * Significant robustness enhancements for model expressions
42    * Improved error handling for constraint generation
43
44- Other
45    * Python 2.5 is deprecated due to performance issues
46    * Python versions 2.6 and 2.7 are supported
47    * New MS Windows installer is now available
48
49-------------------------------------------------------------------------------
50Coopr 2.4.3307
51-------------------------------------------------------------------------------
52
53- Solvers
54  - Various fixes for Gurobi and CPLEX
55  - Reorganized OS services in coopr.os
56
57- Usability enhancements
58  - Improved robustness of coopr_install
59  - Default install of coopr_install from PyPI
60
61-------------------------------------------------------------------------------
62Coopr 2.4.3261
63-------------------------------------------------------------------------------
64
65- Updating dependencies for Coopr.
66
67-------------------------------------------------------------------------------
68Coopr 2.4.3209
69-------------------------------------------------------------------------------
70
71- Patch fix for coopr.colin
72
73-------------------------------------------------------------------------------
74Coopr 2.4.3199
75-------------------------------------------------------------------------------
76
77- Modeling
78  - Concrete models are now supported
79  - Nonlinear modeling extensions using the AMPL NL problem format
80  - Add support for immutable versus mutable parameters.
81  - Support for SOS1 and SOS2 constraints
82
83- Data Integration
84  - Can now import data from relational databases
85
86- Solvers
87  - Better support for Gurobi solver
88  - Direct CPLEX solver interface
89  - Interface to ipopt and nonlinear solvers via asl (just to be clear)
90  - ASL solver interface can now be specified with the form
91        --solver=asl:PICO
92
93- Usability enchancements
94  - Numerous bug fixes.
95  - Updated messages to provide clearer indication of modeling errors
96
97-------------------------------------------------------------------------------
98Coopr 2.3.2581
99-------------------------------------------------------------------------------
100
101- A preliminary Gurobi solver interface
102
103- Extended syntax for data command files:
104  'include' command to load other data command files
105  'import' command to load data from other sources
106  namespaces to next data declarations
107
108- The coopr_install script can install packages from Coin Bazaar
109
110- New conversion scripts to generate LP or NL files from Pyomo models
111
112- Solvers now extract standard suffix information
113
114- Various fixes to PySP solvers
115
116-------------------------------------------------------------------------------
117Coopr 2.0
118-------------------------------------------------------------------------------
119
120- Reorganization of Coopr into separate packages:
121
122  - coopr.opt 2.0
123  - coopr.misc 2.0
124  - coopr.plugins 2.0
125  - coopr.pyomo 2.0
126  - coopr.pysos 2.0
127  - coopr.sucasa 2.0
128
129-------------------------------------------------------------------------------
130Coopr 1.2
131-------------------------------------------------------------------------------
132
133- OPT
134
135  - Added explicit support for a symbol_map, which is used to coordinate
136    the symbols used in a converted problem with the symbols used in the
137    original problem.
138
139- PYOMO
140
141  - Fixed bug in logic associated with index validation in ProductSets.
142
143  - Changed the set ord() method to be 1-based
144
145  - Added presolve diagnostics.
146
147- SUCASA
148
149  - Added draft SUCASA user manual.
150
151- PYSP
152
153  - Modified PH to support parallelism with Pyro.
154
155  - Introduced the PH scripts, with many options that an end-user
156    might want to try out.
157
158  - Added a convergence criterion to PH based on the # of free
159    discrete variables.
160
161  - Flushed out PYSP 1.1 documentation.
162
163  - Updated/improved timing reports and output in PH.
164
165  - Setup binary quadratic term linearization.
166
167  - Setup PH checkpointing using pickle.
168
169  - Added 48-scenario test case for forestry problem.
170
171  - Added PH option to specify a user-defined PH extension.
172
173  - Fixes to PH proximal term linearization.
174
175  - Created windows-friendly versions of core PYSP scripts.
176
177- Plugins
178
179  - Switched default CBC input file format to CPLEXLP
180
181- General
182
183  - Added a Pyomo 'getting started' manual.
184
185  - Reorganized Coopr package to use the 'coopr' namespace.  The coopr.core
186    package was renamed coopr.opt.
187
188  - Added documentation on how to create/install plugins in Coopr.
189
190  - Added documentation for using coopr_install.
191
192  - Reworked coopr_install to be created with the pyutilib.virtualenv script
193    vpy_create.
194
195  - Misc edits due to the PyUtilib reorg.
196
197-------------------------------------------------------------------------------
198Coopr 1.1
199-------------------------------------------------------------------------------
200
201- OPT
202
203  - Reorganized coopr.opt to rely on plugins for most of its core
204    functionality.
205
206  - Changed the default output for PICO to be LP format, rather than
207    .NL. This avoids issues with name-mapping that we haven't resolved yet.
208
209  - Updated LP writer to not output integer/binary status for variables
210    that aren't referenced in the model.
211
212  - In LP output format, modified constraint names to be "suffixed"
213    with the index in the same fashion as variables. The suffix is "None"
214    if the constraint is a singleton. Will help debug models during
215    development/prototyping.
216
217  - For MIPs, added "slack" suffix to solutions and modified CPLEX solver
218    interface to populate the suffix accordingly.
219
220  - Improvement of the factory mechanism used to launch optimizers;
221    solvers can be passed options during construction.
222
223  - The CPLEX LP format assumes default variable bounds equal to 0 and
224    +inf. These conflict with the more sane defaults in Pyomo, which are
225    -inf and +inf. This leads to all kinds of silent, incorrect behavior
226    in terms of getting very strange solutions where you are expecting a
227    straightforward solve. The cpxlp writer was changed to always output
228    bounds for variables, which is the safest route in any case.
229
230  - Added a facility for managing asynchronous events. In particular,
231    this facility has been setup to support the application of Coopr
232    solvers with subclasses of the AsynchronousSolverManager.
233
234  - Created a distributed solver manager that uses the Pyro
235    RPC package.
236
237  - Rework of MIP solver interfaces for CPLEX, GLPK, PICO and CBC.
238
239  - Using an explicit temporary file when launching the shell command
240    subprocess, to avoid a buffer overflow.
241
242  - A rework of the logic in shellcmd.py to segregate the solution
243    into preprocess/solve/postprocess. This facilitates a fine-grain
244    parallelization of just the IP solve, using Pyro.
245
246  - If a variable name has the format x(1,a) or x[3,4,5] then create a
247    dictionary attribute 'x' in the SolverResults object, which maps the
248    tuple values to the corresponding value.
249
250    For example:
251
252      results.solution().variable.add('x(1,a)')
253      print results.solution().variable.x[1,'a']
254
255  - A change in the converter semantics. Now, the convert returns a
256    tuple of filenames. In most cases, this is a singleton tuple. But
257    in some important cases this is a non-singleton tuple (e.g. AMPL
258    *.mod/*.dat files).
259
260
261- PYOMO
262
263  - Reworked Pyomo's management of components to use plugins.
264
265  - Adding two new components BuildCheck and BuildAction. Their
266    usage is similar, but their expected use is a it
267    different. BuildAction  allows for the injection of arbitrary build
268    actions during construction of the model, while BuildCheck is used
269    to test conditions and generate exceptions when the build process
270    goes awry.
271
272  - There is also a subtle change to the Param component. The following
273    is now legal:
274
275        def f(model):
276            return 1.3
277        model.x = Param(initialize=f)
278
279    That is, when the Param object does not have an explicit index,
280    then no index is passed to an initializer function (as is expected).
281
282  - Adding 'summation', a function that computes multi-vector
283    product sums:
284
285       sum_i x[i]*y[i]*z[i]
286
287  - Adding automatic computation of variable bounds based on the domain.
288    If the domain set supports simple bounds, then they will be used to
289    initialize the bounds of a variable.
290
291  - Adding logic to ignore the generation of constraints if the
292    constructor rule returns either 'None' or '0'.
293
294  - Changed default domain of a Param to be Any, to be consistent with Set.
295
296  - Rework of Pyomo to enable preprocessor actions to manage all
297    post-instance-generation activities. This includes a simple preprocessor
298    plugin, which simply applies preprocessor actions in an order specified
299    by the action-specific ranks.  The problem writers are no longer
300    responsible for how preprocessor actions take place.
301
302    NOTE: These preprocessors are very much tailored to the needs of the
303    NL and LP writers. We need to figure out a mechanism to tailoring
304    preprocessors to specific target solvers (e.g. tailoring preprocessing
305    for the NL writer, or tailoring preprocessing for MILP models).
306
307  _ The Constraint and Objective classes were reworked to integrate
308    their data into a single _data dictionary. This simplified
309    the management of id and label information.
310
311  - Extending the Constraint(model.A, rule=f) constructor semantics. This
312    change allows the rule to return a dictionary when the constraint is
313    indexed by one or more sets.
314
315  - A revision to Pyomo semantics. Now, expressions are not evaluated
316    when performing arithemetic operations (plus, times, etc).
317
318  - A major rework of how component attributes are managed for
319    NumericValue  objects and subclasses of this class. This was driven
320    by the desire to add the Var.declare_attribute() method, which declares
321    attributes for variables (which are akin to ampl suffix's).
322
323    Most of these changes were motivated by inconsistencies that were
324    observed within Pyomo, and the desire to better protect declared
325    attributes. Now, attributes are stored with names that are unlikely
326    to be used by end-users or other Pyomo developers. Also, declared
327    attributes can now only be referenced directly. Thus, you cannot
328    refer to x._value, but instead you must use x.value.
329
330  - Reworked the way that 'empty' objectives and constraints are dealt
331    with. By default, objectives and constraints with expr/body
332    values of None are provided, which facilitates some aspects of
333    preprocessing. But this triggered exceptions, which are now disabled.
334
335  - Reworked how the '_equality' constraint attribute is managed.  This is
336    now in the ConstraintData class, which required various changes.
337
338  - Changed the pprint output for equality constraints to make it clear
339    that both the upper and lower bounds are equal for these constraints.
340
341  - Fixed bug in the definition of parameter names. When using a rule
342    to define parameter values, the parameter name now reflex the index
343    values for the parameter.
344
345  - Major change of NumericalValue subclass semantics. The 'value' data
346    member is not supported for expressions, constraints and objectives.
347    These classes need to use the call method.  This simplifies the
348    logic in their getattr/setattr methods.
349
350  - Various code optimizations to improve the runtime performance of Pyomo.
351
352  - A major rework of the Pyomo core to eliminates the use
353    of getattr and setattr methods. Removing these led to a 1/3 reduction
354    in runtime for some largish p-median test problems.  This change
355    has had the following impact on Pyomo functionality:
356
357    . No validation that values assigned to parameters or variables are valid
358
359    . Cannot set all suffixes simultaneously
360
361    . Cannot set lower/upper bounds simultaneously
362
363    . No validation that suffixes are valid when their value is set
364
365    Also, this effort led to a rework of the Param and Var classes. These
366    are now segregated between Element and Array classes (similar to the
367    Set class). This led to further optimizations of the logic in these
368    classes. Unfortunately, it also led to the use of the _VarBase and
369    _ParamBase in the PyomoModel to index components.
370
371  - Changed order in which parameters are validated. Validation needs
372    to occur after parameters are set. This is due to the semantics of
373    the validation function: we want to allow the validation function to
374    refer to the value as if it were set.
375
376  - Depricating the use of the expression factory for algebraic expression
377    types. These are now launched directly from the generate_expression()
378    function.
379
380  - Adding support for specifing options when launching solvers. For example:
381
382    results = self.pico.solve(currdir+"bell3a.mps", options="maxCPUMinutes=0.1")
383
384  - The value 'None' is accepted by all NumValue objects, and this
385    indicates that the object has not been initialized.
386
387  - ParamValue objects print their name, rather than their value.
388
389  - Resolving an issue loading boolean data from a *.dat file.  Now,
390    all true/false strings are changed to True/False values.
391
392  - Rework of Pyomo to use the SolverManagerFactory. The default
393    behavior is to use the 'serial' manager, which does local solves,
394    but this supports extensibility for other solvers.
395
396
397- SUCASA
398
399  - Added an option to terminate SUCASA after the AMPL script is
400    generated, but before PICO is called. This allows the AMPL script
401    to be applied separately.
402
403  - Rework of the files generated by SUCASA. Before, SUCASA generated
404    three files:
405
406    . app_milp.h/app_milp.cpp Define the derived MILP classes
407    . app_extras.cpp Used to define the methods specialized by the user
408
409    Now, SUCASA generates five files:
410
411    . app_sucasa.h/app_sucasa.cpp Define the derived MILP classes
412    . app_milp.h/app_milp.cpp Define a MILP from the code in *_sucasa.* files.
413    . app_extras.cpp Used to define the methods specialized by the user
414
415    The result, is that SUCASA now generates two derived solvers. BUT, the
416    one that is exposed to the user can be customized without impacting
417    the integration of the Info classes. Further, this segregation
418    simplifies the class definitions that a user looks at; for example,
419    there are no ugly ifdefs, and no references to the Info data.
420
421  - A rework of the SUCASA API that is exported to the user. This new
422    API allows users to register the vector of primal/dual values,
423    which are access implicitly through the methods
424
425      <name>_value()
426
427  - Rework of the SUCASA Info API to ensure a consistent interface
428    for sets, parameters, vars, etc.
429
430  - Rework of the AMPL parser to guess the superset types for sets and
431    parameters. This works on most common cases, but it's far from perfect.
432
433  - Extended code generation to include parameter data.
434
435  - Update of examples.
436
437
438- PYSP
439
440  - Initial integration of the Python Stochastic Programming (PySP) package.
441
442  - Developed a variety of stochastic programming examples to illustrate
443    the use of PYSP
444
445  - Developed a PYSP user guide.
446
447
448- General
449
450  - Resolved Python 3.0 portability issues
451
452  - Created a script create_coopr_install, which uses virtualenv to
453    automatically create the coopr_install script, which automates the
454    installation of coopr.
455
456
457-------------------------------------------------------------------------------
458Coopr 1.0
459-------------------------------------------------------------------------------
460
461- Initial release.
462
Note: See TracBrowser for help on using the repository browser.