这个例子展示了如何在一个电路中选择电阻和热敏电阻,以最佳地匹配电路中某一点的指定曲线。你必须从一份可用部件列表中选择所有的电子部件,这意味着这是一个离散优化问题。为了帮助可视化优化过程,该示例包含一个自定义输出函数,在优化过程中显示中间解决方案的质量。金宝搏官方网站因为这是一个带有非线性目标函数的整数问题,使用代理人孔
求解器。
这个例子改编自Lyon[1]。
问题涉及此电路。
电压源在1.1V处保持点A.问题是从标准组件列表中选择电阻器和热敏电阻,使得点B处的电压与目标曲线匹配为温度的函数。
TDATA = -40:5:85;vdata = 1.026e-1 + -1.125e-4 * tdata + 1.125e-5 * tdata。^ 2;绘图(TDATA,VDATA,' - *');标题(“目标曲线”那'字体大小'12);包含('温度(^ oc)');ylabel(“电压(V)”)
加载标准组件列表。
加载StandardComponentValues.
当res.
矢量包含标准电阻值。当ThBeta
和Thval.
矢量包含热敏电阻的标准参数。热敏电阻电阻与温度的函数关系
是
是热敏电阻阻力。
是25摄氏度的电阻,参数Thval.
。
温度是25摄氏度。
为当前温度。
是热敏电阻参数ThBeta
。
基于标准电压计算,等效序列值的电阻 块
那
和等效电阻 块
。
因此,B点处的电压是
。
问题是选择电阻器 通过 和热敏电阻 和 这样电压 最符合目标曲线。让控制变量x代表以下值:
x(我)
=索引
, 为了我
从1到4
x (5)
=索引
x(6)
=索引
当tempcompcurve.
函数根据来计算产生的电压X
和温度tdata.
。
typetempcompcurve.
function F = tempCompCurve(x,Tdata) %% Calculate Temperature Curve given Resistor and Thermistor Values %在x % % %热敏电阻计算值:R1, R2 R3 R4 RTH1 (T_25degc) Beta1 RTH2 (T_25degc) Beta2 %热敏电阻为:%的房间温度是25摄氏度:T_25 %标准价值在25摄氏度:RTHx_25 % RTHx %仅仅是热敏电阻在不同温度(T) =仅仅(T_25degc) / exp(β* (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 * ((Tdata + T_off) -T_25)。/ ((Tdata + T_off) * T_25));RTH2 = x(7)。/ exp (Beta2 * ((Tdata + T_off) -T_25)。/ ((Tdata + T_off) * T_25));R1_eq = x(1)*RTH1./(x(1)+RTH1);R3_eq = x (3) * RTH2. / (x (3) + RTH2);计算点B的电压F = Vin * (R3_eq + x(4))/(R1_eq + x(2) + R3_eq + x(4));
目标函数是在目标温度范围内,一组电阻和热敏电阻的目标曲线与产生的电压之间的差值的平方和。
typeOperativeFunction.
function G = Objective function (x,StdRes, StdTherm_Val, StdTherm_Beta,Tdata,Vdata) %% Objective function for the thermistor problem % Copyright (c) 2012-2019, MathWorks,从表中提取分量值,使用整数x作为指数y = 0 (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)); y(8) = StdTherm_Beta(x(6)); % Calculate temperature curve for a particular set of components F = tempCompCurve(y, Tdata); % Compare simulated results to target curve Residual = F(:) - Vdata(:); Residual = Residual(1:2:26); %% G = Residual'*Residual; % sum of squares
为了观察优化的过程,调用一个输出函数,绘制到目前为止发现的系统的最佳响应和目标曲线。当Surroptimplot.
函数绘制这些曲线,只有当当前目标函数值降低时才更新这些曲线。这个自定义输出函数很长,所以这里没有显示。要查看输出函数的内容,请输入类型SurrOptimPlot
。
优化目标函数,使用代理人孔
,接受整数变量。首先,将所有变量设置为整数。
INTCON = 1:6;
将所有变量的下限设置为1。
lb = =(1,6);
电阻的上界都是一样的。表项的上限值设置为res.
数据。
UB =长度(RES)*α(1,6);
将热敏电阻的上限设置为条目的数量ThBeta
数据。
UB(5:6)=长度(thbeta)* [1,1];
设置选项以使用Surroptimplot.
自定义输出函数,并使用没有绘图函数。此外,要防止优化可能中断,请指定名为的检查点文件'checkfile.mat'
。
选择= optimoptions (“surrogateopt”那'checkpointfile'那“C: \ TEMP \ checkfile.mat”那“PlotFcn”,[],......'outputfcn',@(a1,a2,a3)surroptimplot(a1,a2,a3,tdata,vdata,res,thval,thbeta);
要为算法提供更好的初始搜索点集,请指定比默认值更大的初始随机样本。
options.minsurrogatePoints = 50;
运行优化。
rng默认%的再现性objconstr = @(x)looptfunction(x,res,thval,thbeta,tdata,vdata);[xopt,fval] = trustogateopt(objconstr,lb,Ub,Intcon,选项);
Trustogateopt停止,因为它超出了“选项”QuaxFunctioneValuations'设置的函数评估限制。
要尝试获得更好的拟合,请从检查点文件重新启动优化,并指定更多功能评估。这一次,使用TrustogateOpplot.
绘图功能更密切地监控优化过程。
CLF.清除先前的数字opts = Optimoptions(选项,'maxfunctionevaluations'600,“PlotFcn”那'trustogateptplot');[xopt,fval] = trustogateopt(“C: \ TEMP \ checkfile.mat”,选择);
Trustogateopt停止,因为它超出了“选项”QuaxFunctioneValuations'设置的函数评估限制。
使用更多功能评估将略微改善拟合。
克雷格·K·里昂报道。遗传算法求解热敏电阻网络元件值。EDN网络,2008年3月19日。可用https://www.edn.com/design/analog/4326942/Genetic-algorithm-solves-thermistor-network-component-values
。