算法中的最优化方法课程复习

算法中的最优化方法课程复习

  • 单模函数、拟凸函数、凸函数
    • 证明
      • 证明一个线性函数与一个凸函数的和也是凸的
  • 梯度
  • 线性规划标准形式以及如何标准化
    • 标准形式
    • 常见标准化方法
    • 线性化技巧
  • 单纯形法
  • 二次规划
  • 无约束优化
    • Nelder-Mead
    • 线搜索
    • FR共轭梯度法
      • 例题
  • 优化算法的选择、停止准则
    • 算法选择
    • 停止准则
    • 例题

单模函数、拟凸函数、凸函数

单模函数
注意符号是小于等于,可以取等于号。
在这里插入图片描述
拟凸函数
在这里插入图片描述

凸函数
在这里插入图片描述
例子1
在这里插入图片描述
根据上面的性质判断,这个函数同时是拟凸函数、单模函数,但不是凸函数。
例子2
在这里插入图片描述
根据上面的性质判断,函数是单模函数、拟凸函数,但并不是凸函数。

证明

证明一个线性函数与一个凸函数的和也是凸的

f ( x ) = g ( x ) + h ( x ) f(x) = g(x) + h(x) f(x)=g(x)+h(x)其中 g ( x ) g(x) g(x)是一个凸函数 h ( x ) h(x) h(x)是一个线性函数(下面我们可以看出,线性函数也是凸函数)。
因此有以下性质 g ( λ x + ( 1 − λ ) y ) < = λ g ( x ) + ( 1 − λ ) g ( y ) g(\lambda x+(1-\lambda )y) <=\lambda g(x) + (1-\lambda)g(y) g(λx+(1λ)y)<=λg(x)+(1λ)g(y)以及 h ( λ x + ( 1 − λ ) y ) < = λ h ( x ) + ( 1 − λ ) h ( y ) h(\lambda x+(1-\lambda )y) <= \lambda h(x) + (1-\lambda)h(y) h(λx+(1λ)y)<=λh(x)+(1λ)h(y)
开始证明:
f ( λ x + ( 1 − λ ) y ) = g ( λ x + ( 1 − λ ) y ) + h ( λ x + ( 1 − λ ) y ) < = λ g ( x ) + ( 1 − λ ) g ( y ) + λ h ( x ) + ( 1 − λ ) h ( y ) = λ ( g ( x ) + h ( x ) ) + ( 1 − λ ) ( g ( y ) + h ( y ) ) = λ ( f ( x ) ) + ( 1 − λ ) ( f ( y ) ) f(\lambda x+(1-\lambda )y) \\ \qquad \qquad \qquad = g(\lambda x+(1-\lambda )y) + h(\lambda x+(1-\lambda )y) \\ \qquad \qquad \qquad \qquad \quad <=\lambda g(x) + (1-\lambda)g(y) +\lambda h(x) + (1-\lambda)h(y) \\ \qquad \qquad \qquad = \lambda (g(x)+h(x)) + (1-\lambda)(g(y)+h(y)) \\ = \lambda (f(x)) + (1-\lambda)(f(y)) f(λx+(1λ)y)=g(λx+(1λ)y)+h(λx+(1λ)y)<=λg(x)+(1λ)g(y)+λh(x)+(1λ)h(y)=λ(g(x)+h(x))+(1λ)(g(y)+h(y))=λ(f(x))+(1λ)(f(y))得证
其他如凸函数于凸函数的和仍为凸函数,也是如此证明。

梯度

负梯度方向是从当前来看函数值下降最快的方向,所以V1是负梯度方向,而梯度方向与负梯度方向相反。所以V5是梯度方向。(梯度方向与负梯度方向垂直于等值线的切线)
在这里插入图片描述

线性规划标准形式以及如何标准化

标准形式

目标函数:最小化
Minimize c ⊤ x \text{Minimize} \quad \mathbf{c}^\top \mathbf{x} Minimizecx
约束条件:
Subject to A x = b x ≥ 0 \begin{align*} \text{Subject to} \quad & \mathbf{Ax} = \mathbf{b} \\ & \mathbf{x} \geq \mathbf{0} \end{align*} Subject toAx=bx0

其中,

  • c \mathbf{c} c 是目标函数的系数向量;
  • x \mathbf{x} x 是决策变量向量;
  • A \mathbf{A} A 是约束系数矩阵;
  • b \mathbf{b} b 是约束右端项向量。

常见标准化方法

接下来以几个例子说明常见的标准化方法
m a x 7 x 1 + 2 x 2 − 2 x 3 + 8 s . t . x 1 − 2 x 2 + 3 x 3 − 8 x 4 < = 6 x 1 − x 3 < = 5 0 < = x 1 < = 9 x 2 < = 1 max \qquad 7x_1 + 2x_2 - 2x_3 + 8 \\s.t. \qquad x_1-2x_2+3x_3-8x_4<=6 \\ \qquad x_1 - x_3<=5 \\ \qquad 0<=x_1<=9 \\ \qquad x_2<=1 max7x1+2x22x3+8s.t.x12x2+3x38x4<=6x1x3<=50<=x1<=9x2<=1

  • 通过目标函数统一乘以-1将max优化问题转为min优化问题
  • 对于<=的不等式约束,加上一个非负的变量使其变为等式约束
  • 对于>=的不等式约束,减去一个非负的变量使其变为等式约束
  • 对于x<=0之类的约束,变为 -x>=0
  • 对于x正负无限制的变量,利用两个非负变量令 x = x 1 − x 2 , x 1 > = 0 , x 2 > = 0 x = x_1-x_2 ,x_1>=0,x_2>=0 x=x1x2,x1>=0,x2>=0化为非负变量
    因此上面的线性规划问题可以标准化如下
    m a x 7 x 1 + 2 x 2 − 2 x 3 + 8 s . t . x 1 − 2 x 2 + 3 x 3 − 8 x 4 + x 5 = 6 x 1 − x 3 + x 6 = 5 x 1 + x 7 = 9 x 2 + x 8 = 1 x 1 , x 5 , x 6 , x 7 , x 8 > = 0 max \qquad 7x_1 + 2x_2 - 2x_3 + 8 \\s.t. \qquad x_1-2x_2+3x_3-8x_4+x_5=6 \\ \qquad x_1 - x_3 + x_6=5 \\ \qquad x_1 + x_7=9 \\ \qquad x_2 + x_8=1 \\ \qquad x_1,x_5,x_6,x_7,x_8>=0 max7x1+2x22x3+8s.t.x12x2+3x38x4+x5=6x1x3+x6=5x1+x7=9x2+x8=1x1,x5,x6,x7,x8>=0
    由于 x 2 , x 3 , x 4 x_2,x_3,x_4 x2,x3,x4并没有非负性的限制,因此需要把这些变量也做一定的变换。
    x 2 = x 9 − x 10 , x 3 = x 11 − x 12 , x 4 = x 13 − x 14 x_2 = x_9 - x_{10},x_3 = x_{11}-x_{12},x_4 = x_{13}-x_{14} x2=x9x10,x3=x11x12,x4=x13x14且有 x 9 . . . x 14 > = 0 x_9...x_{14}>=0 x9...x14>=0
    原线性规划问题可以变为
    m a x 7 x 1 + 2 ( x 9 − x 10 ) − 2 ( x 11 − x 12 ) + 8 s . t . x 1 − 2 ( x 9 − x 10 ) + 3 ( x 11 − x 12 ) − 8 ( x 13 − x 14 ) + x 5 = 6 x 1 − ( x 11 − x 12 ) + x 6 = 5 x 1 + x 7 = 9 ( x 9 − x 10 ) + x 8 = 1 x 1 , x 5 , x 6 , x 7 , x 8 , x 9 . . . x 14 > = 0 max \qquad 7x_1 + 2(x_9 - x_{10}) - 2(x_{11}-x_{12}) + 8 \\s.t. \qquad x_1-2(x_9 - x_{10})+3(x_{11}-x_{12})-8(x_{13}-x_{14})+x_5=6 \\ \qquad x_1 - (x_{11}-x_{12})+ x_6=5 \\ \qquad x_1 + x_7=9 \\ \qquad (x_9 - x_{10}) + x_8=1 \\ \qquad x_1,x_5,x_6,x_7,x_8,x_9...x_{14}>=0 max7x1+2(x9x10)2(x11x12)+8s.t.x12(x9x10)+3(x11x12)8(x13x14)+x5=6x1(x11x12)+x6=5x1+x7=9(x9x10)+x8=1x1,x5,x6,x7,x8,x9...x14>=0

线性化技巧

有待更新

单纯形法

单纯形法详细内容见这篇博客

二次规划

有待更新

无约束优化

多维无约束优化(牛顿法、BFGS、DFP、Levenberg-Marquardt)

Nelder-Mead

Nelder-Mead方法在优化过程中不需要用到导数,但是在优化变量个数较多时相对没那么高效。
在这里插入图片描述

线搜索

在这里插入图片描述

FR共轭梯度法

在这里插入图片描述

例题

什么是最速下降法?最速下降法的步聚是什么?最速下降法是不是一定能够最快搜索到最优解?如果是请阐述原因,如果不是,请说明什么情况下不能,可以采用什么方法更高效,为什么?

最速下降法用于寻找多元函数的局部最小值。它的核心思想是沿着目标函数的梯度方向迭代地调整参数值,以达到逐渐接近最优解的目的。
步骤:

  1. 初始值设置: 选择初始点 x 0 \mathbf{x}_0 x0
  2. 计算梯度: 在当前点计算目标函数的梯度 ∇ f ( x ) \nabla f(\mathbf{x}) f(x)
  3. 更新参数: 沿着负梯度方向调整参数值,计算下一个点的位置 x k + 1 = x k − α k ∇ f ( x k ) \mathbf{x}_{k+1} = \mathbf{x}_k - \alpha_k \nabla f(\mathbf{x}_k) xk+1=xkαkf(xk),其中 α k \alpha_k αk 是步长(学习率)。
  4. 重复迭代: 重复步骤 2 和步骤 3,直到满足收敛条件或达到迭代次数上限。

最速下降法的步骤通常是沿着梯度方向最陡峭的下降方向更新参数。但它不一定能够最快地搜索到最优解。这是因为最速下降法可能会受到以下几个限制或问题的影响:

  1. 初始点选择:若初始点选择不当,可能会导致收敛到局部最优解而非全局最优解。
  2. 学习率的选取:学习率过大或过小都可能导致算法的性能不佳。过大的学习率可能导致振荡或错过最优解,而过小的学习率会导致收敛速度慢。
  3. 目标函数的形状:在目标函数非凸或存在高度不规则的情况下,最速下降法可能陷入局部最优解,而无法到达全局最优解。

在存在这些问题的情况下,可以考虑使用其他更高效的优化算法,例如:

  1. 牛顿法和拟牛顿法:这些方法利用了目标函数的二阶导数信息,能够更快地收敛,并且对于某些情况下,能够避免最速下降法所遇到的问题。
  2. 启发式算法:使用模拟退火算法、遗传算法等启发式算法可以消除局部最优点的影响。也可以在启发式算法结果的基础上进一步做基于梯度的精确优化算法。
  3. 多起点局部优化:选择多个初始点,分别基于这些初始点进行优化。

因此,最速下降法并不总是能够最快搜索到最优解,特别是在目标函数复杂、非凸或存在不良条件数的情况下。针对不同的问题,需要综合考虑目标函数的特性,并根据实际情况选择合适的优化算法。

优化算法的选择、停止准则

算法选择

  1. 目标函数和约束都是线性的:单纯形法或者内点法(变量或者约束个数>1000)
  2. 目标函数二次的(凸)线性约束:改进的单纯形法或者内点法
  3. 目标函数和约束都是凸的:椭圆法、割平面法、内点法
  4. 有多个局部极小点:多初始值优化、模拟退火算法、遗传算法
  5. 非线性、非凸优化、无约束:Levenberg-Marquardt 、Newton、quasi-Newton 、steepest descent、 Powell’s perpendicular method (or Nelder-Mead)
  6. 非线性、非凸优化、有约束:
  • 等式约束:elimination, Lagrange method
  • 线性约束:gradient projection or SQP
  • 非线性约束:SQP,or penalty or barrier function

停止准则

  • 单纯形法:可以在有限步迭代内收敛
  • 凸优化算法:
    ∣ f ( x ∗ ) − f ( x k ) ∣ ⩽ ε f , g ( x k ) ⩽ ε g ∥ x ∗ − x k ∥ 2 ⩽ ε x  (for ellipsoid)  \begin{aligned} \left|f\left(x^*\right)-f\left(x_k\right)\right| & \leqslant \varepsilon_f, \quad g\left(x_k\right) \leqslant \varepsilon_g \\ \left\|x^*-x_k\right\|_2 & \leqslant \varepsilon_x \quad \text { (for ellipsoid) } \end{aligned} f(x)f(xk)xxk2εf,g(xk)εgεx (for ellipsoid) 
  • 无约束非线性优化: ∥ ∇ f ( x k ) ∥ 2 ⩽ ε ∇ \left\|\nabla f\left(x_k\right)\right\|_2 \leqslant \varepsilon_{\nabla} f(xk)2ε
  • 有约束非线性优化:
    ∥ ∇ f ( x k ) + ∇ g ( x k ) μ + ∇ h ( x k ) λ ∥ 2 ⩽ ε K T , 1 ∣ μ T g ( x k ) ∣ ⩽ ε K T , 2 μ ⩾ − ε K T , 3 ∥ h ( x k ) ∥ 2 ⩽ ε K T , 4 g ( x k ) ⩽ ε K T , 5 \begin{aligned} \left\|\nabla f\left(x_k\right)+\nabla g\left(x_k\right) \mu+\nabla h\left(x_k\right) \lambda\right\|_2 & \leqslant \varepsilon_{\mathrm{KT}, 1} \\ \left|\mu^T g\left(x_k\right)\right| & \leqslant \varepsilon_{\mathrm{KT}, 2} \\ \mu & \geqslant-\varepsilon_{\mathrm{KT}, 3} \\ \left\|h\left(x_k\right)\right\|_2 & \leqslant \varepsilon_{\mathrm{KT}, 4} \\ g\left(x_k\right) & \leqslant \varepsilon_{\mathrm{KT}, 5} \end{aligned} f(xk)+g(xk)μ+h(xk)λ2 μTg(xk) μh(xk)2g(xk)εKT,1εKT,2εKT,3εKT,4εKT,5
  • 模拟退火、遗传算法:达到最大迭代次数。

例题

max ⁡ x ∈ R 3 4 x 1 + 5 x 2 − 6 x 3  s.t.  log ⁡ ∣ 2 x 1 + 7 x 2 + 5 x 3 ∣ ⩽ 1 x 1 , x 2 , x 3 ⩾ 0 \begin{aligned} & \max _{x \in \mathbb{R}^3} 4 x_1+5 x_2-6 x_3 \\ & \text { s.t. } \log \left|2 x_1+7 x_2+5 x_3\right| \leqslant 1 \\ & x_1, x_2, x_3 \geqslant 0 \\ \end{aligned} xR3max4x1+5x26x3 s.t. log2x1+7x2+5x31x1,x2,x30
约束可以逐步简化
先简化为 ∣ 2 x 1 + 7 x 2 + 5 x 3 ∣ ⩽ e \left|2 x_1+7 x_2+5 x_3\right| \leqslant e 2x1+7x2+5x3e
在简化为 2 x 1 + 7 x 2 + 5 x 3 ⩽ e − 2 x 1 − 7 x 2 − 5 x 3 ⩽ e 2 x_1+7 x_2+5 x_3 \leqslant e \\ -2 x_1-7 x_2-5 x_3 \leqslant e 2x1+7x2+5x3e2x17x25x3e
这样约束就变为了一个线性化约束,可以在化为标准型之后用单纯性法求解,也可以用内点法求解。
单纯形法在有限步会求得最终结果,而内点法收敛条件为 ∣ f ( x ∗ ) − f ( x k ) ∣ ⩽ ε f \left|f\left(x^*\right)-f\left(x_k\right)\right|\leqslant \varepsilon_f f(x)f(xk)εf

min ⁡ x ∈ R 3 max ⁡ ( cosh ⁡ ( x 1 + x 2 + x 3 ) , ( 5 x 1 − 6 x 2 + 7 x 3 + 6 ) 2 )  s.t.  ∥ x ∥ 2 ⩽ 10 R e m a r k : cosh ⁡ x = e x + e − x 2 \begin{aligned} & \min _{x \in \mathbb{R}^3} \max \left(\cosh \left(x_1+x_2+x_3\right),\left(5 x_1-6 x_2+7 x_3+6\right)^2\right) \\ & \text { s.t. }\|x\|_2 \leqslant 10 \end{aligned} \\Remark: \cosh x=\frac{e^x+e^{-x}}{2} xR3minmax(cosh(x1+x2+x3),(5x16x2+7x3+6)2) s.t. x210Remark:coshx=2ex+ex
问题仍然可以做简化令 t > = cosh ⁡ ( x 1 + x 2 + x 3 ) t > = ( 5 x 1 − 6 x 2 + 7 x 3 + 6 ) 2 t >= \cosh \left(x_1+x_2+x_3\right)\\ t>=\left(5 x_1-6 x_2+7 x_3+6\right)^2 t>=cosh(x1+x2+x3)t>=(5x16x2+7x3+6)2化为
min ⁡ x ∈ R 3 t  s.t.  ∥ x ∥ 2 ⩽ 10 t > = cosh ⁡ ( x 1 + x 2 + x 3 ) t > = ( 5 x 1 − 6 x 2 + 7 x 3 + 6 ) 2 \begin{aligned} & \min _{x \in \mathbb{R}^3} t \\ & \text { s.t. }\|x\|_2 \leqslant 10\\ & t >= \cosh \left(x_1+x_2+x_3\right)\\& t>=\left(5 x_1-6 x_2+7 x_3+6\right)^2 \end{aligned} xR3mint s.t. x210t>=cosh(x1+x2+x3)t>=(5x16x2+7x3+6)2
问题变为了常见的含约束凸优化问题,可以用切平面法、椭球法、内点法
收敛条件:
∣ f ( x ∗ ) − f ( x k ) ∣ ⩽ ε f , g ( x k ) ⩽ ε g ∥ x ∗ − x k ∥ 2 ⩽ ε x  (for ellipsoid)  \begin{aligned} \left|f\left(x^*\right)-f\left(x_k\right)\right| & \leqslant \varepsilon_f, \quad g\left(x_k\right) \leqslant \varepsilon_g \\ \left\|x^*-x_k\right\|_2 & \leqslant \varepsilon_x \quad \text { (for ellipsoid) } \end{aligned} f(x)f(xk)xxk2εf,g(xk)εgεx (for ellipsoid) 

max ⁡ x ∈ R 2 e − x 1 2 − x 2 2 ( x 1 2 + x 1 x 2 + 6 x 1 ) \max _{x \in \mathbb{R}^2} e^{-x_1^2-x_2^2}\left(x_1^2+x_1 x_2+6 x_1\right) xR2maxex12x22(x12+x1x2+6x1)
无约束非线性问题,用LM,牛顿法,那几种共轭梯度法,最速下降法,方向+一维搜索法,NM法等
LM,牛顿法,那几种共轭梯度法,最速下降法,方向+一维搜索法收敛条件: ∥ ∇ f ( x k ) ∥ 2 ⩽ ε ∇ \left\|\nabla f\left(x_k\right)\right\|_2 \leqslant \varepsilon_{\nabla} f(xk)2ε
NM法收敛条件:
∣ f ( x ∗ ) − f ( x k ) ∣ ⩽ ε f , ∥ x ∗ − x k ∥ 2 ⩽ ε x \begin{aligned} \left|f\left(x^*\right)-f\left(x_k\right)\right| & \leqslant \varepsilon_f,\\ \left\|x^*-x_k\right\|_2 & \leqslant \varepsilon_x \end{aligned} f(x)f(xk)xxk2εf,εx

max ⁡ x ∈ R 3 x 1 x 2 x 3 1 + x 1 6 + x 2 4 + x 3 2  s.t.  x 1 + x 2 + x 3 = 1 \begin{aligned} & \max _{x \in \mathbb{R}^3} \frac{x_1 x_2 x_3}{1+x_1^6+x_2^4+x_3^2} \\ & \text { s.t. } x_1+x_2+x_3=1 \end{aligned} xR3max1+x16+x24+x32x1x2x3 s.t. x1+x2+x3=1
由于有多个局部最优点,使用模拟退火算法、遗传算法、以及多起点优化算法(每个起点可分别用内点法之类的优化算法)。
模拟退火算法、遗传算法在达到最大迭代次数之后算法退出。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts 没画出来图形,dom报错宽高未识别

当echarts 刷新时&#xff0c;画不出图形 控制台 报错 应当是你画布&#xff0c;父级使用了flex布局&#xff0c;找成了画布的宽高失效 解决方法&#xff1a;画布class上加上一句 flex-shrink: 0;

算法笔记—链表、队列和栈

链表、队列和栈 1. 链表1.1 单链表反转1.2 双链表反转1.3 合并两个有序链表1.4 链表相加1.5 划分链表 2. 队列和栈2.1 循环队列2.2 栈实现队列2.3 队列实现栈2.4 最小栈2.2 双端队列 1. 链表 1.1 单链表反转 力扣 反转链表 // 反转单链表public ListNode reverseList(ListNod…

三、Shell 环境

一、Linux 系统分类 在 Linux 中&#xff0c;常见的 Shell 有以下几种&#xff1a; Bourne Shell&#xff08;sh&#xff09;&#xff1a;最早的 Shell&#xff0c;由 Stephen Bourne 开发。它是大多数其他 Shell 的基础。Bourne Again Shell&#xff08;bash&#xff09;&am…

螺旋矩阵算法(leetcode第59题)

题目描述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1&#xff1a;输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a;输入&#…

SQL Server 远程连接服务器数据库

本文解决sql server的远程连接问题。需要开启防火墙&#xff0c;开启端口&#xff0c;并处理权限不足的报错: 【use 某数据库】The server principal "[server]" is not able to access the database "[database]" under the current security context. 【…

[C/C++]——内存管理

学习C/C的内存管理 前言&#xff1a;一、C/C的内存分布二、C语言中动态内存管理方式三、C中动态内存管理方式3.1、new/delete操作符3.1.2、new/delete操作内置类型3.1.3、new/delete操作自定义类型 3.2、认识operator new和operator delete函数3.3、了解new和delete的实现原理3…

json.loads和eval 速度对比

json.loads和eval 速度对比 代码1结果图代码2参考地址 代码1 import json import time import pandas as pddata_sets pd.read_pickle("val_token_id.pandas_pickle") data_sets[str(i) for i in data_sets] starttime.time() [json.loads(i) for i in data_sets] …

FlieZilla服务器配置与数据访问、传输

概述 手机apk当初服务器&#xff0c;PC端访问手机端的数据&#xff0c;再没有数据线的情况下&#xff0c;非常方便。希望各位同仁搞起来&#xff0c;在此做个笔录。 安装包下载链接&#xff1a;https://download.csdn.net/download/qq_36075612/88577274 一、下载安装包&…

2023-12-08 队列与栈

栈与队列一 232. 用栈实现队列 思路&#xff1a;对于使用栈实现队列的话&#xff0c;必须使用两个共同来维护使得每次都能先进先出&#xff01; class MyQueue:def __init__(self):# 需要建立两个list来维护出栈以及进栈self.stack_in []self.stack_out []def push(self, x…

“ABCD“[(int)qrand() % 4]作用

ABCD[(int)qrand() % 4] 作用 具体来说&#xff1a; qrand() 是一个函数&#xff0c;通常在C中用于生成一个随机整数。% 4 会取 qrand() 生成的随机数除以4的余数。因为4只有四个不同的余数&#xff08;0, 1, 2, 3&#xff09;&#xff0c;所以这实际上会生成一个0到3之间的随…

1.4 Postman的安装

hello大家好&#xff0c;本小节我们来安装一下Postman&#xff0c;好为我们后续的测试工作做准备。 首先&#xff0c;打开Postman的官网Postman API Platform 然后根据同学们自己电脑的操作系统来下载对应的Postman安装包。我这里拿windows来举例。我们点击windows的图标 会跳…

STM32G030C8T6:使用外部晶振配置LED灯闪烁

本专栏记录STM32开发各个功能的详细过程&#xff0c;方便自己后续查看&#xff0c;当然也供正在入门STM32单片机的兄弟们参考&#xff1b; 本小节的目标是&#xff0c;使用STM32G030C8T6单片机&#xff0c;通过STM32CubeMX软件&#xff0c;配置并使用外部8MHz晶振&#xff0c;实…

孩子还是有一颗网安梦——Bandit通关教程:Level 10 → Level 11

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

3、ollvm移植

github: https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0 先复制 include Obfuscation: /home/nowind/llvm/ollvm/obfuscator/include/llvm/Transforms/Obfuscation /home/nowind/llvm/llvm-project-9.0.1/llvm/include/llvm/Transforms/Obfuscation lib Ob…

13.字符串长度【2023.12.5】

1.问题描述 获取字符串长度是编程过程中常用的操作之一。编写一个程序&#xff0c;输入一个字符串&#xff0c;然后输出字符串的长度。 2.解决思路 输入一个字符串。程序将输入的字符串的长度输出。使用内置函数len()获取字符串的长度 3.代码实现 strinput("请输入一…

C语言实现简易版扫雷游戏

由于前面所讲知识点有限&#xff0c;无法实现扫雷游戏的全部功能&#xff0c;本期为各位呈现的是相对简单且易于编写的扫雷游戏。 第一步 设计游戏可玩多次的循环框架 这里在之前猜数字游戏时使用的循环框架一致&#xff0c;但是上次讲解不够深入&#xff0c;这里补充一下。这…

minio可用性磁盘/节点故障恢复的研究

做poc真的很累。年初的报告拿出来按topic拿出来分享一下。 目的 通过模拟各类条件下的minio集群状态&#xff0c;确认minio是否符合官方“N/2硬盘在线&#xff0c;数据可读取&#xff1b;N/21硬盘在线&#xff0c;数据可读写”的描述。 同时通过停止minio集群中节点的服务停止…

青少年CTF-Crypto(Morse code/ASCII和凯撒)

FLAG&#xff1a;你这一生到底想干嘛 专研方向: Web安全 &#xff0c;Md5碰撞 每日emo&#xff1a;不要因为别人都交卷了&#xff0c;就乱选答案 文章目录 1.Morse code2、ASCII和凯撒的约定 1.Morse code 题目提示摩尔斯电码&#xff0c;这个是给的附件 直接用摩尔斯解密&am…

基础算法(1):排序(1):选择排序

今天对算法产生了兴趣&#xff0c;开始学习基础算法&#xff0c;比如排序&#xff0c;模拟&#xff0c;贪心&#xff0c;递推等内容&#xff0c;算法是很重要的&#xff0c;它是解决某个问题的特定方法&#xff0c;程序数据结构算法&#xff0c;所以对算法的学习是至关重要的&a…