source: pyomo/trunk/CHANGELOG.txt @ 9475

Last change on this file since 9475 was 9475, checked in by wehart, 4 years ago

Updating the version #.

Renaming transformations to 'base.*' if they didn't have a specific
naming. NOTE: these are in the pyomo.core package ... which seems
odd. But we agreed that 'core' provides a connotation that we don't
intend.

Adding some documentation changes for 'pyomo help -t'.

File size: 23.6 KB
Line 
1===============
2Pyomo CHANGELOG
3===============
4
5-------------------------------------------------------------------------------
6Pyomo 4.0
7-------------------------------------------------------------------------------
8
9- Next release
10
11-------------------------------------------------------------------------------
12Pyomo 3.5.8787
13-------------------------------------------------------------------------------
14
15- pyomo.opt 2.12.2
16  pyomo.core 3.6.4
17  pyomo.pysp 3.5.5
18  pyomo.solvers 3.2.1
19
20-------------------------------------------------------------------------------
21Pyomo 3.5.8748
22-------------------------------------------------------------------------------
23
24- pyomo.pysp 3.5.4
25
26-------------------------------------------------------------------------------
27Pyomo 3.5.8734
28-------------------------------------------------------------------------------
29
30- PyUtilib 4.7.3336
31
32-------------------------------------------------------------------------------
33Pyomo 3.5.8716
34-------------------------------------------------------------------------------
35
36- pyomo.core 3.6.3
37  pyomo.pysp 3.5.3
38
39-------------------------------------------------------------------------------
40Pyomo 3.5.8706
41-------------------------------------------------------------------------------
42
43- pyomo.util 2.0.4
44  pyomo.core 3.6.2
45
46-------------------------------------------------------------------------------
47Pyomo 3.5.8690
48-------------------------------------------------------------------------------
49
50- pyomo.neos 1.1.2
51  pyomo.opt 2.12.1
52  pyomo.core 3.6.1
53  pyomo.pysp 3.5.2
54
55- Added the pyomo_install script
56
57-------------------------------------------------------------------------------
58Pyomo 3.5.8669
59-------------------------------------------------------------------------------
60
61- PyUtilib 4.7.3311
62  pyomo.util 2.0.3
63
64-------------------------------------------------------------------------------
65Pyomo 3.5.8663
66-------------------------------------------------------------------------------
67
68- PyUtilib 4.7.3305
69  pyomo.util 2.0.2
70  pyomo.environ 1.0.1
71
72-------------------------------------------------------------------------------
73Pyomo 3.5.8648
74-------------------------------------------------------------------------------
75
76- PyUtilib 4.7.3301
77  pyomo.age 1.1.4
78  pyomo.bilevel 1.0
79  pyomo.util 2.0.1
80  pyomo.dae 1.2
81  pyomo.environ 1.0
82  pyomo.gdp 1.2
83  pyomo.util 2.8.2
84  pyomo.mpec 1.0
85  pyomo.neos 1.1.1
86  pyomo.openopt 1.1.3
87  pyomo.opt 2.12
88  pyomo.os 1.0.4
89  pyomo.core 3.6
90  pyomo.pysos 2.0.9
91  pyomo.pysp 3.5.1
92  pyomo.solvers 3.2
93  pyomo.sucasa 3.0
94
95-------------------------------------------------------------------------------
96Pyomo 3.4.7842
97-------------------------------------------------------------------------------
98
99- pyomo.dae 1.1
100  pyomo.gdp 1.1.1
101  pyomo.util 2.8.1
102  pyomo.openopt 1.1.2
103  pyomo.opt 2.11
104  pyomo.os 1.0.3
105  pyomo.plugins 3.1
106  pyomo.core 3.5
107  pyomo.pysp 3.4
108
109-------------------------------------------------------------------------------
110Pyomo 3.3.7114
111-------------------------------------------------------------------------------
112
113- pyomo.age 1.1.3
114  pyomo.util 1.0.1
115  pyomo.dae 1.0
116  pyomo.gdp 1.1
117  pyomo.util 2.7.2
118  pyomo.openopt 1.1
119  pyomo.opt 2.10
120  pyomo.os 1.0.2
121  pyomo.plugins 3.0
122  pyomo.core 3.4
123  pyomo.pysos 2.0.8
124  pyomo.pysp 3.3
125  pyomo.sucasa 2.1
126
127-------------------------------------------------------------------------------
128Pyomo 3.2.6148
129-------------------------------------------------------------------------------
130
131- pyomo.opt 2.9.1
132  pyomo.core 3.3.2
133
134-------------------------------------------------------------------------------
135Pyomo 3.2.6124
136-------------------------------------------------------------------------------
137
138- pyomo.core 3.3.1
139
140-------------------------------------------------------------------------------
141Pyomo 3.2.6091
142-------------------------------------------------------------------------------
143
144- pyomo.gdp 1.0.4
145  pyomo.openopt 1.0.3
146  pyomo.opt 2.9
147  pyomo.plugins 2.11
148  pyomo.core 3.3
149  pyomo.pysos 2.0.7
150  pyomo.pysp 3.2
151  pyomo.sucasa 2.0.6
152
153-------------------------------------------------------------------------------
154Pyomo 3.1.5746
155-------------------------------------------------------------------------------
156
157- pyomo.age 1.1.2
158  pyomo.gdp 1.0.3
159  pyomo.util 2.7
160  pyomo.openopt 1.0.2
161  pyomo.opt 2.8
162  pyomo.os 1.0.1
163  pyomo.plugins 2.9
164  pyomo.core 3.1
165  pyomo.pysp 3.1
166
167-------------------------------------------------------------------------------
168Pyomo 3.1.5409
169-------------------------------------------------------------------------------
170
171- Made the imports of pyomo.opt services more robust to the failure of
172  individual services.
173
174- Minor performance improvement
175
176- Fixing import error when ordereddict is not available.
177
178-------------------------------------------------------------------------------
179Pyomo 3.1.5362
180-------------------------------------------------------------------------------
181
182- Bug fix for Python 2.7 installation.
183
184-------------------------------------------------------------------------------
185Pyomo 3.1.5325
186-------------------------------------------------------------------------------
187
188The following are highlights of this release:
189
190- Solvers
191   * Interfaces for OpenOpt solvers
192   * Many solver interface improvements
193   * A solver checker to validate solver interfaces
194   * Improved support for SOS constraints (cplex, gurobi)
195   * PH supports nonlinear models
196   * PH-specific solver servers
197
198- Modeling
199   * Changes in rule semantics to limit rule return values
200   * Changes in the expected order of rule arguments
201   * Constant sums or products can now be used as constraint bounds
202   * Added full support for the !ConstraintList modeling component.
203
204- Usability enhancements
205   * New 'pyomo' command has subcommands that consolidate Pyomo scripting
206   * Added support to connect to databases with ODBC
207   * Added comprehensive support for set expressions
208   * Comprehensive rework of blocks and connectors for modular modeling
209   * Made JSON the default results format
210
211- Other
212   * Efficiency improvements in model generation, memory, runtime, etc.
213   * Preliminary support for black-box applications
214   * Deprecated modeling syntax in Pyomo 3.0 is no longer legal
215
216
217-------------------------------------------------------------------------------
218Pyomo 3.0.4362
219-------------------------------------------------------------------------------
220
221- Solvers
222   * More sophisticated logic for solver factory to find ASL and OS solvers
223   * Various solver interface improvements
224   * New Solver results object for efficient representation of variable values
225   * New support for asynchronous progressive hedging
226
227- Modeling
228   * Changes in rule semantics to limit rule return values
229   * Changes in the expected order of rule arguments
230   * Constant sums or products can now be used as constraint bounds
231   * Added full support for the ConstraintList modeling component.
232
233- Usability enhancements
234   * More explicit output from runph and runef commands
235   * Added support in runef to write the extensive form in NL format
236   * Add controls for garbage collection in PH
237
238- Other
239   * Efficiency improvements in generation of NL and LP files.
240   * Significant efficiency improvements in parsing of Pyomo Data Files.
241   * More robust MS Windows installer (does not use virtual python environment)
242
243-------------------------------------------------------------------------------
244Pyomo 2.5.3978
245-------------------------------------------------------------------------------
246
247- Performance improvements in Pyomo
248
249- Bug fix when updating a results object that contains suffix data.
250
251-------------------------------------------------------------------------------
252Pyomo 2.5.3890
253-------------------------------------------------------------------------------
254
255- Solvers
256    * MIP solver interface updates to use appropriate objective names
257    * Added support for suffixes in GUROBI solver interface
258    * Improved diagnostic analysis of PH solver for the extensive form
259
260- Usability enhancements
261    * Improved robustness of pyomo_install
262    * Fixed Pyomo installation problem when using easy_install
263    * Added a script to launch the PyomoAge GUI.
264    * LP files now are written with the true objective name
265    * Rework of pyomo command line to create a concise output
266    * Many efficiency improvements during model generation!
267    * Many improvements to diagnostic output and error handling
268    * Expressions like "model.p > 1" can now be used within generation rules
269
270- Modeling
271    * Added support for generalized disjunctive programs (in pyomo.gdp)
272    * Constraints can now be specified in "compound" form:  lb <= expr <= ub
273    * Significant robustness enhancements for model expressions
274    * Improved error handling for constraint generation
275
276- Other
277    * Python 2.5 is deprecated due to performance issues
278    * Python versions 2.6 and 2.7 are supported
279    * New MS Windows installer is now available
280
281-------------------------------------------------------------------------------
282Pyomo 2.4.3307
283-------------------------------------------------------------------------------
284
285- Solvers
286  - Various fixes for Gurobi and CPLEX
287  - Reorganized OS services in pyomo.os
288
289- Usability enhancements
290  - Improved robustness of pyomo_install
291  - Default install of pyomo_install from PyPI
292
293-------------------------------------------------------------------------------
294Pyomo 2.4.3261
295-------------------------------------------------------------------------------
296
297- Updating dependencies for Pyomo.
298
299-------------------------------------------------------------------------------
300Pyomo 2.4.3209
301-------------------------------------------------------------------------------
302
303- Patch fix for pyomo.colin
304
305-------------------------------------------------------------------------------
306Pyomo 2.4.3199
307-------------------------------------------------------------------------------
308
309- Modeling
310  - Concrete models are now supported
311  - Nonlinear modeling extensions using the AMPL NL problem format
312  - Add support for immutable versus mutable parameters.
313  - Support for SOS1 and SOS2 constraints
314
315- Data Integration
316  - Can now import data from relational databases
317
318- Solvers
319  - Better support for Gurobi solver
320  - Direct CPLEX solver interface
321  - Interface to ipopt and nonlinear solvers via asl (just to be clear)
322  - ASL solver interface can now be specified with the form
323        --solver=asl:PICO
324
325- Usability enchancements
326  - Numerous bug fixes.
327  - Updated messages to provide clearer indication of modeling errors
328
329-------------------------------------------------------------------------------
330Pyomo 2.3.2581
331-------------------------------------------------------------------------------
332
333- A preliminary Gurobi solver interface
334
335- Extended syntax for data command files:
336  'include' command to load other data command files
337  'import' command to load data from other sources
338  namespaces to next data declarations
339
340- The pyomo_install script can install packages from Coin Bazaar
341
342- New conversion scripts to generate LP or NL files from Pyomo models
343
344- Solvers now extract standard suffix information
345
346- Various fixes to PySP solvers
347
348-------------------------------------------------------------------------------
349Pyomo 2.0
350-------------------------------------------------------------------------------
351
352- Reorganization of Pyomo into separate packages:
353
354  - pyomo.opt 2.0
355  - pyomo.util 2.0
356  - pyomo.plugins 2.0
357  - pyomo.core 2.0
358  - pyomo.pysos 2.0
359  - pyomo.sucasa 2.0
360
361-------------------------------------------------------------------------------
362Pyomo 1.2
363-------------------------------------------------------------------------------
364
365- OPT
366
367  - Added explicit support for a symbol_map, which is used to coordinate
368    the symbols used in a converted problem with the symbols used in the
369    original problem.
370
371- PYOMO
372
373  - Fixed bug in logic associated with index validation in ProductSets.
374
375  - Changed the set ord() method to be 1-based
376
377  - Added presolve diagnostics.
378
379- SUCASA
380
381  - Added draft SUCASA user manual.
382
383- PYSP
384
385  - Modified PH to support parallelism with Pyro.
386
387  - Introduced the PH scripts, with many options that an end-user
388    might want to try out.
389
390  - Added a convergence criterion to PH based on the # of free
391    discrete variables.
392
393  - Flushed out PYSP 1.1 documentation.
394
395  - Updated/improved timing reports and output in PH.
396
397  - Setup binary quadratic term linearization.
398
399  - Setup PH checkpointing using pickle.
400
401  - Added 48-scenario test case for forestry problem.
402
403  - Added PH option to specify a user-defined PH extension.
404
405  - Fixes to PH proximal term linearization.
406
407  - Created windows-friendly versions of core PYSP scripts.
408
409- Plugins
410
411  - Switched default CBC input file format to CPLEXLP
412
413- General
414
415  - Added a Pyomo 'getting started' manual.
416
417  - Reorganized Pyomo package to use the 'pyomo' namespace.  The pyomo.util
418    package was renamed pyomo.opt.
419
420  - Added documentation on how to create/install plugins in Pyomo.
421
422  - Added documentation for using pyomo_install.
423
424  - Reworked pyomo_install to be created with the pyutilib.virtualenv script
425    vpy_create.
426
427  - Misc edits due to the PyUtilib reorg.
428
429-------------------------------------------------------------------------------
430Pyomo 1.1
431-------------------------------------------------------------------------------
432
433- OPT
434
435  - Reorganized pyomo.opt to rely on plugins for most of its core
436    functionality.
437
438  - Changed the default output for PICO to be LP format, rather than
439    .NL. This avoids issues with name-mapping that we haven't resolved yet.
440
441  - Updated LP writer to not output integer/binary status for variables
442    that aren't referenced in the model.
443
444  - In LP output format, modified constraint names to be "suffixed"
445    with the index in the same fashion as variables. The suffix is "None"
446    if the constraint is a singleton. Will help debug models during
447    development/prototyping.
448
449  - For MIPs, added "slack" suffix to solutions and modified CPLEX solver
450    interface to populate the suffix accordingly.
451
452  - Improvement of the factory mechanism used to launch optimizers;
453    solvers can be passed options during construction.
454
455  - The CPLEX LP format assumes default variable bounds equal to 0 and
456    +inf. These conflict with the more sane defaults in Pyomo, which are
457    -inf and +inf. This leads to all kinds of silent, incorrect behavior
458    in terms of getting very strange solutions where you are expecting a
459    straightforward solve. The cpxlp writer was changed to always output
460    bounds for variables, which is the safest route in any case.
461
462  - Added a facility for managing asynchronous events. In particular,
463    this facility has been setup to support the application of Pyomo
464    solvers with subclasses of the AsynchronousSolverManager.
465
466  - Created a distributed solver manager that uses the Pyro
467    RPC package.
468
469  - Rework of MIP solver interfaces for CPLEX, GLPK, PICO and CBC.
470
471  - Using an explicit temporary file when launching the shell command
472    subprocess, to avoid a buffer overflow.
473
474  - A rework of the logic in shellcmd.py to segregate the solution
475    into preprocess/solve/postprocess. This facilitates a fine-grain
476    parallelization of just the IP solve, using Pyro.
477
478  - If a variable name has the format x(1,a) or x[3,4,5] then create a
479    dictionary attribute 'x' in the SolverResults object, which maps the
480    tuple values to the corresponding value.
481
482    For example:
483
484      results.solution().variable.add('x(1,a)')
485      print results.solution().variable.x[1,'a']
486
487  - A change in the converter semantics. Now, the convert returns a
488    tuple of filenames. In most cases, this is a singleton tuple. But
489    in some important cases this is a non-singleton tuple (e.g. AMPL
490    *.mod/*.dat files).
491
492
493- PYOMO
494
495  - Reworked Pyomo's management of components to use plugins.
496
497  - Adding two new components BuildCheck and BuildAction. Their
498    usage is similar, but their expected use is a it
499    different. BuildAction  allows for the injection of arbitrary build
500    actions during construction of the model, while BuildCheck is used
501    to test conditions and generate exceptions when the build process
502    goes awry.
503
504  - There is also a subtle change to the Param component. The following
505    is now legal:
506
507        def f(model):
508            return 1.3
509        model.x = Param(initialize=f)
510
511    That is, when the Param object does not have an explicit index,
512    then no index is passed to an initializer function (as is expected).
513
514  - Adding 'summation', a function that computes multi-vector
515    product sums:
516
517       sum_i x[i]*y[i]*z[i]
518
519  - Adding automatic computation of variable bounds based on the domain.
520    If the domain set supports simple bounds, then they will be used to
521    initialize the bounds of a variable.
522
523  - Adding logic to ignore the generation of constraints if the
524    constructor rule returns either 'None' or '0'.
525
526  - Changed default domain of a Param to be Any, to be consistent with Set.
527
528  - Rework of Pyomo to enable preprocessor actions to manage all
529    post-instance-generation activities. This includes a simple preprocessor
530    plugin, which simply applies preprocessor actions in an order specified
531    by the action-specific ranks.  The problem writers are no longer
532    responsible for how preprocessor actions take place.
533
534    NOTE: These preprocessors are very much tailored to the needs of the
535    NL and LP writers. We need to figure out a mechanism to tailoring
536    preprocessors to specific target solvers (e.g. tailoring preprocessing
537    for the NL writer, or tailoring preprocessing for MILP models).
538
539  _ The Constraint and Objective classes were reworked to integrate
540    their data into a single _data dictionary. This simplified
541    the management of id and label information.
542
543  - Extending the Constraint(model.A, rule=f) constructor semantics. This
544    change allows the rule to return a dictionary when the constraint is
545    indexed by one or more sets.
546
547  - A revision to Pyomo semantics. Now, expressions are not evaluated
548    when performing arithemetic operations (plus, times, etc).
549
550  - A major rework of how component attributes are managed for
551    NumericValue  objects and subclasses of this class. This was driven
552    by the desire to add the Var.declare_attribute() method, which declares
553    attributes for variables (which are akin to ampl suffix's).
554
555    Most of these changes were motivated by inconsistencies that were
556    observed within Pyomo, and the desire to better protect declared
557    attributes. Now, attributes are stored with names that are unlikely
558    to be used by end-users or other Pyomo developers. Also, declared
559    attributes can now only be referenced directly. Thus, you cannot
560    refer to x._value, but instead you must use x.value.
561
562  - Reworked the way that 'empty' objectives and constraints are dealt
563    with. By default, objectives and constraints with expr/body
564    values of None are provided, which facilitates some aspects of
565    preprocessing. But this triggered exceptions, which are now disabled.
566
567  - Reworked how the '_equality' constraint attribute is managed.  This is
568    now in the ConstraintData class, which required various changes.
569
570  - Changed the pprint output for equality constraints to make it clear
571    that both the upper and lower bounds are equal for these constraints.
572
573  - Fixed bug in the definition of parameter names. When using a rule
574    to define parameter values, the parameter name now reflex the index
575    values for the parameter.
576
577  - Major change of NumericalValue subclass semantics. The 'value' data
578    member is not supported for expressions, constraints and objectives.
579    These classes need to use the call method.  This simplifies the
580    logic in their getattr/setattr methods.
581
582  - Various code optimizations to improve the runtime performance of Pyomo.
583
584  - A major rework of the Pyomo core to eliminates the use
585    of getattr and setattr methods. Removing these led to a 1/3 reduction
586    in runtime for some largish p-median test problems.  This change
587    has had the following impact on Pyomo functionality:
588
589    . No validation that values assigned to parameters or variables are valid
590
591    . Cannot set all suffixes simultaneously
592
593    . Cannot set lower/upper bounds simultaneously
594
595    . No validation that suffixes are valid when their value is set
596
597    Also, this effort led to a rework of the Param and Var classes. These
598    are now segregated between Element and Array classes (similar to the
599    Set class). This led to further optimizations of the logic in these
600    classes. Unfortunately, it also led to the use of the _VarBase and
601    _ParamBase in the PyomoModel to index components.
602
603  - Changed order in which parameters are validated. Validation needs
604    to occur after parameters are set. This is due to the semantics of
605    the validation function: we want to allow the validation function to
606    refer to the value as if it were set.
607
608  - Depricating the use of the expression factory for algebraic expression
609    types. These are now launched directly from the generate_expression()
610    function.
611
612  - Adding support for specifing options when launching solvers. For example:
613
614    results = self.pico.solve(currdir+"bell3a.mps", options="maxCPUMinutes=0.1")
615
616  - The value 'None' is accepted by all NumValue objects, and this
617    indicates that the object has not been initialized.
618
619  - ParamValue objects print their name, rather than their value.
620
621  - Resolving an issue loading boolean data from a *.dat file.  Now,
622    all true/false strings are changed to True/False values.
623
624  - Rework of Pyomo to use the SolverManagerFactory. The default
625    behavior is to use the 'serial' manager, which does local solves,
626    but this supports extensibility for other solvers.
627
628
629- SUCASA
630
631  - Added an option to terminate SUCASA after the AMPL script is
632    generated, but before PICO is called. This allows the AMPL script
633    to be applied separately.
634
635  - Rework of the files generated by SUCASA. Before, SUCASA generated
636    three files:
637
638    . app_milp.h/app_milp.cpp Define the derived MILP classes
639    . app_extras.cpp Used to define the methods specialized by the user
640
641    Now, SUCASA generates five files:
642
643    . app_sucasa.h/app_sucasa.cpp Define the derived MILP classes
644    . app_milp.h/app_milp.cpp Define a MILP from the code in *_sucasa.* files.
645    . app_extras.cpp Used to define the methods specialized by the user
646
647    The result, is that SUCASA now generates two derived solvers. BUT, the
648    one that is exposed to the user can be customized without impacting
649    the integration of the Info classes. Further, this segregation
650    simplifies the class definitions that a user looks at; for example,
651    there are no ugly ifdefs, and no references to the Info data.
652
653  - A rework of the SUCASA API that is exported to the user. This new
654    API allows users to register the vector of primal/dual values,
655    which are access implicitly through the methods
656
657      <name>_value()
658
659  - Rework of the SUCASA Info API to ensure a consistent interface
660    for sets, parameters, vars, etc.
661
662  - Rework of the AMPL parser to guess the superset types for sets and
663    parameters. This works on most common cases, but it's far from perfect.
664
665  - Extended code generation to include parameter data.
666
667  - Update of examples.
668
669
670- PYSP
671
672  - Initial integration of the Python Stochastic Programming (PySP) package.
673
674  - Developed a variety of stochastic programming examples to illustrate
675    the use of PYSP
676
677  - Developed a PYSP user guide.
678
679
680- General
681
682  - Resolved Python 3.0 portability issues
683
684  - Created a script create_pyomo_install, which uses virtualenv to
685    automatically create the pyomo_install script, which automates the
686    installation of pyomo.
687
688
689-------------------------------------------------------------------------------
690Pyomo 1.0
691-------------------------------------------------------------------------------
692
693- Initial release.
694
Note: See TracBrowser for help on using the repository browser.