[][src]Struct ddo::core::implementation::mdd::pooled::PooledMDD

pub struct PooledMDD<T, C> where
    T: Eq + Hash + Clone,
    C: Config<T>, 
{ /* fields omitted */ }

This structure implements a pooled MDD. This is a kind of bounded width MDD which cannot offer a strong guarantees wrt to the maximum amount of used memory. However, this structure is perfectly suited for problems like MISP, where one decision can affect more than one variable, and expanding a node is expensive but checkinig if a node is going to be impacted by a decision is cheap.

Note

The behavior of this MDD is heavily dependent on the configuration you provide. Therefore, and although a public constructor exists for this structure, it it recommended that you build this type of mdd using the mdd_builder functionality as shown in the following examples.

Example

use ddo::core::abstraction::dp::{Problem, Relaxation};
use ddo::core::common::{Variable, Domain, VarSet, Decision, Node};
let problem    = MockProblem;
let relaxation = MockRelax;
// Following line configure and builds a pooled mdd.
let pooled_mdd = mdd_builder(problem, relaxation).into_pooled();

// Naturally, you can also provide configuration parameters to customize
// the behavior of your MDD. For instance, you can use a custom max width
// heuristic as follows (below, a fixed width)
let problem    = MockProblem;
let relaxation = MockRelax;
let pooled_mdd = mdd_builder(problem, relaxation)
                .with_max_width(FixedWidth(100))
                .into_pooled();

Methods

impl<T, C> PooledMDD<T, C> where
    T: Eq + Hash + Clone,
    C: Config<T>, 
[src]

Private functions

pub fn new(config: C) -> Self[src]

Constructor, uses the given config to parameterize the mdd's behavior

Trait Implementations

impl<T: Clone, C: Clone> Clone for PooledMDD<T, C> where
    T: Eq + Hash + Clone,
    C: Config<T>, 
[src]

impl<T, C> MDD<T> for PooledMDD<T, C> where
    T: Eq + Hash + Clone,
    C: Config<T>, 
[src]

PooledMDD implements the MDD abstract data type. Check its documentation for further details.

Auto Trait Implementations

impl<T, C> RefUnwindSafe for PooledMDD<T, C> where
    C: RefUnwindSafe,
    T: RefUnwindSafe

impl<T, C> Send for PooledMDD<T, C> where
    C: Send,
    T: Send

impl<T, C> Sync for PooledMDD<T, C> where
    C: Sync,
    T: Sync

impl<T, C> Unpin for PooledMDD<T, C> where
    C: Unpin,
    T: Unpin

impl<T, C> UnwindSafe for PooledMDD<T, C> where
    C: UnwindSafe,
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.