def niche_loop.bags

unified-nsga-iii@0.2.2.0 · survival.bend:913

import unified-nsga-iii@0.2.2.0/survival.bend as Survival
import Base
import unified-nsga-iii@0.2.2.0/rng.bend as Rng

913def niche_loop.bags(fuel: Nat, k: Nat, bags: List<&2, Bag>, selected: List<&2, Nat>, rng: Rng.State) -> List<&2, Nat> & Rng.State:
914  match fuel k bags:
915    case 0n kk bs:
916      (selected, rng)
917    case f 0n bs:
918      (selected, rng)
919    case f kk Nil{}:
920      (selected, rng)
921    case 1n+f 1n+krest +b0 <> +bs:
922      +bags2 = sort_bags({b0 <> bs : List<&2, Bag>})
923      +rng1 = pick_ref.rng.bags(bags2, rng)
924      +r = Rng.last_nat(rng1)
925      +rng2 = pick_member.rng.empty.rows(bag_members_of(bags2, r), Nat.is_eq(bag_count_of(bags2, r), 0n), rng1)
926      +pick = Rng.last_nat(rng2)
927      +next = bags_refill(bags2, r, pick)
928      niche_loop.bags(
929        f,
930        krest,
931        next,
932        List.append(&2, Nat, selected, [pick]),
933        rng2
934      )

Uses (15)

Used by (1)