public double[] FeedForward(double[] ID) { double[] temp; //temp = NetManager.GetSpecificActions(method, dataSet, ID); temp = Net.feedForward(ID); return(temp); }
public ANN CacheLearn(PastData NewEntry, ANN Net) { double LowError = double.MaxValue; HighError = double.MinValue; LowPos = -1; HighPos = -1; LastEntry = NewEntry; PreviousData.Add(NewEntry); for (int a = 0; a < PreviousData.Count(); a++) { double ErrorLevel = 0; double[] NewInput = PreviousData[a].GetInput(); double SingleTarget = PreviousData[a].GetTarget(0); double[] result = Net.feedForward(NewInput); double[] NewTarget = (double[])result.Clone(); NewTarget[0] = SingleTarget; if (EnhancedLearning > 0) { Net.Learn(NewTarget, result, NewLearnRate); //EnhancedLearn(iAction, Net, NewInput, SingleTarget); } ErrorLevel = Net.LearnError(NewTarget, result); if (ErrorLevel < LowError) { LowError = ErrorLevel; LowPos = a; } if (ErrorLevel > HighError) { HighError = ErrorLevel; HighPos = a; } } if (EnhancedLearning > 0) { EnhancedLearning--; } return(Net); }
public void EnhancedLearn(int iAction, ANN Net, double[] NewInput, double SingleTarget) { double SetLevel = HighError * 0.9; double ErrorLevel; int CheckCount = 2; do { double[] result = Net.feedForward(NewInput); double[] NewTarget = (double[])result.Clone(); NewTarget[iAction] = SingleTarget; Net.Learn(NewTarget, result, NewLearnRate); CheckCount--; ErrorLevel = Net.LearnError(NewTarget, result, iAction); } while (ErrorLevel > SetLevel & CheckCount > 0); }
public ANN UpdateCache(ANN Net) { int count = PreviousData.Count; if (count > 2) { int Pos = HighPos; double[] NewInput = PreviousData[Pos].GetInput(); double SingleTarget = PreviousData[Pos].GetTarget(0); double SetLevel = HighError * 0.9; double ErrorLevel; int CheckCount = 2; do { double[] result = Net.feedForward(NewInput); double[] NewTarget = (double[])result.Clone(); NewTarget[0] = SingleTarget; Net.Learn(NewTarget, result, NewLearnRate); CheckCount--; ErrorLevel = Net.LearnError(NewTarget, result); } while (ErrorLevel > SetLevel & CheckCount > 0); if (count > CacheSize) { PreviousData.RemoveAt(LowPos); } } return(Net); }