此示例显示如何选择电路中的电阻器和热敏电阻,以便在电路中的某一点与指定曲线最佳匹配。您必须从可用组件列表中选择所有电子组件,这意味着这是一个离散优化问题。为了帮助可视化优化过程,该示例包括一个自定义输出函数,该函数在优化过程中显示中间解决方案的质量。因为这是一个具有非线性目标函数的整数问题,所以使用金宝搏官方网站代理选择
解算器。
此示例改编自Lyon[1]。
问题涉及到这个电路。
电压源将点A保持在1.1V。问题是从标准元件列表中选择电阻器和热敏电阻,以便点B处的电压与温度的目标曲线相匹配。
Tdata=-40:5:85;Vdata=1.026E-1+-1.125E-4*Tdata+1.125E-5*Tdata.^2;绘图(Tdata、Vdata、,'-*');头衔(“目标曲线”,“字体大小”,12);xlabel('温度(^oC)'); 伊拉贝尔(‘电压(V)’)
加载“标准零部件”列表。
负载标准组件值
这个雷斯
矢量包含标准电阻值。该ThBeta
和蒂瓦尔
矢量包含热敏电阻的标准参数。热敏电阻电阻与温度的关系
是
是热敏电阻电阻。
是25摄氏度时的电阻,参数蒂瓦尔
.
温度是摄氏25度。
是当前的温度。
是热敏电阻参数ThBeta
.
根据标准电压计算,电路电阻的等效串联值 街区是
,
和等效电阻 街区是
.
因此,点B处的电压为
.
问题是选择电阻 通过 和热敏电阻 和 使电压 最佳匹配目标曲线。让控制变量x表示以下值:
十(一)
=指数
对于我
从1到4
x(5)
=指数
x(6)
=指数
这个温度曲线
函数根据以下公式计算产生的电压:x
温度呢数据
.
类型温度曲线
函数F=tempCompCurve(x,Tdata)%%计算给定电阻和热敏电阻值的温度曲线%版权所有(c)2012-2019,MathWorks,Inc.%%输入电压Vin=1.1;%%热敏电阻计算%x:R1 R2 R3 R4 RTH1(T_25degc)Beta1 RTH2(T_25degc)中的值Beta2%热敏电阻表示为:室温为25摄氏度:T_25%标准值为25摄氏度:RTHx_25%RTHx是各种温度下的热敏电阻%RTH(T)=RTH(T_25degc)/exp(Beta*(T-T_25)/(T*T_25))T_25=298.15;T_off=273.15;Beta1=x(6);Beta2=x(8);RTH1=x(5)。/exp(Beta1*((T*T-T-T-T-u off)-T_25)/((Tdata+T_off)*T_25));RTH2=x(7)。/exp(Beta2*((Tdata+T_off)-T_25)。/((Tdata+T_off)*T_25));%%定义并联Rs和RTHs的等效电路R1_eq=x(1)*(x(1)+RTH1;R3 eq=x(3)*RTH2/(x(3)+RTH2);%%计算B点处的电压=Vin*(R3_eq+x(4))/(R1+R3)+;
目标函数是在目标温度范围内,一组电阻器和热敏电阻的目标曲线和结果电压之间差值的平方和。
类型目标函数
函数G=目标函数(x,StdRes,StdTherm_Val,StdTherm_Beta,Tdata,Vdata)%%热敏电阻问题的目标函数%版权所有(c)2012-2019年,MathWorks,Inc.%%StdRes=电阻值向量%StdTherm_val=标称热敏电阻电阻向量%StdTherm_Beta=热敏电阻温度系数向量%使用x中的整数作为索引从表格中提取元件值y=零(8,1);x=四舍五入(x);%如果是非整数元件y(1)=StdRes(x(1));y(2)=StdRes(x(2));y(3)=StdRes(x(3));y(4)=StdRes(x(4));y(5)=StdTherm_Val(x(5));y(6)=StdTherm_Beta(x(5));y(7)=StdTherm_Val(x(6));%计算一组特定组件的温度曲线F=温度曲线(y,Tdata);%将模拟结果与目标曲线残差=F(:)-Vdata;残差=残差(1:2:26);%%G=残差'*残差;%平方和
要观察优化过程,请调用一个输出函数,该函数绘制到目前为止找到的系统的最佳响应和目标曲线SurrOptimPlot
函数绘制这些曲线,并仅在当前目标函数值减小时更新曲线。此自定义输出函数较长,因此此处不显示。若要查看此输出函数的内容,请输入类型SurrOptimPlot
.
要优化目标函数,请使用代理选择
,它接受整数变量。首先,将所有变量设置为整数。
intCon=1:6;
将所有变量的下限设置为1。
lb=一(1,6);
电阻器的上限都相同。将上限设置为雷斯
数据
ub=长度(Res)*个数(1,6);
将热敏电阻的上限设置为ThBeta
数据
ub(5:6)=长度(ThBeta)*[1,1];
设置选项以使用SurrOptimPlot
自定义输出函数,并且不使用绘图函数。另外,为了防止优化过程中可能出现的中断,请指定一个名为“checkfile.mat”
.
选项=最佳选项(“代理选择”,“检查点文件”,'C:\TEMP\checkfile.mat',“PlotFcn”,[],...“OutputFcn”,@(a1,a2,a3)SurrOptimPlot(a1,a2,a3,Tdata,Vdata,Res,ThVal,ThBeta));
要为算法提供更好的初始搜索点集,请指定比默认值更大的初始随机样本。
options.MinSurrogatePoints=50;
运行优化。
rng违约%为了再现性objconstr=@(x)objectiveFunction(x,Res,ThVal,ThBeta,Tdata,Vdata);[xOpt,Fval]=代理选项(objconstr,lb,ub,intCon,options);
代理选项已停止,因为它超出了“options.MaxFunctionEvaluations”设置的函数计算限制。
要尝试获得更好的拟合,请从检查点文件重新启动优化,并指定更多函数求值替代地块
绘图功能可更密切地监控优化过程。
clf%清除上一个数字opts=options(选项,“MaxFunctionEvaluations”,600,“PlotFcn”,“代理Optplot”); [xOpt,Fval]=代理选项('C:\TEMP\checkfile.mat',opts);
代理选项已停止,因为它超出了“options.MaxFunctionEvaluations”设置的函数计算限制。
使用更多的功能评估会略微改善拟合。
[1] 里昂,克雷格K。遗传算法求解热敏电阻网络元件值。EDN网络,2008年3月19日。可在https://www.edn.com/design/analog/4326942/Genetic-algorithm-solves-thermistor-network-component-values
.