示例#1
0
文件: JolkaCSP.cs 项目: glakuub/CSP
        public JolkaCSP(Jolka jolka, IVariableSelectionHeuristics <string, JolkaVariable> variableSelectionheuristics)
        {
            _jolka = jolka;
            _variableSelectionHeuristics = variableSelectionheuristics;
            EMPTY_CHAR = jolka.Empty;

            var variables   = ParseVariables(jolka).ToArray();
            var domains     = CreateDmains(jolka, variables);
            var constraints = CreateConstraints(jolka, variables);

            _variableSelectionHeuristics.RegisterVariables(variables, domains);
            VariablesWithConstraints = new Tuple <JolkaVariable, Domain <string>, List <Constraint <string, JolkaVariable> > > [variables.Length];
            for (int i = 0; i < variables.Length; i++)
            {
                VariablesWithConstraints[i] = new Tuple <JolkaVariable, Domain <string>, List <Constraint <string, JolkaVariable> > >(variables[i], domains[i], constraints[i]);
            }
        }
示例#2
0
        public SudokuCSP(Sudoku sudoku, IVariableSelectionHeuristics <char, Variable <char> > variableSelectionHeuristics)
        {
            this._variableSelectionHeuristics = variableSelectionHeuristics;

            _rows    = sudoku.Board.Rows;
            _columns = sudoku.Board.Columns;
            _sudoku  = sudoku.DeepCopy();
            EMPTY    = sudoku.Empty;
            var vars = ParseVariables(_sudoku);
            var doms = CreateDomains(vars);
            var cons = CreateConstraints(_rows, _columns);

            //_indexMap = Enumerable.Range(0, vars.Length).ToArray();

            variableSelectionHeuristics.RegisterVariables(vars, doms);

            VariablesWithConstraints = new Tuple <Variable <char>, Domain <char>, List <Constraint <char, Variable <char> > > > [vars.Length];
            for (int i = 0; i < vars.Length; i++)
            {
                VariablesWithConstraints[i] = new Tuple <Variable <char>, Domain <char>, List <Constraint <char, Variable <char> > > >(vars[i], doms[i], cons[i]);
            }
        }
示例#3
0
        protected virtual bool FilterOutDomains(S current, ref bool[][] currentDomainsState, IVariableSelectionHeuristics <T, S> variableSelectionHeuristics)
        {
            bool reducedToZero = false;

            var currentVariableConstraints = VariablesWithConstraints[current.Index].Item3;

            for (int i = 0; i < currentVariableConstraints.Count; i++)
            {
                var pairVariable = VariablesWithConstraints[currentVariableConstraints[i].Id2].Item1;

                var constraint = currentVariableConstraints[i];

                if (variableSelectionHeuristics.IsBefore(current, pairVariable))
                {
                    var pairVariableDomain = VariablesWithConstraints[pairVariable.Index].Item2;

                    var domainArray = pairVariableDomain.AsArray();
                    var domainMask  = currentDomainsState[pairVariable.Index];
                    int domainSize  = domainArray.Length;
                    for (int j = 0; j < domainSize; j++)
                    {
                        if (!constraint.Check(current.Value, domainArray[j]))
                        {
                            currentDomainsState[pairVariable.Index][j] = true;
                            domainSize--;
                        }
                    }
                    if (domainSize == 0)
                    {
                        reducedToZero = true;
                        break;
                    }
                }
            }

            return(reducedToZero);
        }