public bool TriedWholeDomain(ValuePickingHeuristic heuristic, FilteringHeuristic filtering) //TO DO: reduce code { if (filtering != FilteringHeuristic.NONE) { if (PossibleValues.Count == 0) { FillPossibleValues(); return(true); } return(false); } switch (heuristic) { case ValuePickingHeuristic.LCV: if (PossibleValues.Count == 0) { FillPossibleValues(); return(true); } return(false); default: var lastDayTime = Value.DayValue == Days.Last() && Value.TimeValue == Times.Last(); return(lastDayTime && Value.AudienceValue == Audiences.Last() && Value.TeacherValue == Teachers.Last()); } }
public void NextValue(ValuePickingHeuristic heuristic, FilteringHeuristic filtering, Dictionary <Variable, DomainSet> emptyVars) { switch (heuristic) { case ValuePickingHeuristic.LCV: LCVPicking(emptyVars); break; default: StepByStepPicking(filtering); break; } switch (filtering) { case FilteringHeuristic.ForwardChecking: foreach (var k in new List <Variable>(emptyVars.Keys)) { emptyVars[k]._possibleValues = emptyVars[k]._possibleValues.Where(x => (!x.Equals(_value))).ToList(); } break; default: break; } }
StepByStepPicking( FilteringHeuristic filtering) //choosing next value (tries all possible variations of parametrs, if doesnt fit - backtracking will solve the issue) { if (filtering == FilteringHeuristic.NONE) { if (Value.TeacherValue != Teachers.Last()) { Value.TeacherValue = Teachers.ElementAt(Teachers.IndexOf(Value.TeacherValue) + 1); } else if (Value.AudienceValue != Audiences.Last()) { Value.TeacherValue = Teachers.First(); // resetting previous data element Value.AudienceValue = Audiences.ElementAt(Audiences.IndexOf(Value.AudienceValue) + 1); } else if (Value.TimeValue != Times.Last()) { Value.AudienceValue = Audiences.First(); // resetting previous data element Value.TimeValue = Times.ElementAt(Times.IndexOf(Value.TimeValue) + 1); } else if (Value.DayValue != Days.Last()) { Value.TimeValue = Times.First(); // resetting previous data element Value.DayValue = Days.ElementAt(Days.IndexOf(Value.DayValue) + 1); } } else { Value = new Value(PossibleValues.First()); PossibleValues.RemoveAt(0); } }
private void StepByStepPicking(FilteringHeuristic filtering) //choosing next value (tries all possible variations of parametrs, if doesnt fit - backtracking will solve the issue) { if (filtering == FilteringHeuristic.NONE) { if (_value.TeacherValue != _teachers.Last()) { _value.TeacherValue = _teachers.ElementAt(_teachers.IndexOf(_value.TeacherValue) + 1); } else if (_value.AudienceValue != _audiences.Last()) { _value.TeacherValue = _teachers.First(); // resetting previous data element _value.AudienceValue = _audiences.ElementAt(_audiences.IndexOf(_value.AudienceValue) + 1); } else if (_value.TimeValue != _times.Last()) { _value.AudienceValue = _audiences.First(); // resetting previous data element _value.TimeValue = _times.ElementAt(_times.IndexOf(_value.TimeValue) + 1); } else if (_value.DayValue != _days.Last()) { _value.TimeValue = _times.First(); // resetting previous data element _value.DayValue = _days.ElementAt(_days.IndexOf(_value.DayValue) + 1); } } else { _value = new Value(_possibleValues.First()); _possibleValues.RemoveAt(0); } }
public DomainSet(JsonElement element, string subject, LessonType type, ValuePickingHeuristic heuristic, FilteringHeuristic filtering) : this(element) { CutOffStaticLimitations(subject, type); if (heuristic != ValuePickingHeuristic.NONE || filtering != FilteringHeuristic.NONE) { FillPossibleValues(); } }