OR-Tools Maximize 产生不同的结果

问题描述

我想了解最大化目标的行为。这个简单的示例旨在填充受各种约束的矩阵。目前的限制是每个值要么是 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,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("---");
    }
}

由于目标是最大化 codes 矩阵中所有项目的总和(通过 total_cost),我希望有一个解决方案,所有项目都设置为 5,但是,9 个解决方案是产生,第一个全是 1,最后一个全是 5,以及 1、5 的各种组合在其余解的行中。我错过了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)