Solution

Struct Solution 

Source
pub struct Solution<'a> {
    solution: Solution,
    variables: VariableMap,
    time_slice_info: &'a TimeSliceInfo,
    constraint_keys: ConstraintKeys,
    flow_map: Cell<Option<FlowMap>>,
    pub objective_value: Money,
}
Expand description

The solution to the dispatch optimisation problem

Fields§

§solution: Solution§variables: VariableMap§time_slice_info: &'a TimeSliceInfo§constraint_keys: ConstraintKeys§flow_map: Cell<Option<FlowMap>>§objective_value: Money

The objective value for the solution

Implementations§

Source§

impl Solution<'_>

Source

pub fn create_flow_map(&self) -> FlowMap

Create a map of commodity flows for each asset’s coeffs at every time slice.

Note: The flow map is actually already created and is taken from self when this method is called (hence it can only be called once). The reason for this is because we need to convert back from parent assets to child assets. We can remove this hack once we have updated all the users of this interface to be able to handle parent assets correctly.

Source

pub fn iter_activity( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID, Activity)>

Activity for all assets (existing and candidate, if present)

Source

pub fn iter_activity_for_existing( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID, Activity)>

Activity for each existing asset

Source

pub fn iter_activity_keys_for_existing( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID)>

Iterate over the keys for activity for each existing asset

Source

pub fn iter_activity_for_candidates( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID, Activity)>

Activity for each candidate asset

Source

pub fn iter_activity_keys_for_candidates( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID)>

Iterate over the keys for activity for each candidate asset

Source

pub fn iter_unmet_demand( &self, ) -> impl Iterator<Item = (&CommodityID, &RegionID, &TimeSliceID, Flow)>

Iterate over unmet demand

Source

pub fn iter_capacity(&self) -> impl Iterator<Item = (&AssetRef, AssetCapacity)>

Iterate over capacity values

Will return AssetCapacity::Continuous or AssetCapacity::Discrete depending on whether the asset has a defined unit size.

Source

pub fn iter_commodity_balance_duals( &self, ) -> impl Iterator<Item = (&CommodityID, &RegionID, &TimeSliceID, MoneyPerFlow)>

Keys and dual values for commodity balance constraints.

Source

pub fn iter_activity_duals( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID, MoneyPerActivity)>

Keys and dual values for activity constraints.

Note: if there are any flexible capacity assets, these will have two duals with identical keys, and there will be no way to distinguish between them in the resulting iterator. Recommended for now only to use this function when there are no flexible capacity assets.

Also note: this excludes seasonal and annual constraints. Recommended for now not to use this for models that include seasonal or annual availability constraints.

Source

pub fn iter_column_duals( &self, ) -> impl Iterator<Item = (&AssetRef, &TimeSliceID, MoneyPerActivity)>

Keys and values for column duals.

Auto Trait Implementations§

§

impl<'a> !Freeze for Solution<'a>

§

impl<'a> !RefUnwindSafe for Solution<'a>

§

impl<'a> !Send for Solution<'a>

§

impl<'a> !Sync for Solution<'a>

§

impl<'a> Unpin for Solution<'a>

§

impl<'a> !UnwindSafe for Solution<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.