在上一节中,我们将适应度函数设定为Rastrigin函数,现在我们就通过JSOP来寻找该函数的全局最小值(JSOP默认寻找函数的最小值而非最大值)。
打开usr.m,相关参数设置如下
%仿真设置 model_name='test.cst'; %CST模型路径 result_route='1D ResultsS-Parameters'; %仿真结果在Navigation Tree中的路径 result_name='SZmax(1),Zmax(1)'; %仿真结果的名称(参见rtdata.txt) plot_mode='phase'; %仿真结果的模式,包括'magnitude','magnitudedb', 'phase', 'polar', 'real', 'imaginary', 'smith', 'smithy' solver_type='FDSolver'; %频域求解器:FDSolver 时域求解器:Solver start_cst=false; %是否调用CST %变量设置 var_name={'d','w'}; %变量名称 var_bound=[[-10,10];[-10,10]]; %变量变化范围 [ [变量1的下界,变量1的上界] ; [变量2的下界,变量2的上界] ; ...] inserts=[ ]; %插入指定个体 var_constrain=''; %变量的限制条件,若无限制请输入'' %种群设置 MAXGEN=100; %最大代数 NIND=40; %一代中个体的数量 PRECI=20; %单个变量的二进制位数 MTR=1; %变异率(默认值的倍数) %其它设置 plot_graph=2; %0:不绘制进化曲线 1:每进化一代就更新进化曲线 2:完成最后一代后再绘制进化曲线 plot_ave=false; %是否显示种群平均值 %---------------------------------------------------------------------------------------- main_function( model_name, result_route, result_name, plot_mode, solver_type, ... var_name, var_bound', inserts, var_constrain, ... MAXGEN, NIND, PRECI, MTR, ... plot_graph, plot_ave, start_cst); %JSOP1.2
由于不需要调用CST,因此“仿真设置”中除了start_cst,其它的变量可任意设置,只要没有语法错误即可。
运行usr.m,几秒钟后程序即运行完毕并显示出进化曲线图,如下图所示。
每一代的最优个体的适应度值输出在命令行窗口,可以看到,当种群进化到第40代,就基本找到了全局最小值0。
打开JSOPinterface esult.txt,可以看到每一代的每个个体的参数和适应度值,如下图所示,图中展示了某一代的第35-40号个体的信息。在每一代信息的最下方还有每一代的最优个体和平均适应度值,在图中,最优个体为17号个体,平均适应度值为8.0588
如果JSOP没有优化出期望的结果,可以重新运行JSOP进行优化,运行时JSOP会先将result.txt中的数据备份到同一文件夹下的result.old.txt中,再将result.txt清空。需要注意的是,result.old.txt只对上一次的运行结果进行备份,因此若要保留运行结果,建议对result.txt进行手动备份。