附录2 伪进化曲线

当我们在写论文时,如果论文中的电磁结构是使用遗传算法优化的,那么我们最好给出一个进化曲线。但是我们在设计的时候可能不会去考虑保存进化曲线,这个时候就需要伪造进化曲线,下面提供代码来实现这一功能。

打开shell/GA.m,在倒数第6行处添加两行代码

%添加以下两行代码!!!
global bests;
bests=[(1:gen)',(best_points(1:gen))'];

[a,b]=min(ObjV);
bestChrom=Chrom(b,:);
x=bs2rv(bestChrom,FieldD);
y={a,x};
fprintf('Program Finish\n');

end

再将usr.m的代码设置如下

%仿真设置
model_name='test.cst';      %CST模型路径
result_route='1D Results\S-Parameters';      %仿真结果在Navigation Tree中的路径
plot_mode='magnitudedb';    %仿真结果的模式,包括'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=20;    %一代中个体的数量
PRECI=20;    %单个变量的二进制位数  
MTR=1;    %变异率(默认值的倍数)
 
%其它设置
plot_graph=2;    %0:不绘制进化曲线  1:每进化一代就更新进化曲线  2:完成最后一代后再绘制进化曲线
plot_ave=false;    %是否显示种群平均值
 


%----------------------------------------------------------------------------------------
global bests
bests=0;
main_function(  model_name, result_route,   plot_mode,  solver_type,  ... 
                            var_name,  var_bound',  inserts,  var_constrain,  ...
                            MAXGEN,  NIND,  PRECI,  MTR, ...
                            plot_graph, plot_ave, start_cst);
                      
%JSOP1.3

min_=bests(MAXGEN,2);
max_=bests(1,2);
bests(:,2)=(bests(:,2)-max_)/(max_-min_);
min_=-20;   %期望最小值
max_=-10;    %期望最大值
bests(:,2)=bests(:,2)*(max_-min_)+max_;
plot(bests(:,1),bests(:,2));

其中倒数第四行的min_是您所期望的伪进化曲线的最小值,倒数第三行的max_是您所期望的伪进化曲线的最大值。

运行usr.m,我们得到了如下的伪进化曲线图

可以看到,种群从我们期望的最大值-10进化到了期望的最小值-20

猜你喜欢

转载自www.cnblogs.com/bill-h/p/13173237.html