重现结果
用伪随机数得到相同的答案
GlobalSearch
和 MultiStart
使用伪随机数来选择起点。再次使用相同的伪随机数流:
比较各种算法设置。
让示例可重复运行。
延长一次运行,并了解上次运行的初始段。
GlobalSearch
和 MultiStart
都使用默认的随机数流。
重现结果的步骤
在运行问题之前,存储默认随机数流的当前状态:
stream = rng;
运行您的
GlobalSearch
或MultiStart
问题。恢复随机数流的状态:
rng(stream)
如果您再次运行您的问题,您将得到相同的结果。
示例:重现 GlobalSearch 或 MultiStart 结果
此示例显示如何获得 寻找全局或多个局部最小值 的可重现结果。该示例遵循 重现结果的步骤 中的步骤。
存储默认随机数流的当前状态:
stream = rng;
创建
sawtoothxy
函数文件:function f = sawtoothxy(x,y) [t r] = cart2pol(x,y); % change to polar coordinates h = cos(2*t - 1/2)/2 + cos(t) + 2; g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ... .*r.^2./(r+1); f = g.*h; end
创建
problem
结构体和GlobalSearch
对象:problem = createOptimProblem('fmincon',... 'objective',@(x)sawtoothxy(x(1),x(2)),... 'x0',[100,-50],'options',... optimoptions(@fmincon,'Algorithm','sqp')); gs = GlobalSearch('Display','iter');
运行问题:
[x,fval] = run(gs,problem)
Num Pts Best Current Threshold Local Local Analyzed F-count f(x) Penalty Penalty f(x) exitflag Procedure 0 465 422.9 422.9 2 Initial Point 200 1730 1.547e-015 1.547e-015 1 Stage 1 Local 300 1830 1.547e-015 6.01e+004 1.074 Stage 2 Search 400 1930 1.547e-015 1.47e+005 4.16 Stage 2 Search 500 2030 1.547e-015 2.63e+004 11.84 Stage 2 Search 600 2130 1.547e-015 1.341e+004 30.95 Stage 2 Search 700 2230 1.547e-015 2.562e+004 65.25 Stage 2 Search 800 2330 1.547e-015 5.217e+004 163.8 Stage 2 Search 900 2430 1.547e-015 7.704e+004 409.2 Stage 2 Search 981 2587 1.547e-015 42.24 516.6 7.573 1 Stage 2 Local 1000 2606 1.547e-015 3.299e+004 42.24 Stage 2 Search GlobalSearch stopped because it analyzed all the trial points. All 3 local solver runs converged with a positive local solver exit flag. x = 1.0e-007 * 0.0414 0.1298 fval = 1.5467e-015
运行此问题时您可能会获得不同的结果,因为随机流在运行开始时处于未知状态。
恢复随机数流的状态:
rng(stream)
再次运行该问题。您会得到相同的输出。
[x,fval] = run(gs,problem)
Num Pts Best Current Threshold Local Local Analyzed F-count f(x) Penalty Penalty f(x) exitflag Procedure 0 465 422.9 422.9 2 Initial Point 200 1730 1.547e-015 1.547e-015 1 Stage 1 Local ... Output deleted to save space ... x = 1.0e-007 * 0.0414 0.1298 fval = 1.5467e-015
并行处理和随机数流
当您以与串行计算相同的方式并行运行算法时,您可以从 MultiStart
获得可重复的结果。运行是可重现的,因为 MultiStart
在本地生成伪随机起点,然后将起点分发到并行处理器。因此,并行处理器不使用随机数。
要重现并行 MultiStart
运行,请使用 重现结果的步骤 中描述的步骤。有关如何并行运行 MultiStart
的说明,请参阅 如何在 Global Optimization Toolbox 中使用并行处理。