主要内容

用自定义输出函数进行整数优化

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

这个例子改编自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.矢量包含标准电阻值。当ThBetaThval.矢量包含热敏电阻的标准参数。热敏电阻电阻与温度的函数关系 T.

R. T. H. = R. 2 5. exp. β T. - T. 2 5. T. T. 2 5.

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

  • R. 2 5. 是25摄氏度的电阻,参数Thval.

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

  • T. 为当前温度。

  • β 是热敏电阻参数ThBeta

基于标准电压计算,等效序列值的电阻 R. 1 - T. H. 1

R. 1 E. 问: V. 一种 L. E. N. T. = R. 1 T. H. 1 R. 1 + T. H. 1

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

R. 3. E. 问: V. 一种 L. E. N. T. = R. 3. T. H. 2 R. 3. + T. H. 2

因此,B点处的电压是

V. = 1 1 R. 3. E. 问: V. 一种 L. E. N. T. + R. 4. R. 1 E. 问: V. 一种 L. E. N. T. + R. 2 + R. 3. E. 问: V. 一种 L. E. N. T. + R. 4.

将问题转换为代码

问题是选择电阻器 R. 1 通过 R. 4. 和热敏电阻 T. H. 1 T. H. 2 这样电压 V. 最符合目标曲线。让控制变量x代表以下值:

  • x(我)=索引 R. , 为了从1到4

  • x (5)=索引 T. H. 1

  • x(6)=索引 T. H. 2

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

也可以看看

相关的话题