File size: 1,308 Bytes
7b2a37a
 
 
 
 
f093ab7
7b2a37a
 
 
 
610cbd2
f093ab7
610cbd2
 
f093ab7
7b2a37a
531908f
f093ab7
 
 
 
 
 
 
 
 
7b2a37a
 
 
 
 
f093ab7
7b2a37a
f093ab7
531908f
f093ab7
 
 
 
 
 
 
 
 
 
7b2a37a
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* Constraint definitions.

Add constraint modules with `solverforge generate constraint ...`.
The neutral shell starts with an empty constraint set. */

use crate::domain::FieldServicePlan;
use solverforge::prelude::*;

pub use self::assemble::create_constraints;

mod route_constraint;
pub mod route_metrics;
#[cfg(test)]
mod route_metrics_tests;

// @solverforge:begin constraint-modules
mod assigned_visits;
mod balance_workload;
mod minimize_travel;
mod priority_slack;
mod reachable_legs;
mod required_parts;
mod required_skills;
mod shift_capacity;
mod territory_affinity;
mod time_windows;
// @solverforge:end constraint-modules

mod assemble {
    use super::*;

    pub fn create_constraints() -> impl ConstraintSet<FieldServicePlan, HardSoftScore> {
        // @solverforge:begin constraint-calls
        (
            assigned_visits::constraint(),
            balance_workload::constraint(),
            minimize_travel::constraint(),
            priority_slack::constraint(),
            reachable_legs::constraint(),
            required_parts::constraint(),
            required_skills::constraint(),
            shift_capacity::constraint(),
            territory_affinity::constraint(),
            time_windows::constraint(),
        )
        // @solverforge:end constraint-calls
    }
}