如何在.NET中通过Sonnet调用CBC求解器限制迭代次数?
在.NET的Sonnet中给CBC求解器设置迭代次数限制
Sonnet本身没有专门的options属性,但可以通过向底层CBC求解器传递原生命令行参数的方式实现迭代次数限制,具体操作如下:
- 利用
Solver.AddArgument()方法添加CBC的maxIt参数,该参数用于指定分支定界的最大迭代次数; - 参数格式为
maxIt=数值,例如maxIt=100表示限制最多执行100次迭代。
修改后的完整代码示例:
Sonnet.Model model = new Sonnet.Model("GoogleExample"); Variable x = new Variable(VariableType.Integer); Variable y = new Variable(VariableType.Integer); model.Add(x + 7 * y <= 17.5); model.Add(0 <= x <= 3.5); model.Add(0 <= y); model.Objective = new Expression(x + 10 * y); Solver solver = new Solver(model); // 添加迭代次数限制,此处设置为100次 solver.AddArgument("maxIt=100"); solver.Maximise();
补充说明
- CBC支持大量原生命令行参数,除了
maxIt,你还可以用同样方式设置其他求解器参数(比如sec=10表示限制求解最多运行10秒); - 若想查看CBC所有支持的参数,可直接运行CBC可执行文件并添加
--help参数,或参考COIN-OR CBC的官方参数说明。
内容的提问来源于stack exchange,提问作者Sascha
相关产品推荐
相关产品推荐

