tournament.bend checks
raw source on the hub · import 0x2bc7fb472c80bd6a0e04725c117edb2a/tournament.bend as Tournament
Mating tournament — C# TournamentSelection / TournamentMode. Default for algorithm A/B is PymooCompatible (pymoo comp_by_rank_and_ref_line_dist): same niche → rank then perp dist; else random. RankNicheDistance (C# WinnerRankNicheDistance) is rank → niche count → perpendicular distance → coin. Both modes take CV first. Feasible (cv ≤ 0) beats infeasible. PymooCompatible: if either is infeasible, smaller CV wins and equal CV is a coin (no rank / distance). RankNicheDistance: both infeasible and unequal CV → smaller CV; equal CV falls through to rank. cv 0 on both sides keeps the feasible comparators. A/B stays PymooCompatible. See src/trn_seed682.bend.
7 imports
import Base import ./individual.bend as Ind import ./non_dominated_sort.bend as NDS import ./normalization.bend as Norm import ./survival.bend as Surv import ./rng.bend as Rng import ./util.bend as Util
Types
type Mode source · line 21 · raw
Data
PymooCompatibleMode
RankNicheDistanceMode
type PHold source · line 162 · raw
Data
PH@rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @acc:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> PHold
Definitions
def pymoo source · line 25 · raw
Mode
def rank_niche source · line 28 · raw
Mode
def get_ind source · line 31 · raw
@+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @i:Nat -> 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual
def coin source · line 34 · raw
@a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def cmp_pick source · line 38 · raw
@a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @ab:Bool -> @ba:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def by_dist source · line 47 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def by_rank.eq source · line 52 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @same:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def by_rank source · line 59 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_pymoo.same source · line 62 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @same:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_pymoo.cv_b source · line 69 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @b_lt:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_pymoo.cv source · line 77 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @a_lt:Bool -> @b_lt:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
Either infeasible: smaller CV, else coin. Does not read rank.
def winner_pymoo.gate source · line 84 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @either:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_pymoo source · line 91 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def by_niche.eq source · line 101 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @same:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
Equal niche counts fall through to perpendicular distance (then coin). A count tie used to coin immediately and skip distance.
def by_niche source · line 108 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_rnd.eq source · line 111 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @same:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_rnd.cv_b source · line 118 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @b_lt:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_rnd.cv source · line 126 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @a_lt:Bool -> @b_lt:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
Both infeasible. Equal CV falls through to rank (not a coin, not Pareto).
def winner_rnd.gate source · line 133 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> @a_feas:Bool -> @b_feas:Bool -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner_rnd source · line 144 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def winner source · line 147 · raw
@mode:Mode -> @+a:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @+b:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def one source · line 154 · raw
@+mode:Mode -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual)
def parents_next.w source · line 168 · raw
@acc:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @pair:Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual) -> PHold
def parents_next source · line 172 · raw
@+mode:Mode -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @hold:PHold -> PHold
def parents_loop source · line 177 · raw
@fuel:Nat -> @hold:PHold -> @+mode:Mode -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>)
def select_parents source · line 184 · raw
@+mode:Mode -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @count:Nat -> @rng:0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>)
def parents_of source · line 187 · raw
@pair:Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/rng.State, List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>) -> List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>
def stamp_front source · line 191 · raw
@idxs:List<&2, Nat> -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @+r:Nat -> List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>
def stamp_ranks source · line 198 · raw
@fronts:List<&2, List<&2, Nat>> -> @pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @+r:Nat -> List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>
def stamp_asgs.one source · line 205 · raw
@+a:0x2bc7fb472c80bd6a0e04725c117edb2a/survival.Assignment -> @+ind:0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual -> 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual
def stamp_asgs.go source · line 209 · raw
@+fuel:Nat -> @pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @+asgs:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/survival.Assignment> -> List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>
Zip pop with assignments. Mid-split both lists at the same mid.
def stamp_asgs source · line 233 · raw
@+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @asgs:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/survival.Assignment> -> List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>
def prepare.with source · line 236 · raw
@+dirs:List<&2, List<&2, F32>> -> @+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @+fronts:List<&2, List<&2, Nat>> -> @pair:Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/normalization.State, List<&2, List<&2, F32>>) -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/normalization.State, List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>)
def prepare source · line 243 · raw
@+pop:List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual> -> @+dirs:List<&2, List<&2, F32>> -> @state:0x2bc7fb472c80bd6a0e04725c117edb2a/normalization.State -> Pair(0x2bc7fb472c80bd6a0e04725c117edb2a/normalization.State, List<&2, 0x2bc7fb472c80bd6a0e04725c117edb2a/individual.Individual>)
Recompute ranks + niche association (C# PrepareForSelection). Threads the persistent Normalization state.