Exemplo n.º 1
0
        public void GeneticDataConfigFloatingTest()
        {
            GeneticDataConfig cfg = new GeneticDataConfig();

            cfg.AllowFloat = true;
            cfg.MinGen     = 0;
            cfg.MaxGen     = 1;

            double testValue = 0;
            double testFloat = -0.3;

            cfg.Floating(ref testValue, testFloat);

            Assert.AreEqual(testValue, 0);

            cfg.Floating(ref testValue, -testFloat);

            Assert.AreEqual(testValue, 0.3);

            cfg.AllowFloat = false;

            cfg.Floating(ref testValue, testFloat);

            Assert.AreEqual(testValue, 0);

            cfg.Floating(ref testValue, -2 * testFloat);

            Assert.AreEqual(testValue, 1);
        }
        public void ChangeToRandomMutateTest()
        {
            GeneticDataConfig cfg = DefaultGeneticAlgorithmFactory.CreateConfig(1, 1);
            Chromosome        chr = new Chromosome(1);

            chr.Gen[0] = 0.5;

            //Запрещаем вещественные числа и ставим диапазон [0,1]
            cfg.MinGen     = 0;
            cfg.MaxGen     = 1;
            cfg.AllowFloat = false;

            //мутация 100%, диапазон мутации 200000%, запрещаем игнорировать диапазон,
            //если за диапазоном то ложим на границу диапазона
            cfg.Mutation.MutationPercent = 1;
            cfg.Mutation.MutationRange   = 2000;
            cfg.Mutation.Strict          = true;

            ChangeToRandomMutation mutate = new ChangeToRandomMutation();

            mutate.Init(cfg);
            mutate.Mutate(chr);

            Assert.AreNotEqual(chr.Gen[0], 0.5);
            Assert.IsTrue(chr.Gen[0] == 0 || chr.Gen[0] == 1);
        }
Exemplo n.º 3
0
        public void DataConfigValidateTest()
        {
            GeneticDataConfig cfg = new GeneticDataConfig();

            /*   cfg.MinGen = double.NaN;
             * Assert.ThrowsException<ArgumentException>((Action)cfg.Validate);
             *
             *  cfg.MinGen = 0;
             * cfg.MaxGen = double.NaN;
             * Assert.ThrowsException<ArgumentException>((Action)cfg.Validate);*/

            cfg.MinGen = 0;
            cfg.MaxGen = -1;
            Assert.ThrowsException <LogicalException>((Action)cfg.Validate);

            cfg.MaxGen = 1;

            Assert.ThrowsException <ArgumentException>((Action)cfg.Validate);

            cfg.GenCount        = 1;
            cfg.ChromosomeCount = 1;
            Assert.ThrowsException <ArgumentException>((Action)cfg.Validate);

            cfg.ChromosomeCount = 2;
            //  cfg.MutationPercent = 2;
            //   Assert.ThrowsException<ArgumentException>((Action)cfg.Validate);

            //     cfg.MutationPercent = 0.1;

            Assert.ThrowsException <ArgumentException>((Action)cfg.Validate);
            cfg.CrossesNumber = cfg.ChromosomeCount / 2;

            cfg.Validate();
        }
        /// <summary>
        /// Конструирует конфиг с реализациями частей алгоритма
        /// </summary>
        /// <param name="geneCount">количество генов</param>
        /// <param name="chromosomeCount">количество хромосом</param>
        /// <returns></returns>
        public static GeneticDataConfig CreateConfig(int geneCount, int chromosomeCount)
        {
            GeneticDataConfig config = new GeneticDataConfig()
            {
                GenCount        = geneCount,
                ChromosomeCount = chromosomeCount,
                CrossesNumber   = geneCount / 2
            };

            return(config);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Создание из конфига и установление алгоритма из фабрики по умолчанию
 /// </summary>
 /// <param name="cfg"></param>
 /// <returns></returns>
 public static Genetic.GeneticAlgorithm Create(GeneticDataConfig cfg)
 {
     Genetic.GeneticAlgorithm ga = new GeneticAlgorithm()
     {
         Config       = cfg,
         Cancellation = CreateCancellation(),
         Generator    = new Random(DateTime.Now.Millisecond),
     };
     ga.CurrentGeneration = new GeneticGeneration(ga);
     return(ga);
 }
        public void GeneticAlgorithmCompetitionTest()
        {
            GeneticDataConfig cfg = new GeneticDataConfig()
            {
                ChromosomeCount = 100,
                GenCount        = 20,
                MaxGen          = 1,
                MinGen          = 0,
                AllowFloat      = false
            };
            GeneticAlgorithm alg = Factory.RandomGenerationAlgorithmFactory.Create(cfg);

            alg.Algorithm.Task       = new Examples.TaskExample();
            alg.Algorithm.Comparator = new Util.Comparators.ChromosomeComparatorDescendingDefault();

            alg.Competition();

            Assert.IsTrue(alg.CurrentGeneration[0].FitnessResult > alg.CurrentGeneration[99].FitnessResult);
        }
Exemplo n.º 7
0
        public static GeneticDataConfig CreateConfig(int min, int max)
        {
            var Config = new GeneticDataConfig()
            {
                AllowFloat      = true,
                ChromosomeCount = 100,
                CrossesNumber   = 50,
                GenCount        = 1,
                KillSame        = true,
                MaxGen          = max,
                MinGen          = min,
                Mutation        = new GeneticDataConfig.MutationConfig()
                {
                    MutationPercent = 0.1,
                    MutationRange   = 0.5,
                    Strict          = true,
                },
                RandomInit          = true,
                ReproductionPercent = 0.5
            };

            return(Config);
        }
 public void Init(GeneticDataConfig cfg)
 {
     this.cfg = cfg;
 }
Exemplo n.º 9
0
 public void Init(GeneticDataConfig cfg)
 {
 }
Exemplo n.º 10
0
 public void Init(GeneticDataConfig cfg, IComparer <Chromosome> comparator)
 {
     this.cfg        = cfg;
     this.comparator = comparator;
 }
 public void Init(GeneticDataConfig cfg)
 {
     this.cfg = cfg;
     value    = Math.Max(Math.Abs(cfg.MaxGen), Math.Abs(cfg.MinGen));
 }