Exemple #1
0
            private static int CountLostValues(CSP <Var, Val> csp, Assignment <Var, Val> assignment, Var var, Val value)
            {
                var result = 0;
                var assign = new Assignment <Var, Val>();

                assign.Add(var, value);
                foreach (var constraint in csp.GetConstraints(var))
                {
                    if (constraint.GetScope().Count() == 2)
                    {
                        Var neighbor = csp.GetNeighbor(var, constraint);
                        if (!assignment.Contains(neighbor))
                        {
                            foreach (var val in csp.GetDomain(neighbor))
                            {
                                assign.Add(neighbor, val);
                                if (!constraint.IsSatisfiedWith(assign))
                                {
                                    ++result;
                                }
                            }
                        }
                    }
                }
                return(result);
            }
Exemple #2
0
            public IEnumerable <Val> Apply(CSP <Var, Val> csp, Assignment <Var, Val> assignment, Var var)
            {
                var pairs = new List <KeyValuePair <Val, int> >();

                foreach (Val value in csp.GetDomain(var))
                {
                    var num = CountLostValues(csp, assignment, var, value);
                    pairs.Add(new KeyValuePair <Val, int>(value, num));
                }

                return(pairs.OrderBy(p => p.Value).Select(p => p.Key));
            }
Exemple #3
0
            public virtual IEnumerable <Var> Apply(CSP <Var, Val> csp, IEnumerable <Var> vars)
            {
                var result = new List <Var>();

                var minValues = int.MaxValue;

                foreach (var var in vars)
                {
                    var values = csp.GetDomain(var).Count();
                    if (values < minValues)
                    {
                        result.Clear();
                        minValues = values;
                    }

                    if (values == minValues)
                    {
                        result.Add(var);
                    }
                }

                return(result);
            }
Exemple #4
0
 private IEnumerable <Val> OrderDomainValues(CSP <Var, Val> csp, Assignment <Var, Val> assignment, Var var)
 {
     return((ValueOrderingStrategy != null)
         ? ValueOrderingStrategy.Apply(csp, assignment, var)
         : csp.GetDomain(var));
 }