第 5 章 用户界面
用户界面基于shiny包开发。核心思想是,把目标函数或者约束在R
的脚本中预先定义好,然后调用run_BAS_App(func = ..., constr = ...,theme = ...)
函数来人为调节参数,运行以及可视化。
5.1 调用语句
其中:
func
指的是,需要优化的目标函数constr
则是不等式约束,至于上下限约束,可以直接在用户界面里面定义theme
也就是界面主题,即皮肤,默认的主题是united
。可以使用help(run_BAS_App)
语句来看可选的主题样式都有哪些,如superhero
,cosmo
,paper
,journal
等主题。这些主题是调用shinythemes而来。
5.2 使用案例
5.2.1 Michalewicz function
先在代码中预定义函数:
mich <- function(x){
y1 <- -sin(x[1])*(sin((x[1]^2)/pi))^20
y2 <- -sin(x[2])*(sin((2*x[2]^2)/pi))^20
return(y1+y2)
}
然后调用用户界面:
出现了如图5.1的界面:
![shiny interface](img/app1.png)
图 5.1: shiny interface
左边是固定的参数调节栏,最上方有目前的收录的三种算法可供选择,以及本包的作者信息。右侧也有三个选项,分别是优化过程信息,优化参数结果以及优化结果可视化。
按照你的需要,调节好左边的参数信息(第一个参数,也就是初始值init
,默认为空,也可以指定),然后点击左下方的Run BAS
键,即可看到如图5.2的内容:
![optimization progress栏信息](img/app2.png)
图 5.2: optimization progress栏信息
由于回合数较大,因此只截取了部分内容显示。
分别点击Optimization Parameters
和Progress Plot
键,可以看到最后的结果,以及可视化信息,分别如图5.3与 5.4所示。
![Optimization Parameters栏信息](img/app3.png)
图 5.3: Optimization Parameters栏信息
可以看到,窗口的$par
显示的是参数的优化结果,而$value
则是对应的目标函数值。
![Progress Plot栏信息](img/app4.png)
图 5.4: Progress Plot栏信息
BAS
与其他两种算法有着不同的可视化结果,其并不是基于反馈来控制步长的。因此,图中的两条曲线,红色的为每一回合的目标函数值,而蓝色的为此前回合中最优的目标函数值。
5.2.2 Pressure Vessel function
这次,我们在BSAS-WPT
栏下进行界面使用。先在代码中预定义目标函数和约束:
pressure_Vessel <- list(
obj = function(x){
x1 <- floor(x[1])*0.0625
x2 <- floor(x[2])*0.0625
x3 <- x[3]
x4 <- x[4]
result <- 0.6224*x1*x3*x4 +
1.7781*x2*x3^2 +
3.1611*x1^2*x4 +
19.84*x1^2*x3
},
con = function(x){
x1 <- floor(x[1])*0.0625
x2 <- floor(x[2])*0.0625
x3 <- x[3]
x4 <- x[4]
c(
0.0193*x3 - x1,#<=0
0.00954*x3 - x2,
750.0*1728.0 - pi*x3^2*x4 - 4/3*pi*x3^3
)
}
)
调用用户界面,注意此时多出了constr
,也就是约束函数,$
符号在索引列表中的元素时使用:
自行调整参数后,用户界面如图5.5所示:
![BSAS-WPT参数调整](img/wpt1.png)
图 5.5: BSAS-WPT参数调整
点击Run BAS-WPT
之后,选择optimization Parameters
栏目,可以看到优化结果如图5.6所示:
![BSAS-WPT优化结果](img/wpt2.png)
图 5.6: BSAS-WPT优化结果
选择Progress Plot
栏目,过程可视化如图5.7所示:
![BSAS-WPT优化过程可视化](img/wpt3.png)
图 5.7: BSAS-WPT优化过程可视化