优化算法研究Beale函数
使用optimtool库的优化算法
本文使用optimtool库,调用barzilar_borwein算法完成Rosenbrock函数的研究,观察barzilar_borwein算法和库内其他算法的比较,(1.0, 1.0)是Beale函数的局部最小值点(但非全局最优),测试抗局部最优能力,
pip install optimtool --upgrade
定义2维Beale函数
import optimtool.unconstrain as ou
from optimtool.base import sp
x = sp.symbols("x1:3")
beale = (1.5 - x[0] + x[0]*x[1])**2 + (2.25 - x[0] + x[0]*x[1]**2)**2 + (2.625 - x[0] + x[0]*x[1]**3)**2
barzilar_borwein训练结果和可视化
ou.gradient_descent.barzilar_borwein(beale, x, (1.0, 1.0), verbose=True)
(1.0, 1.0) 14.203125 0
[1. 0.72034394] 8.613364269221663 1
[1.09771206 0.44526583] 5.308680478886819 2
[1.38808475 0.12614333] 2.4006967233206993 3
[ 1.81279486 -0.01617082] 0.9682665292862405 4
[2.03284983 0.1410857 ] 0.4843382287348248 5
[2.43601476 0.31809602] 0.10111792835773516 6
[2.62672035 0.41291386] 0.04039621528658232 7
[2.87880839 0.055794 ] 1.9323574930766991 8
[2.68476699 0.41220433] 0.0230103496441457 9
[2.6934043 0.41094788] 0.021669608897330647 10
[2.713015 0.42406871] 0.018660135323331627 11
[2.77032813 0.38656005] 0.051301041937611376 12
[2.75075839 0.46151445] 0.028522292841715625 13
[2.76271057 0.43145075] 0.012091614034382534 14
[2.76476796 0.43475676] 0.011644013783718963 15
[2.77122976 0.43699469] 0.010919904196730747 16
[2.92399174 0.47500074] 0.0016417836126992238 17
[2.85965617 0.91512258] 8.59699032941753 18
[2.86811318 0.64779374] 0.8705754927670929 19
[2.87936329 0.5790505 ] 0.2886894485336716 20
[2.89458395 0.50600096] 0.025344434951079776 21
[2.9014701 0.48098516] 0.0025778990211843197 22
[2.90375526 0.47535493] 0.001653667555155547 23
[2.90464116 0.47518102] 0.0016220574119709882 24
[2.90843199 0.47621528] 0.0014890770779708734 25
[2.98762353 0.49690567] 2.4859796293172575e-05 26
[2.99867929 0.49813167] 5.478325861965015e-05 27
[2.9842555 0.5574171] 0.09420696446591374 28
[2.9966492 0.49899133] 2.5198466839731486e-06 29
[2.99663228 0.49913757] 1.8378779992713937e-06 30
[2.99664866 0.49916265] 1.8050407325405887e-06 31
[2.99669364 0.49917313] 1.7570171581121133e-06 32
[2.99983544 0.50002304] 9.834249770086522e-08 33
[3.00227074 0.49086265] 0.002142793215215115 34
[2.9999374 0.4999845] 6.273714547401102e-10 35
[2.99993782 0.49998448] 6.19164826802986e-10 36
[2.99994203 0.49998555] 5.380775953657981e-10 37
[3.00000058 0.49999619] 3.6011944648592926e-10 38
[2.99991092 0.50035631] 3.3051133379742784e-06 39
[2.99999978 0.49999994] 8.025618258458596e-15 40
[2.99999978 0.49999995] 7.708380972694445e-15 41
[2.99999978 0.49999995] 7.59350482463817e-15 42
[3. 0.5] 1.5808739939016994e-19 43
[3. 0.50000001] 4.083066852170755e-15 44
[3. 0.5] 1.3707812804078446e-23 45
ou.gradient_descent.barzilar_borwein(beale, x, (1.0, 1.0), verbose=True, method="ZhangHanger")
(1.0, 1.0) 14.203125 0
[1. 0.72034394] 8.613364269221663 1
[1.09771206 0.44526583] 5.308680478886819 2
[1.38808475 0.12614333] 2.4006967233206993 3
[ 1.81279486 -0.01617082] 0.9682665292862405 4
[2.03284983 0.1410857 ] 0.4843382287348248 5
[2.43601476 0.31809602] 0.10111792835773516 6
[2.62672035 0.41291386] 0.04039621528658232 7
[2.71747204 0.28435071] 0.26008839764092384 8
[2.67226958 0.41094835] 0.0254292658536358 9
[2.68042684 0.40699964] 0.023889944222237426 10
[2.68981891 0.4124228 ] 0.022133973764349488 11
[2.76693683 0.41912395] 0.016272517458961265 12
[2.76121611 0.47128016] 0.0353752922955927 13
[2.77419971 0.43532322] 0.010774107428702384 14
[2.77610285 0.43818197] 0.010406967726294009 15
[2.78242281 0.44043279] 0.009744413480985356 16
[2.9223384 0.47145685] 0.0025859041814931057 17
[2.91923711 0.48781357] 0.002661765726631872 18
[2.92202041 0.47966359] 0.0010654452142961034 19
[2.92256592 0.48000362] 0.0010477875164278496 20
[2.92894408 0.48172957] 0.0008757145664487597 21
[2.99252097 0.49561943] 0.0001534245116765266 22
[2.9906855 0.50359877] 0.0008192234862604692 23
[2.99212516 0.4979953 ] 1.00606612693764e-05 24
[2.99216663 0.49803773] 9.911725829044573e-06 25
[2.9923434 0.49808353] 9.46676798983928e-06 26
[2.99987763 0.49982185] 5.060125829771744e-07 27
[2.99947829 0.50146968] 5.9129826236347815e-05 28
[2.99985383 0.49996297] 3.4345729121736805e-09 29
[2.9998546 0.4999637] 3.385788203840971e-09 30
[2.99985819 0.49996461] 3.220563614227004e-09 31
[3.00000009 0.49999917] 1.6779755192772917e-11 32
[2.99996781 0.50012896] 4.327652668521588e-07 33
[2.99999999 0.5 ] 2.2720979769531056e-17 34
[2.99999999 0.5 ] 2.00270006921401e-17 35
[2.99999999 0.5 ] 1.9768810321824084e-17 36
[3. 0.5] 1.3515211240021842e-23 37
L_BFGS训练结果与可视化
ou.newton_quasi.L_BFGS(beale, x, (1.0, 1.0), verbose=True, m=3)
(1.0, 1.0) 14.203125 0
[1. 0.1328125] 4.6556049668799915 1
[1.00000356 0.13286779] 4.655697342036085 2
[ 1.66574987 -0.1297908 ] 1.4339963003221647 3
[2.1991451 0.09287751] 0.4326517471406336 4
[2.35337572 0.27289083] 0.15180361186229815 5
[2.58520254 0.42161438] 0.07002719915433513 6
[2.66269974 0.41183665] 0.027875197707779374 7
[2.81718557 0.44827726] 0.0067439483406747 8
[2.92624778 0.48433283] 0.001158589197305531 9
[2.97845726 0.49487611] 7.767076816080408e-05 10
[2.99986241 0.50060531] 9.440995823250198e-06 11
[3.0008939 0.50039985] 8.61848965475116e-07 12
[3.00005191 0.50001399] 4.6026050231769667e-10 13
[3.00000106 0.50000024] 1.8815802988498998e-13 14
[2.99999998 0.5 ] 1.0173394064978475e-15 15
[2.99999998 0.5 ] 6.912715808163152e-17 16
[3. 0.5] 2.280333215887406e-19 17
[3. 0.5] 5.311676031486097e-22 18
trust_region训练结果和可视化
ou.trust_region.steihaug_CG(beale, x, (1.0, 1.0), verbose=True)
(1.0, 1.0) 14.203125 0
[1.71804524 0.30400357] 1.4821315166203015 1
[2.46598675 0.25322778] 0.1596137753388936 2
[2.86370632 0.5336838 ] 0.10651715455464904 3
[3.04633254 0.50923385] 0.000428061736617055 4
[2.99276635 0.49835315] 8.972328081115206e-06 5
[2.99988483 0.49997523] 2.4542341429396344e-09 6
[2.99999997 0.49999999] 1.950864041697307e-16 7