calliope-project / calliope

A multi-scale energy systems modelling framework
https://www.callio.pe
Apache License 2.0
299 stars 94 forks source link

Linear scalarisation of multi-objective optimisation problems (e.g. carbon price) #187

Closed timtroendle closed 5 years ago

timtroendle commented 5 years ago

Problem description

This is to track the on-going discussion on this feature request: it would be nice to be able to solve multi objective optimisation problems with a simple linear scalarisation of the objectives.

Amongst others, this would allow to add a carbon price to the model: one could define two cost classes, say greenhouse_gases and monetary and provide weights for each, say 5€/ton and 1. But it would also allow to linearly scalarise any other (real!) multi objective cost function.

Calliope version

0.6.3

timtroendle commented 5 years ago

A workaround that works in 0.6.3 is to use only one cost class and add all other costs manually to this cost class. As this is manual, it is error prone though.

brynpickering commented 5 years ago

I've made a first pass of this in 1394a46c186d44ba5768a8954633ab7e3d80f7e3

In fact, the objective options have been updated to allow setting a dictionary of cost classes and weights, e.g.:

model:
  objective_options:
    cost_class: {monetary: 0.5, carbon: 0.5}
timtroendle commented 5 years ago

Simply to capture this somewhere: Gurobi has a feature for that:

http://www.gurobi.com/documentation/8.1/refman/multiple_objectives.html#sec:MultipleObjectives