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()); }
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); }
public CResolver(CSpace space) { Space = space; }