pub enum Condition {
Constant(bool),
StateFunction(usize),
Not(Box<Condition>),
And(Box<Condition>, Box<Condition>),
Or(Box<Condition>, Box<Condition>),
ComparisonE(ComparisonOperator, Box<ElementExpression>, Box<ElementExpression>),
ComparisonI(ComparisonOperator, Box<IntegerExpression>, Box<IntegerExpression>),
ComparisonC(ComparisonOperator, Box<ContinuousExpression>, Box<ContinuousExpression>),
Set(Box<SetCondition>),
Table(Box<TableExpression<bool>>),
}Expand description
Condition.
Variants§
Constant(bool)
Constant.
StateFunction(usize)
State function index.
Not(Box<Condition>)
Not x.
And(Box<Condition>, Box<Condition>)
x and b.
Or(Box<Condition>, Box<Condition>)
x or b.
ComparisonE(ComparisonOperator, Box<ElementExpression>, Box<ElementExpression>)
Comparing two element expressions.
ComparisonI(ComparisonOperator, Box<IntegerExpression>, Box<IntegerExpression>)
Comparing two integer expressions.
ComparisonC(ComparisonOperator, Box<ContinuousExpression>, Box<ContinuousExpression>)
Comparing two continuous expressions.
Set(Box<SetCondition>)
Set condition.
Table(Box<TableExpression<bool>>)
A constant in a boolean table.
Implementations§
Source§impl Condition
impl Condition
Sourcepub fn comparison_e<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
pub fn comparison_e<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
Returns a condition comparing two element expressions.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let object_type = model.add_object_type("object_type", 4).unwrap();
let variable = model.add_element_variable("variable", object_type, 2).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let condition = Condition::comparison_e(ComparisonOperator::Gt, variable, 0);
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);Sourcepub fn comparison_i<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
pub fn comparison_i<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
Returns a condition comparing two integer expressions.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_integer_variable("variable", 2).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let condition = Condition::comparison_i(ComparisonOperator::Gt, variable, 0);
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);Sourcepub fn comparison_c<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
pub fn comparison_c<T, U>(op: ComparisonOperator, lhs: T, rhs: U) -> Self
Returns a condition comparing two continuous expressions.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_continuous_resource_variable("variable", true, 0.5).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let condition = Condition::comparison_c(ComparisonOperator::Gt, variable, 0);
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);Source§impl Condition
impl Condition
Sourcepub fn eval<T: StateInterface>(
&self,
state: &T,
function_cache: &mut StateFunctionCache,
state_functions: &StateFunctions,
registry: &TableRegistry,
) -> bool
pub fn eval<T: StateInterface>( &self, state: &T, function_cache: &mut StateFunctionCache, state_functions: &StateFunctions, registry: &TableRegistry, ) -> bool
Returns the evaluation result.
§Panics
Panics if the cost of the transition state is used or a min/max reduce operation is performed on an empty set or vector.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_integer_variable("variable", 1).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let condition = Condition::comparison_i(ComparisonOperator::Ge, variable, 0);
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
),
);Sourcepub fn simplify(&self, registry: &TableRegistry) -> Condition
pub fn simplify(&self, registry: &TableRegistry) -> Condition
Returns a simplified version by precomputation.
§Panics
Panics if a min/max reduce operation is performed on an empty set or vector.
Trait Implementations§
Source§impl BitAnd for Condition
impl BitAnd for Condition
Source§fn bitand(self, rhs: Self) -> Self::Output
fn bitand(self, rhs: Self) -> Self::Output
Returns the conjunction of this condition and rhs.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_integer_variable("variable", 1).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let a = Condition::comparison_i(ComparisonOperator::Ge, variable, 0);
let b = Condition::comparison_i(ComparisonOperator::Le, variable, 2);
let condition = a & b;
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);Source§impl BitOr for Condition
impl BitOr for Condition
Source§fn bitor(self, rhs: Self) -> Self::Output
fn bitor(self, rhs: Self) -> Self::Output
Returns the disjunction of this condition and rhs.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_integer_variable("variable", 1).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let a = Condition::comparison_i(ComparisonOperator::Ge, variable, 0);
let b = Condition::comparison_i(ComparisonOperator::Lt, variable, 1);
let condition = a | b;
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);Source§impl CheckExpression<Condition> for Model
impl CheckExpression<Condition> for Model
Source§impl From<Condition> for GroundedCondition
impl From<Condition> for GroundedCondition
Source§impl From<GroundedCondition> for Condition
impl From<GroundedCondition> for Condition
Source§fn from(grounded_condition: GroundedCondition) -> Self
fn from(grounded_condition: GroundedCondition) -> Self
Creates a condition from a grounded condition.
Source§impl IfThenElse<ContinuousExpression> for Condition
impl IfThenElse<ContinuousExpression> for Condition
Source§fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ContinuousExpression
fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ContinuousExpression
a if this condition holds and b otherwise.Source§impl IfThenElse<ElementExpression> for Condition
impl IfThenElse<ElementExpression> for Condition
Source§fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ElementExpression
fn if_then_else<U, V>(self, lhs: U, rhs: V) -> ElementExpression
a if this condition holds and b otherwise.Source§impl IfThenElse<IntegerExpression> for Condition
impl IfThenElse<IntegerExpression> for Condition
Source§fn if_then_else<U, V>(self, lhs: U, rhs: V) -> IntegerExpression
fn if_then_else<U, V>(self, lhs: U, rhs: V) -> IntegerExpression
a if this condition holds and b otherwise.Source§impl IfThenElse<SetExpression> for Condition
impl IfThenElse<SetExpression> for Condition
Source§fn if_then_else<U, V>(self, lhs: U, rhs: V) -> SetExpression
fn if_then_else<U, V>(self, lhs: U, rhs: V) -> SetExpression
a if this condition holds and b otherwise.Source§impl Not for Condition
impl Not for Condition
Source§fn not(self) -> Self::Output
fn not(self) -> Self::Output
Returns the negation of this condition.
§Examples
use dypdl::prelude::*;
let mut model = Model::default();
let variable = model.add_integer_variable("variable", 1).unwrap();
let state = model.target.clone();
let mut function_cache = StateFunctionCache::new(&model.state_functions);
let condition = Condition::comparison_i(ComparisonOperator::Gt, variable, 1);
let condition = !condition;
assert!(
condition.eval(
&state, &mut function_cache, &model.state_functions, &model.table_registry,
)
);