private KromosomDouble SimpleArithmeticRecombination(KromosomDouble kromosom1, KromosomDouble kromosom2) { int position = (int)GenerirajSelekcija(_dimenzionalnost, _rand); KromosomDouble dijete1 = new KromosomDouble(); KromosomDouble dijete2 = new KromosomDouble(); for (int i = 0; i < position; i++) { dijete1.PostaviRjesenje(i, kromosom1.Rjesenje(i)); } for (int i = position; i < _dimenzionalnost; i++) { double val = (kromosom1.Rjesenje(i) + kromosom2.Rjesenje(i)) / 2; dijete1.PostaviRjesenje(i, val); } return(dijete1); }
private void NadjiBest(KromosomDouble[] p) { for (int k = 0; k < _velicinaPop; k++) //nadji best { if (p[k]._dobrota > _best._dobrota) { _best = p[k]; //najbolja jedinka _best._dobrota = p[k]._dobrota; continue; } if (p[k]._dobrota < _worstPop._dobrota) { _worstPop = p[k]; //najgora jedinka _worstPop._dobrota = p[k]._dobrota; continue; } } if (t > 1 && (_oldBest != _best)) { _oldBest = _best; _oldBest._dobrota = _best._dobrota; if (_verbose) { Console.WriteLine(">>>>>>> {0} >>> Nova najbolja jedinka:", _imeAlg); Console.WriteLine("\tGeneracija: {0}", (int)t / _velicinaPop); Console.WriteLine("\tIteracija: {0}", t); Console.Write("\tVrijednost funkcije: {0} \n\tParametri:", _nn.CalculateError(_best.PoljeRjesenja, _data)); for (int i = 0; i < _dimenzionalnost; i++) { if (i % 12 == 0) { Console.Write("\n"); } Console.Write("{0:0.00} \t", _best.Rjesenje(i)); if (i == _dimenzionalnost - 1) { Console.Write("\n"); } } } else { Console.Write(">>> {0}: Nova najbolja jedinka:", _imeAlg); Console.Write("\tGeneracija: {0}", (int)t / _velicinaPop); Console.WriteLine("\tVrijednost funkcije: {0}", _nn.CalculateError(_best.PoljeRjesenja, _data)); } } else if (t <= 1) { _oldBest = _best; } }
private KromosomDouble SimulatedBinaryCrossover(KromosomDouble kromosom1, KromosomDouble kromosom2) { double alfa = GenerirajSelekcija(1, _rand); KromosomDouble dijete1 = new KromosomDouble(); for (int i = 0; i < _dimenzionalnost; i++) { double val = alfa * kromosom1.Rjesenje(i) + (1 - alfa) * kromosom2.Rjesenje(i); dijete1.PostaviRjesenje(i, val); } return(dijete1); }
private KromosomDouble Mutacija2(KromosomDouble kr) { for (int i = 0; i < _dimenzionalnost; i++) { double vjv = GenerirajSelekcija(1, _rand); if (vjv <= _vjvMutKomp2) { var val = kr.Rjesenje(i) + Distribucije.Normalna(0, _sigma2); kr.PostaviRjesenje(i, val); } } return(kr); }
private void IspisiRjesenje(KromosomDouble _best) { Console.WriteLine("============================================================"); Console.WriteLine("\n>>>>>>> Algoritam {0} zaustavljen:", _imeAlg); Console.WriteLine("\tBroj iteracija: {0}", _brojIteracija); Console.WriteLine("\tGeneracija: {0}", (int)t / _velicinaPop); Console.Write("\tVrijednost funkcije: {0} \n\tParametri:", _nn.CalculateError(_best.PoljeRjesenja, _data)); for (int i = 0; i < _dimenzionalnost; i++) { Console.Write(" {0} ", _best.Rjesenje(i)); if (i == _dimenzionalnost - 1) { Console.Write("\n"); } } Console.WriteLine("============================================================\n"); }