Entity: Sequences 333 38 null * Operation: subItems Sequences Sequence(double) s Sequence(double) inds Sequence(int) query static true result = inds->select( i | 1 <= i & i <= s.size )->collect( j | s[j] ) Operation: sqFloor Sequences Sequence(int) s Sequence(double) query static true result = s->collect( x | x.floor ) Operation: sqRound Sequences Sequence(int) s Sequence(double) query static true result = s->collect( x | x.round ) Operation: sqAbs Sequences Sequence(double) s Sequence(double) query static true result = s->collect( x | x.abs ) Operation: sqCeil Sequences Sequence(int) s Sequence(double) query static true result = s->collect( x | x.ceil ) Operation: sequenceEq Sequences Sequence(boolean) s Sequence(double) v double query static true result = s->collect( e | e = v ) Operation: sequenceLeq Sequences Sequence(boolean) s Sequence(double) v double query static true result = s->collect( e | e <= v ) Operation: sequenceLess Sequences Sequence(boolean) s Sequence(double) v double query static true result = s->collect( e | e < v ) Operation: sequenceAdd Sequences Sequence(double) s Sequence(double) v double query static true result = s->collect( e | e + v ) Operation: ssAdd Sequences Sequence(double) s1 Sequence(double) s2 Sequence(double) query static s1.size = s2.size result = Integer.subrange(1,s1.size)->collect( i | s1[i] + s2[i] ) Operation: sequenceMult Sequences Sequence(double) ss Sequence(double) v double query static true result = ss->collect( e | e * v ) Operation: ssMult Sequences Sequence(double) s1 Sequence(double) s2 Sequence(double) query static s1.size = s2.size result = Integer.subrange(1,s1.size)->collect( i | s1[i] * s2[i] ) Operation: ssEq Sequences Sequence(boolean) s1 Sequence(double) s2 Sequence(double) query static true result = Integer.subrange(1,s1.size)->collect( i | s1[i] = s2[i] ) Operation: ssLeq Sequences Sequence(boolean) s1 Sequence(double) s2 Sequence(double) query static true result = Integer.subrange(1,s1.size)->collect( i | s1[i] <= s2[i] ) Operation: ssLess Sequences Sequence(boolean) s1 Sequence(double) s2 Sequence(double) query static true result = Integer.subrange(1,s1.size)->collect( i | s1[i] < s2[i] ) Operation: toStringDouble Sequences String s Sequence(double) query static true result = "Sequence{ " + s->collect( x | x + " " )->sum() + "}" Operation: toStringInt Sequences String s Sequence(int) query static true result = "Sequence{ " + s->collect( x | x + " " )->sum() + "}" Operation: toStringBoolean Sequences String s Sequence(boolean) query static true result = "Sequence{ " + s->collect( x | x + " " )->sum() + "}" Entity: Matrix 643 207 null * Operation: determinant2 Matrix double m Sequence(Sequence(double)) query static m.size = 2 & m[1]->size() = 2 a1 = m[1]->at(1) & a2 = m[1]->at(2) & b1 = m[2]->at(1) & b2 = m[2]->at(2) & result = a1 * b2 - a2 * b1 Operation: detaux Matrix double x1 double y1 double x2 double y2 double query static true result = x1*y1 - x2*y2 Operation: determinant3 Matrix double m Sequence(Sequence(double)) query static m.size = 3 & m[1]->size() = 3 result = (m[1]->at(1)) * Matrix.detaux(m[2]->at(2), m[3]->at(3), m[2]->at(3), m[3]->at(2)) - (m[1]->at(2)) * Matrix.detaux(m[2]->at(1), m[3]->at(3), m[3]->at(1), m[2]->at(3)) + (m[1]->at(3)) * Matrix.detaux(m[2]->at(1), m[3]->at(2), m[2]->at(2), m[3]->at(1)) Operation: lineqn3solution1 Matrix double m Sequence(Sequence(double)) d double d1 double d2 double d3 double query static m.size = 3 & m[1]->size() = 3 & d /= 0 m1 = Sequence{ Sequence{ m[1]->at(2), m[1]->at(3), d1}, Sequence{ m[2]->at(2), m[2]->at(3), d2}, Sequence{ m[3]->at(2), m[3]->at(3), d3} } & result = - Matrix.determinant3(m1)/d Operation: lineqn3solution2 Matrix double m Sequence(Sequence(double)) d double d1 double d2 double d3 double query static m.size = 3 & m[1]->size() = 3 & d /= 0 m1 = Sequence{ Sequence{ m[1]->at(1), m[1]->at(3), d1}, Sequence{ m[2]->at(1), m[2]->at(3), d2}, Sequence{ m[3]->at(1), m[3]->at(3), d3}} & result = Matrix.determinant3(m1)/d Operation: lineqn3solution3 Matrix double m Sequence(Sequence(double)) d double d1 double d2 double d3 double query static m.size = 3 & m[1]->size() = 3 & d /= 0 m1 = Sequence{ Sequence{ m[1]->at(1), m[1]->at(2), d1}, Sequence{ m[2]->at(1), m[2]->at(2), d2}, Sequence{ m[3]->at(1), m[3]->at(2), d3}} & result = - Matrix.determinant3(m1)/d Operation: max Matrix double m Sequence(Sequence(double)) query static true result = m->collect( s | s->max() )->max() Operation: min Matrix double m Sequence(Sequence(double)) query static true result = m->collect( s | s->min() )->min() Operation: matrixAdd Matrix Sequence(Sequence(double)) s Sequence(Sequence(double)) v double query static true result = s->collect( sq | Sequences.sequenceAdd(sq,v) ) Operation: mmAdd Matrix Sequence(Sequence(double)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static m1.size = m2.size result = Integer.subrange(1,m1.size)->collect( i | Sequences.ssAdd(m1[i],m2[i]) ) Operation: matrixMult Matrix Sequence(Sequence(double)) s Sequence(Sequence(double)) v double query static true result = s->collect( sq | Sequences.sequenceMult(sq,v) ) Operation: mmMult Matrix Sequence(Sequence(double)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static m1.size = m2.size result = Integer.subrange(1,m1.size)->collect( i | Sequences.ssMult(m1[i],m2[i]) ) Operation: rowMult Matrix Sequence(double) s Sequence(double) m Sequence(Sequence(double)) query static true result = Integer.subrange(1, s.size)->collect( i | Integer.Sum(1, m.size, k, s[k]*(m[k]->at(i)))) Operation: matrixProd Matrix Sequence(Sequence(double)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static true result = m1->collect( row | Matrix.rowMult(row, m2) ) Operation: mmEq Matrix Sequence(Sequence(boolean)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static true result = Integer.subrange(1,m1.size)->collect( i | Sequences.ssEq(m1[i], m2[i]) ) Operation: mmLeq Matrix Sequence(Sequence(boolean)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static true result = Integer.subrange(1,m1.size)->collect( i | Sequences.ssLeq(m1[i], m2[i]) ) Operation: mmLess Matrix Sequence(Sequence(boolean)) m1 Sequence(Sequence(double)) m2 Sequence(Sequence(double)) query static true result = Integer.subrange(1,m1.size)->collect( i | Sequences.ssLess(m1[i], m2[i]) ) Operation: subRows Matrix Sequence(Sequence(double)) m Sequence(Sequence(double)) s Sequence(int) query static true result = s->select( i | 1 <= i & i <= m.size )->collect( j | m[j] ) Operation: subColumns Matrix Sequence(Sequence(double)) m Sequence(Sequence(double)) s Sequence(int) query static true result = m->collect( r | Sequences.subItems(r,s) ) Operation: subMatrix Matrix Sequence(Sequence(double)) m Sequence(Sequence(double)) rows Sequence(int) cols Sequence(int) query static true result = Matrix.subColumns(Matrix.subRows(m,rows),cols) Operation: setMatrix Matrix Sequence(Sequence(double)) m Sequence(Sequence(double)) vals Sequence(double) query static true result = Integer.subrange(1, m.size)->collect( i | vals.subrange(1 + (i-1)*(m[1].size), i*(m[1].size)) ) Operation: toStringDouble Matrix String s Sequence(Sequence(double)) query static true result = "Sequence{ " + s->collect( x | Sequences.toStringDouble(x) + " " )->sum() + "}" Operation: toStringInt Matrix String s Sequence(Sequence(int)) query static true result = "Sequence{ " + s->collect( x | Sequences.toStringInt(x) + " " )->sum() + "}" Operation: toStringBoolean Matrix String s Sequence(Sequence(boolean)) query static true result = "Sequence{ " + s->collect( x | Sequences.toStringBoolean(x) + " " )->sum() + "}" Entity: Math 722 508 null * external Operation: random Math double query static true result = 0.5 Entity: GeneticAlgorithm 69 489 null * maxfitness double 3 false false true maxvalue double 3 false false true elitelb double 3 false false true combinelb double 3 false false true mutatelb double 3 false false true Entity: GAIndividual 365 469 null * fitnessval double 3 false false false Operation: nelsonseigal InterestRate double t double v1 double v2 double v3 double lambda double static query true tscaled = t/lambda & exptscaled = (-tscaled)->exp() & expratio = (1 - exptscaled)/tscaled & result = v1 + v2*expratio + v3*(expratio - exptscaled) Operation: nelsonseigalsvensson InterestRate double t double v1 double v2 double v3 double v4 double lambda1 double lambda2 double static query true tscaled1 = t/lambda1 & tscaled2 = t/lambda2 & exptscaled1 = (-tscaled1)->exp() & exptscaled2 = (-tscaled2)->exp() & expratio1 = (1 - exptscaled1)/tscaled1 & expratio2 = (1 - exptscaled2)/tscaled2 & result = v1 + v2*expratio1 + v3*(expratio1 - exptscaled1) + v4*(expratio2 - exptscaled2) Operation: ns InterestRate double t double v1 double v2 double v3 double lambda double static query true (t = 0 => result = v1 + v2) & (t > 0 => result = InterestRate.nelsonseigal(t,v1,v2,v3,lambda)) Operation: nss InterestRate double t double v1 double v2 double v3 double v4 double lambda1 double lambda2 double static query true (t = 0 => result = v1 + v2) & (t > 0 => result = InterestRate.nelsonseigalsvensson(t,v1,v2,v3,v4,lambda1,lambda2)) Operation: displayDifferences InterestRate String v1 double v2 double v3 double lambda double query true diff = rate - InterestRate.ns(maturity,v1,v2,v3,lambda) & result = (diff + " " + ((diff/rate)*100) + "%") Operation: nsrow InterestRate Sequence(double) r InterestRate lambda double static query true tscaled1 = r.maturity/lambda & exptscaled1 = (-tscaled1)->exp() & expratio1 = (1 - exptscaled1)/tscaled1 & result = Sequence{1.0, expratio1, expratio1 - exptscaled1} Operation: nsmatrix InterestRate Sequence(Sequence(double)) r1 InterestRate r2 InterestRate r3 InterestRate lambda double static query true result = Sequence{ InterestRate.nsrow(r1,lambda), InterestRate.nsrow(r2,lambda), InterestRate.nsrow(r3,lambda) } Operation: isUnfit GeneticAlgorithm boolean g GAIndividual query true ( g.traits[1].value <= 0 => result = true ) & (g.traits[4].value <= 0 => true) & ( g.traits[1].value + g.traits[2].value <= 0 => result = true) Operation: fitness GAIndividual double query true sumsquares = InterestRate->collect( r | (r.rate - InterestRate.ns(r.maturity, traits[1].value, traits[2].value, traits[3].value, traits[4].value))->sqr() )->sum() & result = 4.0/(1 + sumsquares->sqrt()) Operation: combine GAIndividual GAIndividual g GAIndividual query true n = traits.size & m = g.traits.size & p = ( Math.random() * n )->floor() + 1 & GAIndividual->exists( h | h.traits = traits.subrange(1,p) ^ g.traits.subrange(p + 1,m) & result = h ) Operation: mutate GAIndividual GAIndividual query true n = traits.size & p = ( Math.random() * n )->floor() + 1 & itm = traits[p].item & val = traits[p].value & GAIndividual->exists( h | h.traits->includesAll(traits) & GATrait->exists( tr | tr.item = itm & tr.value = (Math.random() - 0.5)*2 + val & h.traits[p] = tr ) & result = h ) Operation: toString GAIndividual String query true result = traits->collect( t | t.item + " = " + t.value + " " )->sum() Entity: GATrait 677 364 null * item String 3 false false false value double 3 false false false Association: GeneticAlgorithm GAIndividual -1 260 497 365 525 0 population null Association: GAIndividual GATrait 0 582 473 675 402 0 traits null ordered Association: GeneticAlgorithm GAIndividual 0 161 490 440 467 0 elite null 161 436 438 433 Association: GeneticAlgorithm GAIndividual 0 240 588 416 573 0 recombined null 242 608 393 610 Association: GeneticAlgorithm GAIndividual 0 135 589 572 569 0 mutated null 136 632 521 637 Entity: InterestRate 390 104 null * maturity double 3 false false false rate double 3 false false false GeneralUseCase: evolve false Constraint: p : population@pre p.fitnessval < 0.5 * GeneticAlgorithm.maxfitness p->isDeleted() GeneticAlgorithm evolve false Constraint: p : population@pre isUnfit(p) p->isDeleted() GeneticAlgorithm evolve false Constraint: p : population p.fitnessval >= 0.8 * GeneticAlgorithm.maxfitness p : elite GeneticAlgorithm evolve false Constraint: p : elite partners = population->select( pp | pp.fitnessval < p.fitnessval & pp.fitnessval >= 0.75 * GeneticAlgorithm.maxfitness ) & partners.size > 0 & q = partners.any p.combine(q) : recombined GeneticAlgorithm evolve false Constraint: p : population p.fitnessval >= 0.6 * GeneticAlgorithm.maxfitness & q = p.mutate() & q.fitness() > p.fitnessval q : mutated GeneticAlgorithm evolve false GeneralUseCase: nextgeneration false Constraint: null true population = elite@pre GeneticAlgorithm nextgeneration false Constraint: p : elite@pre null p.fitnessval = p.fitness() GeneticAlgorithm nextgeneration false Constraint: p : recombined@pre null p.fitnessval = p.fitness() GeneticAlgorithm nextgeneration false Constraint: p : mutated@pre null p.fitnessval = p.fitness() GeneticAlgorithm nextgeneration false Constraint: p : recombined@pre population@pre->forAll( q | q.fitnessval <= p.fitnessval - 0.0001 or q.fitnessval >= p.fitnessval + 0.0001 ) p : population GeneticAlgorithm nextgeneration false Constraint: p : mutated@pre population@pre->forAll( q | q.fitnessval <= p.fitnessval - 0.0001 or q.fitnessval >= p.fitnessval + 0.0001 ) p : population GeneticAlgorithm nextgeneration false Constraint: null true elite = Set{} & recombined = Set{} & mutated = Set{} GeneticAlgorithm nextgeneration false Constraint: population.size > 0 null GeneticAlgorithm.maxfitness = population->collect(fitnessval)->max() GeneticAlgorithm nextgeneration false Constraint: null true ("Population size = " + population.size)->display() & ("Max fitness = " + GeneticAlgorithm.maxfitness)->display() GeneticAlgorithm nextgeneration false GeneralUseCase: initialise false Constraint: null true GeneticAlgorithm->exists( g | g.maxvalue = 30 ) null initialise false Constraint: r1 : InterestRate r2 : InterestRate & r3 : InterestRate & r1.maturity < r2.maturity & r2.maturity < r3.maturity & m = InterestRate.nsmatrix(r1,r2,r3,0.5) & d = Matrix.determinant3(m) & d /= 0 GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Matrix.lineqn3solution1(m,d,-r1.rate,-r2.rate,-r3.rate) & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = Matrix.lineqn3solution2(m,d,-r1.rate,-r2.rate,-r3.rate) & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = Matrix.lineqn3solution3(m,d,-r1.rate,-r2.rate,-r3.rate) & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = 0.5 & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: r1 : InterestRate r2 : InterestRate & r3 : InterestRate & r1.maturity < r2.maturity & r2.maturity < r3.maturity & m = InterestRate.nsmatrix(r1,r2,r3,1.0) & d = Matrix.determinant3(m) & d /= 0 GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Matrix.lineqn3solution1(m,d,-r1.rate,-r2.rate,-r3.rate) & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = Matrix.lineqn3solution2(m,d,-r1.rate,-r2.rate,-r3.rate) & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = Matrix.lineqn3solution3(m,d,-r1.rate,-r2.rate,-r3.rate) & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = 1.0 & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: r1 : InterestRate r2 : InterestRate & r3 : InterestRate & r1.maturity < r2.maturity & r2.maturity < r3.maturity & m = InterestRate.nsmatrix(r1,r2,r3,1.5) & d = Matrix.determinant3(m) & d /= 0 GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Matrix.lineqn3solution1(m,d,-r1.rate,-r2.rate,-r3.rate) & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = Matrix.lineqn3solution2(m,d,-r1.rate,-r2.rate,-r3.rate) & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = Matrix.lineqn3solution3(m,d,-r1.rate,-r2.rate,-r3.rate) & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = 1.5 & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: r1 : InterestRate r2 : InterestRate & r3 : InterestRate & r1.maturity < r2.maturity & r2.maturity < r3.maturity & m = InterestRate.nsmatrix(r1,r2,r3,2.0) & d = Matrix.determinant3(m) & d /= 0 GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Matrix.lineqn3solution1(m,d,-r1.rate,-r2.rate,-r3.rate) & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = Matrix.lineqn3solution2(m,d,-r1.rate,-r2.rate,-r3.rate) & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = Matrix.lineqn3solution3(m,d,-r1.rate,-r2.rate,-r3.rate) & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = 2.0 & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: r1 : InterestRate r2 : InterestRate & r3 : InterestRate & r1.maturity < r2.maturity & r2.maturity < r3.maturity & m = InterestRate.nsmatrix(r1,r2,r3,2.5) & d = Matrix.determinant3(m) & d /= 0 GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Matrix.lineqn3solution1(m,d,-r1.rate,-r2.rate,-r3.rate) & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = Matrix.lineqn3solution2(m,d,-r1.rate,-r2.rate,-r3.rate) & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = Matrix.lineqn3solution3(m,d,-r1.rate,-r2.rate,-r3.rate) & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = 2.5 & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: i : Integer.subrange(0,20) null GAIndividual->exists( ind | GATrait->exists( t1 | t1.item = "beta1" & t1.value = Math.random()*maxvalue & t1 : ind.traits ) & GATrait->exists( t2 | t2.item = "beta2" & t2.value = (Math.random() - 0.5)*maxvalue & t2 : ind.traits ) & GATrait->exists( t3 | t3.item = "beta3" & t3.value = (Math.random() - 0.5)*maxvalue & t3 : ind.traits ) & GATrait->exists( t4 | t4.item = "lambda1" & t4.value = Math.random()*maxvalue & t4 : ind.traits ) & ind : population ) GeneticAlgorithm initialise false Constraint: p : population null p.fitnessval = p.fitness() GeneticAlgorithm initialise false Constraint: population.size > 0 null GeneticAlgorithm.maxfitness = population->collect(fitnessval)->max() GeneticAlgorithm initialise false Constraint: null true ("Population size = " + population.size)->display() & ("Max fitness = " + GeneticAlgorithm.maxfitness)->display() GeneticAlgorithm initialise false GeneralUseCase: test false Constraint: maxresult = population->selectMaximals(fitnessval)->any() null ("Solution has beta1=" + maxresult.traits[1].value + " beta2=" + maxresult.traits[2].value + " beta3=" + maxresult.traits[3].value + " lambda1=" + maxresult.traits[4].value)->display() & InterestRate->forAll( r | r.displayDifferences(maxresult.traits[1].value, maxresult.traits[2].value, maxresult.traits[3].value, maxresult.traits[4].value)->display()) GeneticAlgorithm test false Constraint: maxresult = population->selectMaximals(fitnessval)->any() i : Integer.subrange(-1, 1) & j : Integer.subrange(-1, 1) & k : Integer.subrange(-1, 1) InterestRate->collect( r | (r.rate - InterestRate.ns(r.maturity, maxresult.traits[1].value + i*0.1, maxresult.traits[2].value + j*0.1, maxresult.traits[3].value + k*0.1, maxresult.traits[4].value))->sqr() )->sum()->display() GeneticAlgorithm test false