Solution Scorer
Scores solutions at ONE evaluation clock.
The penalized objective is not a property of a solution. It is a property of a solution and a clock: with a dynamic penalty, f + M0 * k * v at k = 1 and at k = 500 differ by a factor of five hundred on the violation term. The penalty method is a sequence of subproblems — at iteration k the solver minimizes f + M_k * v — so a penalized value carried over from iteration j is a value of a different objective function, and mixing the two compares solutions to two different problems.
A scorer makes the clock explicit and shared. Any decision taken over more than one solution should be taken through a single scorer, so that the whole decision sits inside one subproblem of the sequence. Collections that outlive an iteration — a population rebuilt from elites plus offspring, a surrogate's archive, a stored incumbent — are the ones that need this, because they are the ones that hold solutions stamped at different clocks.
This is the search key. For choosing what to REPORT, prefer FeasibilityFirstComparator, which is clock-independent by construction.
Parameters
the clock every solution is judged at