using System; using HeuristicLab.Problems.GrammaticalOptimization; namespace HeuristicLab.Algorithms.GrammaticalOptimization { public abstract class SolverBase : ISolver { public event Action FoundNewBestSolution; public event Action SolutionEvaluated; protected double bestQuality = double.NegativeInfinity; protected SolverBase() { } public abstract void Run(int maxEvaluations); protected virtual void OnSolutionEvaluated(string sentence, double quality) { RaiseSolutionEvaluated(sentence, quality); if (quality > bestQuality) { bestQuality = quality; RaiseFoundNewBestSolution(sentence, quality); } } private void RaiseSolutionEvaluated(string sentence, double quality) { var handler = SolutionEvaluated; if (handler != null) handler(sentence, quality); } private void RaiseFoundNewBestSolution(string sentence, double quality) { var handler = FoundNewBestSolution; if (handler != null) handler(sentence, quality); } } }