Or tools 或者工具会产生不同的结果
我想了解最大化目标的行为。这个简单的示例旨在填充受各种约束的矩阵。目前的限制是每个值为1或5Or 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
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的各种组合。我错过了什么