示例#1
0
        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());
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
 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);
     }
 }
示例#4
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);
     }
 }
示例#5
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();
            }
        }