def stamp_asgs.go

unified-nsga-iii@0.2.2.0 · tournament.bend:208

import unified-nsga-iii@0.2.2.0/tournament.bend as Tournament
import Base
import unified-nsga-iii@0.2.2.0/individual.bend as Ind
import unified-nsga-iii@0.2.2.0/survival.bend as Surv
import unified-nsga-iii@0.2.2.0/util.bend as Util

208# Zip pop with assignments. Mid-split both lists at the same mid.
209def stamp_asgs.go(+fuel: Nat, pop: List<&2, Ind.Individual>, +asgs: List<&2, Surv.Assignment>) -> List<&2, Ind.Individual>:
210  match fuel pop:
211    case 0n Nil{}:
212      Nil{}
213    case 0n +ind <> rest:
214      match asgs:
215        case Nil{}:
216          {ind <> rest : List<&2, Ind.Individual>}
217        case +a <> as:
218          stamp_asgs.one(a, ind) <> stamp_asgs.go(0n, rest, as)
219    case 1n+p Nil{}:
220      Nil{}
221    case 1n+p +ind <> Nil{}:
222      match asgs:
223        case Nil{}:
224          ind <> Nil{}
225        case +a <> as:
226          stamp_asgs.one(a, ind) <> Nil{}
227    case 1n+p h <> t:
228      +all = {h <> t : List<&2, Ind.Individual>}
229      +mid = Nat.div(Util.list_len(Ind.Individual, all), 2n)
230      lo hi = stamp_asgs.go(p, List.take(&2, Ind.Individual, all, mid), List.take(&2, Surv.Assignment, asgs, mid)) stamp_asgs.go(p, List.drop(&2, Ind.Individual, all, mid), List.drop(&2, Surv.Assignment, asgs, mid))
231      List.append(&2, Ind.Individual, lo, hi)

Uses (10)

Used by (1)