Пример #1
0
 public static extern int imaqLearnPattern3(IntPtr image, LearningMode learningMode, ref LearnPatternAdvancedOptions advancedOptions, IntPtr mask);
Пример #2
0
        public virtual void EvolveTimingChromosome(LearningMode learningMode, Dictionary<BitArray,double> agents,
            double crossOverProbability, double mutationProbability)
        {
            switch (learningMode)
            {
                case LearningMode.Random:
                    RandomizeTimingChromosome(_random);
                    break;
                case LearningMode.GA:
                    if (_random.NextDouble() < crossOverProbability)
                    {
                        //selection
                        var chromosomes =
                            agents.Select(a => new {a.Key, Rank = a.Value*_random.NextDouble()});

                        var chosenChromosome = chromosomes.OrderByDescending(c => c.Rank).First();

                        //crossover

                        var crossOver = Math.Floor(_random.NextDouble()*TimingChromosome.Count);

                        for (int i = 0; i < crossOver; i++)
                        {
                            TimingChromosome[i] = chosenChromosome.Key[i];
                        }
                    }

                    //mutation
                    for (int i = 0; i < TimingChromosome.Count; i++)
                    {
                        TimingChromosome[i] = _random.NextDouble() < mutationProbability
                            ? !TimingChromosome[i]
                            : TimingChromosome[i];
                    }
                    break;

                case LearningMode.MRE:
                    //update propensities
                    for (int i = 0; i < _learningLog.Count; i++)
                    {
                        double reward;

                        if (_learningLog[i].TimingChromosome == TimingChromosome)
                        {
                            reward = CurrentProfit*(1 - _experimentation);
                        }
                        else
                        {
                            reward = _learningLog[i].Propensity * (_experimentation / (_learningLog.Count -1));
                        }

                        _learningLog[i].Propensity = (1 - _recency)*_learningLog[i].Propensity + reward;
                    }

                    //update probabilities
                    for (int i = 0; i < _learningLog.Count; i++)
                    {
                        _learningLog[i].Probability = Math.Exp(_learningLog[i].Propensity/_temperature)/
                                                      _learningLog.Sum(l => Math.Exp(l.Propensity/_temperature));
                    }

                    //select chromosome
                    TimingChromosome = _learningLog.OrderByDescending(l => l.Probability * _random.NextDouble()).First().TimingChromosome;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("Unknown learning mode");
            }

            CurrentProfit = 0;
        }
Пример #3
0
 public static extern int imaqLearnPattern(IntPtr image, LearningMode learningMode);