pub trait Score:
Copy
+ Debug
+ Display
+ Default
+ Send
+ Sync
+ PartialEq
+ Eq
+ PartialOrd
+ Ord
+ Add<Output = Self>
+ Sub<Output = Self>
+ Neg<Output = Self>
+ 'static {
Show 17 methods
// Required methods
fn is_feasible(&self) -> bool;
fn zero() -> Self;
fn levels_count() -> usize;
fn to_level_numbers(&self) -> Vec<i64>;
fn from_level_numbers(levels: &[i64]) -> Self;
fn multiply(&self, multiplicand: f64) -> Self;
fn divide(&self, divisor: f64) -> Self;
fn abs(&self) -> Self;
fn to_scalar(&self) -> f64;
fn level_label(index: usize) -> ScoreLevel;
// Provided methods
fn compare(&self, other: &Self) -> Ordering { ... }
fn is_better_than(&self, other: &Self) -> bool { ... }
fn is_worse_than(&self, other: &Self) -> bool { ... }
fn is_equal_to(&self, other: &Self) -> bool { ... }
fn one_hard() -> Self { ... }
fn one_soft() -> Self { ... }
fn one_medium() -> Self { ... }
}Expand description
Core trait for all score types in SolverForge.
Scores represent the quality of a planning solution. They are used to:
- Compare solutions (better/worse/equal)
- Guide the optimization process
- Determine feasibility
All score implementations must be:
- Immutable (operations return new instances)
- Thread-safe (Send + Sync)
- Comparable (total ordering)
§Score Levels
Scores can have multiple levels (e.g., hard/soft constraints):
- Hard constraints: Must be satisfied for a solution to be feasible
- Soft constraints: Optimization objectives to maximize/minimize
When comparing scores, higher-priority levels are compared first.
Required Methods§
Sourcefn is_feasible(&self) -> bool
fn is_feasible(&self) -> bool
Returns true if this score represents a feasible solution.
A solution is feasible when all hard constraints are satisfied (i.e., the hard score is >= 0).
Sourcefn levels_count() -> usize
fn levels_count() -> usize
Returns the number of score levels.
For example:
- SoftScore: 1 level
- HardSoftScore: 2 levels
- HardMediumSoftScore: 3 levels
Sourcefn to_level_numbers(&self) -> Vec<i64>
fn to_level_numbers(&self) -> Vec<i64>
Returns the score values as a vector of i64.
The order is from highest priority to lowest priority. For HardSoftScore: [hard, soft]
Sourcefn from_level_numbers(levels: &[i64]) -> Self
fn from_level_numbers(levels: &[i64]) -> Self
Creates a score from level numbers.
§Panics
Panics if the number of levels doesn’t match levels_count().
Sourcefn to_scalar(&self) -> f64
fn to_scalar(&self) -> f64
Converts this score to a single f64 scalar value.
Higher-priority levels are weighted with larger multipliers to preserve their dominance. Used for simulated annealing temperature calculations.
Sourcefn level_label(index: usize) -> ScoreLevel
fn level_label(index: usize) -> ScoreLevel
Returns the semantic label for the score level at the given index.
Level indices follow the same order as to_level_numbers():
highest priority first.
§Panics
Panics if index >= levels_count().
Provided Methods§
Sourcefn compare(&self, other: &Self) -> Ordering
fn compare(&self, other: &Self) -> Ordering
Compares two scores, returning the ordering.
Default implementation uses the Ord trait.
Sourcefn is_better_than(&self, other: &Self) -> bool
fn is_better_than(&self, other: &Self) -> bool
Returns true if this score is better than the other score.
In optimization, “better” typically means higher score.
Sourcefn is_worse_than(&self, other: &Self) -> bool
fn is_worse_than(&self, other: &Self) -> bool
Returns true if this score is worse than the other score.
Sourcefn is_equal_to(&self, other: &Self) -> bool
fn is_equal_to(&self, other: &Self) -> bool
Returns true if this score is equal to the other score.
Sourcefn one_medium() -> Self
fn one_medium() -> Self
Returns a score with 1 at the first Medium-labeled level and 0 elsewhere.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.