algorithm.bend relies on unsafe/foreign
raw source on the hub · import 0xcd07e24a626a62e74603d48f436cd679/algorithm.bend as Algorithm
Unsga3Algorithm.Run — C# Unsga3.Algorithm.Unsga3Algorithm. init → evaluate → loop: tournament parents → SBX (η=30, p=1.0) → polynomial mutation (η=20, p=1/n) → evaluate → survival Select with persistent Normalization. Defaults match C# operator defaults. Mating tournament for A/B is PymooCompatible (document RankNicheDistance as the C# ctor default). Survival niching in Run threads rng (C# Select(..., rng): random among equal min-count niches). Empty niches take closest; extras are random among near-best on that ray. Uniform inNiche[Next] with this LCG collapsed oracle ZDT2. Duplicate keys use C# G12-style 12-decimal rounding, not bit-exact F32.
13 imports
import Base import ./individual.bend as Ind import ./non_dominated_sort.bend as NDS import ./normalization.bend as Norm import ./reference_directions.bend as Refs import ./survival.bend as Surv import ./bounds.bend as Bounds import ./rng.bend as Rng import ./sbx.bend as Sbx import ./polynomial_mutation.bend as Poly import ./problems.bend as Prob import ./tournament.bend as Tour import ./util.bend as Util
Types
type Config source · line 26 · raw
Data
MkConfig@dirs:List<&2, List<&2, F32>> -> @pop_size:Nat -> @gens:Nat -> @seed:Nat -> @mode:0xcd07e24a626a62e74603d48f436cd679/tournament.Mode -> @elim_dups:Bool -> Config
type IHold source · line 103 · raw
Data
IH@rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> IHold
type FHold source · line 173 · raw
Data
FH@rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> FHold
type OHold source · line 259 · raw
Data
OH@need:Nat -> @pair:Nat -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @seen:List<&2, List<&2, F32>> -> OHold
type GHold source · line 333 · raw
Data
GH@st:0xcd07e24a626a62e74603d48f436cd679/normalization.State -> @xs:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> GHold
Definitions
def mk source · line 36 · raw
@+dirs:List<&2, List<&2, F32>> -> @+pop_size:Nat -> @+gens:Nat -> @+seed:Nat -> @+mode:0xcd07e24a626a62e74603d48f436cd679/tournament.Mode -> @+elim_dups:Bool -> Config
def cfg_dirs source · line 39 · raw
@c:Config -> List<&2, List<&2, F32>>
def cfg_pop source · line 44 · raw
@c:Config -> Nat
def cfg_gens source · line 49 · raw
@c:Config -> Nat
def cfg_seed source · line 54 · raw
@c:Config -> Nat
def cfg_mode source · line 59 · raw
@c:Config -> 0xcd07e24a626a62e74603d48f436cd679/tournament.Mode
def cfg_elim source · line 64 · raw
@c:Config -> Bool
def smoke_zdt1 source · line 70 · raw
Config
Smoke (not oracle): ZDT1 n=30, partitions=4 → 5 refs, pop=8, gens=3, seed=1.
def oracle_zdt1 source · line 74 · raw
Config
C# OracleCompare / EQUIVALENCE-style settings (not the smoke default).
def oracle_dtlz2 source · line 77 · raw
Config
def get_ind source · line 80 · raw
@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @i:Nat -> 0xcd07e24a626a62e74603d48f436cd679/individual.Individual
def rand_xs.go source · line 83 · raw
@+box:0xcd07e24a626a62e74603d48f436cd679/bounds.Box -> @fuel:Nat -> @+i:Nat -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @acc:List<&2, F32> -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, F32>)
def rand_xs source · line 100 · raw
@+box:0xcd07e24a626a62e74603d48f436cd679/bounds.Box -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, F32>)
def init_next.xs source · line 109 · raw
@+n_obj:Nat -> @acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, F32>) -> IHold
def init_next source · line 113 · raw
@+box:0xcd07e24a626a62e74603d48f436cd679/bounds.Box -> @+n_obj:Nat -> @hold:IHold -> IHold
def init_loop source · line 118 · raw
@fuel:Nat -> @hold:IHold -> @+box:0xcd07e24a626a62e74603d48f436cd679/bounds.Box -> @+n_obj:Nat -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def init_pop source · line 125 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @n:Nat -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def vars_of.go source · line 128 · raw
@xs:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @acc:List<&2, List<&2, F32>> -> List<&2, List<&2, F32>>
def vars_of source · line 135 · raw
@xs:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, List<&2, F32>>
def try_add.go source · line 138 · raw
@+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+child:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @+seen:List<&2, List<&2, F32>> -> @+key:List<&2, F32> -> @skip:Bool -> Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool))
def try_add source · line 145 · raw
@+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+child:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @+seen:List<&2, List<&2, F32>> -> @elim:Bool -> Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool))
def pred_or_zero source · line 149 · raw
@n:Nat -> Nat
def dec_if source · line 156 · raw
@n:Nat -> @hit:Bool -> Nat
def wrap_pair.go source · line 163 · raw
@+pair:Nat -> @ok:Bool -> Nat
def wrap_pair source · line 170 · raw
@+pair:Nat -> @+n:Nat -> Nat
def fallback_next.m source · line 179 · raw
@acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual) -> FHold
def fallback_next source · line 183 · raw
@+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @hold:FHold -> FHold
def fallback_loop source · line 190 · raw
@need:Nat -> @hold:FHold -> @+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def offs_add2.hit source · line 197 · raw
@+need1:Nat -> @trip:Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool)) -> Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>))
def offs_add2.rest source · line 201 · raw
@+need1:Nat -> @+elim:Bool -> @+c2:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @acc1:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @seen1:List<&2, List<&2, F32>> -> @done:Bool -> Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>))
def offs_add2 source · line 208 · raw
@+need:Nat -> @acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @seen:List<&2, List<&2, F32>> -> @+elim:Bool -> @+c2:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @trip:Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool)) -> Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>))
def offs_pair.done source · line 220 · raw
@rng3:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @trip:Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)) -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.m2 source · line 224 · raw
@+need:Nat -> @+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+elim:Bool -> @+m1:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual) -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.m1 source · line 228 · raw
@+need:Nat -> @+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @+c2:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual) -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.sbx source · line 232 · raw
@+need:Nat -> @+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @trip:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(0xcd07e24a626a62e74603d48f436cd679/individual.Individual, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual)) -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair source · line 236 · raw
@+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+pair:Nat -> @+need:Nat -> @+acc:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_next.q source · line 268 · raw
@+pair0:Nat -> @quad:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, Pair(Nat, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, List<&2, List<&2, F32>>))) -> OHold
def offs_next source · line 272 · raw
@+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @hold:OHold -> OHold
def offs_done source · line 277 · raw
@+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @hold:OHold -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def offs_have source · line 282 · raw
@hold:OHold -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def offs_loop source · line 287 · raw
@fuel:Nat -> @hold:OHold -> @+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def seen_start source · line 303 · raw
@+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @elim:Bool -> List<&2, List<&2, F32>>
def create_offspring source · line 310 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+parents:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+n:Nat -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @+elim:Bool -> Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>)
def nd_front source · line 320 · raw
@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def emit_front source · line 323 · raw
@xs:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> IO(Unit)
def one_gen.prep source · line 340 · raw
@+rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/normalization.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>) -> GHold
def one_gen.s source · line 344 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @trip:Pair(0xcd07e24a626a62e74603d48f436cd679/normalization.State, Pair(List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>, 0xcd07e24a626a62e74603d48f436cd679/rng.State)) -> GHold
def one_gen.o source · line 348 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+state:0xcd07e24a626a62e74603d48f436cd679/normalization.State -> @trip:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>) -> GHold
def one_gen.p source · line 362 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+state:0xcd07e24a626a62e74603d48f436cd679/normalization.State -> @trip:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>) -> GHold
def one_gen source · line 366 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @hold:GHold -> GHold
def gen_pop source · line 371 · raw
@hold:GHold -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def gen_loop source · line 376 · raw
@fuel:Nat -> @hold:GHold -> @+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def run.after_prep source · line 383 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @rng:0xcd07e24a626a62e74603d48f436cd679/rng.State -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/normalization.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>) -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def run.go source · line 387 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @pair:Pair(0xcd07e24a626a62e74603d48f436cd679/rng.State, List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>) -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def run.sized source · line 391 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> @n:Nat -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def run source · line 398 · raw
@+prob:0xcd07e24a626a62e74603d48f436cd679/problems.Problem -> @+cfg:Config -> List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>
def run_zdt1_smoke source · line 402 · raw
List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>