文档

以编程方式优化查找表以提高内存效率

下面的示例演示如何以编程方式生成高效内存的查找表。使用相当于的命令行查找表优化器,您可以:

  • 优化现有的查找表块。

  • 从。生成查找表数学函数块。

  • 从函数或函数句柄生成查找表。

使用查找表近似函数

这个例子展示了如何生成一个内存高效的查找表,它近似于函数。通过创建一个函数逼近问题对象

P = FunctionApproximation。问题(“罪”
P = 1×1  FunctionApproximation。问题 with properties: FunctionToApproximate: @(x)sin(x) NumberOfInputs: 1 InputTypes: "numerictype(0,16,13)" InputLowerBounds: 0 InputUpperBounds: 6.2832 OutputType: "numerictype(1,16,14)" Options: [1×1 FunctionApproximation.Options]

FunctionToApproximateNumberOfInputs的属性问题对象是从对象的定义推断出来的,并且不能在创建后进行编辑。所有其他属性都是可写的。

编辑函数近似。选项对象指定要在优化过程中使用的附加约束。例如,将生成的查找表的断点约束为偶数间距。

P.Options.com规范=“均匀间距”
P = 1×1  FunctionApproximation。问题 with properties: FunctionToApproximate: @(x)sin(x) NumberOfInputs: 1 InputTypes: "numerictype(0,16,13)" InputLowerBounds: 0 InputUpperBounds: 6.2832 OutputType: "numerictype(1,16,14)" Options: [1×1 FunctionApproximation.Options]

指定其他约束,例如输出的绝对和相对公差,以及字长约束。

P.Options.absol=2^-10;P.Options.RelTol=2^-6;P.Options.wordlength=[8,16];

使用解决求解优化问题的方法。MATLAB™显示优化过程的迭代。的解决方法返回一个函数逼近法对象

S=求解(P)
内存(位)| | | ID ConstraintMet | |断点表大小WLs | TableData西城| BreakpointSpecification |错误(Max、电流)| | 0 | 64 | 0 | 2 | 16 | | EvenSpacing e-04 | 9.765625, 9.853516 e-01 | | 304 | | 0 | | 17日16 | | EvenSpacing e-04 | 9.765625, 4.526615 e 03 | | 576 | | 0 | | 34 16 | | EvenSpacing e-04 | 9.765625,3.069576 e 03 | | 3 | 1120 | 0 | 68 | 16 | | EvenSpacing e-04 | 9.765625, 1.970943 e 03 | | 2208 | | 0 | 136 | 16 | | EvenSpacing e-04 | 9.765625, 4.534419 e 03 | | 4400 | | 0 | 273 | 16 | | EvenSpacing e-04 | 9.765625, 7.830318 e 03 | | 6 | 8800 | 0 | 548 | 16 | | EvenSpacing e-04 | 9.765625,6.609615 e 03 | | 17568 | | 1096 | | 16 | | EvenSpacing e-04 | 9.765625, 8.723100 e-04 | | 13328 | | 0 | 831 | 16 | | EvenSpacing e-04 | 9.765625, 1.482662 e 03 | | 15584 | | 0 | 972 | 16 | | EvenSpacing e-04 | 9.765625, 1.116451 e 03 | | 16512 | | 0 | 1030 | 16 | | EvenSpacing e-04 | 9.765625,2.703365 e 03 | | 17200 | | 0 | 1073 | 16 | | EvenSpacing e-04 | 9.765625, 1.970943 e 03 | | 12 | 48 | 0 | 2 | 8 | 16 | EvenSpacing e-04 | 9.765625, 1.007261 e + 00 | | 288 | | 0 | | 8 | 16 17 | EvenSpacing e-04 | 9.765625, 2.794368 e-01 | | 560 | | 0 | | 34 8 | 16 | EvenSpacing e-04 | 9.765625,9.553784 e-02 | | 1104 | | 0 | 68 | 8 | 16 | EvenSpacing e-04 | 9.765625, 1.970943 e 03 | | 16 | 3264 | 1 | 203 | 8 | 16 | EvenSpacing e-04 | 9.765625, 4.957368 e-05 | | 1648 | | 102 | | 8 | 16 | EvenSpacing e-04 | 9.765625, 5.588931 e-05 | | 64 | | 0 | 2 | 16 | | EvenPow2Spacing e-04 | 9.765625,1.300802 e + 00 | | 19 | 448 | 0 | 26 | 16 | | EvenPow2Spacing e-04 | 9.765625, 3.322094 e-02 | | 848 | | 0 | 51 | 16 | | EvenPow2Spacing e-04 | 9.765625, 3.322094 e-02 | | 21 | 1648 | 0 | 101 | 16 | | EvenPow2Spacing e-04 | 9.765625, 3.322094 e-02 | | | 22 48 | 0 | 2 | 8 | 16 | EvenPow2Spacing e-04 | 9.765625,1.300816 e + 00 | | 23 | 432 | 0 | | 26日8 | 16 | EvenPow2Spacing e-04 | 9.765625, 3.315991 e-02 | | 24 | 832 | 0 | 51 | 8 | 16 | EvenPow2Spacing e-04 | 9.765625, 3.315991 e-02 | | 25 | 1648 | 1 | 102 | 8 | 16 | EvenPow2Spacing e-04 | 9.765625,4.336121 e-05 |最佳解决方案内存(位)| | | ID ConstraintMet | |断点表大小WLs | TableData西城| BreakpointSpecification |错误(Max、电流)| | 1648 | | 102 | | 8 | 16 | EvenSpacing e-04 | 9.765625, 5.588931 e-05 | S = 1×1 < a href = " matlab: helpPopup FunctionApproximation。LUTSolution”风格= "粗细:大胆”> FunctionApproximation。LUTSolution with properties: ID: 17

将原始函数的数值行为与存储在解决方案中的生成查找表的数值行为进行比较,年代

呃=比较(S)
err=带字段的结构:断点:[51713×1双精度]原始:[51713×1双精度]近似值:[51713×1双精度]

控件中存储的查找表数据LUTSolution对象

t = S.TableData
t = struct with fields: BreakpointValues: {[1×102 double]} BreakpointDataTypes: [1×1嵌入式。[1×102 double] TableDataType: [1×1嵌入式。numerictype] IsEvenSpacing: 1

要访问生成的查找表块,请使用近似方法

S.approximate

优化现有查询表

这个示例展示了如何优化现有的Lookup Table块以提高内存效率。打开包含要优化的Lookup Table块的模型。

load_system (“sldemo_fuelsys”);open_system (“sldemo_fuelsys / fuel_rate_control / airflow_calc”);

创建一个函数逼近问题对象来定义优化问题和约束。

P = FunctionApproximation。问题(‘sldemo_燃料系统/燃料率控制/气流计算/泵送常数’
P = 1x1  FunctionApproximation。问题 with properties: FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant' NumberOfInputs: 2 InputTypes: [1x2 string] InputLowerBounds: [50 0.0500] InputUpperBounds: [1000 0.9500] OutputType: "numerictype('single')" Options: [1x1 FunctionApproximation.Options]

通过修改选项问题对象P

P.Options.com规范=“EvenSpacing”
P = 1x1  FunctionApproximation。问题 with properties: FunctionToApproximate: 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant' NumberOfInputs: 2 InputTypes: [1x2 string] InputLowerBounds: [50 0.0500] InputUpperBounds: [1000 0.9500] OutputType: "numerictype('single')" Options: [1x1 FunctionApproximation.Options]

解决优化问题。

S=求解(P)
|1.表数据WL?表数据WL?表数据WL?表数据WL?断点规范?断点规格?误差(最大、当前)误差(最大、最大、最大、当前)| 1| 1|误差(最大、当前)1 124;1 | 1)误差(最大、最大、最大、当前)1 | 1 | 1 124;1 124;1 | 1 124;80 124;80 | 8(8)内存(8)8(位)8(位)内存(位)内存(位)内存(位)内存(位)内存(位)8(位)内存(位)内存(位)内存(位)内存(位)内存(位)内存(位)1(位)内存(位)1(位)1(位)1(位)1(位)1(位)1(位)1)1)1)8)8)8(位)80 | 0 |[36 39]|[16 8]7.812500e-03,2.742526e-02 2.742526e-02 | 4 4|; 4 4 4 4 4 4 5 5 5 0 0 |[27 30]12447 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 012447 7 7 7 7 7 7 7 7 8 7 7 7 8 7 812445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7\12444 4四四四四四四四四四四四四[10\\|[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8]| 8 |均匀间距| 7.812500e-03,3.020075e-02 | 7 | 10656 | 0 |[34 39]|[16 8]7.81250E-03,2.742526e-02 |; 8よ8よ10 12466 6 0よ10 10 12445 5 9 9 9 9 9 9 9 9 9 9 9 9 9 912445 5 5 5 5 5 5 5 5 8 8 12448 8八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八八124四四四四四五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六[8 |均匀间距| 7.812500e-03,3.133150e-02 | 11 | 11312 | 0 |[36 39]|[32 8]7.812500e-03,2.742526e-02 2.742526e-02 | 12 | 6 6 0 0 12444 4 0 0 |[27 30 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 012444 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 5 5 5 5 5 5 5 5 5 5日日日当天当天当天当天当天当天当天当天当天当天当天当天当天,7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 | 8 |均匀间距| 7.812500e-03,3.020075e-02 | 15 | 10688 | 0 |[34 39]|[32 8]7.81250E-03,2.742526e-02 || 16 | 10 10 0 0 | 0 0 |[35 39]|[328 8 8 8|; 8 8 8|; 8 8 8| 8 8 812448 8124;; 8 8 812448 8 812448\12448124481244812448 8 812448 8 812448 8 8 8 8\1248|;;; 8 8 8 8 8124812481248124881248812488 812488 8 81248124881248124812488 8 8124812481248124881248124881248124812488 8 8 8 8 8 8| 8 |均匀间距| 7.812500e-03,1.426438e-02 | 19 | 11040 | 1 |[36 38]|[16 32]7.81250E-03,2.08272726E-03,2.08272726E-03よ20よ244 4 4よ10 10よ10 10よ10よ10 10 1242444 5 5[27 28][27 28]1241414 14[28]|[16 32]1244[14 14 14 14 14 14 14 28]\1244[16 32][16 32][16 32][16 32]1241432]1241432]1241432];[16 32][16 32]12412]32]1241212 12 12 12]12]12 12 12 12 12]12]12]12 12 12 12 12 12]12]12 12 12 12 12]12]12]12 12]12]12]12 12 12 12]12]12]12 12 12]12]12 12 12 12 12]12 12 12 32]| 8 |均匀间距| 7.812500e-03,8.803874e-03 | 23 | 7536 | 1 |[30 31]|[16 32]7.32727236E-03,7.32727236E-03 | 24 | 24 | 160 | 0 0 |[2 2 2]|[2 2 2 2 2 2 2 2]|;[2 2 2 2 2 2 2 2 2 2]|[2 2 2 2 2 2 2 2 2 2 2 2]|[2 2 2 2 2 2 2 2 2 2 2 2]124;[3 3 3 3]|[3 3 3 3 3 3]8 124;; 8 12433 3 3 3 124; 8 | 8 |; 8 |; 8 12433 3 12433 3 3 12433 3 12433 3 12433 3 124;; 8 |; 8 |; 8 12444平均间距7.812500e-03,3.353506e-02 | 27 | 1696 | 0 |[14]|[32]7.81250E-03,2.055151245E-02号E-02 || 28よ;; 2176 | 0 0 12466 6 6 6|[16 16 16]|[12 6 6 6 6 6 6 6 6]12444 6 6 6 6 6124;[32 32 32]1241212 12 12 12 12 12 12 12 12]6 6 6 6[32]\1241212 12 12 12 12 12 12 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 32]32]32[32[32]12432]32]32]32]\12433 3 3 3 3 3 3 3]\124;;[32]12443 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 32]| 8 |均匀间距| 7.812500e-03,1.539812e-02 | 31 | 112 | 0 |[2]|[16 8]12月12日| 18 20|[18 18 20]|[16 8 8]|; 16 8 8 8 8 8 7 7 8 8 8 8 8 8 8 8 8 8 8 7 7 8 8 8 8 8 8 8 8 8 8 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8[16 |均匀间距| 7.812500e-03,3.247673e-02 | 35 | 4400 |[16 17]|[16 8]6.247 7 7.247 672E-0-03,3.247 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 2 E-02 | 36 12444 4 4 4 4 0 0 12466 6 6 6 6 1812444 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 8\12444 4 4 4 4 5 5 5 5 6 6 6 6 6 6 6 6 6 7 8\\\12444 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8\存存存存存存存存| 8 | evenpow2space | 7.812500e-03,8.718936e-02 | 39 | 7248 |[30 30]|[16 8]7.81250E-03,3.0200.070075E-0-02 | 40よ1244 4 4 0 0 0|[2 2 2]|[2 2 2 2 2 2 2 2 8 8 8 8 8 8 8 812444 4 4 4 4 4 4 8 8 8 8 8 812444 4 4 8 8 8 812444 4 5 5 5 5周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日8 8 8 8 8 8 8周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日|[16 32]| 8 |平等空间| 7.812500e-03,8.842091e-02 | | 43 | 7056 |[30 29]|[16 32]8.1383255 E-03,8.1383258.1338325E-03 | 44よ44よ; 369612400[30 15|[30 15]|[16 32]|[16 32]|[16 32]|[16 32]|[16 32][16 32]12432]12432]|[16 32]|[16 32]32]12432]| 8;812432]| 8;8| 8| 8|; 8| 8| 8| 8| 8| 8| 8| 8| 8|甚至甚至甚至波波波波波波两两两两两两两两两两两两两两两两两两两两两两两两两两两两两|[32]| 8 |平等空间| 7.812500e-03,8.138325e-03 | | 47 | 3728 |[30 15]|[32]32[32]|[32]32[32]|[32]3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 7 8 8 8 8 8 8 8 8 7 8 8 8 8 8 8 8 8 7 8 8 8 8 8 8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 2 2 |[32 8]| 16 |平等空间| 7.812500e-03,8.776325e-02 | 51 | 3920 |[30 8]|[32 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7|[16 32]| 8 |均匀间距| 7.812500e-03,3.353360e-02 | | 55 | 1664 |[14]|[16 32]|8 |均匀间距| 7.812500e-03,2.054784e-02 | 56 | 2144 | 0 |[16 16]|[16 32]| 8 |均匀间距| 7.812500e-03,1.643837e-02[16 32] | 8 | EvenSpacing | 7.812500e-03, 1.539812e-02 | | 59 | 128 | 0 | [2 2] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 9.879933e-02 | | 60 | 4656 | 0 | [30 19] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.056677e-02 | | 61 | 2496 | 0 | [30 10] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 3.168954e-02 | | 62 | 3456 | 0 | [30 14] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 3.168954e-02 | | 63 | 3936 | 0 | [30 16] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.056677e-02 | | 64 | 4176 | 0 | [30 17] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.056677e-02 | | 65 | 4416 | 0 | [30 18] | [16 32] | 8 | EvenPow2Spacing | 7.812500e-03, 1.056677e-02 | Best Solution | ID | Memory (bits) | ConstraintMet | Table Size | Breakpoints WLs | TableData WL | BreakpointSpecification | Error(Max,Current) | | 23 | 7536 | 1 | [30 31] | [16 32] | 8 | EvenSpacing | 7.812500e-03, 7.327236e-03 | S = 1x1 FunctionApproximation.LUTSolution with properties: ID: 23 Feasible: "true"

比较原始查询表与优化查询表的数值行为。

比较(S)
ans = 1x2带有字段的结构数组:Breakpoints Original Approximate

使用近似方法

S.approximate

可视化帕累托前端内存优化与绝对容忍

当您希望同时优化内存和绝对公差时,将两者之间的折衷可视化是很有帮助的。此示例创建函数的查找表近似值1-exp(-x)具有不同的绝对公差水平,并创建找到的每个解决方案的绘图。在最终绘图中,您可以查看内存效率和数字保真度之间的权衡。

nTol = 32;%初始化变量万博 尤文图斯解决方案=细胞(1、nTol);objectiveValues =细胞(1、nTol);constraintValues =细胞(1、nTol);memoryUnits =“字节”%绝对公差选项absTol = 2。^ linspace (-12 4 nTol);%相对公差设置为0relTol = 0;%初始化选项= FunctionApproximation选项。选项(...“RelTol”,雷托,...“BreakpointSpecification”“均匀间距”...“显示”假的,...“字”16);建立近似问题问题= FunctionApproximation。问题(...@(x) 1-exp(-x),...“输入类型”numerictype (0, 16)...“OutputType”14) numerictype(16日,...“InputLowerBounds”0,...“InputUpperBounds”5....“选项”、选择);执行不同公差的解决方案万博 尤文图斯iTol = 1:nTol problem.Options.AbsTol = absTol(iTol);解决方案=解决(问题);objectiveValues{iTol} = cellfun(@(x) x.totalmemoryusage(memoryUnits), solution.All万博 尤文图斯Solutions);constraintValues{iTol} = cellfun(@(x) x. feasible, solution.Al万博 尤文图斯lSolutions);万博 尤文图斯解决方案{iTol} =解决方案;结束%绘制结果h =图();持有在…上iTol = 1: nToliObjective = 1:元素个数(objectiveValues {iTol})如果constraintValues {iTol} (iObjective) markerColor =‘g’其他的markerColor =“r”结束情节(absTol (iTol) objectiveValues {iTol} (iObjective),...“标记”“。”“线条样式”“没有”...“MarkerSize”, 24岁,...“MarkerEdgeColor”markerColor)结束结束xlabel(“AbsTol”) ylabel ([“MemoryUsage(”,memoryUnits,')']) h.Children.XScale =“日志”;h.Children.YMinorGrid =“上”;网格在…上在…上持有

万博 尤文图斯不可行的解决方案(即不符合要求的绝对公差)用红色标记。万博 尤文图斯可行的解决方案用绿色标出。当绝对容差增加时,近似会找到使用更少内存的解。万博 尤文图斯当绝对容差较低时,表示较高的数字保真度,所需的内存也会增加。

另请参阅

应用程序

相关话题

这个话题有用吗?