示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 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");
 }