gp.setParam("LogToConsole", 0)
控制 日志是否输出到控制台。
-
0:不在控制台打印日志(常用于跑批、服务器后台) -
1:打印到控制台(默认通常是 1)
不影响写文件日志(
LogFile),只管"屏幕上是否刷"。
m.Params.Heuristics
控制 **启发式(heuristics)**投入力度(主要影响 MIP)。
-
范围通常
0.0 ~ 1.0(可以更大但一般不建议乱调) -
0:基本禁用启发式(可能更慢找到可行解/更差的上界) -
值越大:越积极找可行解、提升 incumbent(上界/下界中的"上界",取决于 min/max)
典型用途
-
你很难找到第一个可行解:适当调高(如 0.2→0.5)
-
你更想要"证明最优/收敛界"而不是早出解:可调低
m.Params.Threads
设置 并行线程数(多核并行)。
-
1:单线程(更可复现) -
0:让 Gurobi 自己决定用多少线程(默认) -
k:固定用 k 个线程
注意
-
多线程速度通常更快,但结果路径(日志、节点顺序)会更不稳定。
-
需要可复现/对比实验:常设
Threads=1并配合Seed。
m.Params.MIPFocus
告诉求解器:在 MIP 中"更侧重什么"。
-
0(默认):平衡 -
1:更侧重 尽快找可行解(feasible solutions) -
2:更侧重 改进下界/证明最优(bound / optimality proof) -
3:更侧重 改进 incumbent(当前最好解)(在已有可行解基础上深挖)
经验用法
-
你卡在"没有可行解"很久:
MIPFocus=1 -
你有不错的解但 gap 下不来:
MIPFocus=2 -
你想在固定时间内把解质量再压一压:
MIPFocus=3
m.Params.PoolSolutions
解池大小:最多 存多少个不同的可行解(solution pool)。
-
常见:
PoolSolutions = N(如 10、100、1000) -
只对"你希望拿到多个候选方案"有意义
注意:存更多解会增加内存/管理开销。
m.Params.PoolSearchMode
解池搜索模式:为了"多找一些不同的解",求解器会额外做多少工作。
-
0:默认(不特别为解池额外用力) -
1:中等强度,为了多样性多找解 -
2:更强,会显著增加为寻找多解投入(可能变慢)
何时用
-
你要"很多备选方案"(排班、路径、多方案评估):
1或2 -
你只要最优解:一般别开太高
m.Params.PoolGap
解池质量阈值:允许解池里存的解比最优解差多少(相对差距)。
-
例如
PoolGap = 0.05:允许解池中解的目标值最多比最优差 5%(相对意义,按目标方向) -
如果设得很小:只保留很接近最优的解
-
设得大:解池里会有更"多样/更差"的解
m.Params.SolutionLimit
找到多少个可行解就停止(包括解池里的解)。
-
SolutionLimit = k:一旦找到 k 个可行解就终止优化 -
常见用法:你只要"任意可行解"或"前几个方案"就够了
和
TimeLimit类似是停止条件之一。
m.Params.TimeLimit
时间上限(秒)。到时间就停止。
-
TimeLimit = 60:最多跑 60 秒 -
停止时会返回当前最好结果(可能不是最优),并在
m.Status里体现是时间限制终止。