~/bend-docscommunity

normalization.bend checks

raw source on the hub · import 0xcd07e24a626a62e74603d48f436cd679/normalization.bend as Normalization

Normalization — C# Unsga3.Core.Normalization (v0). Persistent ideal / worst, ASF extreme points (previous extremes ∪ ND, or the whole population when the ND index set is empty), intercept hyperplane nadir via (E−ideal)·b = 1, then C# front/pop/unit fallbacks. ASF: floor 1e-3 on ideal-translated objectives; preferred axis weight 1, other axes 1e-6 (divide form).

3 imports
import Base
import ./individual.bend as Ind
import ./util.bend as Util

Types

type State source · line 12 · raw

Data

type ExtCtx source · line 224 · raw

Data

Definitions

def new_state source · line 22 · raw

@n_objectives:Nat -> State

def state_n source · line 25 · raw

@st:State -> Nat

def state_ideal source · line 30 · raw

@st:State -> List<&2, F32>

def col_min.go source · line 36 · raw

@+fuel:Nat -> @pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

Column min/max are associative. Mid-split then vec_min / vec_max.

def col_min source · line 52 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

def col_max.go source · line 55 · raw

@+fuel:Nat -> @pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

def col_max source · line 71 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

def get_ind source · line 74 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @i:Nat -> Maybe<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual>

def max_at.go source · line 77 · raw

@acc:List<&2, F32> -> @m:Maybe<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

def max_at source · line 84 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @acc:List<&2, F32> -> @i:Nat -> List<&2, F32>

def col_max_idx.go source · line 87 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+fuel:Nat -> @idxs:List<&2, Nat> -> List<&2, F32>

def col_max_idx source · line 103 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @idxs:List<&2, Nat> -> List<&2, F32>

def merge_ideal source · line 111 · raw

@prev:List<&2, F32> -> @cur:List<&2, F32> -> List<&2, F32>

def merge_worst source · line 118 · raw

@prev:List<&2, F32> -> @cur:List<&2, F32> -> List<&2, F32>

def nd_or_all source · line 125 · raw

@nd:List<&2, Nat> -> @n:Nat -> List<&2, Nat>

def obj_at.go source · line 132 · raw

@m:Maybe<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, F32>

def obj_at source · line 139 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @i:Nat -> List<&2, F32>

def gather_objs.one source · line 142 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+i:Nat -> List<&2, F32>

def gather_objs source · line 145 · raw

@+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @+idxs:List<&2, Nat> -> List<&2, List<&2, F32>>

def map_norm.one source · line 148 · raw

@+ideal:List<&2, F32> -> @+nadir:List<&2, F32> -> @+ind:0xcd07e24a626a62e74603d48f436cd679/individual.Individual -> List<&2, F32>

def map_norm.go source · line 152 · raw

@+ideal:List<&2, F32> -> @+nadir:List<&2, F32> -> @+fuel:Nat -> @pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, List<&2, F32>>

Independent per individual given ideal/nadir. Mid-split + parallel recurse.

def map_norm source · line 168 · raw

@+ideal:List<&2, F32> -> @+nadir:List<&2, F32> -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, List<&2, F32>>

def n_obj_pop source · line 171 · raw

@pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> Nat

def asf_term source · line 179 · raw

@+fj:F32 -> @+ij:F32 -> @on_axis:Bool -> F32

ASF on ideal-translated objectives (pymoo __F = F − ideal).

def asf.go source · line 185 · raw

@f:List<&2, F32> -> @ideal:List<&2, F32> -> @+axis:Nat -> @+j:Nat -> @acc:F32 -> F32

def asf source · line 194 · raw

@f:List<&2, F32> -> @+axis:Nat -> @+ideal:List<&2, F32> -> F32

def pick_axis.go source · line 203 · raw

@rest:List<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> @+axis:Nat -> @+best_f:List<&2, F32> -> @+best_asf:F32 -> List<&2, F32>

def pick_axis source · line 217 · raw

@cand:List<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> @+axis:Nat -> List<&2, F32>

def pick_axis.one source · line 230 · raw

@+ctx:ExtCtx -> @+axis:Nat -> List<&2, F32>

def pick_extremes source · line 236 · raw

@+cand:List<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> @m:Nat -> List<&2, List<&2, F32>>

One ASF extreme per axis; axes are independent.

def get_row source · line 239 · raw

@+mat:List<&2, List<&2, F32>> -> @i:Nat -> List<&2, F32>

def mat_get source · line 242 · raw

@+mat:List<&2, List<&2, F32>> -> @i:Nat -> @j:Nat -> F32

def swap_rows.do source · line 245 · raw

@+mat:List<&2, List<&2, F32>> -> @+i:Nat -> @+k:Nat -> List<&2, List<&2, F32>>

def swap_rows.when source · line 250 · raw

@+mat:List<&2, List<&2, F32>> -> @+i:Nat -> @+k:Nat -> @same:Bool -> List<&2, List<&2, F32>>

def swap_rows source · line 257 · raw

@+mat:List<&2, List<&2, F32>> -> @+i:Nat -> @+k:Nat -> List<&2, List<&2, F32>>

def scale_vec.go source · line 260 · raw

@fuel:Nat -> @+row:List<&2, F32> -> @+j:Nat -> @+div:F32 -> List<&2, F32>

def scale_row source · line 267 · raw

@+mat:List<&2, List<&2, F32>> -> @+col:Nat -> @+n:Nat -> @+div:F32 -> List<&2, List<&2, F32>>

def axpy_vec.go source · line 270 · raw

@fuel:Nat -> @+row:List<&2, F32> -> @+piv:List<&2, F32> -> @+j:Nat -> @+factor:F32 -> List<&2, F32>

def axpy_row source · line 279 · raw

@+mat:List<&2, List<&2, F32>> -> @+row:Nat -> @+col:Nat -> @+n:Nat -> @+factor:F32 -> @+piv:List<&2, F32> -> List<&2, List<&2, F32>>

def find_pivot.go source · line 282 · raw

@fuel:Nat -> @+mat:List<&2, List<&2, F32>> -> @+col:Nat -> @+row:Nat -> @+best_row:Nat -> @+best:F32 -> Nat

def find_pivot source · line 297 · raw

@+mat:List<&2, List<&2, F32>> -> @+col:Nat -> @+n:Nat -> Nat

def elim_one source · line 300 · raw

@+row:Nat -> @+col:Nat -> @+n:Nat -> @+piv:List<&2, F32> -> @+mat:List<&2, List<&2, F32>> -> @skip:Bool -> List<&2, List<&2, F32>>

def elim_rows source · line 307 · raw

@fuel:Nat -> @+row:Nat -> @+col:Nat -> @+n:Nat -> @+piv:List<&2, F32> -> @mat:List<&2, List<&2, F32>> -> List<&2, List<&2, F32>>

def ge_step source · line 314 · raw

@+col:Nat -> @+n:Nat -> @+mat:List<&2, List<&2, F32>> -> @+pivot:Nat -> @tiny:Bool -> Maybe<&2, List<&2, List<&2, F32>>>

def ge_col.go source · line 324 · raw

@fuel:Nat -> @+col:Nat -> @+n:Nat -> @acc:Maybe<&2, List<&2, List<&2, F32>>> -> Maybe<&2, List<&2, List<&2, F32>>>

def ge_col source · line 339 · raw

@fuel:Nat -> @+col:Nat -> @+n:Nat -> @mat:List<&2, List<&2, F32>> -> Maybe<&2, List<&2, List<&2, F32>>>

def extract_x.go source · line 342 · raw

@fuel:Nat -> @+mat:List<&2, List<&2, F32>> -> @+n:Nat -> @+i:Nat -> @acc:List<&2, F32> -> List<&2, F32>

def extract_x source · line 349 · raw

@+mat:List<&2, List<&2, F32>> -> @+n:Nat -> List<&2, F32>

def solve_linear.go source · line 352 · raw

@done:Maybe<&2, List<&2, List<&2, F32>>> -> @+n:Nat -> Maybe<&2, List<&2, F32>>

def build_aug source · line 359 · raw

@+ideal:List<&2, F32> -> @ext:List<&2, List<&2, F32>> -> List<&2, List<&2, F32>>

def solve_linear source · line 366 · raw

@+ext:List<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> @+n:Nat -> Maybe<&2, List<&2, F32>>

def intercept_bad source · line 369 · raw

@+inv:F32 -> Bool

def inv_ok.fin source · line 375 · raw

@+inv:F32 -> @bad:Bool -> Maybe<&2, F32>

def inv_ok.pos source · line 382 · raw

@+xj:F32 -> @tiny:Bool -> Maybe<&2, F32>

def inv_ok source · line 391 · raw

@+xj:F32 -> Maybe<&2, F32>

C#: |x| < 1e-12 or x < 0 fails; then intercept = 1/x must be finite and > 1e-6.

def intercepts_from_x.one source · line 394 · raw

@h:Maybe<&2, F32> -> @ys:List<&2, F32> -> Maybe<&2, List<&2, F32>>

def intercepts_from_x.cons source · line 401 · raw

@+xj:F32 -> @rest:Maybe<&2, List<&2, F32>> -> Maybe<&2, List<&2, F32>>

def intercepts_from_x source · line 408 · raw

@x:List<&2, F32> -> Maybe<&2, List<&2, F32>>

def try_intercepts.go source · line 415 · raw

@x:Maybe<&2, List<&2, F32>> -> Maybe<&2, List<&2, F32>>

def try_intercepts source · line 422 · raw

@+ext:List<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> Maybe<&2, List<&2, F32>>

def add_ideal source · line 425 · raw

@ideal:List<&2, F32> -> @icepts:List<&2, F32> -> List<&2, F32>

def clamp_worst source · line 434 · raw

@nadir:List<&2, F32> -> @worst:List<&2, F32> -> List<&2, F32>

def nadir_from_maybe source · line 443 · raw

@m:Maybe<&2, List<&2, F32>> -> @+ideal:List<&2, F32> -> @+worst:List<&2, F32> -> @+front:List<&2, F32> -> List<&2, F32>

def fallback_pop source · line 450 · raw

@nadir:List<&2, F32> -> @ideal:List<&2, F32> -> @wpop:List<&2, F32> -> List<&2, F32>

def fallback_unit source · line 461 · raw

@nadir:List<&2, F32> -> @ideal:List<&2, F32> -> List<&2, F32>

def spans_or_one source · line 470 · raw

@nadir:List<&2, F32> -> @ideal:List<&2, F32> -> List<&2, F32>

def normalize_nd.body source · line 480 · raw

@+ideal0:List<&2, F32> -> @+worst0:List<&2, F32> -> @+ext0:List<&2, List<&2, F32>> -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @nd:List<&2, Nat> -> Pair(State, List<&2, List<&2, F32>>)

def normalize_nd.go source · line 495 · raw

@state:State -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @nd:List<&2, Nat> -> Pair(State, List<&2, List<&2, F32>>)

def normalize_nd source · line 500 · raw

@state:State -> @+pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> @nd:List<&2, Nat> -> Pair(State, List<&2, List<&2, F32>>)

def normalize source · line 507 · raw

@state:State -> @pop:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> Pair(State, List<&2, List<&2, F32>>)

def normalize_vecs.snd source · line 510 · raw

@pair:Pair(State, List<&2, List<&2, F32>>) -> List<&2, List<&2, F32>>

def normalize_vecs source · line 514 · raw

@+xs:List<&2, 0xcd07e24a626a62e74603d48f436cd679/individual.Individual> -> List<&2, List<&2, F32>>