一、求解前参数设置
1. 求解时间上限设置
设置时间单位为秒,以下示例模型求解时间上限为1个小时。
cplex.setParam(IloCplex.DoubleParam.TimeLimit, 3600);
2.关闭求解过程展示
cplex.setOut(null);
3. 模型求解搜索策略
(1)默认自动搜索策略
自动搜索策略会根据问题的特性自动选择合适的搜索策略。CPLEX将根据问题的规模、结构和其他因素动态地选择最佳的搜索策略。这种策略通常是默认设置,因为它能够在大多数情况下提供较好的性能。
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, IloCplex.MIPSearch.Auto);
或
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, 0);
(2)传统分支定界搜索策略
传统分支定界搜索策略是一种经典的搜索方法,它按照分支定界树的方式来探索解空间。在每一步,它选择一个变量进行分支,并根据某些规则来搜索最优解。这种策略在一些问题上可能会很有效,但对于某些复杂的问题,可能会导致搜索空间过大而难以解决。
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, IloCplex.MIPSearch.Traditional);
或
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, 1);
(3)动态搜索策略
动态搜索策略是一种结合了自动搜索和传统分支定界搜索的方法。它会根据问题的特性在自动搜索和传统分支定界搜索之间进行动态切换,以找到最佳的搜索策略。这种策略可以在不同类型的问题中提供更好的性能,并且可以在解决过程中根据需要进行调整。
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, IloCplex.MIPSearch.Dynamic);
或
cplex.setParam(IloCplex.Param.MIP.Strategy.Search, 2);
4.其他
// model.setParam(IloCplex.IntParam.NodeSel, 0); // 选择节点的策略,1表示深度优先搜索,0表示最佳优先搜索
// model.setParam(IloCplex.Param.MIP.Strategy.Search, 2); //动态搜索策略
// model.setParam(IloCplex.Param.MIP.Tolerances.UpperCutoff, 1000.0); // 设置最优解的上界
// model.setParam(IloCplex.Param.MIP.Tolerances.LowerCutoff, -Double.MAX_VALUE); // 设置最优解的下界为负无穷
// model.setParam(IloCplex.Param.MIP.Tolerances.LowerCutoff, 0); // 设置最优解的下界为0
二、求解后模型相关信息的获取
1.获取模型的目标函数值
double obj = cplex.getObjValue();
2.获取决策变量的值
double value = cplex.getValue(x)
3.获取模型的gap值
double gap = cplex.getMIPRelativeGap();
4.输出模型的lp文件
String path = "C:\\Users\\12068\\Desktop\\...\\model.lp"; //保存路径
cplex.exportModel(path);