经常有用户在问,如果模型中有三个参数A、B、C需要优化或者扫参,但是这三个参数有一些变化的约束条件,比如在优化或者扫参的时候要满足:
1)0<A<1;0<B<1;0<C<1
2)A+B+C=1
这种时候,应该怎么进行参数优化或者参数扫描设置?因为在CST中扫参器和优化器都不能理解A+B+C=1这种约束关系,只能设置参数的变化范围。我们怎么实现A、B、C三个参数在规定的范围内变化的时候还能满足A+B+C=1这样的约束条件?这篇文章我们来分别说一说可行的方式。
如果读者有更好的方法,欢迎在问答社区评论交流。
一、参数扫描
对于参数扫描,枚举所有的有效组合,通常是最合适的。因为参数扫描的目的是看结果的走势变化,我们希望的是A、B、C遍历得比较平均即可。
一种离散样本的生成代码如下,可以修改m的值以控制样本的采样密度。把A、B、C的样本值画在三维坐标中,可以发现其实它们都在A+B+C=1这个平面上,并且是以1/m为间隔均匀分布。

有了A、B、C的样本值,下一步就是把它传入CST,并且计算每个组合下的仿真结果。这里列举出两个方法:
1)利用.txt文件导入Parameter Sweep
可以把样本值按照固定格式写进.txt文件中,这一步随便用个AI模型,很容易。然后在Parameter Sweep对话框中,通过Import导入写好的.txt文件,不同的参数组合会被当作一个Sequence写入。最后点击Start就可以正常扫参了,CST会依次计算这些明确的参数组合。注意:其中的每个参数组合都满足约束。

2)用Python或者VBA,修改Parameter list中的参数值
这个方法需要写一点代码,具体可以参考之前的文章。
仿真实例132:如何利用Python批处理CST的仿真模型并提取关注的结果?
思路就是把CST看作一个“计算器”,通过代码控制,每次传入一组参数,通过“计算器”计算,输出一些关心的结果,然后再传入下一组参数,循环往复。
二、参数优化
对于参数优化,可能枚举就不合适了,因为很难枚举到类似A=0.12345这样的值。但这个值或许就是目标的“最优解”。优化需要在连续的空间中搜索最优解,但是CST的参数优化器同样无法设置参数与参数之间的约束,我们还是要从数学上想办法。
一种简单的方式是做变量替换,引入两个连续变化的变量:p、q,并且满足0<p<1和0<q<1。替换如下:

这样A、B、C一定落在0到1之间,并且始终满足A+B+C=1。这种映射方式简单可靠,但缺点是p、q均匀变化并不代表A、B、C在三角形上均匀分布。
如果注重采样均匀性可以用u、v做面积均匀映射,如下,其中u、v满足0<u<1和0<v<1。

把这两种映射关系做个对比,就能理解均匀性的区别了。使用同一组均匀随机数和相同样本数(2600个),只改变从二维变量到A、B、C的映射方式。
左边是p、q仿射映射,样本点会明显向A=1附近聚集;
右边是u、v面积均匀映射,点在整个三角形内的密度更均匀。

好了,到这一步我们已经可以用p、q或者u、v的变化来映射A、B、C的变化了,而且变化是连续的,也就是说A、B、C可以“无死角”变化。
下面就是在CST中去实现这种映射关系,然后用优化算法进行优化。同样列举出两个方法:
1)不用CST自带的优化算法
CST软件自带了Trust Region Framework、Genetic Algorithm等7种优化算法,但如果用户想使用其他优化算法,就可以考虑这种方法。它同样需要写代码,也是把CST当作一个“计算器”使用,与上文“参数扫描”中的方法二类似。区别就是外部代码需要增加优化算法逻辑块,负责给出下一组需要传入CST的参数组合。
这种方法最灵活,能够处理任意约束、多目标和复杂后处理等情况。
2)使用CST自带的优化算法
如果需要使用CST软件自带的优化算法,就需要把上面的参数映射关系写到Parameter list中,通过控制p、q或者u、v来控制A、B、C。
我们以一个吸波材料的优化来做个示例。如下是一个三层介质的吸波材料,厚度分别是d1、d2、d3。通过u、v来控制A、B、C,然后乘以总厚度D_total得到三层介质材料的厚度。
我们的目标是在保证材料总厚度4.5mm不变的情况下,优化三层材料的厚度,使整个吸波材料在6.8-7.2GHz内的反射小于-20dB。

用F-solver配合Floquet端口来计算S11。

优化器设置如下,u、v的取值在0.01-0.99范围内。目标设置为S11在6.8-7.2GHz内小于-20dB。然后开始优化。

优化结果如下。


查看优化后的模型以及对应的Parameter List,可以看到整个优化过程中始终保持A+B+C=1,且满足其他约束条件:0<A<1;0<B<1;0<C<1。

部分文章来源网络或用户投稿,如有侵权请联系本站删除!
获取SW正版免费试用,有任何疑问咨询热线:400-886-6353或 联系在线客服
未解决你的问题?请到「问答社区」反馈你遇到的问题,专业工程师为您解答!