What is this about?
The current implementation of recursive dynamic mode lacks a dedicated test to specify its intended behaviour relative to the default perfect-foresight implementation. The mode is implemented in message_ix/model/MESSAGE/model_solve.gms, while existing emission-bound coverage is in message_ix/tests/test_feature_bound_emission.py.
One key issue for mainline policy scenarios is the treatment of cumulative emission bounds. The cumulative constraint itself is defined in message_ix/model/MESSAGE/model_core.gms as EMISSION_CONSTRAINT. Since recursive dynamic mode has no explicit anticipation rule for periods outside the rolling window, a cumulative constraint can leave early periods under-constrained while later periods face the remaining budget more acutely.
Given that recursive dynamic mode is explicitly a move away from the strong assumption of perfect foresight, a Hotelling-based anticipation rule may not be in the spirit of this use case. However, it can also be argued that emission constraints are more anticipable than many other parameter trajectories.
It would be best not to implement anticipation logic, whether heuristic or rule-based, directly in the GAMS layer, where the choice is less transparent and harder to test. Ideally this logic would live behind an explicit Python-facing API, with selectable anticipation rules for cumulative emission bounds and related use cases.
What is this about?
The current implementation of recursive dynamic mode lacks a dedicated test to specify its intended behaviour relative to the default perfect-foresight implementation. The mode is implemented in
message_ix/model/MESSAGE/model_solve.gms, while existing emission-bound coverage is inmessage_ix/tests/test_feature_bound_emission.py.One key issue for mainline policy scenarios is the treatment of cumulative emission bounds. The cumulative constraint itself is defined in
message_ix/model/MESSAGE/model_core.gmsasEMISSION_CONSTRAINT. Since recursive dynamic mode has no explicit anticipation rule for periods outside the rolling window, a cumulative constraint can leave early periods under-constrained while later periods face the remaining budget more acutely.Given that recursive dynamic mode is explicitly a move away from the strong assumption of perfect foresight, a Hotelling-based anticipation rule may not be in the spirit of this use case. However, it can also be argued that emission constraints are more anticipable than many other parameter trajectories.
It would be best not to implement anticipation logic, whether heuristic or rule-based, directly in the GAMS layer, where the choice is less transparent and harder to test. Ideally this logic would live behind an explicit Python-facing API, with selectable anticipation rules for cumulative emission bounds and related use cases.