Skip to content

Dispatch should be run over asset groups, not each individual unit #1043

@tsmbland

Description

@tsmbland

Divisible assets are currently stored as a (potentially) large number of individual Assets with capacities equal to the unit size of the process. When it comes to dispatch, this means that we might end up with a huge number of activity variables for all of these individual units which could be very slow to solve. It's also not necessary - since all these units are identical (pending #1041), there's no need to to solve each one because we know their activities will all be identical*

Furthermore, users don't care about this. They just want to know flows over the group as a whole.

So I'd suggest that, for divisible assets, we should have activity variables representing the group as a whole (rather than each individual unit), and only report flows in the output data for the group, rather than each individual unit. If we really need flows for each unit (e.g. to avoid reformatting the output data), then we can just divide the overall flows by the number of assets after we get the dispatch solution.

From initial tests this is a relatively minor performance bottleneck compared to the investment algorithm, but I think we should still do it.

*Not that the solver would necessarily share activity equally among all the units, even though they are identical, since there might be a large landscape of equally optimal solutions, of which the equal-shared scenario is one of them, and presumably the one we'd favour.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    📋 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions