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
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)