机器人中的数值优化(二十)——函数的光滑化技巧

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



  

   三十二、函数的光滑化技巧

   1、Inf convolution 卷积操作

   Inf convolution 卷积操作适应于凸函数,Inf convolution 卷积操作的目标是把不光滑的凸函数进行光滑近似,并使得光滑近似后的函数于原函数尽量吻合

   对于两个凸函数 f 1 f_1 f1 f 2 f_2 f2,它们之间的Inf convolution 卷积操作记为 f 1 □ f 2 f_{1}□ f_{2} f1f2,即找一个 u 1 u_1 u1 u 2 u_2 u2,满足 u 1 u_1 u1+ u 2 u_2 u2= x x x的条件下,使得 f 1 ( u 1 ) + f 2 ( u 2 ) f_{1}(u_{1})+f_{2}(u_{2}) f1(u1)+f2(u2)最大或最小,如下面的第一个表达式所示,由于满足 u 1 u_1 u1+ u 2 u_2 u2= x x x,因此可消去一个u进行简化,简化后的表达式如下面第二个式子所示:

   ( f 1 □ f 2 ) ( x ) = inf ⁡ ( u 1 , u 2 ) ∈ R d × R d { f 1 ( u 1 ) + f 2 ( u 2 ) : u 1 + u 2 = x } ( f 1 □ f 2 ) ( x ) = inf ⁡ u ∈ R d { f 1 ( u ) + f 2 ( x − u ) } \begin{aligned}(f_1□ f_2)(x)&=\inf_{(u_1,u_2)\in\mathbb{R}^d\times\mathbb{R}^d}\{f_1(u_1)+f_2(u_2):u_1+u_2=x\}\\(f_1□ f_2)(x)&=\inf_{u\in\mathbb{R}^d}\{f_1(u)+f_2(x-u)\}\end{aligned} (f1f2)(x)(f1f2)(x)=(u1,u2)Rd×Rdinf{f1(u1)+f2(u2):u1+u2=x}=uRdinf{f1(u)+f2(xu)}

   Inf convolution 卷积具有对称性,即 f 1 □ f 2 = f 2 □ f 1 f_1□ f_2=f_2□ f_1 f1f2=f2f1

   Inf convolution 卷积的几何解释如下图所示,假设我们考虑两个凸函数,一个是常见的绝对值函数 f ( x ) = ∣ x ∣ \color{red}{f(x)=|x|} f(x)=x,另一个是二次函数 g ( x ) = 1 2 x 2 g(x)=\frac12x^2 g(x)=21x2,如下面的第一幅图所示,对这两个函数进行Inf convolution 卷积操作,即将光滑的函数 g ( x ) = 1 2 x 2 g(x)=\frac12x^2 g(x)=21x2的原点不断地在绝对值函数 f ( x ) = ∣ x ∣ \color{red}{f(x)=|x|} f(x)=x上进行移动,依次得到下面的第二幅图和第三幅图,最终得到包络即f函数与g函数的Inf convolution 卷积操作。

在这里插入图片描述

   如果min可以取到的话, e p i ( f □ g ) = e p i ( f ) + e p i ( g ) epi(f□g)=epi(f)+epi(g) epi(fg)=epi(f)+epi(g)

   Inf convolution 卷积操作的原理其实就是拿光滑凸函数的轮廓去把不光滑的地方利用包络给它磨圆


   2、Moreau 包络

   Moreau envelope是Inf convolution 卷积操作的一个特例,即将被卷积函数更改为一个二次函数或者说范数的平方,如下式所示:

   γ f : = f □ ( 1 2 γ ∥ ⋅ ∥ 2 ) ^\gamma f:=f\Box\left(\frac{1}{2\gamma}\|\cdot\|^2\right) γf:=f(2γ12)

   其具体表达式如下式所示:

   γ f ( x ) : = inf ⁡ u ∈ R d { f ( u ) + 1 2 γ ∥ x − u ∥ 2 } ^\gamma f(x):=\inf_{u\in\mathbb{R}^d}\{f(u)+\frac{1}{2\gamma}\left\|x-u\right\|^2\} γf(x):=uRdinf{f(u)+2γ1xu2}

   当一个函数时封闭的凸函数时,inf一定可以取到最小值, γ \gamma γ具有平滑参数的作用, γ \gamma γ越小,平滑后的函数与原函数越接近。

在这里插入图片描述

   下面来看一个Pinball函数的示例,Pinball函数的定义如下

   ℓ s 1 , s 2 ( x ) = { s 1 x if x ≤ 0 s 2 x if x ≥ 0 \ell_{s_1,s_2}(x)=\begin{cases}s_1x&\text{if}x\le0\\s_2x&\text{if}x\ge0\end{cases} s1,s2(x)={s1xs2xifx0ifx0

   其中, s 1 ≤ 0 ≤ s 2 s_1\leq0\leq s_2 s10s2,Pinball函数的Moreau 包络函数如下所示

   γ f ( x ) = ( f □ g ) ( x ) = = { s 1 x − γ s 1 2 2 , if  x < s 1 1 2 γ x 2 , if  x ∈ [ γ s 1 , γ s 2 ] s 2 x − γ s 2 2 2 , if  x > s 2 \gamma f(x)=(f\Box g)(x)==\quad\begin{cases}s_1x-\gamma\frac{s_1^2}{2},&\text{if }x<s_1\\\frac{1}{2\gamma}x^2,&\text{if }x\in[\gamma s_1,\gamma s_2]\\s_2x-\gamma\frac{s_2^2}{2},&\text{if }x>s_2\end{cases} γf(x)=(fg)(x)== s1xγ2s12,2γ1x2,s2xγ2s22,if x<s1if x[γs1,γs2]if x>s2

   一个经典的例子是Huber函数 ℓ − 1 , 1 \ell_{-1,1} 1,1,即 s 1 s_1 s1取-1, s 2 s_2 s2取1

在这里插入图片描述

   相关证明如下:

在这里插入图片描述

   当我们不断地把 γ \gamma γ值减小,平滑后的函数与原函数也更加接近,包络的下边缘也会越来越尖,如下图所示:

在这里插入图片描述

   Moreau 包络具有一个良好的性质,即一个函数与它的Moreau 包络函数的最小值相同,即

   ∀ γ > 0 , inf ⁡ x ( ( γ f ) ( x ) ) = inf ⁡ x f ( x ) \forall\gamma>0,\quad\inf_x\left((^\gamma f)(x)\right)=\inf_xf(x) γ>0,xinf((γf)(x))=xinff(x)

   证明过程如下:

   inf ⁡ x ( ( γ f ) ( x ) ) = inf ⁡ x inf ⁡ y { f ( y ) + 1 2 γ ∥ x − y ∥ 2 } = inf ⁡ y inf ⁡ x { f ( y ) + 1 2 γ ∥ x − y ∥ 2 } = inf ⁡ y f ( y ) \begin{aligned} \operatorname*{inf}_{x}\left((^{\gamma}f)(x)\right)& =\inf_x\inf_y\left\{f(y)+\frac1{2\gamma}\left\|x-y\right\|^2\right\} \\ &=\inf_y\inf_x\left\{f(y)+\frac{1}{2\gamma}\left\|x-y\right\|^2\right\} \\ &=\inf_{y}f(y) \end{aligned} xinf((γf)(x))=xinfyinf{f(y)+2γ1xy2}=yinfxinf{f(y)+2γ1xy2}=yinff(y)

在这里插入图片描述


   总结一下,用Inf convolution 卷积操作可以对一个不光滑的凸函数进行平滑,平滑后的函数与原函数具有同样的最小值,给一个光滑因子 γ \gamma γ用来调节光滑程度,我们把不光滑的凸函数 f f f的光滑近似记作 ω γ f _{\omega}^{\gamma}f ωγf ω \omega ω是我们用来光滑 f f f的被卷积的函数, ω \omega ω 1 2 ∥ ⋅ ∥ 2 \frac{1}{2}\|\cdot\|^2 212时,就是Moreau 包络

在这里插入图片描述

   假设,我们用 g ( x ) = 1 2 x 2 + 1 2 g(x)=\frac12x^2+\frac12 g(x)=21x2+21来作为被卷积的函数,把 g ( x ) g(x) g(x)的原点挪动一遍后,形成的包络如下图所示,我们可以改变 g ( x ) g(x) g(x)来获得不同的效果。

在这里插入图片描述

   Inf-conv卷积是平滑凸函数的一种常用方法。它可以处理Moreau 包络或者Nesterov 平滑无法处理的问题。

在这里插入图片描述


   3、Mollifier-Conv

   Mollifier卷积是比Inf-conv卷积更一般化的卷积,举一个例子,对于如式所示的函数,它是通过 e − 1 1 − x 2 e^\frac{-1}{1-x^2} e1x21变化而来的,除以其自身的积分相当于进行了缩放操作,这样一个凸起的或者说隆起的函数就称为Mollifier

   φ ( x ) = { e − 1 / ( 1 − x 2 ) ∫ − 1 1 e − 1 / ( 1 − s 2 ) d s i f ∣ x ∣ < 1 0 i f ∣ x ∣ ≥ 1 \varphi(x)=\begin{cases}\frac{e^{-1/(1-x^2)}}{\int_{-1}^1e^{-1/(1-s^2)}\mathrm{d}s}&\mathrm{~if~}|x|<1\\0&\mathrm{~if~}|x|\geq1&\end{cases} φ(x)= 11e1/(1s2)dse1/(1x2)0 if x<1 if x1

在这里插入图片描述

   更一般的,取 φ ϵ ( x ) : = 1 ϵ φ ( x ϵ ) \varphi_\epsilon(x):=\frac1\epsilon\varphi(\frac x\epsilon) φϵ(x):=ϵ1φ(ϵx),将该函数与下面右图中红色曲线所示的函数进行卷积 f ϵ ( x ) : = ∫ − ∞ + ∞ f ( x + z ) φ ϵ ( z ) d z f_\epsilon(x):=\int_{-\infty}^{+\infty}f(x+z)\varphi_\epsilon(z)dz fϵ(x):=+f(x+z)φϵ(z)dz,得到了下面右图中的蓝色曲线,其中 ϵ \epsilon ϵ用于调节光滑效果, ϵ \epsilon ϵ越小光滑效果越差,越接近于原函数。

在这里插入图片描述

   下图中给出了一个二维的例子,在一维的基础上进行了推广

   φ ( x ) = { e − 1 / ( 1 − ∥ x ∥ 2 ) ∫ R n e − 1 / ( 1 − ∥ s ∥ 2 ) d s i f ∥ x ∥ < 1 0 i f ∥ x ∥ ≥ 1 \varphi(x)=\begin{cases}\frac{e^{-1/(1-\|x\|^2)}}{\int_{\mathbb{R}^n}e^{-1/(1-\|s\|^2)}\mathrm{d}s}&\mathrm{~if~}\|x\|<1\\0&\mathrm{~if~}\|x\|\geq1&\end{cases} φ(x)= Rne1/(1s2)dse1/(1x2)0 if x<1 if x1

在这里插入图片描述

   φ ϵ ( x ) : = 1 ϵ n φ ( x ϵ ) f ϵ ( x ) : = ∫ − ∞ + ∞ f ( x + z ) φ ϵ ( z ) d z \begin{gathered}\varphi_\epsilon(x):=\frac1{\epsilon^n}\varphi\Big(\frac x\epsilon\Big)\\\\f_\epsilon(x):=\int_{-\infty}^{+\infty}f(x+z)\varphi_\epsilon(z)dz\end{gathered} φϵ(x):=ϵn1φ(ϵx)fϵ(x):=+f(x+z)φϵ(z)dz

在这里插入图片描述

   Mollifier的具体定义如下所示,其满足积分为1,且当 ϵ \epsilon ϵ趋于0的时候, φ ( x ) \varphi(x) φ(x)趋于冲激函数 δ ( x ) \delta(x) δ(x),只要满足这两个条件都可以称为Mollifier

   ∫ R n φ ( x ) d x = 1 lim ⁡ ϵ → 0 φ ϵ ( x ) = lim ⁡ ϵ → 0 ϵ − n φ ( x / ϵ ) = δ ( x ) \begin{aligned}&\int_{\mathbb{R}^n}\varphi(x)\mathrm{d}x=1\\&\lim_{\epsilon\to0}\varphi_\epsilon(x)=\lim_{\epsilon\to0}\epsilon^{-n}\varphi(x/\epsilon)=\delta(x)\end{aligned} Rnφ(x)dx=1ϵ0limφϵ(x)=ϵ0limϵnφ(x/ϵ)=δ(x)

   下面进行简单的推导,为什么使用Mollifier函数进行卷积操作,可对原函数进行平滑处理

   d d x f ϵ ( x ) = d d x ∫ f ( x + z ) φ ϵ ( z ) d z = d d x ∫ f ( y ) φ ϵ ( y − x ) d y = ∫ f ( y ) ( d d x φ ϵ ( y − x ) ) d y \begin{aligned} \frac d{dx}f_\epsilon(x)& =\frac d{dx}\int f(x+z)\varphi_\epsilon(z)\mathrm{d}z \\ &=\frac d{dx}\int f(y)\varphi_\epsilon(y-x)dy \\ &=\int f(y)\left(\frac d{dx}\varphi_\epsilon(y-x)\right)dy \end{aligned} dxdfϵ(x)=dxdf(x+z)φϵ(z)dz=dxdf(y)φϵ(yx)dy=f(y)(dxdφϵ(yx))dy

   即若Mollifier函数是处处连续可微的,则对某个函数进行Mollifier卷积操作后得到的函数也是处处连续可微的,

   在下面的例子中,Mollifier函数取为 φ ( x ) = 1 e x + e − x + 2 \varphi(x)=\frac1{e^x+e^{-x}+2} φ(x)=ex+ex+21,原函数为 f ( x ) = max ⁡ ( x , 0 ) f(x)=\max(x,0) f(x)=max(x,0),则进行Mollifier卷积后的函数变为下式:

   f ϵ ( x ) = ∫ − ∞ + ∞ max ⁡ ( x + z , 0 ) φ ϵ ( z ) d x = ϵ ln ⁡ ( 1 + e x / ϵ ) f_\epsilon(x)=\int_{-\infty}^{+\infty}\max(x+z,0)\varphi_\epsilon(z)\mathrm{d}x=\epsilon\ln(1+e^{x/\epsilon}) fϵ(x)=+max(x+z,0)φϵ(z)dx=ϵln(1+ex/ϵ)

   Mollifier卷积后的效果如下面的右图所示:

在这里插入图片描述

   我们知道 max ⁡ ( x 1 , x 2 ) \max(x_1,x_2) max(x1,x2)等价于 x 1 + max ⁡ ( x 2 − x 1 , 0 ) x_1+\max(x_2-x_1,0) x1+max(x2x1,0),代入上面的表达式,我们可以进一步得到原函数为 max ⁡ ( x 1 , x 2 ) \max(x_1,x_2) max(x1,x2)时,Mollifier卷积后的结果为 ϵ ln ⁡ ( e x 1 / ϵ + e x 2 / ϵ ) \epsilon\ln(e^{x_1/\epsilon}+e^{x_2/\epsilon}) ϵln(ex1/ϵ+ex2/ϵ),同理可推广到多个值取max的情况,如下所示:

   max ⁡ ( x 1 , x 2 ) = x 1 + max ⁡ ( x 2 − x 1 , 0 ) ⟷ x 1 + f ϵ ( x 2 − x 1 ) = ϵ ln ⁡ ( e x 1 / ϵ + e x 2 / ϵ ) max ⁡ ( x 1 , … , x n − 1 , x n ) = max ⁡ ( x n , max ⁡ ( x 1 , … , x n − 1 ) ) ⟷ ϵ ln ⁡ ∑ i = 1 n e x i / ϵ l o g ⋅ s u m ⋅ e α p \begin{aligned}\max(x_1,x_2)&=x_1+\max(x_2-x_1,0)\quad\longleftrightarrow\quad&x_1+f_\epsilon(x_2-x_1)=\epsilon\ln(e^{x_1/\epsilon}+e^{x_2/\epsilon})\\\max(x_1,\ldots,x_{n-1},x_n)&=\max(x_n,\max(x_1,\ldots,x_{n-1}))\quad\longleftrightarrow\quad&\epsilon\ln\sum_{i=1}^ne^{x_i/\epsilon\quad\mathsf{log}\cdot\mathsf{sum}\cdot\mathsf{e}\alpha\mathbf{p}}\end{aligned} max(x1,x2)max(x1,,xn1,xn)=x1+max(x2x1,0)=max(xn,max(x1,,xn1))x1+fϵ(x2x1)=ϵln(ex1/ϵ+ex2/ϵ)ϵlni=1nexi/ϵlogsumeαp

在这里插入图片描述

   ϵ \epsilon ϵ取1时, max ⁡ { x 1 , … , x k } \max\{x_1,\ldots,x_k\} max{x1,,xk}函数经过Mollifier卷积处理后的示意图如下所示:

在这里插入图片描述

   所以, f ( x ) : = log ⁡ ( ∑ k = 1 n exp ⁡ x k ) f(x):=\log\left(\sum_{k=1}^n\exp x_k\right) f(x):=log(k=1nexpxk)可以被视为光滑的max函数的替代品,在工程中很常用。


   若我们将Mollifier函数更改为 φ ( x ) = 2 ( x 2 + 4 ) 3 / 2 \color{red}{\varphi(x)=\frac2{(x^2+4)^{3/2}}} φ(x)=(x2+4)3/22,原函数为 f ( x ) = max ⁡ ( x , 0 ) f(x)=\max(x,0) f(x)=max(x,0),则进行Mollifier卷积后的函数变为下式,这个函数也被称为CHKS函数,常用作光滑化的max 函数来对max函数进行替代。

   f ϵ ( x ) = ∫ − ∞ + ∞ max ⁡ ( x + z , 0 ) φ ϵ ( z ) d x = x + x 2 + 4 ϵ 2 2 f_\epsilon(x)=\int_{-\infty}^{+\infty}\max(x+z,0)\varphi_\epsilon(z)\mathrm{d}x=\frac{x+\sqrt{x^2+4\epsilon^2}}2 fϵ(x)=+max(x+z,0)φϵ(z)dx=2x+x2+4ϵ2

在这里插入图片描述


   下面给出了一个Weierstrass变换的例子,Weierstrass变换是连续版本的高斯模糊,他也可以得到光滑的函数

在这里插入图片描述


   下面给出了一个采用分段光滑的例子

   F μ ( x ) = { 0 i f x ≤ 0 ( μ − x / 2 ) ( x / μ ) 3 i f 0 < x < μ x − μ / 2 i f x ≥ μ F_\mu(x)=\begin{cases}0&\mathrm{~if~}x\leq0\\(\mu-x/2)(x/\mu)^3&\mathrm{~if~}0<x<\mu\\x-\mu/2&\mathrm{~if~}x\geq\mu&\end{cases} Fμ(x)= 0(μx/2)(x/μ)3xμ/2 if x0 if 0<x<μ if xμ

在这里插入图片描述



   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石②

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石② 第十九章 驱动程序基石②19.3 异步通知19.3.1 适用场景19.3.2 使用流程19.3.3 驱动编程19.3.4 应用编程19.3.5 现场编程19.3.6 上机编程19.3.7 异步通知机制内核代码详解 19.4 阻塞与非阻塞19.4.1 应用编程19.4.2 驱动编程…

Unity HDRP Custom Pass 实现场景雪地效果

先使用Shader Graph连一个使用模型法线添加雪地的shader&#xff0c;并赋给一个material。 1.1 先拿到模型世界坐标下的顶点法线&#xff0c;简单处理一下&#xff0c;赋给透明度即可。 给场景添加Custom Pass&#xff0c;剔除不需要的层级。 1.在Hierarchy界面中&#xff…

用于自然语言处理的 Python:理解文本数据

一、说明 Python是一种功能强大的编程语言&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域获得了极大的普及。凭借其丰富的库集&#xff0c;Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中&#xff0c;我们将介绍 Python for NLP 的一些基础知识&…

SSM - Springboot - MyBatis-Plus 全栈体系(十六)

第三章 MyBatis 三、MyBatis 多表映射 2. 对一映射 2.1 需求说明 根据 ID 查询订单&#xff0c;以及订单关联的用户的信息&#xff01; 2.2 OrderMapper 接口 public interface OrderMapper {Order selectOrderWithCustomer(Integer orderId); }2.3 OrderMapper.xml 配置…

讲讲项目里的仪表盘编辑器(三)布局组件

布局容器处理 看完前面两章的讲解&#xff0c;我们对仪表盘系统有了一个大概的理解。接着我们讲讲更深入的应用。 上文讲解的编辑器只是局限于平铺的组件集。而在编辑器中&#xff0c;还会有一种组件是布局容器。它允许其他组件拖拽进入在里面形成自己的一套布局。典型的有分页…

Python基础语法(1)

目录 一、常量和表达式 二、变量和类型 2.1 变量是什么 2.2 变量的语法 2.2.1 定义变量 2.2.2 使用变量 2.3 变量的类型 2.3.1 整数 2.3.2 浮点数(小数) 2.3.3 字符串 2.3.4 布尔 2.3.5 其他 2.4 为什么要有这么多类型 2.4.1 类型决定了数据在内存中占据多大空间…

【STM32 CubeMX】移植u8g2(一次成功)

文章目录 前言一、下载u8g2源文件二、复制和更改文件2.1 复制文件2.2 修改文件u8g2_d_setup文件u8g2_d_memory 三、编写oled.c和oled.h文件3.1 CubeMX配置I2C3.2 编写文件oled.holed.c 四、测试代码main函数测试代码 总结 前言 在本文中&#xff0c;我们将介绍如何在STM32上成…

[C++随想录] 优先级队列

优先级队列 基本使用题目训练 基本使用 priority_queue, 优先级队列, 又叫做双端队列, 头文件也是 <queue> 别看它叫做队列, 其实它是一个 堆 补充一下概念: 大根堆 — — 每一棵树的父节点比它的孩子都大小跟堆 — — 每一棵树的父节点比它的孩子都小 &#x1f447;&…

Golang语法、技巧和窍门

Golang简介 命令式语言静态类型语法标记类似于C&#xff08;但括号较少且没有分号&#xff09;&#xff0c;结构类似Oberon-2编译为本机代码&#xff08;没有JVM&#xff09;没有类&#xff0c;但有带有方法的结构接口没有实现继承。不过有type嵌入。函数是一等公民函数可以返…

设计模式10、外观模式Facade

解释说明&#xff1a;外观模式&#xff08;Facade Pattern&#xff09;又称为门面模式&#xff0c;属于结构型模式 Faade 为子系统中的一组接口提供了一个统一的高层接口&#xff0c;该接口使得子系统更加容易使用 外观&#xff08;Facade)角色&#xff1a;为多个子系统对外提供…

Sql注入(手工注入思路、绕过、防御)

一、Sql注入思路 1、判断注入点 在GET参数、POST参数、以及HTTP头部等&#xff0c;包括Cookie、Referer、XFF(X-Forwarded-for)、UA等地方尝试插入代码、符号或语句&#xff0c;尝试是否存在数据库参数读取行为&#xff0c;以及能否对其参数产生影响&#xff0c;如产生影响则…

信创办公–基于WPS的EXCEL最佳实践系列 (数据整理复制粘贴)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;数据整理复制粘贴&#xff09; 目录 应用背景操作步骤1、数据查找与替换2、复制或粘贴数据3、使用自动填充工具4、将数据拆分到多列5、应用数字格式 应用背景 数据的整理复制粘贴等在日常的工作中经常使用。本章内容主要学习…

设计模式 - 享元模式

目录 一. 前言 二. 实现 一. 前言 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它主要解决的问题是创建大量相似对象时的内存开销问题。该模式通过共享具有相同状态的对象来减少内存使用量。 享元模式的思想是&#xff1a;当需要创建…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③ 第十九章 驱动程序基石③19.5 定时器19.5.1 内核函数19.5.2 定时器时间单位19.5.3 使用定时器处理按键抖动19.5.4 现场编程、上机19.5.5 深入研究&#xff1a;定时器的内部机制19.5.6 深入研究&#xff1a;找到系统滴答 1…

SpringCloud(一)Eureka、Nacos、Feign、Gateway

文章目录 概述微服务技术对比 Eureka服务远程调用服务提供者和消费者Eureka注册中心搭建注册中心服务注册服务发现Ribbon负载均衡负载均衡策略饥饿加载 NacosNacos与Eureka对比Nacos服务注册Nacos服务分集群存储NacosRule负载均衡服务实例权重设置环境隔离 Nacos配置管理配置热…

ESP32设备驱动-OLED-SSD1306(I2C)显示屏驱动

OLED-SSD1306(I2C)显示屏驱动 1、OLED介绍 OLED显示屏是指有机电激发光二极管(OrganicLight-EmittingDiode,OLED)由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一…

C++面试题准备

文章目录 一、线程1.什么是进程&#xff0c;线程&#xff0c;彼此有什么区别?2.多进程、多线程的优缺点3.什么时候用进程&#xff0c;什么时候用线程4.多进程、多线程同步&#xff08;通讯&#xff09;的方法5.父进程、子进程的关系以及区别6.什么是进程上下文、中断上下文7.一…

短期风速预测|LSTM|ELM|批处理(matlab代码)

目录 1 主要内容 LSTM-长短时记忆 ELM-极限学习机 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序是预测类的基础性代码&#xff0c;程序对河北某地区的气象数据进行详细统计&#xff0c;程序最终得到pm2.5的预测结果&#xff0c;通过更改数据很容易得到风速预测结…

WSL2安装历程

WLS2安装 1、系统检查 安装WSL2必须运行 Windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 Windows 11。 查看 Windows 版本及内部版本号&#xff0c;选择 Win R&#xff0c;然后键入winver。 2、家庭版升级企业版 下载HEU_KMS_Activ…

Django模板加载与响应

前言 Django 的模板系统将 Python 代码与 HTML 代码解耦&#xff0c;动态地生成 HTML 页面。Django 项目可以配置一个或多个模板引擎&#xff0c;但是通常使用 Django 的模板系统时&#xff0c;应该首先考虑其内置的后端 DTL&#xff08;Django Template Language&#xff0c;D…