Shuffled Complex Evolution (SCE-UA) Method
SCE-UA, 是一种全局优化算法, 它结合了随机搜索算法、单纯形法、聚类分析及生物竞争演化等多种方法的优势,能有效解决目标函数反映面存在的粗糙、不敏感区及不凸起等问题,并可避免局部最小点的干扰。该方法能够同时优化模型中的多个参数, 是参数优化的有效方法(Duan et al. 1992; 李得勤等, 2013)。
SCE-UA 的优化的具体流程详见 Duan et al.,(1992)。
Matlab上有SCE-UA的包,它是一个 efficient and robuse global optimization method, 我用R来运行了SCE-UA的包,发现它确实是比贝叶斯全局优化方法快。
这里分享的是R里面的rtop包中的SCE-UA使用方法。https://cran.r-project.org/web/packages/rtop/rtop.pdf 中有一个示例 (有修改)。
library(rtop) |
Loading required package: sp
Warning messages:
1: package ‘rtop’ was built under R version 3.5.3
2: package ‘sp’ was built under R version 3.5.2
# 定义模型函数,这个函数中有一个自变量x。
# 这里的模型函数,可以根据需要,设置成所需要的模型,如蒸散模型、光合模型等等。
# 有三个需要优化的参数: pars[1] pars[2] pars[3]
fun = function(x, pars) pars[2]*sin(x*pars[1])+pars[3] |
# 我们自己创造一批观测数据,x是自变量,y是与自变量有关系的观测值。
set.seed(1) # generate example data from a function with three parameters # with some random noise x = rnorm(50, sd = 0.3) y = fun(x, pars = c(5, 2, 3)) + rnorm(length(x), sd = 0.3) # 观测值序列 plot(x,y) |
# 建立目标函数:使得模拟值与观测值的差的平方和最小。yvals是模拟值,yobs是观测值。
# Objective function, summing up squared differences
OFUN = function(pars, x, yobs) { yvals = fun(x, pars) sum((yvals-yobs)^2) } |
# 这是进行全局优化的关键,设置参数的范围
sceuares = sceua(OFUN, pars = c(0.1,0.1,0.1), # 预设的参数优化值 lower = c(-10,0,-10), # 参数的最低阈值 upper = c(10,10,10), # 参数的最高阈值 x = x, # 自变量 yobs = y) # y的观测值 |
51 best 62.7 function convergence 200 parameter convergence 6136.001
82 best 22.6 function convergence 200 parameter convergence 3210.309
114 best 7.54 function convergence 200 parameter convergence 1697.043
142 best 6.68 function convergence 200 parameter convergence 957.5426
170 best 5.36 function convergence 200 parameter convergence 547.8432
196 best 5.02 function convergence 170 parameter convergence 269.749
229 best 4.84 function convergence 129 parameter convergence 131.5328
259 best 4.84 function convergence 43.5 parameter convergence 95.69027
286 best 4.83 function convergence 32.2 parameter convergence 53.01822
315 best 4.82 function convergence 10.5 parameter convergence 28.57973
346 best 4.82 function convergence 4.1 parameter convergence 13.77194
379 best 4.82 function convergence 0.462 parameter convergence 8.272859
409 best 4.82 function convergence 0.462 parameter convergence 4.907872
440 best 4.82 function convergence 0.191 parameter convergence 2.577018
474 best 4.82 function convergence 0.0499 parameter convergence 1.342339
499 best 4.82 function convergence 0.00807 parameter convergence 0.8455227
# 三个参数的优化值:
sceuares$par |
sceuares$par
[1] 5.034405 2.031729 2.991844
# pars[1]=5.034405; pars[2]= 2.031729 ; pars[3]=2.991844
# 这是我们想要的结果
sceuares |
> sceuares
$`par`
[1] 5.034405 2.031729 2.991844
$value
[1] 4.822434
$convergence
$convergence$`funConvergence`
[1] 0.00807
$convergence$parConvergence
[1] 0.8455227
$counts
[1] 499
$iterations
[1] 16
$timeout
[1] FALSE
xx = seq(min(x), max(x), 0.1) lines(xx, fun(xx, pars = sceuares$par)) # 采用优化的参数值模拟的y |
上图中,散点是观测值。曲线是优化参数拟合的模拟值。
我们可以根据自己的需要定义模型函数、设置参数范围。
参考文献:
https://www.mathworks.com/matlabcentral/fileexchange/7671-shuffled-complex-evolution-sce-ua-method
Duan QY, Sorooshian S, Gupta VK. 1992. Effective and efficient global optimization for conceptual rainfall-runoff models . Water Resourse Research, 28 (4): 1015–1031
李得勤,张述文,段云霞,崔锦. SCE-UA 算法优化土壤湿度方程中参数的性能研究. 大气科学, 2013, 05: 971-982
转载本文请联系原作者获取授权,同时请注明本文来自庄伟科学网博客。
链接地址:https://wap.sciencenet.cn/blog-526092-1180758.html?mobile=1
收藏