Grade families like classes. The "class average" should always be a C (assume for sake of explanation that a C is 2000).
C, the student's initial score (call it the "crude score", C) is computed the same way it's always been
P is the student's penalty, computed from a weighted average of all of their ancestors' crude scores (w_k...w_1) as well as theirs (w_0).
For the next generation,
set w_k := w_(k-1)
if C > C_av: w_0 = w_1 * w_2 else: w_0 = w_1
normalize w_0...w_k
P = (sum(w_0...w_k) - C_av) * urgency
Where urgency is a measure of how in need the disadvantaged groups are as well as their numbers. This can be adjusted manually based on the political climate, maybe by a DAO that governs the College Board on the Ethereum blockchain.