主要内容

具有自定义输出函数的整数优化

此示例显示如何选择电路中的电阻器和热敏电阻,以便在电路中的某一点与指定曲线最佳匹配。您必须从可用组件列表中选择所有电子组件,这意味着这是一个离散优化问题。为了帮助可视化优化过程,该示例包括一个自定义输出函数,该函数在优化过程中显示中间解决方案的质量。因为这是一个具有非线性目标函数的整数问题,所以使用金宝搏官方网站代理选择解算器。

此示例改编自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蒂瓦尔矢量包含热敏电阻的标准参数。热敏电阻电阻与温度的关系 T

R T H = R 2. 5. 经验 ( β T - T 2. 5. T T 2. 5. ) .

  • R T H 是热敏电阻电阻。

  • R 2. 5. 是25摄氏度时的电阻,参数蒂瓦尔.

  • T 2. 5. 温度是摄氏25度。

  • T 是当前的温度。

  • β 是热敏电阻参数ThBeta.

根据标准电压计算,电路电阻的等效串联值 R 1. - T H 1. 街区是

R 1. E Q U v A. L E N T = R 1. T H 1. R 1. + T H 1. ,

和等效电阻 R 3. - T H 2. 街区是

R 3. E Q U v A. L E N T = R 3. T H 2. R 3. + T H 2. .

因此,点B处的电压为

v = 1. . 1. R 3. E Q U v A. L E N T + R 4. R 1. E Q U v A. L E N T + R 2. + R 3. E Q U v A. L E N T + R 4. .

将问题转换为代码

问题是选择电阻 R 1. 通过 R 4. 和热敏电阻 T H 1. T H 2. 使电压 v 最佳匹配目标曲线。让控制变量x表示以下值:

  • 十(一)=指数 R 对于从1到4

  • x(5)=指数 T H 1.

  • x(6)=指数 T H 2.

这个温度曲线函数根据以下公式计算产生的电压: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.

另见

相关话题