Ejemplo n.º 1
0
        private static Model BuildDiscriminator(Optimiser optimiser)
        {
            var discriminator = new Model(optimiser, new BinaryCrossEntropyCost());

            discriminator.Add(new DenseLayer(28 * 28, 512, new LeakyReLUActivation(0.2)));
            discriminator.Add(new DenseLayer(512, 256, new LeakyReLUActivation(0.2)));
            discriminator.Add(new DenseLayer(256, 1, new SigmoidActivation()));
            return(discriminator);
        }
Ejemplo n.º 2
0
        private static Model BuildGenerator(Optimiser optimiser)
        {
            var generator = new Model(optimiser, new BinaryCrossEntropyCost());

            generator.Add(new DenseLayer(NOISE_DIM, 256, new LeakyReLUActivation(0.2)));
            generator.Add(new DenseLayer(256, 512, new LeakyReLUActivation(0.2)));
            generator.Add(new DenseLayer(512, 1024, new LeakyReLUActivation(0.2)));
            generator.Add(new DenseLayer(1024, 28 * 28, new TanhActivation())); // Centred around 0 like our data
            return(generator);
        }
Ejemplo n.º 3
0
        public void Show(Optimiser optimiser)
        {
            optimiser.IterationComplete += HandleIterationComplete;
            optimiser.Complete          += HandleComplete;

            _optimiser = optimiser;

            Show();

            _startTime = DateTime.Now;
        }
        public int Find_optimal_routes_to_intersection(string route1, string route2)
        {
            var plotter = new Plotter();
            var mapper  = new Mapper(plotter);

            mapper.MapRoute(1, route1);
            mapper.MapRoute(2, route2);
            var optimiser = new Optimiser();
            var leastPointsToAnIntersection = optimiser.LeastDistanceToIntersection(mapper);

            return(leastPointsToAnIntersection);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Runs the optimiser
        /// </summary>
        public override void Optimize()
        {
            var chromosomeTypes = new StrategyChromosomeTypeFactory(Strategy).GetChromosomeTypes();

            var optimiserParameters = GetParameters(chromosomeTypes);

            _startDateTime   = DateTime.Now;
            _iterationNumber = 0;

            try
            {
                using (
                    _parameterWriter =
                        new ParameterWriter(Strategy.Instrument.FullName, optimiserParameters.ExportGenes))
                {
                    Strategy.Print(
                        string.Format(
                            "{0}:  Start time: {1}  Parameters: {2}  Population {3}  MaximumGenerations: {4}  Log results: {5}  Screen threshold: {6}",
                            Strategy.Instrument.FullName, _startDateTime, Strategy.Parameters.Count,
                            optimiserParameters.PopulationSize, optimiserParameters.MaximumGenerations,
                            optimiserParameters.ExportGenes, optimiserParameters.ScreeningThreshold));

                    _parameterWriter.WriteParameterNames(chromosomeTypes);

                    var optimiser = new Optimiser(new FitnessEvaluator(Strategy, chromosomeTypes));
                    optimiser.IterationComplete  += HandleIterationComplete;
                    optimiser.GenerationComplete += HandleGenerationComplete;
                    optimiser.ReportNoProgress   += HandleNoProgress;

                    var progressForm = new ProgressForm();
                    progressForm.Show(optimiser);

                    optimiser.Run(chromosomeTypes, optimiserParameters);

                    var endDateTime = DateTime.Now;

                    Strategy.Print(Strategy.Instrument.FullName + ": completed: " + endDateTime + ", total iterations: " +
                                   (_iterationNumber + 1) + ", total time (minutes): " +
                                   (endDateTime - _startDateTime).TotalMinutes.ToString("N1") + ", best result:");

                    if (_bestResult != null)
                    {
                        Strategy.Print(_bestResult.Gene.ToString(chromosomeTypes));
                    }
                }
            }
            finally
            {
                _parametersForm.Close();
            }
        }
        /// <summary>
        /// Завершаем оптимизацию извне оптимизатора
        /// </summary>
        public void StopOptimisation()
        {
            StopOptimisationTougle    = true;
            LoadingOptimisationTougle = true;

            Optimiser.Stop();

            var processes = System.Diagnostics.Process.GetProcesses().Where(x => x.ProcessName == "metatester64");

            foreach (var item in processes)
            {
                item.Kill();
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="optimiser">The optimiser.</param>
        /// <param name="model">The model.</param>
        /// <param name="timeOutManager">The timeout manager.</param>
        /// <param name="convergenceCheckers">Checks for early termination.</param>
        /// <param name="reportingFrequency">Number of reinsertions between reports on progress.</param>
        /// <param name="numberOfNewIndividualsPerGeneration">Number of new individuals to generate whenever an individual is evaluated.</param>
        public ReinsertionAgent(
            Optimiser optimiser,
            IModel model,
            TimeOutManager timeOutManager,
            Func <Population, bool> convergenceCheckers,
            int reportingFrequency,
            int numberOfNewIndividualsPerGeneration)
        {
            CancellationSource       = new CancellationTokenSource();
            this.timeOutManager      = timeOutManager;
            this.convergenceCheckers = convergenceCheckers;
            NumberGenerated          = 0;
            NumberReinserted         = 0;
            AllEvaluated             = new List <Individual>();

            ReportingFrequency = reportingFrequency;

            this.optimiser = optimiser;
            this.model     = model;

            this.numberOfNewIndividualsPerGeneration = numberOfNewIndividualsPerGeneration;

            IndividualsForReinsertion = new TransformManyBlock <Individual, Individual>(
                (Func <Individual, IEnumerable <Individual> >)Process,
                new ExecutionDataflowBlockOptions
            {
                CancellationToken      = CancellationSource.Token,
                MaxDegreeOfParallelism = 1
            });

            NewIndividuals = new BufferBlock <Individual>(
                new DataflowBlockOptions
            {
                CancellationToken = CancellationSource.Token
            });

            Reports = new BroadcastBlock <Population>(i => i);

            //Set up link so that new individuals created
            // are pushed to the output buffer
            IndividualsForReinsertion.LinkTo(
                NewIndividuals,
                new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
        }
        public void Puzzle3_part2()
        {
            var plotter = new Plotter();
            var mapper  = new Mapper(plotter);

            var routes  = File.ReadLines("C:\\Code\\github\\AdventOfCode2019\\Puzzle3\\input.txt");
            int routeId = 1;

            foreach (var route in routes)
            {
                mapper.MapRoute(routeId++, route);
            }

            var optimiser = new Optimiser();
            var leastPointsToAnIntersection = optimiser.LeastDistanceToIntersection(mapper);

            Console.WriteLine($"Least points to an intersection = {leastPointsToAnIntersection}");
            Assert.AreEqual(15612, leastPointsToAnIntersection);
        }
        /// <summary>
        /// Метод смены оптимизатора
        /// </summary>
        /// <param name="optimiserName">Имя выбранного оптимизатора</param>
        /// <returns>true в слечае успеха</returns>
        public bool ChangeOptimiser(string optimiserName, string terminalName)
        {
            // Еслизапущен процесс оптимизации или же запущен терминалл - то не чего не делаем
            if (Optimiser != null &&
                (Optimiser.IsOptimisationInProcess || Optimiser.TerminalManager.IsActive))
            {
                return(false);
            }

            // Если текущий оптимизатор не пуст
            if (Optimiser != null)
            {
                // Отписываемся от событий прошлого оптимизатора
                Optimiser.ProcessStatus -= Optimiser_ProcessStatus;
                Optimiser.OptimisationProcessFinished -= Optimiser_OptimisationProcessFinished;
                Optimiser.ClearOptimiser();
                Optimiser.CloseSettingsWindow();

                // Создаем новый оптимизатор и копируем старый менеджер терминалла
                Optimiser = optimiserCreators.First(x => x.Name == optimiserName).Create(Optimiser.TerminalManager);
            }
            else
            {
                try
                {
                    // Создаем новый оптимизатор и создаем менеджер терминалла
                    Optimiser = optimiserCreators.First(x => x.Name == optimiserName)
                                .Create(new TerminalManager(terminalDirectory.Terminals.First(x => x.Name == terminalName)));
                }
                catch (Exception e)
                {
                    // В случае ошибки - переадресоввываем её текст в графический интерфейс
                    ThrowException(e.Message);
                    return(false);
                }
            }

            // Подписываемся на события нового оптимизатора
            Optimiser.ProcessStatus += Optimiser_ProcessStatus;
            Optimiser.OptimisationProcessFinished += Optimiser_OptimisationProcessFinished;
            return(true);
        }
Ejemplo n.º 10
0
        private double TrainBatches(Matrix trainingData, Matrix labels, int batchSize, int epoch)
        {
            int           currentIndex = 0;
            int           currentBatch = 1;
            List <double> batchLosses  = new List <double>();;

            //Loop untill the data is exhauted for every batch selected
            while (trainingData.CanSliceRows(currentIndex, batchSize))
            {
                //Get the batch data based on the specified batch size
                var xtrain = trainingData.SliceRows(currentIndex, batchSize);
                var ytrain = labels.SliceRows(currentIndex, batchSize);

                //Run forward for all the layers to predict the value for the training set
                var ypred = Forward(xtrain);

                //Find the loss/cost value for the prediction wrt expected result
                var costVal = Cost.Forward(ypred, ytrain);
                batchLosses.Add(costVal.Data[0]);

                //Get the gradient of the cost function which is then passed to the layers during back-propagation
                var grad = Cost.Backward(ypred, ytrain);
                //Run back-propagation accross all the layers
                Backward(grad);
                //Now time to update the neural network weights using the specified optimizer function
                foreach (var layer in Layers)
                {
                    Optimiser.Update(layer);
                }
                currentIndex = currentIndex + batchSize;
                double batchLossAvg = Math.Round(costVal.Data[0], 3);

                BatchEndEventArgs eventArgs1 = new BatchEndEventArgs(epoch, currentBatch, batchLossAvg);
                BatchEnd?.Invoke(epoch, eventArgs1);
                currentBatch += 1;
            }

            return(Math.Round(batchLosses.Average(), 3));
        }
        /// <summary>
        /// Коллбек окончания процеса оптимизации
        /// </summary>
        /// <param name="obj">Оптимизатор</param>
        private void Optimiser_OptimisationProcessFinished(IOptimiser optimiser)
        {
            DirectoryInfo cachDir = optimiser.TerminalManager.TerminalChangeableDirectory
                                    .GetDirectory("Tester")
                                    .GetDirectory("cache", true);

            workingDirectory.Tester.GetDirectory("cache", true).GetFiles().ToList()
            .ForEach(x =>
            {
                string path = Path.Combine(cachDir.FullName, x.Name);
                if (!File.Exists(path))
                {
                    x.MoveTo(path);
                }
            });

            SaveOptimisations(optimiser);
            if (LoadingOptimisationTougle)
            {
                LoadSavedOptimisation(optimiser.OptimiserWorkingDirectory);
            }
            OptimisationStoped();
            Optimiser.ClearOptimiser();
        }
Ejemplo n.º 12
0
        void runThread(object o)
        {
            stopWatch = new Stopwatch();
            iteration = 0;
            updateCount = 0;
            results = new float[2000000];

            // Thread.CurrentThread.Name = o.ToString();
            while (Thread.CurrentThread.IsAlive)
            {

                //Thread.CurrentThread.Name = o.ToString();
                Job job = null;
                lock (jobs)
                {
                    if (jobs.Count > 0)
                    {
                        job = jobs.Dequeue();
                    }
                }
                if (job == null)
                {
                    changeThreadProgress(Int32.Parse(Thread.CurrentThread.Name), -1, -1, "No more jobs!");
                    return;
                }

                currentJob = job;
                iteration = 0;
                if (stopWatch.IsRunning)
                    stopWatch.Stop();

                stopWatch.Reset();

                Optimiser optimiser = new Optimiser(job.Filename);

                optimiser.Network.EndEpochEvent += new NeuronDotNet.Core.TrainingEpochEventHandler(Network_EndEpochEvent);

                //BackgroundWorker worker = (BackgroundWorker)sender;
                double mes = 1;

                stopWatch.Start();
                DateTime startTime = DateTime.Now;
                mes = optimiser.Optimise();

                changeThreadProgress(Int32.Parse(Thread.CurrentThread.Name), optimiser.Network.MeanSquaredError, optimiser.MaxIterations,"Writing results...");
                DateTime endTime = DateTime.Now;

                DataAccess dataAccess = new DataAccess(job.Filename);

                dataAccess.SaveResult(job.ID,optimiser.Network, iteration, results, startTime,endTime);

                    //worker.ReportProgress((int)e.Argument, mes);

            }
        }
Ejemplo n.º 13
0
 public override void Compute_rank(Optimiser.node.Node n)
 {
 }
        private void StartOptimisation(OptimiserInputData optimiserInputData, bool isAppend, string dirPrefix)
        {
            if ((optimiserInputData.HistoryBorders.Count == 0 && optimiserInputData.ForwardBorders.Count == 0))
            {
                ThrowException("Fill in date borders");
                OnPropertyChanged("ResumeEnablingTogle");
                return;
            }

            if (Optimiser.TerminalManager.IsActive)
            {
                ThrowException("Terminal already running");
                return;
            }

            if (optimiserInputData.OptimisationMode == ENUM_OptimisationMode.Disabled)
            {
                StartTest(optimiserInputData);
                return;
            }

            if (!isAppend)
            {
                var dir = workingDirectory.GetOptimisationDirectory(optimiserInputData.Symb,
                                                                    Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot),
                                                                    dirPrefix, Optimiser.Name);
                List <FileInfo> data = dir.GetFiles().ToList();
                data.ForEach(x => x.Delete());
                List <DirectoryInfo> dirData = dir.GetDirectories().ToList();
                dirData.ForEach(x => x.Delete());
            }

            Optimiser.CloseSettingsWindow();

            try
            {
                DirectoryInfo cachDir = Optimiser.TerminalManager.TerminalChangeableDirectory
                                        .GetDirectory("Tester")
                                        .GetDirectory("cache", true);
                DirectoryInfo cacheCopy = workingDirectory.Tester.GetDirectory("cache", true);
                cacheCopy.GetFiles().ToList().ForEach(x => x.Delete());
                cachDir.GetFiles().ToList()
                .ForEach(x => x.MoveTo(Path.Combine(cacheCopy.FullName, x.Name)));

                ClearResults();
                Optimiser.ClearOptimiser();

                int ind = optimiserInputData.BotParams.FindIndex(x => x.Variable == Fixed_Input_Settings.Params[InputParamName.CloseTerminalFromBot]);
                if (ind > -1)
                {
                    var item = optimiserInputData.BotParams[ind];
                    item.Value      = "true";
                    item.IsOptimize = false;
                    optimiserInputData.BotParams[ind] = item;
                }
                var botParams = optimiserInputData.BotParams.ToList(); // Copy expert settings

                Optimiser.Start(optimiserInputData,
                                Path.Combine(terminalDirectory.Common.FullName,
                                             $"{Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot)}_Report.xml"), dirPrefix);

                SetFileManager fileManager = new SetFileManager(
                    Path.Combine(workingDirectory.GetOptimisationDirectory(optimiserInputData.Symb,
                                                                           Path.GetFileNameWithoutExtension(optimiserInputData.RelativePathToBot),
                                                                           dirPrefix, Optimiser.Name).FullName, "OptimisationSettings.set"), true)
                {
                    Params = botParams
                };
                fileManager.SaveParams();

                Optimiser.TerminalManager.WaitForStop();
            }
            catch (Exception e)
            {
                Optimiser.Stop();
                throw e;
            }
        }
Ejemplo n.º 15
0
 public abstract void Compute_rank(Optimiser.node.Node n);
Ejemplo n.º 16
0
 public override void Compute_rank(Optimiser.node.Node n)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 17
0
 public Model(Optimiser optimiser, Cost cost)
 {
     Layers    = new List <Layer>();
     Optimiser = optimiser;
     Cost      = cost;
 }
Ejemplo n.º 18
0
 public OptimiserTests()
 {
     builder       = new ObjectCreators.OptimiserBuilderMock();
     optimiserMock = builder.CreateOptimiser();
 }
Ejemplo n.º 19
0
 /// <summary>
 /// 	Instantiates <see cref="Compiler" /> .
 /// </summary>
 public Compiler()
 {
     _parser = new Parser();
     _optimiser = new Optimiser();
     _generator = new Generator();
 }