use crate::model::Solution;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Objective {
pub distance: f64,
pub vehicles: f64,
pub time: f64,
}
impl Default for Objective {
fn default() -> Self {
Self {
distance: 1.0,
vehicles: 0.0,
time: 0.0,
}
}
}
impl Objective {
#[must_use]
pub fn distance_only() -> Self {
Self::default()
}
#[must_use]
pub fn score(&self, total_distance: f64, route_count: usize, total_time: f64) -> f64 {
self.distance * total_distance + self.vehicles * route_count as f64 + self.time * total_time
}
#[must_use]
pub fn of(&self, solution: &Solution) -> f64 {
self.score(
solution.total_distance,
solution.routes.len(),
solution.total_time,
)
}
}