打开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
');
end
再将usr.m的代码设置如下
%仿真设置
model_name='test.cst'; %CST模型路径
result_route='1D ResultsS-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