bounds.bend source
bounds.bend on the hub · documented module
# IProblem box — variable count + per-var [lo, hi].# Named problems live in problems.bend.import Basetype Interval is Data: MkInterval{ low: F32 high: F32 }type Box is Data: MkBox{ m: Nat ivs: List<&2, Interval> }def interval(+low: F32, +high: F32) -> Interval: MkInterval{low, high}def lo(b: Interval) -> F32: match b: case MkInterval{low, high}: lowdef hi(b: Interval) -> F32: match b: case MkInterval{low, high}: highdef box(+m: Nat, ivs: List<&2, Interval>) -> Box: MkBox{m, ivs}def n_obj(b: Box) -> Nat: match b: case MkBox{m, ivs}: mdef intervals_of(b: Box) -> List<&2, Interval>: match b: case MkBox{m, ivs}: ivsdef n_var(b: Box) -> Nat: List.length(&2, Interval, intervals_of(b))def at.go(m: Maybe<&2, Interval>) -> Interval: match m: case None{}: MkInterval{0.0, 1.0} case Some{iv}: ivdef at(b: Box, i: Nat) -> Interval: at.go(List.get(&2, Interval, intervals_of(b), i))# nv copies of [0, 1]. Smoke / operator tests; unit ZDT / DTLZ boxes.def unit_n(nv: Nat, nm: Nat) -> Box: MkBox{nm, List.replicate(Interval, nv, MkInterval{0.0, 1.0})}# nv copies of [low, high]. Sphere / Ackley / Rosenbrock and any uniform range.def span_n(nv: Nat, nm: Nat, +low: F32, +high: F32) -> Box: MkBox{nm, List.replicate(Interval, nv, MkInterval{low, high})}