INNER CODE UNIT · Python
rounds_since
Tisha-runwal/Personalized-Federated-Learning-for-Privacy--Preserving-and-Scalable-IoT-Driven-Smart-Healthcare · pfl_hcare/fl/server.py:372
rounds_since = current_round - last_participation.get(cid, 0)
if rounds_since >= min_interval:
forced.append(cid)
else:
candidates.append(cid)
n_to_sample = max(0, n_select - len(forced))
if n_to_sample > 0 and candidates:
# Eq.9: p_i = ||grad_i|| / sum(||grad_j||)
norms = np.array([gradient_norms.get(cid, 1.0) for cid in candidates])
norms = np.clip(norms, 1e-8, None) # avoid zero
probs = norms / norms.sum()
n_sample = min(n_to_sample, len(candidates))
sampled_idx = rng.choice(len(candidates), size=n_sample, replace=False, p=probs)
selected = forced + [candidates[i] for i in sampled_idx]
else:
selected = forced[:n_select] if len(forced) > n_select else forced