我们使用JSOP对一个吸波结构进行优化,吸波结构如下图所示。
将吸波结构的文件absorber.cst放入文件夹JSOP/interface/中,打开usr.m,设置如下
%仿真设置
model_name='absorber.cst'; %CST模型名称
result_route='1D ResultsS-Parameters'; %仿真结果在Navigation Tree中的路径
result_name='S1,1'; %仿真结果的名称(参见rtdata.txt)
plot_type='magnitudedb'; %仿真结果的模式,包括'magnitude','magnitudedb', 'phase', 'polar', 'real', 'imaginary', 'smith', 'smithy'
solver_type='Solver'; %频域求解器:FDSolver 时域求解器:Solver
start_cst=true; %是否调用CST
%变量设置
var_name={'da1','da2','wa1','wa2','ra1','ra2'}; %变量名称
var_bound=[[10,29];[10,29];[0.5,1.5];[0.5,1.5];[100,1000];[100,1000]]; %变量变化范围 [ [变量1的下界,变量1的上界] ; [变量2的下界,变量2的上界] ; ...]
inserts=[ ]; %插入指定个体
var_constrain='da1-2*wa1>da2'; %变量的限制条件,若无限制请输入''
%种群设置
MAXGEN=100; %最大代数
NIND=20; %一代中个体的数量
PRECI=10; %单个变量的二进制位数
MTR=2; %变异率(默认值的倍数)
%其它设置
plot_graph=2; %0:不绘制进化曲线 1:每进化一代就更新进化曲线 2:完成最后一代后再绘制进化曲线
plot_ave=false; %是否显示种群平均值
%----------------------------------------------------------------------------------------
main_function( model_name, result_route, plot_type, solver_type, ...
var_name, var_bound', inserts, var_constrain, ...
MAXGEN, NIND, PRECI, MTR, ...
plot_graph, plot_ave, start_cst);
%JSOP1.3
model_name是CST模型的名称。
result_route是仿真结果在CST导航树中的路径,result_name是仿真结果的名称,可以从CST的Navigation Tree中看到,如下图所示
plot_type是仿真结果的输出模式,CST提供了仿真结果的多个模式,如下图所示。此处采用幅值的对数形式。
solver_type可设置求解器为频域求解器或时域求解器。
var_name是CST模型中待优化的变量的名称。(本例中da1, da2, wa1, wa2, ra1, ra2分别指代图中的d1, d2, w1, w2, R01, R02)
var_bound是一个矩阵,每一行表示一个变量的变化范围,其中第一列为下界,第二列为上界,变量的顺序与var_name中的变量名的顺序一致。
遗传算法生成初代种群的方式基本是随机生成,在JSOP中,用户可以将一些参数确定的个体添加到初代当中,这些个体存放在矩阵inserts当中。inserts的每一行表示一个参数确定的个体,在本例中inserts是一个1行6列的矩阵,表示添加一个参数为da1=25, da2=20, wa1=1, wa2=1, ra1=500, ra2=500的个体到初代种群中。在初代中添加一些优良的个体将有助于种群的进化。
参数之间往往需要满足一些约束关系,这种约束关系可以写在变量var_constrain当中。在本例中,为了保证外方环的尺寸大于内方环,我们将设置约束条件'da1-2*wa1>da2',如果有其它约束条件,可以用逻辑运算符 && 或者 || 扩展。