Ejemplo n.º 1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="model"></param>
 /// <param name="crossoverRate"></param>
 /// <param name="mutationRate"></param>
 /// <param name="populationSize"></param>
 /// <param name="generationSize"></param>
 public GA(IOptimisable model, double crossoverRate, double mutationRate, int populationSize)
 {
     DefaultValues();
     Model          = model;
     MutationRate   = mutationRate;
     CrossoverRate  = crossoverRate;
     PopulationSize = populationSize;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="model"></param>
 /// <param name="n_threads"></param>
 /// <param name="crossoverRate"></param>
 /// <param name="mutationRate"></param>
 /// <param name="populationSize"></param>
 /// <param name="generationSize"></param>
 /// <param name="genomeSize"></param>
 public GA(IOptimisable model, Int32 n_threads, double crossoverRate, double mutationRate, int populationSize)
 {
     DefaultValues();
     Model           = model;
     NumberOfThreads = n_threads;
     MutationRate    = mutationRate;
     CrossoverRate   = crossoverRate;
     PopulationSize  = populationSize;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="model"></param>
 /// <param name="progressReporter"></param>
 /// <param name="n_threads"></param>
 /// <param name="crossoverRate"></param>
 /// <param name="mutationRate"></param>
 /// <param name="populationSize"></param>
 /// <param name="generationSize"></param>
 /// <param name="genomeSize"></param>
 public GA(IOptimisable model, ProgressReporterDelegate progressReporter,
           Int32 n_threads, double crossoverRate, double mutationRate, int populationSize,
           int terminationGenerations, double terminationThreshold)
 {
     DefaultValues();
     Model                  = model;
     ProgressReporter       = progressReporter;
     NumberOfThreads        = n_threads;
     MutationRate           = mutationRate;
     CrossoverRate          = crossoverRate;
     PopulationSize         = populationSize;
     TerminationGenerations = terminationGenerations;
     TerminationThreshold   = terminationThreshold;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Used in multi-threaded mode to calculate the fitness of a Genome.
        /// </summary>
        /// <param name="genome"></param>
        /// <returns></returns>
        private object DoWork(object genome)
        {
            //Borrow a model from the dispatcher
            IOptimisable model = (IOptimisable)m_modelDispatcher.Borrow();

            //Run the model
            Genome G = (Genome)genome;

            G.Fitness = model.Fitness(G.Genes());

            //Return the model to the dispatcher
            m_modelDispatcher.Return(model);

            //Return a result (actually not being used)
            //except maybe to notify that the thread has finished
            //return G.Fitness;
            return(null);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Re-populates the model dispatcher with clones of the model to be
        /// used on different threads. This should be called if you change
        /// the model, or if you change the number of threads.
        /// </summary>
        private void RebuildModelResources()
        {
            //Remember the model we want to clone
            IOptimisable oldModel = m_models[0];

            //Resize the array
            m_models    = new IOptimisable[m_logicalCores];
            m_models[0] = oldModel;
            if (m_models[0] != null)
            {
                for (int i = 1; i < m_logicalCores; i++)
                {
                    m_models[i] = (IOptimisable)m_models[0].DeepClone();
                }
            }

            //Create a new ObjectDispatcher fitted with the model resources
            m_modelDispatcher = new ObjectDispatcher(m_models);
        }