Or tools 或者工具会产生不同的结果

Or tools 或者工具会产生不同的结果,or-tools,Or Tools,我想了解最大化目标的行为。这个简单的示例旨在填充受各种约束的矩阵。目前的限制是每个值为1或5 public static void SolverStudy() { Solver solver = new Solver("solver"); int cols = 2; int rows = 4; IntVar[,] codes = solver.MakeIntVarMatrix(rows, cols, Enumerable.Range(0, 1

我想了解最大化目标的行为。这个简单的示例旨在填充受各种约束的矩阵。目前的限制是每个值为1或5

public static void SolverStudy()
{
    Solver solver = new Solver("solver");
    int cols = 2;
    int rows = 4;

    IntVar[,] codes = solver.MakeIntVarMatrix(rows, cols, Enumerable.Range(0, 12).ToArray(), "codes");
    IntVar[] codes_flat = codes.Flatten();

    for (int r = 0; r < rows; r++)
    {
        for (int c = 0; c < cols; c++)
        {
            Constraint ca = solver.MakeEquality(codes[r, c], 1);
            Constraint cb = solver.MakeEquality(codes[r, c], 5);

           solver.Add(solver.MakeMax(ca, cb) == 1); // item is either 1 or 5
        }
    }

    IntVar total_cost = (from r in Enumerable.Range(0, rows) from c in Enumerable.Range(0, cols) select (codes[r, c])).ToArray().Sum().Var();
    OptimizeVar objective = total_cost.Maximize(1);
    DecisionBuilder db = solver.MakePhase(codes_flat, Solver.INT_VAR_DEFAULT, Solver.INT_VALUE_DEFAULT);
    solver.NewSearch(db, objective);

    while (solver.NextSolution())
    {
        for (int r = 0; r < rows; r++)
        {
           for (int c = 0; c < cols; c++)
               Console.Write(codes[r, c].Value());

           Console.WriteLine("");
        }

        Console.WriteLine("---");
    }
}
publicstaticvoidsolverstudy()
{
解算器=新解算器(“解算器”);
int cols=2;
int行=4;
IntVar[,]code=solver.MakeIntVarMatrix(行、列、可枚举的.Range(0、12).ToArray(),“code”);
IntVar[]code_flat=code.flant();
对于(int r=0;r
由于目标是最大化
code
矩阵中所有项目的总和(通过
total_cost
),我希望有一个单一的解决方案,所有项目都设置为5,但是,会产生9个解决方案,第一个是所有1,最后一个是所有5,以及剩余解决方案行中1、5的各种组合。我错过了什么