Use median for average_solution_quality.

This commit is contained in:
FiveMovesAhead 2025-11-19 15:39:04 +00:00
parent c62700893c
commit e9cfdf9d17
2 changed files with 20 additions and 6 deletions

View File

@ -169,23 +169,28 @@ pub async fn submit_benchmark<T: Context>(
}
// random sample nonces
let median_idx = (solution_quality.len() / 2) as u64;
let config = ctx.get_config().await;
let mut rng = StdRng::seed_from_u64(seed);
let max_samples = config.challenges[&settings.challenge_id].max_samples;
let mut sampled_nonces = HashSet::new();
sampled_nonces.insert(median_idx as u64);
for _ in 0..25 {
if sampled_nonces.len() == max_samples {
break;
}
let nonce = rng.gen_range(0..precommit_details.num_nonces);
let nonce = rng.gen_range(median_idx..precommit_details.num_nonces);
if sampled_nonces.contains(&nonce) {
continue;
}
sampled_nonces.insert(nonce);
}
let average_solution_quality =
solution_quality.iter().sum::<i32>() / (solution_quality.len() as i32);
// Calculate median solution quality
let mut sorted_quality = solution_quality.clone();
sorted_quality.sort_unstable();
let average_solution_quality = sorted_quality[median_idx as usize];
ctx.add_benchmark_to_mempool(
benchmark_id,

View File

@ -114,6 +114,7 @@ pub(crate) async fn update(cache: &mut AddBlockCache) {
let challenge_data = active_challenges_block_data.get_mut(challenge_id).unwrap();
let mut player_code_nonces = HashMap::<String, HashMap<String, u64>>::new();
let mut player_nonces = HashMap::<String, u64>::new();
let mut qualifier_qualities = HashMap::<String, HashSet<i32>>::new();
for frontier_idx in 0..max_frontier_idx {
for (settings, &quality, &num_nonces) in
@ -133,11 +134,10 @@ pub(crate) async fn update(cache: &mut AddBlockCache) {
.or_default() += num_nonces;
*player_nonces.entry(player_id.clone()).or_default() += num_nonces;
challenge_data
.qualifier_qualities
qualifier_qualities
.entry(race_id.clone())
.or_default()
.push(quality);
.insert(quality);
}
// check if we have enough qualifiers
@ -182,6 +182,15 @@ pub(crate) async fn update(cache: &mut AddBlockCache) {
break;
}
}
challenge_data.qualifier_qualities = qualifier_qualities
.into_iter()
.map(|(race_id, qualifier_qualities)| {
let mut qualifier_qualities = qualifier_qualities.into_iter().collect::<Vec<_>>();
qualifier_qualities.sort_by(|a, b| b.cmp(a));
(race_id, qualifier_qualities)
})
.collect();
}
// update influence