基于驾驶训练优化算法的函数寻优算法-程序员宅基地

技术标签: matlab  最优化问题  驾驶训练优化算法  

一、理论基础

1、驾驶训练优化算法

文献[1]提出了一种新的随机优化算法,即基于驾驶训练的随机优化算法(Driving Training‑Based Optimization, DTBO),该算法模拟了驾驶员的驾驶训练行为。DTBO设计背后的基本灵感来自于驾校学习驾驶的过程和驾校教练的培训。DTBO的数学模型分为三个阶段:(1)驾驶教练的训练;(2)教练技能对学生的模式化;(3)实践。
DTBO是一种基于种群的元启发式方法,其成员包括驾驶学习者和教员。DTBO成员是使用式(1)中称为种群矩阵的矩阵建模的给定问题的候选解决方案。使用式(2)随机初始化这些成员在实施开始时的初始位置。 X = [ X 1 ⋮ X i ⋮ X N ] N × m = [ x 11 ⋯ x 1 j ⋯ x 1 m ⋮ ⋱ ⋮ ⋱ ⋮ x i 1 ⋯ x i j ⋯ x i m ⋮ ⋱ ⋮ ⋱ ⋮ x N 1 ⋯ x N j ⋯ x N m ] N × m (1) X=\begin{bmatrix}X_1\\\vdots\\X_i\\\vdots\\X_N\end{bmatrix}_{N\times m}=\begin{bmatrix}x_{11} & \cdots & x_{1j} & \cdots & x_{1m}\\\vdots & \ddots &\vdots & \ddots & \vdots\\x_{i1} & \cdots & x_{ij} & \cdots & x_{im}\\\vdots & \ddots &\vdots & \ddots & \vdots\\x_{N1} & \cdots & x_{Nj} & \cdots & x_{Nm}\end{bmatrix}_{N\times m}\tag{1} X= X1XiXN N×m= x11xi1xN1x1jxijxNjx1mximxNm N×m(1) x i , j = l b j + r ⋅ ( u b j − l b j ) , i = 1 , 2 , … , N ,    j = 1 , 2 , … , m (2) x_{i,j}=lb_j+r\cdot(ub_j-lb_j),\quad i=1,2,\ldots,N,\,\,j=1,2,\ldots,m\tag{2} xi,j=lbj+r(ubjlbj),i=1,2,,N,j=1,2,,m(2)其中, X X X是DTBO算法的种群矩阵, X i X_i Xi是第 i i i个候选解, x i , j x_{i,j} xi,j是由第 i i i个候选解确定的第 j j j个变量的值, N N N是DTBO算法的种群数量, m m m是问题变量的个数, r r r [ 0 , 1 ] [0,1] [0,1]间的随机数, l b j lb_j lbj u b j ub_j ubj分别是第 j j j维变量的下界和上界。
每个候选解决方案都为问题变量赋值,通过将其放入目标函数中,对目标函数进行评估。因此,计算与每个候选解对应的目标函数的值。式(3)中的向量对目标函数的值进行建模。 F = [ F 1 ⋮ F i ⋮ F N ] N × 1 = [ F ( X 1 ) ⋮ F ( X i ) ⋮ F ( X N ) ] N × 1 (3) F=\begin{bmatrix}F_1\\\vdots\\F_i\\\vdots\\F_N\end{bmatrix}_{N\times1}=\begin{bmatrix}F(X_1)\\\vdots\\F(X_i)\\\vdots\\F(X_N)\end{bmatrix}_{N\times1}\tag{3} F= F1FiFN N×1= F(X1)F(Xi)F(XN) N×1(3)其中, F F F为目标函数的向量, F i F_i Fi为第 i i i个候选解的目标函数值。
目标函数获得的值是确定候选解的好坏的标准。基于对目标函数值的比较,对目标函数具有最佳值的成员称为种群中的最佳成员( X b e s t X_{best} Xbest)。由于候选解在每次迭代中都会得到改进和更新,因此必须更新最佳成员。
元启发式算法之间的主要区别在于更新候选解的过程中采用的策略。在DTBO中,候选解决方案在以下三个不同阶段进行更新:(i)由驾驶教师培训学习型驾驶员,(ii)根据教师技能对学员进行模式化,(iii)练习学员。

(1)第一阶段:驾驶教练培训(探索)

DTBO更新的第一阶段是基于学员对驾驶教练的选择,然后由所选的驾驶教练对学员进行驾驶培训。在DTBO人群中,挑选出一些最优秀的成员被认为是驾驶教练,其余的被认为是学员。选择驾驶教练并学习该教练的技能将导致成员移动到搜索空间的不同区域。这将增加DTBO在全局搜索和发现最优区域方面的探索能力。因此,DTBO更新的这一阶段展示了该算法的探索能力。在每次迭代中,根据目标函数值的比较,选择DTBO的 N N N个成员作为驾驶教练,如式(4)所示。 D I = [ D I 1 ⋮ D I i ⋮ D I N D I ] N D I × m = [ D I 11 ⋯ D I 1 j ⋯ D I 1 m ⋮ ⋱ ⋮ ⋱ ⋮ D I i 1 ⋯ D I i j ⋯ D I i m ⋮ ⋱ ⋮ ⋱ ⋮ D I N D I 1 ⋯ D I N D I j ⋯ D I N D I m ] N D I × m (4) DI=\begin{bmatrix}DI_1\\\vdots\\DI_i\\\vdots\\DI_{N_{DI}}\end{bmatrix}_{N_{DI}\times m}=\begin{bmatrix}DI_{11} & \cdots & DI_{1j} & \cdots & DI_{1m}\\\vdots & \ddots &\vdots & \ddots & \vdots\\DI_{i1} & \cdots & DI_{ij} & \cdots & DI_{im}\\\vdots & \ddots &\vdots & \ddots & \vdots\\DI_{N_{DI}1} & \cdots & DI_{N_{DI}j} & \cdots & DI_{N_{DI}m}\end{bmatrix}_{N_{DI}\times m}\tag{4} DI= DI1DIiDINDI NDI×m= DI11DIi1DINDI1DI1jDIijDINDIjDI1mDIimDINDIm NDI×m(4)其中, D I DI DI为驾驶教练矩阵, D I i DI_i DIi为第 i i i个驾驶教练, D I i , j DI_{i,j} DIi,j为其第 j j j维; N D I = ⌊ 0.1 ⋅ N ⋅ ( 1 − t / T ) ⌋ N_{DI}=\lfloor0.1\cdot N\cdot(1-t/T)\rfloor NDI=0.1N(1t/T)⌋为驾驶教练人数,其中 t t t为当前迭代次数, T T T为最大迭代次数。
首先,使用式(5)计算每个成员的新位置。然后,根据式(6),如果这个新位置改善了目标函数的值,那么这个新位置将取代之前的位置。 x i , j P 1 = { x i , j + r ⋅ ( D I k i , j − I ⋅ x i , j ) , F D I k i < F i x i , j + r ⋅ ( x i , j − D I k i , j ) ,    otherwise (5) x_{i,j}^{P1}=\begin{dcases}x_{i,j}+r\cdot(DI_{k_i,j}-I\cdot x_{i,j}),\quad F_{DI_{k_i}}<F_i\\[2ex]x_{i,j}+r\cdot(x_{i,j}-DI_{k_i,j}),\quad\quad\,\,\text{otherwise}\end{dcases}\tag{5} xi,jP1= xi,j+r(DIki,jIxi,j),FDIki<Fixi,j+r(xi,jDIki,j),otherwise(5) X i = { X i P 1 ,   F i P 1 < F i X i , otherwise (6) X_i=\begin{dcases}X_i^{P1},\quad\, F_i^{P1}<F_i\\[2ex]X_i,\quad\quad\text{otherwise}\end{dcases}\tag{6} Xi= XiP1,FiP1<FiXi,otherwise(6)其中, X i P 1 X_i^{P1} XiP1是基于DTBO第一阶段的第 i i i个候选解的新计算状态, X i , j P 1 X_{i,j}^{P1} Xi,jP1是它的第 j j j维, F i P 1 F_i^{P1} FiP1是它的目标函数值, I I I是从集合 { 1 , 2 } \{1,2\} { 1,2}中随机选择的数字, r r r是区间 [ 0 , 1 ] [0,1] [0,1]中的随机数, D I k i DI_{k_i} DIki中的 k i k_i ki是从集合 { 1 , 2 , … , N D I } \{1,2,\ldots,N_{DI}\} { 1,2,,NDI}随机选择的整数, D I k i DI_{k_i} DIki表示随机选取的训练第 i i i个成员的驾驶教练, D I k i , j DI_{k_i,j} DIki,j为其第 j j j维, F D I k i F_{DI_{k_i}} FDIki为其目标函数值。

(2)第二阶段:学员驾驶技能的模式化(探索)

DTBO更新的第二阶段是基于新手驾驶员对教练的模仿,即学员尝试模仿教练的所有动作和技能。这个过程将DTBO成员移动到搜索空间中的不同位置,从而增加了DTBO的探索能力。为了在数学上模拟这个概念,根据式(7)的每个成员与教员的线性组合生成一个新的位置,如果这个新位置改善了目标函数的值,则根据式(8)替换之前的位置。 x i , j P 2 = P ⋅ x i , j + ( 1 − P ) ⋅ D I k i , j (7) x_{i,j}^{P2}=P\cdot x_{i,j}+(1-P)\cdot DI_{k_i,j}\tag{7} xi,jP2=Pxi,j+(1P)DIki,j(7) X i = { X i P 2 ,   F i P 2 < F i X i , otherwise (8) X_i=\begin{dcases}X_i^{P2},\quad\, F_i^{P2}<F_i\\[2ex]X_i,\quad\quad\text{otherwise}\end{dcases}\tag{8} Xi= XiP2,FiP2<FiXi,otherwise(8)其中, X i P 2 X_i^{P2} XiP2为基于第二阶段DTBO的第 i i i个候选解的新计算状态, x i , j P 2 x_{i,j}^{P2} xi,jP2为其第 j j j维, F i P 2 F_i^{P2} FiP2为其目标函数值, P P P是由式(9)计算得出。 P = 0.01 + 0.9 ( 1 − t T ) (9) P=0.01+0.9\left(1-\frac tT\right)\tag{9} P=0.01+0.9(1Tt)(9)

(3)第三阶段:个人实践(开发)

第三阶段的DTBO更新是基于每个学员的个人实践,以提高驾驶技能。在这个阶段,每个初学者都试图接近自己的最佳技能。这一阶段允许每个成员在其当前位置周围进行局部搜索的基础上发现更好的位置。这个阶段演示了DTBO在开发局部搜索方面的强大能力。对这个DTBO阶段进行数学建模,首先根据式(10)在每个种群成员附近生成一个随机位置。然后,根据式(11),如果该位置改进了目标函数的值,则该位置将取代前一位置。 x i , j P 3 = x i , j + ( 1 − 2 r ) ⋅ R ⋅ ( 1 − t T ) ⋅ x i , j (10) x_{i,j}^{P3}=x_{i,j}+(1-2r)\cdot R\cdot\left(1-\frac tT\right)\cdot x_{i,j}\tag{10} xi,jP3=xi,j+(12r)R(1Tt)xi,j(10) X i = { X i P 3 ,   F i P 3 < F i X i , otherwise (11) X_i=\begin{dcases}X_i^{P3},\quad\, F_i^{P3}<F_i\\[2ex]X_i,\quad\quad\text{otherwise}\end{dcases}\tag{11} Xi= XiP3,FiP3<FiXi,otherwise(11)其中, X i P 3 X_i^{P3} XiP3为基于DTBO第三阶段的第 i i i个候选解的新计算状态, x i , j P 3 x_{i,j}^{P3} xi,jP3为其第 j j j维, F i P 3 F_i^{P3} FiP3为其目标函数值, r r r为区间 [ 0 , 1 ] [0,1] [0,1]的随机数, R R R为值为0.05的常数, t t t为当前迭代次数, T T T为最大迭代次数。

2、DTBO算法伪代码

DTBO算法的伪代码如图1所示。
在这里插入图片描述

图1 DTBO算法伪代码

二、仿真实验与结果分析

将DTBO与PSO、GSA、TLBO、GWO、WOA、MPA、TSA、MVO和RSA进行对比,以常用23个测试函数中的F1、F4(单峰函数/30维)、F8、F9(多峰函数/30维)、F22、F23(固定维度多峰函数/4维、4维)为例,实验设置种群规模为30,最大迭代次数为1000,每种算法独立运算20次,结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
DTBO:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
PSO:最差值: 94.1204, 最优值: 21.4207, 平均值: 51.1621, 标准差: 19.7125, 秩和检验: 8.0065e-09
GSA:最差值: 1.7555e-16, 最优值: 6.2282e-17, 平均值: 1.1925e-16, 标准差: 2.9414e-17, 秩和检验: 8.0065e-09
TLBO:最差值: 1.9915e-252, 最优值: 2.5728e-260, 平均值: 1.5527e-253, 标准差: 0, 秩和检验: 8.0065e-09
GWO:最差值: 2.4764e-58, 最优值: 6.4648e-62, 平均值: 3.1734e-59, 标准差: 5.7572e-59, 秩和检验: 8.0065e-09
WOA:最差值: 6.1671e-151, 最优值: 2.986e-169, 平均值: 3.0836e-152, 标准差: 1.379e-151, 秩和检验: 8.0065e-09
MPA:最差值: 8.8367e-49, 最优值: 2.8684e-52, 平均值: 7.9028e-50, 标准差: 1.9723e-49, 秩和检验: 8.0065e-09
TSA:最差值: 2.9577e-46, 最优值: 1.3148e-50, 平均值: 4.1517e-47, 标准差: 7.2105e-47, 秩和检验: 8.0065e-09
MVO:最差值: 0.55072, 最优值: 0.16063, 平均值: 0.34444, 标准差: 0.10975, 秩和检验: 8.0065e-09
RSA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F4
DTBO:最差值: 4.9407e-324, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: 1
PSO:最差值: 15.8846, 最优值: 9.6113, 平均值: 12.7292, 标准差: 1.9798, 秩和检验: 2.8636e-08
GSA:最差值: 4.0953, 最优值: 1.3017e-08, 平均值: 1.236, 标准差: 1.3, 秩和检验: 2.8636e-08
TLBO:最差值: 9.9574e-122, 最优值: 1.8543e-125, 平均值: 7.1601e-123, 标准差: 2.2632e-122, 秩和检验: 2.8636e-08
GWO:最差值: 6.1308e-14, 最优值: 7.5078e-16, 平均值: 1.4563e-14, 标准差: 1.6816e-14, 秩和检验: 2.8636e-08
WOA:最差值: 83.2429, 最优值: 0.046988, 平均值: 45.4546, 标准差: 29.1516, 秩和检验: 2.8636e-08
MPA:最差值: 1.5892e-18, 最优值: 2.5828e-20, 平均值: 3.4682e-19, 标准差: 3.478e-19, 秩和检验: 2.8636e-08
TSA:最差值: 0.047332, 最优值: 5.983e-05, 平均值: 0.0060028, 标准差: 0.011607, 秩和检验: 2.8636e-08
MVO:最差值: 1.5395, 最优值: 0.36337, 平均值: 0.80149, 标准差: 0.26239, 秩和检验: 2.8636e-08
RSA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: 0.01945
函数:F8
DTBO:最差值: -6055.2965, 最优值: -12569.4866, 平均值: -10932.3441, 标准差: 2039.6663, 秩和检验: 1
PSO:最差值: -5297.0288, 最优值: -7981.5834, 平均值: -6386.2856, 标准差: 841.0953, 秩和检验: 3.625e-07
GSA:最差值: -1804.7885, 最优值: -3435.5199, 平均值: -2584.8971, 标准差: 443.3003, 秩和检验: 6.1882e-08
TLBO:最差值: -4160.0995, 最优值: -5672.4358, 平均值: -4835.8365, 标准差: 434.7945, 秩和检验: 6.1882e-08
GWO:最差值: -4681.2686, 最优值: -6679.1921, 平均值: -5973.3057, 标准差: 583.4896, 秩和检验: 3.625e-07
WOA:最差值: -8361.6676, 最优值: -12567.3731, 平均值: -10900.4761, 标准差: 1596.7113, 秩和检验: 0.037915
MPA:最差值: -8730.8362, 最优值: -10927.9839, 平均值: -9698.5444, 标准差: 572.9746, 秩和检验: 0.10067
TSA:最差值: -5180.4239, 最优值: -7328.2681, 平均值: -6187.8641, 标准差: 515.3844, 秩和检验: 3.625e-07
MVO:最差值: -6802.1623, 最优值: -8419.6343, 平均值: -7652.7358, 标准差: 485.0641, 秩和检验: 1.1126e-06
RSA:最差值: -4867.4014, 最优值: -5783.8982, 平均值: -5428.5941, 标准差: 226.7074, 秩和检验: 6.1794e-08
函数:F9
DTBO:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
PSO:最差值: 80.5132, 最优值: 31.9342, 平均值: 55.9099, 标准差: 11.9032, 秩和检验: 8.0065e-09
GSA:最差值: 92.5304, 最优值: 14.9244, 平均值: 34.2265, 标准差: 16.7778, 秩和检验: 7.9919e-09
TLBO:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
GWO:最差值: 4.5901, 最优值: 0, 平均值: 0.39471, 标准差: 1.2327, 秩和检验: 0.040127
WOA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
MPA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
TSA:最差值: 235.4443, 最优值: 70.8933, 平均值: 157.6332, 标准差: 44.313, 秩和检验: 8.0065e-09
MVO:最差值: 167.3692, 最优值: 52.8361, 平均值: 115.9141, 标准差: 30.9301, 秩和检验: 8.0065e-09
RSA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F22
DTBO:最差值: -10.4029, 最优值: -10.4029, 平均值: -10.4029, 标准差: 1.092e-06, 秩和检验: 1
PSO:最差值: -2.7519, 最优值: -10.4029, 平均值: -8.7293, 标准差: 3.0331, 秩和检验: 0.0066974
GSA:最差值: -1.0939, 最优值: -10.4029, 平均值: -7.5456, 标准差: 3.0577, 秩和检验: 1
TLBO:最差值: -5.0877, 最优值: -10.4029, 平均值: -10.1372, 标准差: 1.1885, 秩和检验: 1.0154e-06
GWO:最差值: -10.4021, 最优值: -10.4028, 平均值: -10.4026, 标准差: 0.00016268, 秩和检验: 6.7956e-08
WOA:最差值: -3.7241, 最优值: -10.4027, 平均值: -8.6523, 标准差: 2.7247, 秩和检验: 6.7956e-08
MPA:最差值: -10.4029, 最优值: -10.4029, 平均值: -10.4029, 标准差: 3.645e-15, 秩和检验: 8.0065e-09
TSA:最差值: -1.8336, 最优值: -10.3649, 平均值: -7.741, 标准差: 3.5704, 秩和检验: 6.7956e-08
MVO:最差值: -2.7659, 最优值: -10.4029, 平均值: -8.1984, 标准差: 3.1615, 秩和检验: 6.7956e-08
RSA:最差值: -0.81598, 最优值: -10.4029, 平均值: -5.6746, 标准差: 3.5504, 秩和检验: 1.0646e-07
函数:F23
DTBO:最差值: -10.5364, 最优值: -10.5364, 平均值: -10.5364, 标准差: 8.0636e-07, 秩和检验: 1
PSO:最差值: -2.4217, 最优值: -10.5364, 平均值: -8.0615, 标准差: 3.5232, 秩和检验: 0.10272
GSA:最差值: -4.0368, 最优值: -10.5364, 平均值: -9.2269, 标准差: 2.3809, 秩和检验: 0.0067864
TLBO:最差值: -5.1285, 最优值: -10.5364, 平均值: -9.9956, 标准差: 1.6645, 秩和检验: 1.3439e-05
GWO:最差值: -2.4217, 最优值: -10.5363, 平均值: -10.1303, 标准差: 1.8144, 秩和检验: 6.7956e-08
WOA:最差值: -2.4216, 最优值: -10.5363, 平均值: -7.734, 标准差: 3.2621, 秩和检验: 6.7956e-08
MPA:最差值: -10.5364, 最优值: -10.5364, 平均值: -10.5364, 标准差: 2.4789e-15, 秩和检验: 3.789e-08
TSA:最差值: -1.6744, 最优值: -10.5029, 平均值: -6.8826, 标准差: 3.9962, 秩和检验: 6.7956e-08
MVO:最差值: -2.8711, 最优值: -10.5364, 平均值: -9.0762, 标准差: 2.6366, 秩和检验: 6.7956e-08
RSA:最差值: -1.0387, 最优值: -10.5346, 平均值: -4.3742, 标准差: 3.2908, 秩和检验: 6.7956e-08

实验结果表明:所提出的DTBO算法在优化和实现最优解方面更有效,比所比较的算法更具竞争力。

三、参考文献

[1] Mohammad D, Eva T, Pavel T. A new human-based metaheuristic algorithm for solving optimization problems on the base of simulation of driving training process[J]. Scientific Reports, 2022, 12: 9924.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43821559/article/details/127506304

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签