Skip to content

Proper equal ratio allocation in 2 steps #2507

@SouthEndMusic

Description

@SouthEndMusic

We want to allocate equal ratios of demands in times of scarcity, but it turns out this is quite hard to formulate as a linear objective. We found that:

  • When maximizing the minimal allocated fraction, the optimizer doesn't care that there might be water left to allocate so that some nodes get a larger fraction.;
  • When maximizing the sum of the absolute errors, the optimizer doesn't care how the available water is distributed over the demands
  • When maximizing the sum of the relative errors, the optimizer is incentivized to allocate to smaller demands

None of these has the desired equal fraction effect. We did come up with the 'target fraction' concept (see also #2399), but that is a coarse method which doesn't take into account the topology and constraining nodes in the model, and also some simplifications have to be made to define the source capacity of level boundaries.

Therefore I came up with a 2 goal approach per demand priority:

  • The first goal is just to minimize the absolute error
  • The second goal is to minimize the difference between the allocated fractions

This second goal still doesn't work in the case where a Basin level leaves the target window over the allocation timestep. A way to get around this is to base the storage demand of Basins with a LevelDemand not on its level at the start of the allocation time step but at the end of the timestep when 'no action is taken'. I however wonder whether 'taking no action' is well defined given e.g. allocation controlled nodes.

This does increase the number of goals, which has a performance impacts. We will have to see how the allocation algorithm runtime scales with the number of goals, especially after #2233.

@gijsber @visr @simulutions @jarsarasty

Metadata

Metadata

Assignees

No one assigned

    Labels

    allocationAllocation layercoreIssues related to the computational core in Julia

    Type

    Projects

    Status

    🏗 In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions