pub struct ConflictAnalysisContext<'a> { /* private fields */ }Expand description
Used during conflict analysis to provide the necessary information.
All fields are made public for the time being for simplicity. In the future that may change.
Implementations§
Source§impl ConflictAnalysisContext<'_>
impl ConflictAnalysisContext<'_>
pub fn get_state(&self) -> &State
Sourcepub fn post(&mut self, predicate: Predicate) -> Result<bool, EmptyDomain>
pub fn post(&mut self, predicate: Predicate) -> Result<bool, EmptyDomain>
Apply a Predicate to the State.
Returns true if a change to a domain occured, and false if the given Predicate was
already true.
If a domain becomes empty due to this operation, an EmptyDomain error is returned.
Sourcepub fn restore_to(&mut self, checkpoint: usize)
pub fn restore_to(&mut self, checkpoint: usize)
Restore to the given checkpoint.
If the provided checkpoint is equal to the current checkpoint, this is a no-op. If the provided checkpoint is larger than the current checkpoint, this method will panic.
See State::new_checkpoint for an example.
Sourcepub fn get_conflict_nogood(&mut self) -> Vec<Predicate>
pub fn get_conflict_nogood(&mut self) -> Vec<Predicate>
Returns a nogood which led to the conflict, excluding predicates from the root decision level.
Sourcepub fn get_propagation_reason(
&mut self,
predicate: Predicate,
current_nogood: CurrentNogood<'_>,
reason_buffer: &mut (impl Extend<Predicate> + AsRef<[Predicate]>),
)
pub fn get_propagation_reason( &mut self, predicate: Predicate, current_nogood: CurrentNogood<'_>, reason_buffer: &mut (impl Extend<Predicate> + AsRef<[Predicate]>), )
Compute the reason for predicate being true. The reason will be stored in
reason_buffer.
If predicate is not true, or it is a decision, then this function will panic.
Sourcepub fn find_last_decision(&mut self) -> Option<Predicate>
pub fn find_last_decision(&mut self) -> Option<Predicate>
Returns the last decision which was made by the solver (if such a decision exists).
Source§impl ConflictAnalysisContext<'_>
Methods used for proof logging
impl ConflictAnalysisContext<'_>
Methods used for proof logging
Sourcepub fn explain_root_assignment(&mut self, predicate: Predicate)
pub fn explain_root_assignment(&mut self, predicate: Predicate)
Explains the root assignment of predicate in the proof log.
Sourcepub fn log_deduction(
&mut self,
premises: impl IntoIterator<Item = Predicate>,
) -> ConstraintTag
pub fn log_deduction( &mut self, premises: impl IntoIterator<Item = Predicate>, ) -> ConstraintTag
Log a deduction (learned nogood) to the proof.
The inferences and marked propagations are assumed to be recorded in reverse-application order.
Source§impl ConflictAnalysisContext<'_>
Methods used for keeping track of statistics.
impl ConflictAnalysisContext<'_>
Methods used for keeping track of statistics.
Sourcepub fn predicate_appeared_in_conflict(&mut self, predicate: Predicate)
pub fn predicate_appeared_in_conflict(&mut self, predicate: Predicate)
Source§impl ConflictAnalysisContext<'_>
impl ConflictAnalysisContext<'_>
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for ConflictAnalysisContext<'a>
impl<'a> !RefUnwindSafe for ConflictAnalysisContext<'a>
impl<'a> !Send for ConflictAnalysisContext<'a>
impl<'a> !Sync for ConflictAnalysisContext<'a>
impl<'a> Unpin for ConflictAnalysisContext<'a>
impl<'a> !UnwindSafe for ConflictAnalysisContext<'a>
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.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>
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>
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 moreSource§impl<T> ProblemSolution for Twhere
T: HasAssignments,
impl<T> ProblemSolution for Twhere
T: HasAssignments,
Source§fn num_domains(&self) -> usize
fn num_domains(&self) -> usize
Returns the number of defined DomainIds.
fn get_integer_value<Var>(&self, var: Var) -> i32where
Var: IntegerVariable,
fn get_literal_value(&self, literal: Literal) -> bool
Source§impl<T> ReadDomains for Twhere
T: HasAssignments,
impl<T> ReadDomains for Twhere
T: HasAssignments,
Source§fn evaluate_predicate(&self, predicate: Predicate) -> Option<bool>
fn evaluate_predicate(&self, predicate: Predicate) -> Option<bool>
Predicate is assigned (either true or false) or is
currently unassigned.Source§fn evaluate_literal(&self, literal: Literal) -> Option<bool>
fn evaluate_literal(&self, literal: Literal) -> Option<bool>
Literal is assigned (either true or false) or is
currently unassigned.Source§fn get_holes_at_current_checkpoint<Var>(
&self,
var: &Var,
) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn get_holes_at_current_checkpoint<Var>(
&self,
var: &Var,
) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
Source§fn get_holes<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn get_holes<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
var (including ones which were
created at previous decision levels).Source§fn is_fixed<Var>(&self, var: &Var) -> boolwhere
Var: IntegerVariable,
fn is_fixed<Var>(&self, var: &Var) -> boolwhere
Var: IntegerVariable,
true if the domain of the given variable is singleton (i.e., the variable is
fixed).Source§fn lower_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
fn lower_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
var.Source§fn lower_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
fn lower_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
Source§fn upper_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
fn upper_bound<Var>(&self, var: &Var) -> i32where
Var: IntegerVariable,
var.Source§fn upper_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
fn upper_bound_at_trail_position<Var>(
&self,
var: &Var,
trail_position: usize,
) -> i32where
Var: IntegerVariable,
Source§fn contains<Var>(&self, var: &Var, value: i32) -> boolwhere
Var: IntegerVariable,
fn contains<Var>(&self, var: &Var, value: i32) -> boolwhere
Var: IntegerVariable,
value is in the domain of var.Source§fn contains_at_trail_position<Var>(
&self,
var: &Var,
value: i32,
trail_position: usize,
) -> boolwhere
Var: IntegerVariable,
fn contains_at_trail_position<Var>(
&self,
var: &Var,
value: i32,
trail_position: usize,
) -> boolwhere
Var: IntegerVariable,
Source§fn iterate_domain<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
fn iterate_domain<Var>(&self, var: &Var) -> impl Iterator<Item = i32>where
Var: IntegerVariable,
Iterator over the values in the domain of the provided var (including the
lower-bound and upper-bound values).Source§fn is_decision_predicate(&self, predicate: Predicate) -> bool
fn is_decision_predicate(&self, predicate: Predicate) -> bool
Source§fn is_initial_bound(&self, predicate: Predicate) -> bool
fn is_initial_bound(&self, predicate: Predicate) -> bool
Predicate is an initial bound of its domain.Source§fn read_trailed_integer(&self, trailed_integer: TrailedInteger) -> i64
fn read_trailed_integer(&self, trailed_integer: TrailedInteger) -> i64
TrailedInteger.Source§fn new_trailed_integer(&mut self, initial_value: i64) -> TrailedInteger
fn new_trailed_integer(&mut self, initial_value: i64) -> TrailedInteger
TrailedInteger assigned to the provided initial_value.Source§fn write_trailed_integer(&mut self, trailed_integer: TrailedInteger, value: i64)
fn write_trailed_integer(&mut self, trailed_integer: TrailedInteger, value: i64)
TrailedInteger to the provided value.Source§fn get_checkpoint(&self) -> usize
fn get_checkpoint(&self) -> usize
Source§fn initial_lower_bound(&self, var: DomainId) -> i32
fn initial_lower_bound(&self, var: DomainId) -> i32
var at the time of its creation.Source§fn initial_upper_bound(&self, var: DomainId) -> i32
fn initial_upper_bound(&self, var: DomainId) -> i32
var at the time of its creation.Source§fn initial_holes(&self, var: DomainId) -> Vec<i32>
fn initial_holes(&self, var: DomainId) -> Vec<i32>
var.