Esempio n. 1
0
        private static async Task LocalOptimize(IReadOnlyCollection <Tuning> tuningObjects)
        {
            var bestErrorLocal = await CalculateErrorMultiThreaded();

            _orgError = bestErrorLocal;
            var improved = true;
            var run      = 1;

            while (improved)
            {
                Console.WriteLine("Run " + run++);
                improved = false;
                foreach (var tuningObject in tuningObjects)
                {
                    for (var i = 0; i < tuningObject.NumberOfParameters(); i++)
                    {
                        if (tuningObject.Skip(i))
                        {
                            continue;
                        }

                        tuningObject.AddStep(i);
                        EvalConstants.InitMgEg();
                        ThreadData.ClearCaches();
                        var newError = await CalculateErrorMultiThreaded();

                        if (newError < bestErrorLocal - 0.00000001)
                        {
                            bestErrorLocal = newError;
                            Console.WriteLine($"{bestErrorLocal} - {tuningObject}");
                            improved = true;
                        }
                        else
                        {
                            tuningObject.RemoveStep(i);
                            tuningObject.RemoveStep(i);
                            EvalConstants.InitMgEg();
                            ThreadData.ClearCaches();
                            newError = await CalculateErrorMultiThreaded();

                            if (newError < bestErrorLocal - 0.00000001)
                            {
                                bestErrorLocal = newError;
                                Console.WriteLine($"{bestErrorLocal} - {tuningObject}");
                                improved = true;
                            }
                            else
                            {
                                tuningObject.AddStep(i);
                            }
                        }
                    }
                }

                PrintAll(tuningObjects);
            }

            _bestError = bestErrorLocal;
        }
Esempio n. 2
0
        private static async Task Eval(IEnumerable <Tuning> tuningObjects)
        {
            var bestError = await CalculateErrorMultiThreaded();

            Console.WriteLine($"{bestError} - org");
            foreach (var tuningObject in tuningObjects)
            {
                tuningObject.ClearValues();
                EvalConstants.InitMgEg();
                for (var i = 0; i < NumberOfThreads; i++)
                {
                    ThreadData.GetInstance(i).ClearCaches();
                }

                var newError = await CalculateErrorMultiThreaded();

                Console.WriteLine($"{newError} - {tuningObject.Name}");
                tuningObject.RestoreValues();
            }
        }