Expand the documentation with an outlook of the MESSAGEix usage (PR #520).
Adjust test suite for pyam v1.1.0 compatibility (PR #499).
Update reference for activity and capacity soft constraints (PR #474).
years_active()to use sorted results (PR #491).
Adjust the Westeros reporting tutorial to pyam 1.0 deprecations (PR #492).
Change precision of GAMS check for parameter “duration_time” (PR #513).
Update light and historic demand in Westeros baseline tutorial (PR #523).
Enhance mathematical formulation to represent sub-annual time slices consistently (PR #509).
rixmp) are deprecated and removed, as newer versions of the R reticulate package allow direct import and use of the Python modules with full functionality.
See the updated page for Usage in R via reticulate, and the updated instructions on how to Install R and reticulate.
Update the Westeros tutorial on flexible generation (PR #369).
Add a Westeros tutorial on modeling renewable resource supply curves (PR #370).
Expand documentation of commodity storage sets, parameters, and equations (PR #473).
Add two new Westeros tutorial on creating scenarios from Excel files (PR #450).
Fix bug in
years_active()to use the lifetime corresponding to the vintage year for which the active years are being retrieved (PR #456).
Add a PowerPoint document usable to generate the RES diagrams for the Westeros tutorials (PR #408).
Expand documentation Installation for installing GAMS under macOS (PR #460).
Expand documentation of dynamic constraint parameters (PR #454).
ixmp.reportingchanges in ixmp PR #397 (PR #441).
Code that uses
make_df()can be adjusted in one of two ways. See the function documentation for details. The function should be imported from the top level:
from message_ix import make_df
PR #407: Use
reportingin tutorials; add
util.tutorialfor shorthand code used to streamline tutorials.
PR #415: Improve
make_df()to generate empty, partially-, or fully-filled data frames with the correct columns for any MESSAGE or MACRO parameter.
PR #415: Make complete lists of
MACRO_ITEMSand their dimensions accessible through the Python API.
PR #421: Fix discounting from forward-looking to backward-looking and provide an explanation of the period structure and discounting in documentation of Years, periods, and time slices.
message_ix v3.1.0 coincides with
message_ix, distinct digital object identifiers (DOIs) are available for every release from v3.1.0 onwards; see the user guidelines and notice for more information and how to cite.
PR #367: Add new westeros tutorial on share constraints.
PR #366: Add new Westeros tutorial on modeling fossil resource supply curves.
PR #391, PR #392: Add a documentation page on pre-requisite knowledge & skills; expand guidelines on Contributing to development.
PR #389: Fix a bug in
pyam.concat()using non-pyam objects.
PR #286, PR #381, PR #389: Improve
add_horizon()to also set
duration_period; add documentation of Years, periods, and time slices.
PR #377: Improve the rmessageix R package, tutorials, and expand documentation and installation instructions.
PR #382: Update discount factor from
df_periodin documentation of the objective function to match the GAMS formulation.
message_ix v3.0.0 coincides with
The generic storage formulation introduces new ixmp items (sets, parameters, variables, and equations) to the MESSAGE model scheme.
When loading a Scenario created with a version of message_ix older than 3.0.0,
MESSAGE.initialize() will initialized these items (and leave them empty), using at most one call to
See also the migration notes for ixmp 3.0.0.
PR #190: Add generic mathematical formulation of technologies that store commodities, such as water and energy.
PR #343, PR #345: Accept
MESSAGE_MACROiteration control parameters through
solve(); document how to tune these to avoid numerical issues.
PR #340: Allow cplex.opt to be used by message_ix from multiple processes.
PR #328: Expand automatic reporting of emissions prices and mapping sets; improve robustness of
PR #321: Move
ixmp.Scenario; they continue to work with
PR #323: Add units, replace_vars arguments to
PR #308: Expand automatic reporting of add-on technologies.
PR #313: Include all tests in the message_ix package.
PR #307: Adjust to deprecations in ixmp 2.0.
PR #223: Add methods for parametrization and calibration of MACRO based on an existing MESSAGE Scenario.
message_ix v2.0.0 coincides with
Support for Python 2.7 is dropped as it has reached end-of-life, meaning no further releases will be made even to fix bugs. See PEP-0373 and https://python3statement.org. message_ix users must upgrade to Python 3.
Command-line interface (CLI). Use
message-ix as the program for all command-line operations:
message-ixalso provides all the features of the
Configuration. ixmp adds a streamlined system for storing information about different platforms, backends, and databases that store Scenario data. See the ixmp release notes for migration notes.
PR #285: Drop support for Python 2.
PR #284: Add a suggested sequence/structure to how to run the Westeros tutorials.
PR #281: Test and improve logic of
PR #269: Enforce
year-indexed columns as integers.
PR #256: Update to use
ixmp.configand improve CLI.
PR #255: Add
message-ix nightlyCLI command group for slow-running tests.
PR #249, PR #259: Build MESSAGE and MESSAGE_MACRO classes on ixmp model API; adjust Scenario.
PR #235: Add a reporting tutorial.
PR #232: Add Westeros tutorial for modelling seasonality, update existing tutorials.
PR #276: Improve add_year for bounds and code cleanup
MESSAGEix 1.2.0 adds an option to set the commodity balance to strict equality, rather than a supply > demand inequality. It also improves the support for models with non-equidistant years.
Other improvements include an experimental reporting module, support for CPLEX
solver options via
solve(), and a reusable
Release 1.2.0 coincides with ixmp
release 0.2.0, which
provides full support for
clone() across platforms (database
instances), e.g. from a remote database to a local HSQL database; as well as
other improvements. See the ixmp release notes for further details.
PR #161: A feature for adding new periods to a scenario.
PR #205: Implement required changes related to timeseries-support and cloning across platforms (see ixmp#142).
PR #196: Improve testing by re-using
PR #187: Test for cumulative bound on emissions.
PR #182: Fix cross-platform cloning.
PR #178: Bugfix of the
PRICE_EMISSIONvariable in models with non-equidistant period durations.
PR #176: Add
PR #173: The meth:~.Scenario.solve command now takes additional arguments when solving with CPLEX. The cplex.opt file is now generated on the fly during the solve command and removed after successfully solving.
PR #172: Add option to set
PR #154: Enable documentation build on ReadTheDocs.
PR #138: Update documentation and tutorials.
PR #131: Update clone function argument scen to scenario with planned deprecation of the former.
This patch introduces a few backwards-incompatible changes to database management.
If you see an error message like:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ usr/local/lib/python2.7/site-packages/ixmp/core.py:81: in __init__ self._jobj = java.ixmp.Platform("Python", dbprops) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <jpype._jclass.at.ac.iiasa.ixmp.Platform object at 0x7ff1a8e98410> args = ('Python', '/tmp/kH07wz/test.properties') def _javaInit(self, *args): object.__init__(self) if len(args) == 1 and isinstance(args, tuple) \ and args is _SPECIAL_CONSTRUCTOR_KEY: self.__javaobject__ = args else: self.__javaobject__ = self.__class__.__javaclass__.newClassInstance( > *args) E org.flywaydb.core.api.FlywayExceptionPyRaisable: org.flywaydb.core.api.FlywayException: Validate failed: Migration checksum mismatch for migration 1 E -> Applied to database : 1588531206 E -> Resolved locally : 822227094
Then you need to update your local database. There are two methods to do so:
Delete it (you will lose all data and need to regenerate it). The default location is ~/.local/ixmp/localdb/.
Manually apply the underlying migrations. This is not particularly easy, but allows you to save all your data. If you want help, feel free to get in contact on the listserv.
New Property File Layout
If you see an error message like:
usr/local/lib/python2.7/site-packages/jpype/_jclass.py:111: at.ac.iiasa.ixmp.exceptions.IxExceptionPyRaisable ---------------------------- Captured stdout setup ----------------------------- 2018-11-13 08:15:17,410 ERROR at.ac.iiasa.ixmp.database.DbConfig:357 - missing property 'config.server.config' in /tmp/hhvE1o/test.properties 2018-11-13 08:15:17,412 ERROR at.ac.iiasa.ixmp.database.DbConfig:357 - missing property 'config.server.password' in /tmp/hhvE1o/test.properties 2018-11-13 08:15:17,412 ERROR at.ac.iiasa.ixmp.database.DbConfig:357 - missing property 'config.server.username' in /tmp/hhvE1o/test.properties 2018-11-13 08:15:17,413 ERROR at.ac.iiasa.ixmp.database.DbConfig:357 - missing property 'config.server.url' in /tmp/hhvE1o/test.properties ------------------------------ Captured log setup ------------------------------ core.py 80 INFO launching ixmp.Platform using config file at '/tmp/hhvE1o/test.properties' _________________ ERROR at setup of test_add_spatial_multiple __________________ @pytest.fixture(scope="session") def test_mp(): test_props = create_local_testdb() # start jvm ixmp.start_jvm() # launch Platform and connect to testdb (reconnect if closed) > mp = ixmp.Platform(test_props)
Then you need to update your property configuration file. The old file looks like:
config.name = message_ix_test_db@local jdbc.driver.1 = org.hsqldb.jdbcDriver jdbc.url.1 = jdbc:hsqldb:file:/path/to/database jdbc.user.1 = ixmp jdbc.pwd.1 = ixmp jdbc.driver.2 = org.hsqldb.jdbcDriver jdbc.url.2 = jdbc:hsqldb:file:/path/to/database jdbc.user.2 = ixmp jdbc.pwd.2 = ixmp
The new file should look like:
config.name = message_ix_test_db@local jdbc.driver = org.hsqldb.jdbcDriver jdbc.url = jdbc:hsqldb:file:/path/to/database jdbc.user = ixmp jdbc.pwd = ixmp
PR #202: Added the “Development rule of thumb” section from the wiki and the Tutorial style guide to the Contributor guidelines. Tweaked some formatting to improve readibility.
PR #113: Upgrading to MESSAGEix 1.1: improved representation of renewables, share constraints, etc.
PR #109: MACRO module added for initializing models to be solved with MACRO. Added scenario-based CI on circleci.
PR #99: Fixing an error in the compuation of the auxiliary GAMS reporting variable
PR #89: Fully implementing system reliability and flexibity considerations (cf. Sullivan).
PR #88: Reformulated capacity maintainance constraint to ensure that newly installed capacity cannot be decommissioned within the same model period as it is built in.
message_ix.Scenario.vintage_active_years()now limits active years to those after the first model year or the years of a certain technology vintage.
PR #82: Introducing “add-on technologies” for mitigation options, etc.
PR #81: Share constraints by mode added.
PR #80: Share constraints by commodity/level added.
PR #78: Bugfix:
message_ix.Scenario.solve()uses ‘MESSAGE’ by default, but can be provided other model names.
rename()function can optionally keep old values in the model (i.e., copy vs. copy-with-replace).
PR #74: Activity upper and lower bounds can now be applied to all modes of a technology.
PR #67: Use of advanced basis in cplex.opt turned off by default to avoid conflicts with barrier method.
PR #65: Bugfix for downloading tutorials. Now downloads current installed version by default.
PR #60: Add basic ability to write and read model input to/from Excel.
PR #59: Added MacOSX CI support.