整数规划与自定义输出函数
这个例子展示了如何选择最佳匹配的电阻和热敏电阻在电路电路中一个指定的曲线。你必须选择从列表中所有的电子元件可用的组件,这意味着这是一个离散的优化问题。帮助可视化优化的进展,显示的示例包括一个定制的输出函数中间的质量解决方案的优化过程。金宝搏官方网站因为这是一个整数非线性目标函数的问题,使用surrogateopt
解算器。
这个例子是改编自里昂[1]。
问题描述
这个问题涉及到电路。
一个电压源点为1.1 v。问题是要从列表中选择电阻和热敏电阻的标准组件,以便电压在B点匹配目标曲线作为温度的函数。
Tdata = 40:5:85;Vdata = 1.026 e 1 + -1.125 * Tdata + 1.125的军医e-5 * Tdata。^ 2;情节(Tdata Vdata,“- *”);标题(“目标曲线”,“字形大小”12);包含(“温度(^ oC)”);ylabel (“电压(V)”)
加载标准组件列表。
负载StandardComponentValues
的Res
向量包含标准电阻的值。的ThBeta
和ThVal
热敏电阻向量包含标准参数。热敏电阻作为温度的函数
是
热敏电阻。
是电阻在25摄氏度,参数
ThVal
。温度25摄氏度。
是当前温度。
是热敏电阻参数
ThBeta
。
根据标准电压的计算,等效串联电阻的值 块
,
的等效电阻 块
。
因此,在B点的电压
。
将问题转换成代码
问题是选择电阻 通过 和热敏电阻 和 这样的电压 最佳匹配目标曲线。有控制变量x代表这些值:
x(我)
=指数 ,因为我
从1到4x (5)
=指数x (6)
=指数
的tempCompCurve
函数计算得到的电压的x
和温度Tdata
。
类型tempCompCurve
函数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 %仅仅是热敏电阻在不同温度(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));% %定义等效电路并行Rs和仅仅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 + (2) + R3_eq + x (4));
目标函数的平方和目标曲线之间的差异以及由此产生的电压电阻和热敏电阻,温度的目标区间。
类型objectiveFunction
函数G = objectiveFunction (x, StdRes StdTherm_Val、StdTherm_Beta Tdata, Vdata) % %为热敏电阻问题目标函数%版权(c) 2012 - 2019, MathWorks, Inc . % % StdRes =矢量电阻值% StdTherm_Val =名义上的热敏电阻温度系数热敏电阻电阻% StdTherm_Beta =向量x %从表中提取组件值使用整数指数y = 0 (8, 1);x =圆(x);%的noninteger组件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
。
优化问题
优化目标函数,使用surrogateopt
,接受整数变量。首先,将所有变量设置为整数。
intCon = 1:6;
设置下界在所有变量为1。
磅= 1 (1,6);
上界的电阻都是一样的。设置上界的条目数量Res
数据。
乌兰巴托= (Res) *的长度(1,6);
将热敏电阻的上界的条目数量ThBeta
数据。
乌兰巴托(6)=长度(ThBeta) * [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));
给更好的初始点集的算法搜索,指定一个初始随机样本比默认值。
选项。MinSurrogatePoints = 50;
运行优化。
rng默认的%的再现性objconstr = @ (x) objectiveFunction (x, Res, ThVal、ThBeta Tdata, Vdata);[xOpt, Fval] = surrogateopt (objconstr、磅、乌兰巴托、intCon选项);
Surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
优化功能评估
试图得到更好的健康,重新启动优化从检查点文件,并指定更多的功能评估。这一次,使用surrogateoptplot
情节功能监控优化过程更加密切。
clf%清楚以前的图选择= optimoptions(选项,“MaxFunctionEvaluations”,600,“PlotFcn”,“surrogateoptplot”);[xOpt, Fval] = surrogateopt (“C: \ TEMP \ checkfile.mat”、选择);
Surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
使用更多的功能评估略有改善健康。
引用
[1]里昂,克雷格·K。遗传算法解决thermistor-network组件值。版网络,2008年3月19日。可以在https://www.edn.com/design/analog/4326942/Genetic-algorithm-solves-thermistor-network-component-values
。