更改参数

更改参数

而不是继续优化一个困难的模型glass4,尝试不同的参数设置有时有用。当下界移动缓慢时,就像在该模型上一样,一个可能有用的参数是MIPFocus,它调整高级MIP解决方案策略。现在让我们将这个参数设置为1,这将MIP搜索的焦点改为寻找好的可行解决方案。有两种方法可以更改参数值。你可以使用方法M.SetParam()

gurobi> m.s setparam ('MIPFocus', 1)修改参数MIPFocus的值为1 Prev: 0 Min: 0 Max: 3默认值:0
......或者你可以使用M.Params.类……
gurobi> m.Params.MIPFocus = 1修改MIPFocus参数值为1 Prev: 0 Min: 0 Max: 3默认值:0
一旦参数被更改,我们调用m.reset ()重置模型上的优化,然后重置M.Optimize()要启动新的优化运行:
gurobi> m.reset()
丢弃解决方案信息
gurobi> m.optimize()
Gurobi Optimizer版本9.0.1 Build V9.0.1RC0(Mac64)
优化一个396行322列1815个非零模型指纹:0x541d0ad3变量类型:20个连续302个整数(0二进制)系数统计:矩阵范围[1e+00, 8e+06]目标范围[1e+00, 1e+06]界限范围[1e+00, 8e+02] RHS范围[1e+00, 8e+06] Presolve删除4行5列Presolve时间:预解:392行,317列,1815个非零变量类型:19个连续,298个整数(298个二进制)发现启发式解:目标3.133356e+09目标8.000024e+ 08,72次迭代,0.00秒节点当前节点| |客观界限|工作Expl Unexpl | Obj深度IntInf | |现任BestBd差距/节点时间0 0 8.0000 3.1334 e + e + 08年0 72 09年8.0000 e + 08年74.5% - 2.400019 0 0 0 H e + 09年8.0000 e + 08年66.7% - 0 H 0 0 2.220019 e + 09年8.0000 e + 08年64.0% - 0 0 0 8.0000 2.2200 e + e + 08年0 72 09年8.0000 e + 08年64.0% - 2.166685 0 0 0 H e + e + 08年09年8.000063.1% - 0 0 0 8.0000 2.1667 e + e + 08年0 72 09年8.0000 e + 08年63.1% - 0 0 0 8.0000 2.1667 e + e + 08年0 77 09年8.0000 e + 08年63.1% - 0 H 0 0 2.133351 e + 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 80 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 80 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 83 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 78 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 83 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 83 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 88 09年8.0000 e + 08年62.5% - 0 0 0 8.0000 2.1334 e + e + 08年0 66 09年8.0000 e + 08年62.5% - 0 H 0 0 2.050017 e + 09年8.0000 e + 08年61.0% 2 - 0 0 8.0000 2.0500 e + e + 08年0 65 09年8.0000 e + 08年61.0% 2.050017 - 0 H 1 4 e + 09年8.0000 e + 08年61.0% 2.000016 74.0 0 H 6 8 e + 09年8.0000 e + 08年60.0% 41.8 0 H 130 128 1.700015 e + 09年8.0000 e + 08年12.7 0 H 199 52.9% 203 1.644459 e + 09年8.0000 e + 08年10.8 0 H 213 51.4% 213 1.644459 e + 09年8.0000 e + 08年51.4% 10.8 - 1 s H 244 269 1.633347 e + 09年8.0001 e + 08年51.0% 1428 11.0 1027 1.5333 e + 09年40 44 1.6333 e + 09年8.0001 e + 08年51.0% 15.5 5 s 3138 1602 1.3750 e + 09年58 221.6333e+09 8.0001e+08 51.0% 20.5 10s * 4233 2185 66 1.600017e+09 8.0001e+08 50.0% 21.5 12s * 4238 2082 67 1.550017e+09 8.0001e+08 48.4% 21.5 12s H 4308 2026 1.500016e+09 8.0001e+08 46.7% 21.6 14s 4457 2226 1.1000e+09 36 65 1.5000e+09 8.0001e+08 46.7% 22.6 15s H 4809 2136 1.450016e+09 8.0001e+08 44.8% 23.4 16s H 4908 2043 1.400013e+09 8.0001e+08 42.9% 23.9 17s H 5098 2027 1.350013e+09 8.0001e+08 40.7% 24.8 18s H 5282 1752 1.200013e+09 8.0001e+08 33.3% 25.7 18s Interrupt request received Cutting planes: Gomory: 37 Cover: 9 Implied bound: 41 MIR: 51 Flow cover: 266 RLT: 107 Relax-and-lift: 99 Explored 5332 nodes (140122 simplex iterations) in 19.00 seconds Thread count was 8 (of 8 available processors) Solution count 10: 1.20001e+09 1.35001e+09 1.40001e+09 ... 1.64446e+09 Solve interrupted Best objective 1.200012600000e+09, best bound 8.000066838804e+08, gap 33.3335%

结果与我们的期望一致。通过将重点转向寻找可行解决方案(客观价值),我们会发现更好的解决方案1.2E9.1.5 e9)。

setparam()方法旨在非常灵活和宽容。它接受通配符作为参数,它忽略了字符案例。因此,以下命令都是等效的:

gurobi> m.s setparam ('NODELIMIT', 100) gurobi> m.s setparam ('NODELIMIT', 100) gurobi> m.s setparam ('N??限制,100)
你可以使用通配符来获得一个匹配参数列表:
Gurobi> M.SetParam('*削减',2)匹配参数:['削减','cliquecuts','cuthcove','flowcovercut','fundpatpcovt','gubcovercut','gubcovercut','incriedcuts','mipsepcut','mipsepcut','mipsecut','mircuts','modkcut','networkcuts','submipcuts','zerohalfcuts']

请注意,模型.Params.是不是比setparam()。特别是,这种方法不允许通配符。尽管如此,您不必担心使用方法的参数名称的大写字母。M.Params.Heuristics.M.Params.Heuristics.是等价的。

完整的可用参数集可以使用paramHelp ()命令。您可以获得有关特定参数的更多信息(例如,mipgap.)通过打字Paramhelp('mipgap')