Exemple #1
0
        public static Microsoft.SolverFoundation.Services.Decision[] CreateVariables(this Microsoft.SolverFoundation.Services.Model model, Microsoft.SolverFoundation.Services.Domain digits)
        {
            var grid = new Microsoft.SolverFoundation.Services.Decision[81];

            for (int i = 0; i < 81; i++)
            {
                grid[i] = new Microsoft.SolverFoundation.Services.Decision(digits, $"cell_{i}");
                model.AddDecision(grid[i]);
            }

            return(grid);
        }
Exemple #2
0
 public static void AddHints(this Microsoft.SolverFoundation.Services.Model model, Microsoft.SolverFoundation.Services.Decision[] x, IEnumerable <GridCell> hints)
 {
     // Constrains each cell we know the value of to that specific value
     if (hints != null)
     {
         foreach (var hint in hints)
         {
             int index = (hint.Y * 9) + hint.X;
             model.AddConstraint($"Cell_{hint.X}_{hint.Y}_Equals_{hint.Value}", x[index] == hint.Value);
         }
     }
 }
Exemple #3
0
        public static void CreateConstraints(this Microsoft.SolverFoundation.Services.Model model, Microsoft.SolverFoundation.Services.Decision[] grid)
        {
            for (int group = 0; group < 9; group++)
            {
                // Create row constraints
                var row = new List <Microsoft.SolverFoundation.Services.Decision>();
                for (int i = 0; i < 9; i++)
                {
                    int index = (group * 9) + i;
                    row.Add(grid[index]);
                }
                model.AddConstraint($"Row{group}_AllDifferent", Microsoft.SolverFoundation.Services.Model.AllDifferent(row.ToArray()));

                // Create column constraints
                var col = new List <Microsoft.SolverFoundation.Services.Decision>();
                for (int i = 0; i < 9; i++)
                {
                    int index = (i * 9) + group;
                    col.Add(grid[index]);
                }
                model.AddConstraint($"Col{group}_AllDifferent", Microsoft.SolverFoundation.Services.Model.AllDifferent(col.ToArray()));

                // Create region constraints
                int regionStartX = (group % 3) * 3;
                int regionStartY = (group / 3) * 3;
                var region       = new List <Microsoft.SolverFoundation.Services.Decision>();
                for (int i = 0; i < 9; i++)
                {
                    int deltaX = (i % 3);
                    int deltaY = (i / 3);
                    int xLoc   = regionStartX + deltaX;
                    int yLoc   = regionStartY + deltaY;
                    int index  = (yLoc * 9) + xLoc;
                    region.Add(grid[index]);
                }
                model.AddConstraint($"Region{group}_AllDifferent", Microsoft.SolverFoundation.Services.Model.AllDifferent(region.ToArray()));
            }
        }