pub struct BPProblem {
pub instance: BPInstance,
pub layouts: Vec<Layout>,
/* private fields */
}
Expand description
Bin Packing Problem
Fields§
§instance: BPInstance
§layouts: Vec<Layout>
Implementations§
Source§impl BPProblem
impl BPProblem
pub fn new(instance: BPInstance) -> Self
pub fn remove_layout(&mut self, layout_index: LayoutIndex)
pub fn register_layout(&mut self, layout: Layout) -> LayoutIndex
pub fn deregister_layout(&mut self, layout_index: LayoutIndex)
Trait Implementations§
Source§impl ProblemGeneric for BPProblem
impl ProblemGeneric for BPProblem
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 BPProblem
impl RefUnwindSafe for BPProblem
impl Send for BPProblem
impl Sync for BPProblem
impl Unpin for BPProblem
impl UnwindSafe for BPProblem
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