/// <summary> /// Runs the optimization routine for the set number of iterations. /// </summary> public void Run() { CostFunction.Initialize(); for (var x = 0; x < Properties.MaxIterations; x++) { if (OpimizationMethod.Update(Properties)) { Step(); } else { break; } } Completed = true; }
/// <summary> /// Performs a single step of the optimization routine. /// </summary> public void Step() { Properties.Iteration += 1; var lastCost = Properties.Cost; Properties.Cost = OpimizationMethod.UpdateCost(CostFunction, Properties); Properties.CostHistory.Add(Properties.Cost); Properties.Gradient = OpimizationMethod.UpdateGradient(CostFunction, Properties); Properties.GradientHistory.Add(Properties.Gradient); Properties.Theta = OpimizationMethod.UpdateTheta(Properties); if (Properties.Iteration > 1 && Properties.Cost < lastCost) { Properties.BestTheta = Properties.Theta; } else { Properties.BestTheta = Properties.Theta; } }