individual.bend source
individual.bend on the hub · documented module
# Individual — C# Unsga3.Algorithm.Individual.# Objectives + decision variables + evaluated + tournament bookkeeping# (rank / niche / associated ref / perp distance). Constraints stay# unused in this slice (ZDT / DTLZ here are unconstrained).import Basetype Individual is Data: MkIndividual{ x: List<&2, F32> f: List<&2, F32> rnk: Nat nic: Nat aref: Nat dist: F32 ev: Bool }# v0 / A/B path: objectives already known; no decision vector.def from_objectives(+f: List<&2, F32>) -> Individual: MkIndividual{Nil{}, f, 0n, 0n, 0n, 0.0, True{}}# Unevaluated candidate: variables set, objectives zeroed (C# ctor).def from_variables(+x: List<&2, F32>, n_obj: Nat) -> Individual: MkIndividual{x, List.replicate(F32, n_obj, 0.0), 0n, 0n, 0n, 0.0, False{}}def variables(ind: Individual) -> List<&2, F32>: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: xdef objectives(ind: Individual) -> List<&2, F32>: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: fdef rank(ind: Individual) -> Nat: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: rnkdef evaluated(ind: Individual) -> Bool: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: evdef n_obj(ind: Individual) -> Nat: List.length(&2, F32, objectives(ind))def n_var(ind: Individual) -> Nat: List.length(&2, F32, variables(ind))def var_at(ind: Individual, i: Nat) -> F32: Maybe.default(&2, F32, List.get(&2, F32, variables(ind), i), 0.0)def set_var_at(ind: Individual, i: Nat, v: F32) -> Individual: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: MkIndividual{List.set(&2, F32, x, i, v), f, rnk, nic, ar, pd, ev}def set_evaluated(ind: Individual, ev2: Bool) -> Individual: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: MkIndividual{x, f, rnk, nic, ar, pd, ev2}def niche(ind: Individual) -> Nat: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: nicdef associated_ref(ind: Individual) -> Nat: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: ardef perp_dist(ind: Individual) -> F32: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: pddef set_objectives(ind: Individual, +f2: List<&2, F32>) -> Individual: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: MkIndividual{x, f2, rnk, nic, ar, pd, True{}}def set_rank(ind: Individual, rnk2: Nat) -> Individual: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: MkIndividual{x, f, rnk2, nic, ar, pd, ev}def stamp(ind: Individual, +rnk2: Nat, +nic2: Nat, +aref2: Nat, +dist2: F32) -> Individual: match ind: case MkIndividual{x, f, rnk, nic, ar, pd, ev}: MkIndividual{x, f, rnk2, nic2, aref2, dist2, ev}