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 )