예제 #1
0
        private KromosomDouble HeuristicCrossover(KromosomDouble kromosom1, KromosomDouble kromosom2)
        {
            double         a       = GenerirajSelekcija(1, _rand);
            KromosomDouble dijete1 = new KromosomDouble();

            KromosomDouble bolji, losiji;

            if (kromosom1._dobrota < kromosom2._dobrota)
            {
                bolji  = kromosom2;
                losiji = kromosom1;
            }
            else
            {
                bolji  = kromosom1;
                losiji = kromosom2;
            }

            for (int i = 0; i < _dimenzionalnost; i++)
            {
                double val = a * (bolji.Rjesenje(i) - losiji.Rjesenje(i)) + bolji.Rjesenje(i);
                if (Math.Abs(val) > 20)                                          // WARNING, heuristicni zna izletit
                {
                    val = GenerirajSelekcija(1, _rand);
                }
                dijete1.PostaviRjesenje(i, val);
            }

            return(dijete1);
        }
예제 #2
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);
        }
예제 #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 Mutacija1(KromosomDouble kr)
        {
            for (int i = 0; i < _dimenzionalnost; i++)
            {
                double vjv = GenerirajSelekcija(1, _rand);
                if (vjv <= _vjvMutKomp1)
                {
                    var val = Distribucije.Normalna(0, _sigma1);
                    kr.PostaviRjesenje(i, val);
                }
            }

            return(kr);
        }