@@ -101,11 +101,11 @@ impl DoctrineProfile {
101101 match self {
102102 Self :: Balanced => DoctrineScoring {
103103 objective_0 : ObjectiveBlend {
104- survival_rate : 0.50 ,
105- stability : 0.15 ,
104+ survival_rate : 0.48 ,
105+ stability : 0.14 ,
106106 battery_mean : 0.0 ,
107107 battery_floor : 0.10 ,
108- safety_margin : 0.25 ,
108+ safety_margin : 0.28 ,
109109 coordination_margin : 0.0 ,
110110 recovery_margin : 0.0 ,
111111 } ,
@@ -130,11 +130,11 @@ impl DoctrineProfile {
130130 } ,
131131 Self :: SurvivalFirst => DoctrineScoring {
132132 objective_0 : ObjectiveBlend {
133- survival_rate : 0.60 ,
133+ survival_rate : 0.50 ,
134134 stability : 0.05 ,
135135 battery_mean : 0.0 ,
136136 battery_floor : 0.10 ,
137- safety_margin : 0.25 ,
137+ safety_margin : 0.35 ,
138138 coordination_margin : 0.0 ,
139139 recovery_margin : 0.0 ,
140140 } ,
@@ -179,9 +179,9 @@ impl DoctrineProfile {
179179 objective_2 : ObjectiveBlend {
180180 survival_rate : 0.0 ,
181181 stability : 0.0 ,
182- battery_mean : 0.40 ,
183- battery_floor : 0.20 ,
184- safety_margin : 0.20 ,
182+ battery_mean : 0.50 ,
183+ battery_floor : 0.25 ,
184+ safety_margin : 0.05 ,
185185 coordination_margin : 0.20 ,
186186 recovery_margin : 0.0 ,
187187 } ,
@@ -235,13 +235,13 @@ impl DoctrineProfile {
235235 recovery_margin : 0.25 ,
236236 } ,
237237 objective_2 : ObjectiveBlend {
238- survival_rate : 0.15 ,
239- stability : 0.0 ,
240- battery_mean : 0.35 ,
241- battery_floor : 0.15 ,
242- safety_margin : 0.15 ,
243- coordination_margin : 0.20 ,
244- recovery_margin : 0.0 ,
238+ survival_rate : 0.25 ,
239+ stability : 0.20 ,
240+ battery_mean : 0.15 ,
241+ battery_floor : 0.05 ,
242+ safety_margin : 0.10 ,
243+ coordination_margin : 0.10 ,
244+ recovery_margin : 0.15 ,
245245 } ,
246246 } ,
247247 }
@@ -291,9 +291,17 @@ impl ObjectiveComponents {
291291 let stability = ( 1.0 - churn_rate * 50.0 ) . clamp ( 0.0 , 1.0 ) ;
292292 let battery_mean = agg. battery_mean . clamp ( 0.0 , 1.0 ) ;
293293 let battery_floor = agg. battery_min . clamp ( 0.0 , 1.0 ) ;
294- let safety_margin = ( 1.0 - agg. cbf_violations as f64 / n_init) . clamp ( 0.0 , 1.0 ) ;
295- let coordination_load = agg. auction_rounds as f64 / total_ticks;
296- let coordination_margin = ( 1.0 - coordination_load * 5.0 ) . clamp ( 0.0 , 1.0 ) ;
294+ let violation_rate = agg. cbf_violations as f64 / n_init;
295+ let safety_margin = ( 1.0 - violation_rate - 0.35 * agg. cbf_burden_mean . clamp ( 0.0 , 1.0 ) )
296+ . clamp ( 0.0 , 1.0 ) ;
297+ let coordination_round_rate = agg. auction_rounds as f64 / total_ticks;
298+ let coordination_peak =
299+ ( agg. coordination_churn_peak as f64 / n_init) . clamp ( 0.0 , 1.0 ) ;
300+ let coordination_margin =
301+ ( 1.0 - 0.65 * agg. coordination_burden_mean . clamp ( 0.0 , 1.0 )
302+ - 0.20 * coordination_round_rate. clamp ( 0.0 , 1.0 )
303+ - 0.15 * coordination_peak)
304+ . clamp ( 0.0 , 1.0 ) ;
297305 let recovery_pressure =
298306 ( agg. forced_evade_count as f64 + 0.5 * agg. kill_zones_created as f64 ) / n_init;
299307 let recovery_margin = ( 1.0 - recovery_pressure) . clamp ( 0.0 , 1.0 ) ;
@@ -615,12 +623,13 @@ mod tests {
615623 fn persistent_isr_rewards_reserve_efficiency_more_than_aggressive_strike ( ) {
616624 let report = synthetic_report ( Aggregates {
617625 total_ticks : 100 ,
618- drones_survived : 9 ,
619- regime_changes : 2 ,
620- battery_min : 0.8 ,
621- battery_mean : 0.9 ,
626+ drones_survived : 6 ,
627+ regime_changes : 8 ,
628+ battery_min : 0.9 ,
629+ battery_mean : 0.95 ,
622630 auction_rounds : 2 ,
623631 cbf_violations : 0 ,
632+ coordination_burden_mean : 0.05 ,
624633 forced_evade_count : 0 ,
625634 kill_zones_created : 0 ,
626635 ..Default :: default ( )
0 commit comments