问题描述
我想了解最大化目标的行为。这个简单的示例旨在填充受各种约束的矩阵。目前的限制是每个值要么是 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 (将#修改为@)