Exemplo n.º 1
0
        public static decimal[] StartAlgorithm(CSpace space, CClass class1, CClass class2)
        {
            var currentGenertaion = _GetFirstGeneration(space);
            var class1Objects     = space.Objects.Where(d => d.Class == class1).ToList();
            var class2Objects     = space.Objects.Where(d => d.Class == class2).ToList();
            List <KeyValuePair <decimal[], decimal> > fitnessValues = _GetFitnessValues(class1Objects, class2Objects, currentGenertaion);

            decimal oldFitnessValue = -100;

            for (int i = 0; i < _iterationsCount; i++)
            {
                currentGenertaion = _GetNextGeneration(fitnessValues);
                fitnessValues     = _GetFitnessValues(class1Objects, class2Objects, currentGenertaion);
                decimal currentFittnesValues = fitnessValues.OrderByDescending(d => d.Value).Select(d => d.Value).Average();

                if (Math.Abs(currentFittnesValues - oldFitnessValue) <= _epsilon)
                {
                    break;
                }
                else
                {
                    oldFitnessValue = currentFittnesValues;
                }
            }

            return(fitnessValues.OrderByDescending(d => d.Value).Select(d => d.Key).FirstOrDefault());
        }
Exemplo n.º 2
0
        private static decimal [][] _GetFirstGeneration(CSpace space)
        {
            var attrCount = space.Objects.First().AttributeValues.Count;
            var result    = new decimal[_objCount][];

            for (int i = 0; i < _objCount; i++)
            {
                result[i] = new decimal[attrCount + 1];
                for (int j = 0; j < attrCount + 1; j++)
                {
                    result[i][j] = (decimal)_rnd.NextDouble() * 2 - 1;
                }
            }
            return(result);
        }
Exemplo n.º 3
0
 public CResolver(CSpace space)
 {
     Space = space;
 }