C++版本的 BSO 算法测试报告
测试人:徐童
主要编程人: 马思清
项目执行人:Jun Steed Huang
算法原创人:史玉回
Reviewers: 程适,Bruce He,陶欣怡,蒋可
测试目的:验证 C++代码
测试内容:单模与多模测试
测试时间:2019.1.26~2019.2.26
测试地点:无线谷
目录
前言 .................................................................................................................................................... 3
一、测试信息 .................................................................................................................................... 3
测试设备 .................................................................................................................................... 3
测试平台 .................................................................................................................................... 3
二、测试内容 .................................................................................................................................... 4
测试方法 .................................................................................................................................... 4
测试组别 .................................................................................................................................... 4
Benchmark Functions 参数预设 ................................................................................................4
BSO 算法的参数设置 ................................................................................................................ 5
BSO 的维度修改 .........................................................................................................................5
三、测试结果 .................................................................................................................................... 6
Rastrigin 评估 BSO 算法 ............................................................................................................ 6
Sphere 评估 BSO 算法.............................................................................................................10
四、对角线变种算法...................................................................................................................... 13
附录 A:C++版本的 BSO 代码 ........................................................................................................14
附录 B:MATLAB 版本的 BSO 代码................................................................................................32
附录 C:12 组实验的 50 次 Repeat 最优值数据..........................................................................38
多峰 Rastrigin-Dimension-MATLAB/C++ ..................................................................................38
单峰 phere-Dimension-MATLAB/C++ ...................................................................................... 39
前言
我们将已有的 matlab 原创代码作为基准,详细地对没有优化的 C++代码做了静
态检测。选取了两个多峰与单峰代表性的 Benchmark Functions 来评估原创与变
种两个 BSO 版本的代码。希望在学术界起到抛砖引玉的作用,同时在工业界也
鼓励方便同仁们使用。
一、测试信息
测试设备
电脑型号: 宏碁 Aspire VN7-591G 笔记本电脑
操作系统: Windows 10 Enterprise 64 位
处理器: 英特尔 第四代酷睿 i5-4210H @ 2.90GHz 双核 最高睿频 3.5GHz
内存: 8 GB ( 三星 DDR3L 1600MHz )
显卡: Nvidia GeForce GTX 960M
测试平台
MATLAB:MATLAB 2014a
C++:Visual Studio 2017
二、测试内容
测试方法
每组运行 BSO 算法 50 遍,每遍进行 2000 次迭代,记录每遍的最优解,则每组
有 50 个最优解。
维度
10
20
30
10
20
30
10
20
30
10
20
30
测试组别
测试组别 Benchmark Functions
测试版本(MATLAB/C++)
第 1 组
第 2 组
第 3 组
第 4 组
第 5 组
第 6 组
第 7 组
第 8 组
第 9 组
第 10 组
第 11 组
第 12 组
Rastrigin
Sphere
测每组 50 个最优解的:
mean
worst
best
variance
C++
MATLAB
C++
MATLAB
times
Benchmark Functions 参数预设
Rastrigin 定义域:[-5.12, 5.12]
Sphere 定义域:[-100, 100]
BSO 算法的参数设置
参数按照史教授 2014 年的《Brain Storm Optimization Algorithm》论文,未更改。
C++
const int np = 100;
各参数在两 Language 版本中的细节:
参数
n
m
p5a
p6b
if (r_1 < 0.8)
const int nc = 5;
if (uniRand() < 0.2)
p6biii
p6c
k
Max_
iteration
μ
σ
MATLAB
n_p = 100;
n_c = 5;
if (rand() < 0.2)
prob_one_cluster = 0.8;
if r_1 < prob_one_cluster
if rand() < 0.4
if rand() < 0.5
n_iteration)/20
max_iteration = 2000;
if (uniRand() < 0.4)
if (uniRand() < 0.5)
(0.5*max_iteration - n_iteration) / 20 (0.5*max_iteration -
const int max_iteration = 2000;
normal_distribution n(0, 1)
normrnd(0,1,1,n_d)
BSO 的维度修改
在进行不同维度测试时,请注意不仅要修改 bsocore.cpp 里的维度值,如下阴影
部分:
const int nd = 10; // Number of dimension
而且要同步手动修改 function.cpp 里面的纬度值,如下阴影部分:
for (int i = 0; i < 10; i++)
三、测试结果
测试组别
Benchmark
Functions
测 试 版
本
dimension
mean
best
worst
variance
times
第 1 组
第 2 组
第 3 组
第 4 组
第 5 组
第 6 组
第 7 组
第 8 组
第 9 组
第 10 组
第 11 组
第 12 组
Rastrigin
Sphere
C++
MATLAB
C++
MATLAB
10
20
30
10
20
30
10
20
30
10
20
30
6.116364
1.98992
12.9345
6.586904071
4h7min
20.9735298
7.99479
41.9196
54.44474071
7h14min
45.723414
24.6508
111.986
294.5966334
9h42min
4.01963449
0.994959057
5.969754343
1.503129856
8min
18.30723405
8.954631514
30.84370054
23.60017541
10min
33.31119546
15.91934491
48.75290806
53.90180219
12min
5.23E-10
9.94E-45
2.05E-08
8.73199E-18
4h21min
2.26E-04
3.07826E-14
0.00498379
8.37836E-07
8h30min
3.26E-03
2.37E-05
7.33E-02
0.000114121
11h46min
3.97518E-44
1.4457E-44
6.55026E-44
1.56692E-88
12.5min
3.21718E-43
1.37202E-43
5.99555E-43
8.50032E-87
12min
1.12363E-42
4.90549E-43
1.59672E-42
5.34992E-86
11.5min
C++版本完成评估测试使用时间:45h40min (20 位没有优化)
MATLAB 版本完成评估测试使用时间:66min (16 位平台优化)
Rastrigin 评估 BSO 算法
在维度相同、代码语言版本不同时的最优解分布图。
下面是三幅分别维度为 10、20、30 的两款代码的最优解分布图,其中 x 轴为遍
数,范围是 0~50,y 轴是最优解的大小。
现象:
dimension=10 时,MATLAB 的 BSO 的最优解更优。
dimension=20、30 时,两版本的最优解相差不大。
我们估计这个区别来源于 MATLAB 的随机数与 C++的不太一样,需要进一步验证。