algorithm.bend relies on unsafe/foreign
raw source on the hub · import 0x527a2a4fa91b05a0250d7be0e11d232a/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. RankNicheDistance (C# ctor default) is rank → niche count → perpendicular distance → coin. 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 round each decision variable to 12 decimal places (round(x*1e12)/1e12). That is not C# ToString("G12") (12 significant digits). Small variables diverge; see src/g12_key.bend.
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 29 · raw
Data
MkConfig@dirs:List<&2, List<&2, F32>> -> @pop_size:Nat -> @gens:Nat -> @seed:Nat -> @mode:0x527a2a4fa91b05a0250d7be0e11d232a/tournament.Mode -> @elim_dups:Bool -> Config
type IHold source · line 106 · raw
Data
IH@rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> IHold
type FHold source · line 176 · raw
Data
FH@rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> FHold
type OHold source · line 262 · raw
Data
OH@need:Nat -> @pair:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @seen:List<&2, List<&2, F32>> -> OHold
type GHold source · line 336 · raw
Data
GH@st:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @xs:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> GHold
Definitions
def mk source · line 39 · raw
@+dirs:List<&2, List<&2, F32>> -> @+pop_size:Nat -> @+gens:Nat -> @+seed:Nat -> @+mode:0x527a2a4fa91b05a0250d7be0e11d232a/tournament.Mode -> @+elim_dups:Bool -> Config
def cfg_dirs source · line 42 · raw
@c:Config -> List<&2, List<&2, F32>>
def cfg_pop source · line 47 · raw
@c:Config -> Nat
def cfg_gens source · line 52 · raw
@c:Config -> Nat
def cfg_seed source · line 57 · raw
@c:Config -> Nat
def cfg_mode source · line 62 · raw
@c:Config -> 0x527a2a4fa91b05a0250d7be0e11d232a/tournament.Mode
def cfg_elim source · line 67 · raw
@c:Config -> Bool
def smoke_zdt1 source · line 73 · raw
Config
Smoke (not oracle): ZDT1 n=30, partitions=4 → 5 refs, pop=8, gens=3, seed=1.
def oracle_zdt1 source · line 77 · raw
Config
C# OracleCompare / EQUIVALENCE-style settings (not the smoke default).
def oracle_dtlz2 source · line 80 · raw
Config
def get_ind source · line 83 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @i:Nat -> 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual
def rand_xs.go source · line 86 · raw
@+box:0x527a2a4fa91b05a0250d7be0e11d232a/bounds.Box -> @fuel:Nat -> @+i:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @acc:List<&2, F32> -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, F32>)
def rand_xs source · line 103 · raw
@+box:0x527a2a4fa91b05a0250d7be0e11d232a/bounds.Box -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, F32>)
def init_next.xs source · line 112 · raw
@+n_obj:Nat -> @acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, F32>) -> IHold
def init_next source · line 116 · raw
@+box:0x527a2a4fa91b05a0250d7be0e11d232a/bounds.Box -> @+n_obj:Nat -> @hold:IHold -> IHold
def init_loop source · line 121 · raw
@fuel:Nat -> @hold:IHold -> @+box:0x527a2a4fa91b05a0250d7be0e11d232a/bounds.Box -> @+n_obj:Nat -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def init_pop source · line 128 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @n:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def vars_of.go source · line 131 · raw
@xs:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @acc:List<&2, List<&2, F32>> -> List<&2, List<&2, F32>>
def vars_of source · line 138 · raw
@xs:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> List<&2, List<&2, F32>>
def try_add.go source · line 141 · raw
@+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+child:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @+seen:List<&2, List<&2, F32>> -> @+key:List<&2, F32> -> @skip:Bool -> Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool))
def try_add source · line 148 · raw
@+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+child:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @+seen:List<&2, List<&2, F32>> -> @elim:Bool -> Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool))
def pred_or_zero source · line 152 · raw
@n:Nat -> Nat
def dec_if source · line 159 · raw
@n:Nat -> @hit:Bool -> Nat
def wrap_pair.go source · line 166 · raw
@+pair:Nat -> @ok:Bool -> Nat
def wrap_pair source · line 173 · raw
@+pair:Nat -> @+n:Nat -> Nat
def fallback_next.m source · line 182 · raw
@acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual) -> FHold
def fallback_next source · line 186 · raw
@+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @hold:FHold -> FHold
def fallback_loop source · line 193 · raw
@need:Nat -> @hold:FHold -> @+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def offs_add2.hit source · line 200 · raw
@+need1:Nat -> @trip:Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool)) -> Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>))
def offs_add2.rest source · line 204 · raw
@+need1:Nat -> @+elim:Bool -> @+c2:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @acc1:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @seen1:List<&2, List<&2, F32>> -> @done:Bool -> Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>))
def offs_add2 source · line 211 · raw
@+need:Nat -> @acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @seen:List<&2, List<&2, F32>> -> @+elim:Bool -> @+c2:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @trip:Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, Pair(List<&2, List<&2, F32>>, Bool)) -> Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>))
def offs_pair.done source · line 223 · raw
@rng3:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @trip:Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)) -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.m2 source · line 227 · raw
@+need:Nat -> @+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+elim:Bool -> @+m1:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual) -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.m1 source · line 231 · raw
@+need:Nat -> @+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @+c2:0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual) -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair.sbx source · line 235 · raw
@+need:Nat -> @+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @trip:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual)) -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_pair source · line 239 · raw
@+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+pair:Nat -> @+need:Nat -> @+acc:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+seen:List<&2, List<&2, F32>> -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>)))
def offs_next.q source · line 271 · raw
@+pair0:Nat -> @quad:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, Pair(Nat, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, List<&2, List<&2, F32>>))) -> OHold
def offs_next source · line 275 · raw
@+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> @hold:OHold -> OHold
def offs_done source · line 280 · raw
@+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @hold:OHold -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def offs_have source · line 285 · raw
@hold:OHold -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def offs_loop source · line 290 · raw
@fuel:Nat -> @hold:OHold -> @+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+mut_p:F32 -> @+elim:Bool -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def seen_start source · line 306 · raw
@+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @elim:Bool -> List<&2, List<&2, F32>>
def create_offspring source · line 313 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+parents:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+n:Nat -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @+elim:Bool -> Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>)
def nd_front source · line 323 · raw
@+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def emit_front source · line 326 · raw
@xs:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> IO(Unit)
def one_gen.prep source · line 343 · raw
@+rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>) -> GHold
def one_gen.s source · line 347 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @trip:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, Pair(List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>, 0x527a2a4fa91b05a0250d7be0e11d232a/rng.State)) -> GHold
def one_gen.o source · line 351 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @trip:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>) -> GHold
def one_gen.p source · line 365 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @+pop:List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual> -> @+state:0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State -> @trip:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>) -> GHold
def one_gen source · line 369 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @hold:GHold -> GHold
def gen_pop source · line 374 · raw
@hold:GHold -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def gen_loop source · line 379 · raw
@fuel:Nat -> @hold:GHold -> @+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def run.after_prep source · line 386 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @rng:0x527a2a4fa91b05a0250d7be0e11d232a/rng.State -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/normalization.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>) -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def run.go source · line 390 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @pair:Pair(0x527a2a4fa91b05a0250d7be0e11d232a/rng.State, List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>) -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def run.sized source · line 394 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> @n:Nat -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def run source · line 401 · raw
@+prob:0x527a2a4fa91b05a0250d7be0e11d232a/problems.Problem -> @+cfg:Config -> List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>
def run_zdt1_smoke source · line 405 · raw
List<&2, 0x527a2a4fa91b05a0250d7be0e11d232a/individual.Individual>