public static IEnumerable <R> Start <R>(this IPendulum <R> p) { while (!p.Ranking.IsOptimized()) { yield return(p.GetExec().Execute()); } }
public static R Execute <R>(this IPendulum <R> p) { p.Modifications.MapModifications(); var optimized = p.Ranking.IsOptimized(); var constrain = p.Constrains.TestConstrains(); var rng = new Random(); var mods = p.Modifications.GetModificationCount(); var modNum = 0; p.Ranking.Reset(); while (p.Ranking.HasStepsLeft()) { // Bruteforce-like Strategy p.Modifications.PerformModification(modNum); p.GetExec().Result = p.GetExec().Execute(); p.Ranking.Evaluate(); optimized = p.Ranking.IsOptimized(); constrain = p.Constrains.TestConstrains(); if (optimized && constrain) { break; } if (!constrain) { modNum = rng.Next(0, mods); } } p.OnDoneActions.ForEach(x => x()); return(default(R)); }