Skip to content

Investigate PRICE_COMMODITY spikes with non-uniform duration_period #973

@Wegatriespython

Description

@Wegatriespython

What happened?

Image

For the baseline scenario under model SSP_SSP2_v6.1, price commodity for electricity shows a spike at 2060.

This has important downstream implications as any technology portfolio with electricity inputs in some small neighbourhood will see a basis flip to the cheaper option under the price spike barring other constraints. This happens for instance in the water model, where groundwater extraction is massively reduced in favour of a pre-dominantly surface water strategy which is problematic.

Now from a purely economic perspective such a price shock should be arbitraged away by the central planner under perfect foresight mode. Since the model doesn't do this, the only implication is that its cheaper for the model to have the price shock than to arbitrage it away. This however would invite the external validity Lucas critique as real world agents would be able to exploit an arbitrage the model cannot, breaking the policy invariance of the model.

The fact that this happens at the shift in the model timestep from 5-10 year periods is also suspicious.

  • This means that either there is some misspecification in how the model is discounting Present Value at the period length change at 2060
  • Or there are some discrete constraints creating a lumpy choice that forces this behaviour.

Code Sample

What did you expect to happen?

A strict 0 arbitrage price trajectory.

Versions

ixmp:              3.11.2.dev44+g1730afd24
              git: 1730afd (HEAD -> main, origin/main, origin/HEAD) Merge pull request #587 from iiasa/fix/gamsmodel-init
message_ix:        3.11.2.dev67+g00bec749
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
message_ix_models: (not installed)
message_data:      (not installed)

click:             8.2.1
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
dask:              2025.5.1
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
genno:             1.28.2
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
graphviz:          0.21
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
ixmp4:             0.10.0
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
jpype:             1.5.2
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
     Java VM path: /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
openpyxl:          3.1.5
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
pandas:            2.2.3
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
pint:              0.24.4
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
xarray:            2025.4.0
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
yaml:              6.0.2
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock

iam_units:         2023.9.12
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
jupyter:           5.8.1
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
matplotlib:        3.10.3
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
plotnine:          0.15.0
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock
pyam:              3.0.0
              git: 00bec749 (HEAD -> main, origin/main, origin/HEAD) Merge pull request #451 from iiasa/material_stock

GAMS:              46.5.0
       system dir: /home/raghunathan/opt/gams/gams46.5_linux_x64_64_sfx

python:            3.12.3 (main, Jun 18 2025, 17:59:45) [GCC 13.3.0]
python-bits:       64
OS:                Linux
OS-release:        6.6.87.1-microsoft-standard-WSL2
machine:           x86_64
processor:         x86_64
byteorder:         little
LC_ALL:            None
LANG:              C.UTF-8
LOCALE:            ('C', 'UTF-8')

Additional Context

No response

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions