pub enum Problem {
BP(BPProblem),
SP(SPProblem),
}
Expand description
Enum which contains all the different problem types.
A Problem
represents a problem instance in a modifiable state.
It can insert or remove items, create a snapshot from the current state called a Solution
,
and restore its state to a previous Solution
.
Also enables the use of match statements on the Problem
enum when variant-specific behavior is required,
When a new variant is added, compile errors will be generated everywhere specific behaviour is required.
Variants§
Trait Implementations§
Source§impl ProblemGeneric for Problem
impl ProblemGeneric for Problem
Source§fn place_item(&mut self, p_opt: PlacingOption) -> (LayoutIndex, PItemKey)
fn place_item(&mut self, p_opt: PlacingOption) -> (LayoutIndex, PItemKey)
Places an item into the problem instance according to the given
PlacingOption
.
Returns the index of the layout where the item was placed.Source§fn remove_item(
&mut self,
layout_index: LayoutIndex,
pik: PItemKey,
commit_instantly: bool,
) -> PlacingOption
fn remove_item( &mut self, layout_index: LayoutIndex, pik: PItemKey, commit_instantly: bool, ) -> PlacingOption
Removes a placed item (with its unique key) from a specific
Layout
.
Returns a PlacingOption
that can be used to place the item back in the same configuration.
For more information about commit_instantly
, see crate::collision_detection::cd_engine::CDEngine::deregister_hazard
.Source§fn create_solution(&mut self, old_solution: Option<&Solution>) -> Solution
fn create_solution(&mut self, old_solution: Option<&Solution>) -> Solution
Saves the current state of the problem as a
Solution
.Source§fn restore_to_solution(&mut self, solution: &Solution)
fn restore_to_solution(&mut self, solution: &Solution)
Restores the state of the problem to a previous
Solution
.fn layouts(&self) -> &[Layout]
fn layouts_mut(&mut self) -> &mut [Layout]
Source§fn template_layouts(&self) -> &[Layout]
fn template_layouts(&self) -> &[Layout]
Template layouts are empty and immutable.
For every unique bin in the problem instance, there is a template layout.
When an item is placed in a template layout, it is cloned into a real layout.
Source§fn missing_item_qtys(&self) -> &[isize]
fn missing_item_qtys(&self) -> &[isize]
The quantity of each item that is requested but currently missing in the problem instance, indexed by item id.
fn bin_qtys(&self) -> &[usize]
fn instance(&self) -> &dyn InstanceGeneric
Source§fn placed_item_qtys(&self) -> impl Iterator<Item = usize>
fn placed_item_qtys(&self) -> impl Iterator<Item = usize>
The quantity of each item that is currently placed in the problem instance, indexed by item id.
fn usage(&mut self) -> fsize
fn used_bin_cost(&self) -> u64
Source§fn layout_indices(&self) -> impl Iterator<Item = LayoutIndex>
fn layout_indices(&self) -> impl Iterator<Item = LayoutIndex>
Returns the
LayoutIndex
of all layouts.Source§fn template_layout_indices_with_stock(
&self,
) -> impl Iterator<Item = LayoutIndex>
fn template_layout_indices_with_stock( &self, ) -> impl Iterator<Item = LayoutIndex>
Returns the
LayoutIndex
of all template layouts that have remaining stock.fn get_layout(&self, index: impl Borrow<LayoutIndex>) -> &Layout
Source§fn flush_changes(&mut self)
fn flush_changes(&mut self)
Makes sure that the all collision detection engines are completely updated with the changes made to the layouts.
Auto Trait Implementations§
impl Freeze for Problem
impl RefUnwindSafe for Problem
impl Send for Problem
impl Sync for Problem
impl Unpin for Problem
impl UnwindSafe for Problem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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