public override void Evaluate(Solution solution) { var s = (IntergenSolution)solution; var doubleVal = new double[Model.Setting.NumberOfFeatures]; var interacVal = new double[Model.Setting.NumberOfInteractions]; var values = new XReal(solution); for (var i = 0; i < Model.Setting.NumberOfFeatures; i++) { doubleVal[i] = values.GetValue(i); } for (var i = 0; i < Model.Setting.NumberOfInteractions; i++) { interacVal[i] = values.GetValue(i + Model.Setting.NumberOfFeatures); } //the distribution from the NSGA2 var nsgaFv = new Distribution(doubleVal); var interacDist = new Distribution(interacVal); var variantValuesWithoutInteraction = FeatureMatrix.Dot(doubleVal); var interacVals = InteractionMatrix.Dot(interacVal); var variantResults = variantValuesWithoutInteraction.Add(interacVals); var variantResult = new Distribution(variantResults); var fc = new FitnessCalculator(Model, s.FoundAtEval); var fitnessValues = fc.Calculate(null, null, null, null, interacDist, InteractionTarget); solution.Objective[0] = fitnessValues.InteracVal; FitnessTracker.AddInterac(s.FoundAtEval, fitnessValues.InteracVal); }
public override void Evaluate(Solution solution) { _counter++; IntergenSolution s = (IntergenSolution)solution; s.FoundAtEval = _counter; var doubleVal = new double[Model.Setting.NumberOfFeatures]; var values = new XReal(solution); for (var i = 0; i < Model.Setting.NumberOfFeatures; i++) { doubleVal[i] = values.GetValue(i); } //the distribution from the NSGA2 var nsgaFv = new Distribution(doubleVal); var fc = new FitnessCalculator(Model, _counter); var fitnessValues = fc.Calculate(null, null, nsgaFv, FeatureTarget, null, null); solution.Objective[0] = fitnessValues.FeatureVal; FitnessTracker.AddFeat(s.FoundAtEval, fitnessValues.FeatureVal); }
public override void Evaluate(Solution solution) { var s = (IntergenSolution)solution; var doubleVal = new double[Model.Setting.NumberOfFeatures]; var interacVal = new double[Model.Setting.NumberOfInteractions]; var values = new XReal(solution); for (var i = 0; i < Model.Setting.NumberOfFeatures; i++) { doubleVal[i] = values.GetValue(i); } for (var i = 0; i < Model.Setting.NumberOfInteractions; i++) { interacVal[i] = values.GetValue(i + Model.Setting.NumberOfFeatures); } //the distribution from the NSGA2 var nsgaFv = new Distribution(doubleVal); var interacDist = new Distribution(interacVal); var multiplicationTime = new Stopwatch(); multiplicationTime.Start(); var variantValuesWithoutInteraction = FeatureMatrix.Dot(doubleVal); var interacVals = InteractionMatrix.Dot(interacVal); var variantResults = variantValuesWithoutInteraction.Add(interacVals); multiplicationTime.Stop(); FitnessTracker.AddMultiplicationTime(multiplicationTime.ElapsedMilliseconds); var variantResult = new Distribution(variantResults); var localScaledVariants = new double[VariantTarget.Values.Length]; Array.Copy(VariantTarget.Values, localScaledVariants, VariantTarget.Values.Length); var localVariantTarget = new Distribution(localScaledVariants); localVariantTarget = FMScaling.InteractionToScale(localVariantTarget, variantResults.Min(), variantResults.Max()); var fc = new FitnessCalculator(Model, s.FoundAtEval); var fitnessValues = fc.Calculate(variantResult, localVariantTarget, nsgaFv, FeatureTarget, interacDist, InteractionTarget); solution.Objective[0] = fitnessValues.FeatureVal; solution.Objective[1] = fitnessValues.InteracVal; solution.Objective[2] = fitnessValues.VariantVal; FitnessTracker.AddCalcTime(fc.GetFitnessTime()); FitnessTracker.Add(s.FoundAtEval, fitnessValues.FeatureVal, fitnessValues.InteracVal, fitnessValues.VariantVal); }
/// <summary> /// Retrieving data from Fitness API /// </summary> /// <param name="reload">Reload information</param> public static void ReadStatisticsInformation(bool reload = false) { if (FitnessTracker == null) { throw new NullReferenceException(nameof(FitnessTracker)); } if (!FitnessTracker.IsConnected) { return; } if (_statisticsInLoad) { return; } if (StatisticsInit && !reload) { return; } _statisticsInLoad = true; DateTime startDate = DateTime.Now.Date.AddDays(-4); DateTime endDate = DateTime.Now.Date.AddDays(1.01); FitnessTracker.StepsByPeriod(startDate, endDate, (obj) => { FiveDaysSteps = obj.Select(Convert.ToDouble).ToArray(); FinishLoad(); }); FitnessTracker.DistanceByPeriod(startDate, endDate, (obj) => { FiveDaysDistance = obj.ToArray(); FinishLoad(); }); FitnessTracker.CaloriesByPeriod(startDate, endDate, (obj) => { FiveDaysCalories = obj.ToArray(); FinishLoad(); }); FitnessTracker.ActiveTimeByPeriod(startDate, endDate, (obj) => { FiveDaysActiveTime = obj.ToArray(); FinishLoad(); }); }
void Awake() { mainThread = Thread.CurrentThread; // Get used components col = GetComponent <BoxCollider>(); fitnessTracker = GetComponent <FitnessTracker>(); trackManager = GetComponent <CarTrackController>(); for (int i = 0; i < 4; i++) { wheelsRelativePosition[i] = wheelPs[i].transform.position - transform.position; } trackSphereMat = trackSphere.GetComponent <Renderer>().material; }
public override void Evaluate(Solution solution) { var s = (IntergenSolution)solution; var doubleVal = new double[Model.Setting.NumberOfFeatures]; var values = new XReal(solution); for (var i = 0; i < Model.Setting.NumberOfFeatures; i++) { doubleVal[i] = values.GetValue(i); } //the distribution from the NSGA2 var nsgaFv = new Distribution(doubleVal); var variantResults = FeatureMatrix.Dot(doubleVal); var variantResult = new Distribution(variantResults); var localScaledVariants = new double[VariantTarget.Values.Length]; Array.Copy(VariantTarget.Values, localScaledVariants, VariantTarget.Values.Length); var localVariantTarget = new Distribution(localScaledVariants); localVariantTarget = FMScaling.InteractionToScale(localVariantTarget, variantResults.Min(), variantResults.Max()); var fc = new FitnessCalculator(Model, s.FoundAtEval); var fitnessValues = fc.Calculate(variantResult, localVariantTarget, nsgaFv, FeatureTarget, null, null); solution.Objective[0] = fitnessValues.FeatureVal; solution.Objective[1] = fitnessValues.VariantVal; FitnessTracker.AddFeatVar(s.FoundAtEval, fitnessValues.FeatureVal, fitnessValues.VariantVal); }
/// <summary> /// Runs the NSGA-II algorithm. /// </summary> /// <returns>a <code>SolutionSet</code> that is a set of non dominated solutions as a result of the algorithm execution</returns> public override SolutionSet Execute() { int populationSize = -1; int maxEvaluations = -1; int evaluations; JMetalCSharp.QualityIndicator.QualityIndicator indicators = null; // QualityIndicator object int requiredEvaluations; // Use in the example of use of the // indicators object (see below) SolutionSet population; SolutionSet offspringPopulation; SolutionSet union; Operator mutationOperator; Operator crossoverOperator; Operator selectionOperator; Distance distance = new Distance(); //Read the parameters JMetalCSharp.Utils.Utils.GetIntValueFromParameter(this.InputParameters, "maxEvaluations", ref maxEvaluations); JMetalCSharp.Utils.Utils.GetIntValueFromParameter(this.InputParameters, "populationSize", ref populationSize); JMetalCSharp.Utils.Utils.GetIndicatorsFromParameters(this.InputParameters, "indicators", ref indicators); parallelEvaluator.StartParallelRunner(Problem);; //Initialize the variables population = new SolutionSet(populationSize); evaluations = 0; requiredEvaluations = 0; //Read the operators mutationOperator = Operators["mutation"]; crossoverOperator = Operators["crossover"]; selectionOperator = Operators["selection"]; // Create the initial solutionSet IntergenSolution newSolution; for (int i = 0; i < populationSize; i++) { newSolution = new IntergenSolution((IntergenProblem)Problem); parallelEvaluator.AddTaskForExecution(new object[] { newSolution, i });; } List <IntergenSolution> solutionList = (List <IntergenSolution>)parallelEvaluator.ParallelExecution(); foreach (IntergenSolution solution in solutionList) { population.Add(solution); evaluations++; } // Generations while (evaluations < maxEvaluations) { // Create the offSpring solutionSet offspringPopulation = new SolutionSet(populationSize); IntergenSolution[] parents = new IntergenSolution[2]; for (int i = 0; i < (populationSize / 2); i++) { if (evaluations < maxEvaluations) { //obtain parents parents[0] = (IntergenSolution)selectionOperator.Execute(population); parents[1] = (IntergenSolution)selectionOperator.Execute(population); IntergenSolution[] offSpring = (IntergenSolution[])crossoverOperator.Execute(parents); mutationOperator.Execute(offSpring[0]); mutationOperator.Execute(offSpring[1]); parallelEvaluator.AddTaskForExecution(new object[] { offSpring[0], evaluations + i }); parallelEvaluator.AddTaskForExecution(new object[] { offSpring[1], evaluations + i }); } } List <IntergenSolution> solutions = (List <IntergenSolution>)parallelEvaluator.ParallelExecution(); foreach (IntergenSolution solution in solutions) { offspringPopulation.Add(solution); evaluations++; //solution.FoundAtEval = evaluations; } // Create the solutionSet union of solutionSet and offSpring union = ((SolutionSet)population).Union(offspringPopulation); // Ranking the union Ranking ranking = new Ranking(union); int remain = populationSize; int index = 0; SolutionSet front = null; population.Clear(); // Obtain the next front front = ranking.GetSubfront(index); while ((remain > 0) && (remain >= front.Size())) { //Assign crowding distance to individuals distance.CrowdingDistanceAssignment(front, Problem.NumberOfObjectives); //Add the individuals of this front for (int k = 0; k < front.Size(); k++) { population.Add(front.Get(k)); } //Decrement remain remain = remain - front.Size(); //Obtain the next front index++; if (remain > 0) { front = ranking.GetSubfront(index); } } // Remain is less than front(index).size, insert only the best one if (remain > 0) { // front contains individuals to insert distance.CrowdingDistanceAssignment(front, Problem.NumberOfObjectives); front.Sort(new CrowdingComparator()); for (int k = 0; k < remain; k++) { population.Add(front.Get(k)); } remain = 0; } // This piece of code shows how to use the indicator object into the code // of NSGA-II. In particular, it finds the number of evaluations required // by the algorithm to obtain a Pareto front with a hypervolume higher // than the hypervolume of the true Pareto front. if ((indicators != null) && (requiredEvaluations == 0)) { double HV = indicators.GetHypervolume(population); if (HV >= (0.98 * indicators.TrueParetoFrontHypervolume)) { requiredEvaluations = evaluations; } } //TODO /* * Ranking rank2 = new Ranking(population); * * Result = rank2.GetSubfront(0); */ /*Ranking forGraphicOutput = new Ranking(population); * var currentBestResultSet = forGraphicOutput.GetSubfront(0); * * var firstBestResult = currentBestResultSet.Get(0); * * var myProblem = (IntergenProblem)Problem; * //myProblem.calculated; * * //var variantValuesWithoutInteraction = Matrix.Multiply(myProblem.calculated, firstBestResult.); * //var Model = myProblem.GetModel(); * int mycounter = 0; * if (mycounter % 500 == 0) * { * //RIntegrator.PlotValues(currentBestResultSet, myProblem); * } * mycounter++; * var progress = new UserProgress(); * progress.FeatureP = firstBestResult.Objective[0]; * if (!myProblem.Model.Setting.NoVariantCalculation) progress.VariantP = firstBestResult.Objective[1]; * myProblem.Worker.ReportProgress(evaluations * 100 / maxEvaluations, progress); ; * * //Model.CurrentBestImage = "CurrentBest.png"; */ front = ranking.GetSubfront(0); var minmax = new MinMaxFitness { FeatMax = double.MinValue, FeatMin = double.MaxValue, VarMax = double.MinValue, VarMin = double.MaxValue, InterMax = double.MinValue, InterMin = double.MaxValue }; var prob = (IntergenProblem)Problem; var list = ObjectiveMapping.GetList(prob.ProblemType); for (var i = 0; i < populationSize; i++) { var sol = population.Get(i); var objindex = 0; if (list[0]) { if (sol.Objective[objindex] < minmax.FeatMin) { minmax.FeatMin = sol.Objective[objindex]; } if (sol.Objective[objindex] > minmax.FeatMax) { minmax.FeatMax = sol.Objective[objindex]; } objindex++; } if (list[1]) { if (sol.Objective[objindex] < minmax.InterMin) { minmax.InterMin = sol.Objective[objindex]; } if (sol.Objective[objindex] > minmax.InterMax) { minmax.InterMax = sol.Objective[objindex]; } objindex++; } if (list[2]) { if (sol.Objective[objindex] < minmax.VarMin) { minmax.VarMin = sol.Objective[objindex]; } if (sol.Objective[objindex] > minmax.VarMax) { minmax.VarMax = sol.Objective[objindex]; } } } var sol0 = front.Best(new CrowdingDistanceComparator()); var done = FitnessTracker.AddFitn(minmax); SolutionPlotter.Plot(sol0); ProgressReporter.ReportSolution(evaluations, sol0, _worker); if (done) { Ranking rank3 = new Ranking(population); Result = rank3.GetSubfront(0); SetOutputParameter("evaluations", evaluations); return(this.Result); } } // Return as output parameter the required evaluations SetOutputParameter("evaluations", evaluations); // Return the first non-dominated front Ranking rank = new Ranking(population); Result = rank.GetSubfront(0); return(this.Result); }
void Awake() { tracker = GetComponent <FitnessTracker>(); car = GetComponent <CarController>(); }
public static void MainMenu() { Console.WriteLine("1. Steps."); Console.WriteLine("2. Pulse."); Console.WriteLine("3. Water."); Console.WriteLine("4. Run."); Console.WriteLine("5. View daily activities."); Console.WriteLine("6. Output."); int.TryParse(Console.ReadLine(), out int userInput); switch (userInput) { case 1: { var tracker = new FitnessTracker(); var steps = fitnessManager.GetSteps(); fitnessManager.step.Add(steps); tracker.Steps = steps; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Всего шагов:{steps}"); Console.ResetColor(); } break; case 2: { var tracker = new FitnessTracker(); var pulse = fitnessManager.GetPulse(); tracker.Pulse = pulse; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Ваш пульс:{pulse}"); Console.ResetColor(); } break; case 3: { water = fitnessManager.Water(water); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(water); Console.ResetColor(); } break; case 4: { fitnessManager.RunType(); } break; case 5: { fitnessManager.ShowDayActivity(water); } break; case 6: { Environment.Exit(0); } break; } Menu(); }