public static extern int imaqLearnPattern3(IntPtr image, LearningMode learningMode, ref LearnPatternAdvancedOptions advancedOptions, IntPtr mask);
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; }
public static extern int imaqLearnPattern(IntPtr image, LearningMode learningMode);