Amount#
A number measured on one evaluation stage, paired with its difference from the same number measured on the baseline. Project::evaluate returns it inside Metrics as conflicts and cycles, inside Overload as total, and inside ResourceOverload as overload. It isn't built by hand.
Declaration#
Copy # [ derive ( Clone, Copy, Debug, PartialEq ) ]
pub struct Amount {
pub value : f64 ,
pub delta : f64 ,
}
With the serde feature (cargo add plen-core --features serde), Amount also implements Serialize and Deserialize.
Fields#
Field
Type
Description
value
f64
The value measured on this stage.
delta
f64
value minus the baseline value. Positive when this stage has more. Always 0 in EvaluateResult::baseline .
The unit of both fields depends on the field that holds the Amount. See Metrics and Overload .
Example#
Score a candidate and print the change in total overload against the baseline.
Copy use plen_core:: {
AssignmentData, Candidate, DateTime, EvaluateOptions, Project, ProjectData,
ProjectOptions, ResourceData, SchedulingChanges, SolveOptions, TaskData,
} ;
fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error> > {
let monday = DateTime:: from_ymd_hm( 2026 , 8 , 10 , 8 , 0 ) . ok_or ( " invalid date" ) ? ;
let task = | id : i32 | TaskData {
start_date: Some ( monday) ,
duration: Some ( 2. 0 ) ,
.. TaskData:: new( id)
} ;
let assign = | task : i32 | AssignmentData {
id: None ,
task: task. into ( ) ,
resource: " dev1" . into ( ) ,
value: 1. 0 ,
offset: None ,
duration: None ,
} ;
let data = ProjectData {
tasks: vec! [ task ( 1 ) , task ( 2 ) ] ,
resources: vec! [ ResourceData { id: " dev1" . into ( ) , capacity: None , calendar_id: None } ] ,
assignments: vec! [ assign ( 1 ) ] ,
.. Default :: default( )
} ;
let mut project = Project:: new( ProjectOptions:: default( ) ) ;
project. solve ( Some ( data) , & SolveOptions:: default( ) ) ? ;
let mut changes = SchedulingChanges:: default( ) ;
changes. assignments. add. push ( assign ( 2 ) ) ;
let candidates = [ Candidate { id: " dev1-on-2" . into ( ) , changes } ] ;
let result = project. evaluate ( & candidates, & EvaluateOptions:: default( ) ) ? ;
for c in & result. candidates {
if let Some ( scheduled) = & c. scheduled {
let total = scheduled. overload. total;
println! ( " overload {} ({:+} vs baseline)" , total. value, total. delta) ;
}
}
Ok ( ( ) )
}
Metrics - the stage measurements that hold Amount values
Shift - the date counterpart of Amount: a finish with its delta
EvaluateResult - its baseline is where every delta is 0
Evaluating Alternatives - how values and deltas are read when comparing candidates