public HillClimbingAlgorithm(string name, IStopCriteria <T> stopCriteria, Mover mover, ILogger <HillClimbingAlgorithm <T> > logger, SolutionSaver analyzer = null) : base(name, logger) { StopCriteria = stopCriteria; Mover = mover; _saver = analyzer; }
public TabuSearch(INeighbourFinder neighbourFinder, ITabuList tabuList, ILongTermMemory longTermMemory, ICostFinder costFinder, IAspirationCriteria aspirationCriteria, IStopCriteria stopCriteria, IStopCriteria noChange, IStopCriteria costLessThan) { this.neighbourFinder = neighbourFinder; this.tabuList = tabuList; this.longTermMemory = longTermMemory; this.costFinder = costFinder; this.aspirationCriteria = aspirationCriteria; this.stopCriteria = stopCriteria; this.noChange = noChange; this.costLessThan = costLessThan; }
private IStopCriteria Compose(IStopCriteria criteria1, IStopCriteria criteria2) { switch (CurrentOperator) { case CriteriaOperatorTypes.And: return(new AndStopCriteria(criteria1, criteria2)); case CriteriaOperatorTypes.Or: return(new OrStopCriteria(criteria1, criteria2)); default: throw new InvalidOperationException(); } }
public StopCriteriaBuilder And(Func <StopCriteriaBuilder, StopCriteriaBuilder> nested) { if (CurrentOperator != CriteriaOperatorTypes.None || Criteria == null) { throw new InvalidOperationException(); } var build = StopCriteriaBuilder.StopWhen(); var nestedBuild = nested(build); CurrentOperator = CriteriaOperatorTypes.And; Criteria = Compose(Criteria, nestedBuild.Criteria); CurrentOperator = CriteriaOperatorTypes.None; return(this); }
public StopCriteriaBuilder When(IStopCriteria criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } if (CurrentOperator == CriteriaOperatorTypes.None && Criteria != null) { throw new InvalidOperationException(); } if (CurrentOperator == CriteriaOperatorTypes.None) { Criteria = criteria; return(this); } Criteria = Compose(Criteria, criteria); CurrentOperator = CriteriaOperatorTypes.None; return(this); }
public OrStopCriteria(IStopCriteria criteria1, IStopCriteria criteria2) { Criteria1 = criteria1; Criteria2 = criteria2; }