Skip to main content

PermutationSolution

Struct PermutationSolution 

Source
pub struct PermutationSolution {
    pub sequence: Vec<usize>,
    pub rotations: Vec<usize>,
    pub rotation_counts: Arc<[usize]>,
    pub mirrors: Vec<bool>,
    /* private fields */
}
Expand description

Permutation-based solution for SA.

Fields§

§sequence: Vec<usize>

The permutation (indices).

§rotations: Vec<usize>

Rotation/orientation index per item (by item, not by sequence position — a reorder moves items, not their rotations).

§rotation_counts: Arc<[usize]>

How many rotation/orientation options each item has: rotations[i] is always below rotation_counts[i].

§mirrors: Vec<bool>

Mirror flag per item (allow_flip support, 2D nesting only — see NeighborhoodOperator::MirrorFlip).

Implementations§

Source§

impl PermutationSolution

Source

pub fn new(rotation_counts: impl Into<Arc<[usize]>>) -> Self

The identity order, every item at its first rotation; one item per entry of rotation_counts (each item’s number of options).

Source

pub fn random<R: Rng>( rotation_counts: impl Into<Arc<[usize]>>, rng: &mut R, ) -> Self

A random order, each item at a rotation drawn uniformly from its own options.

Source

pub fn len(&self) -> usize

Returns the length of the sequence.

Source

pub fn is_empty(&self) -> bool

Returns true if empty.

Source

pub fn apply_swap<R: Rng>(&self, rng: &mut R) -> Self

Applies swap operator: swaps two elements in sequence.

Source

pub fn apply_relocate<R: Rng>(&self, rng: &mut R) -> Self

Applies relocate operator: moves an element to a new position.

Source

pub fn apply_inversion<R: Rng>(&self, rng: &mut R) -> Self

Applies inversion operator: reverses a segment.

Source

pub fn apply_rotation<R: Rng>(&self, rng: &mut R) -> Self

Applies rotation operator: moves one item that has more than one option to another of its options, drawn uniformly. An item with one option is never chosen, so the move always changes the solution.

Source

pub fn apply_mirror_flip<R: Rng>(&self, rng: &mut R) -> Self

Applies mirror-flip operator: flips one element’s mirror bit (allow_flip support). Same shape as apply_rotation — unconditional on the gene, the consuming problem masks it against its own per-item mirror-eligibility (e.g. Geometry2D::allow_flip()).

Source

pub fn apply_chain<R: Rng>(&self, rng: &mut R) -> Self

Applies chain operator: 3-opt style move.

Trait Implementations§

Source§

impl Clone for PermutationSolution

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PermutationSolution

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl SaSolution for PermutationSolution

Source§

fn objective(&self) -> f64

Returns the objective value (fitness) of this solution. Higher values are better (maximization).
Source§

fn set_objective(&mut self, value: f64)

Sets the objective value.

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.