pub struct BalanceConstraintStream<S, A, K, E, F, KF, Sc>where
Sc: Score,{ /* private fields */ }Expand description
Zero-erasure stream for building balance constraints.
Created by UniConstraintStream::balance(). Provides penalize() and
reward() methods to finalize the constraint.
§Type Parameters
S- Solution typeA- Entity typeK- Group key typeE- Extractor function for entitiesF- Filter typeKF- Key function (returns Optionto skip unassigned entities) Sc- Score type
§Example
use solverforge_scoring::stream::ConstraintFactory;
use solverforge_scoring::api::constraint_set::IncrementalConstraint;
use solverforge_core::score::SimpleScore;
#[derive(Clone)]
struct Shift { employee_id: Option<usize> }
#[derive(Clone)]
struct Solution { shifts: Vec<Shift> }
let constraint = ConstraintFactory::<Solution, SimpleScore>::new()
.for_each(|s: &Solution| &s.shifts)
.balance(|shift: &Shift| shift.employee_id)
.penalize(SimpleScore::of(1000))
.as_constraint("Balance workload");
let solution = Solution {
shifts: vec![
Shift { employee_id: Some(0) },
Shift { employee_id: Some(0) },
Shift { employee_id: Some(0) },
Shift { employee_id: Some(1) },
],
};
// std_dev = 1.0, penalty = -1000
assert_eq!(constraint.evaluate(&solution), SimpleScore::of(-1000));Implementations§
Source§impl<S, A, K, E, F, KF, Sc> BalanceConstraintStream<S, A, K, E, F, KF, Sc>
impl<S, A, K, E, F, KF, Sc> BalanceConstraintStream<S, A, K, E, F, KF, Sc>
Sourcepub fn penalize(
self,
base_score: Sc,
) -> BalanceConstraintBuilder<S, A, K, E, F, KF, Sc>
pub fn penalize( self, base_score: Sc, ) -> BalanceConstraintBuilder<S, A, K, E, F, KF, Sc>
Penalizes imbalanced distribution with the given base score per unit std_dev.
The final score is base_score.multiply(std_dev), negated for penalty.
Sourcepub fn reward(
self,
base_score: Sc,
) -> BalanceConstraintBuilder<S, A, K, E, F, KF, Sc>
pub fn reward( self, base_score: Sc, ) -> BalanceConstraintBuilder<S, A, K, E, F, KF, Sc>
Rewards imbalanced distribution with the given base score per unit std_dev.
The final score is base_score.multiply(std_dev).
Trait Implementations§
Auto Trait Implementations§
impl<S, A, K, E, F, KF, Sc> Freeze for BalanceConstraintStream<S, A, K, E, F, KF, Sc>
impl<S, A, K, E, F, KF, Sc> RefUnwindSafe for BalanceConstraintStream<S, A, K, E, F, KF, Sc>where
E: RefUnwindSafe,
F: RefUnwindSafe,
KF: RefUnwindSafe,
S: RefUnwindSafe,
A: RefUnwindSafe,
K: RefUnwindSafe,
Sc: RefUnwindSafe,
impl<S, A, K, E, F, KF, Sc> Send for BalanceConstraintStream<S, A, K, E, F, KF, Sc>
impl<S, A, K, E, F, KF, Sc> Sync for BalanceConstraintStream<S, A, K, E, F, KF, Sc>
impl<S, A, K, E, F, KF, Sc> Unpin for BalanceConstraintStream<S, A, K, E, F, KF, Sc>
impl<S, A, K, E, F, KF, Sc> UnwindSafe for BalanceConstraintStream<S, A, K, E, F, KF, Sc>where
E: UnwindSafe,
F: UnwindSafe,
KF: UnwindSafe,
S: UnwindSafe,
A: UnwindSafe,
K: UnwindSafe,
Sc: UnwindSafe,
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