机器学习笔记之优化算法(七)线搜索方法(步长角度;非精确搜索;Wolfe Condition)

引言

上一节介绍了 Glodstein \text{Glodstein} Glodstein准则 ( Glodstein Condition ) (\text{Glodstein Condition}) (Glodstein Condition)及其弊端。本节将针对该弊端,介绍 Wolfe \text{Wolfe} Wolfe准则 ( Wolfe Condition ) (\text{Wolfe Condition}) (Wolfe Condition)

回顾:

Armijo \text{Armijo} Armijo准则及其弊端

在当前迭代步骤中,为了能够得到更精炼 ϕ ( α ) \phi(\alpha) ϕ(α)选择范围 Armijo \text{Armijo} Armijo准则 ( Armijo Condition ) (\text{Armijo Condition}) (Armijo Condition)提出一种关于 ϕ ( α ) \phi(\alpha) ϕ(α)筛选方式,使其比 ϕ ( α ) < f ( x k ) \phi(\alpha) < f(x_k) ϕ(α)<f(xk)更加严格
Armijo Condition :  { ϕ ( α ) < L ( α ) = f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α C 1 ∈ ( 0 , 1 ) \text{Armijo Condition : } \begin{cases} \phi(\alpha) < \mathcal L(\alpha) = f(x_k) + \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \\ \quad \\ \mathcal C_1 \in (0,1) \end{cases} Armijo Condition :  ϕ(α)<L(α)=f(xk)+C1[f(xk)]TPkαC1(0,1)
这种操作产生的弊端是: C 1 \mathcal C_1 C1在取值过程中,可能出现数量较少的、并且并非 ϕ ( α ) \phi(\alpha) ϕ(α)主要部分的选择空间。见下图:
Armijo准则弊端
这种情况可能导致:
下面的两种情况都指向同一个问题: L ( α ) \mathcal L(\alpha) L(α)所划分的 α \alpha α范围从整个 ϕ ( α ) \phi(\alpha) ϕ(α)角度观察,是片面的、局部的。

  • 可选择的 α \alpha α范围较小;
  • 小范围内的 α \alpha α结果,其对应的 ϕ ( α ) \phi(\alpha) ϕ(α)并不优质
    这里的‘优质’是指与整个 ϕ ( α ) \phi(\alpha) ϕ(α)函数结果相比都属于一个较小的结果。最优质的自然是 α ∗ = arg ⁡ min ⁡ α > 0 ϕ ( α ) \alpha^* = \mathop{\arg\min}\limits_{\alpha > 0} \phi(\alpha) α=α>0argminϕ(α),但我们在每次迭代过程中并不执著 α ∗ \alpha^* α,仅希望选择出的 α \alpha α结果能够有效地使 { f ( x k ) } k = 0 ∞ \{f(x_{k})\}_{k=0}^{\infty} {f(xk)}k=0收敛到最优值 f ∗ f^* f

Glodstein \text{Glodstein} Glodstein准则及其弊端

针对 Armijo \text{Armijo} Armijo准则的问题, Glodstein \text{Glodstein} Glodstein准则在其基础上添加一个下界
Glodstein Condition :  { f ( x k ) + ( 1 − C ) ⋅ [ ∇ f ( x k ) ] T P k ⋅ α ⏟ Lower Bound ≤ ϕ ( α ) ≤ f ( x k ) + C ⋅ [ ∇ f ( x k ) ] T P k ⋅ α C ∈ ( 0 , 1 2 ) \text{Glodstein Condition : } \begin{cases} \begin{aligned} & \underbrace{f(x_k) + (1 - \mathcal C) \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha}_{\text{Lower Bound}} \leq \phi(\alpha) \leq f(x_k) + \mathcal C \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \\ & \mathcal C \in \left(0,\frac{1}{2}\right) \end{aligned} \end{cases} Glodstein Condition :  Lower Bound f(xk)+(1C)[f(xk)]TPkαϕ(α)f(xk)+C[f(xk)]TPkαC(0,21)
其中分别描述上界、下界划分函数

  • Upper Bound :  L U ( α ) = f ( x k ) + C ⋅ [ ∇ f ( x k ) ] T P k ⋅ α \text{Upper Bound : } \begin{aligned}\mathcal L_{\mathcal U}(\alpha) = f(x_k) + \mathcal C \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha\end{aligned} Upper Bound : LU(α)=f(xk)+C[f(xk)]TPkα
  • Lower Bound :  L L ( α ) = f ( x k ) + ( 1 − C ) ⋅ [ ∇ f ( x k ) ] T P k ⋅ α \text{Lower Bound : } \mathcal L_{\mathcal L}(\alpha) = f(x_k) + (1 - \mathcal C) \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha Lower Bound : LL(α)=f(xk)+(1C)[f(xk)]TPkα

关于 f ( x k ) + 1 2 [ ∇ f ( x k ) ] T P k ⋅ α \begin{aligned}f(x_k) + \frac{1}{2} [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha\end{aligned} f(xk)+21[f(xk)]TPkα对称。这能保证满足该范围的 α \alpha α结果,其对应的 ϕ ( α ) \phi(\alpha) ϕ(α)总是位于 ϕ ( α ) \phi(\alpha) ϕ(α)核心部分而不是片面的、局部的部分。见下图:
其中两条绿色实线之间区域内的 ϕ ( α ) \phi(\alpha) ϕ(α)结果相比 Armijo \text{Armijo} Armijo准则,其描述的范围更加核心。
Glodstein准则特点
Goldstein \text{Goldstein} Goldstein准则自身同样存在弊端当参数 C \mathcal C C靠近 1 2 \begin{aligned}\frac{1}{2}\end{aligned} 21时,对应上下界包含的 ϕ ( α ) \phi(\alpha) ϕ(α)结果极少。从而可能使一些优质 α \alpha α结果丢失。见下图:
Glodstein准则弊端

Wolfe Condition \text{Wolfe Condition} Wolfe Condition

首先,我们可以发现一个关于 Armijo \text{Armijo} Armijo准则与 Goldstein \text{Goldstein} Goldstein准则的共同问题被选择的仅仅是满足划分边界条件的 α \alpha α结果,而被选择的 α \alpha α结果是否存在被选择的意义是未知的
换句话说,基于这两种准则选择出的 α \alpha α结果仅仅是因为:

  • α \alpha α对应的 ϕ ( α ) \phi(\alpha) ϕ(α)位于决策边界 L ( α ) = f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α \mathcal L(\alpha) = f(x_k) + \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha L(α)=f(xk)+C1[f(xk)]TPkα的下方 ( Armijo Condition ) (\text{Armijo Condition}) (Armijo Condition);
  • α \alpha α对应的 ϕ ( α ) \phi(\alpha) ϕ(α)位于上决策边界 L U ( α ) \mathcal L_{\mathcal U}(\alpha) LU(α)与下决策边界 L L ( α ) \mathcal L_{\mathcal L}(\alpha) LL(α)所围成的范围之间 ( Glodstein Condition ) (\text{Glodstein Condition}) (Glodstein Condition)

这意味着:我们确实得到了若干 α \alpha α结果,但是这些结果是否优质属于未知状态

我们尝试从满足 Armijo \text{Armijo} Armijo准则的基础上,通过某种规则剔除掉部分没有竞争力 α \alpha α结果,从而在剩余结果中找到优质 α \alpha α结果。见下图:
Wolfe初始状态
初始状态下,我们找到了一个 C 1 ∈ ( 0 , 1 ) \mathcal C_1 \in (0,1) C1(0,1),并描述出了它的划分边界 L ( α ) \mathcal L(\alpha) L(α);由于 L ( α ) \mathcal L(\alpha) L(α)斜率 C 1 ⋅ [ ∇ f ( x k ) ] T P k \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k C1[f(xk)]TPk必然大于 l ( α ) l(\alpha) l(α)斜率 [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPk,因此从 α = 0 \alpha = 0 α=0出发,找到切线斜率 L ( α ) \mathcal L(\alpha) L(α)斜率相同的点:
下图中的绿色虚线表示切线斜率与 L ( α ) \mathcal L(\alpha) L(α)斜率相同的 α \alpha α点,短绿线表示寻找过程,点 A \mathcal A A表示满足条件的切点。
Wolfe步骤1
通过观察可以发现: A \mathcal A A必然不是极值点(虽然看起来有点像~),因为该点处的斜率 ≠ 0 \neq 0 =0。这里能够确定: [ 0 , f ( x k ) ] [0,f(x_k)] [0,f(xk)] A \mathcal A A点这一段函数内的所有点相比于 A \mathcal A A都没有竞争力。而这些点的切线斜率 ϕ ′ ( α ) \phi'(\alpha) ϕ(α)满足
[ ∇ f ( x k ) ] T P k ≤ ϕ ′ ( α ) ≤ C 1 ⋅ [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k \leq \phi'(\alpha) \leq \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPkϕ(α)C1[f(xk)]TPk

关于仅与参数 C 1 \mathcal C_1 C1相关的武断做法

如果将这些没有竞争力的点去除掉,保留剩余的点,结合 Armijo \text{Armijo} Armijo准则,会有如下的步长 α \alpha α选择方式

  • 其中 ϕ ′ ( α ) = ∂ f ( x k + α ⋅ P k ) ∂ α = [ ∇ f ( x k + α ⋅ P k ) ] T P k \begin{aligned}\phi'(\alpha) = \frac{\partial f(x_k + \alpha \cdot \mathcal P_k)}{\partial \alpha} = [\nabla f(x_k + \alpha \cdot \mathcal P_k)]^T \mathcal P_k\end{aligned} ϕ(α)=αf(xk+αPk)=[f(xk+αPk)]TPk,在后续的计算中均简化写作 ϕ ′ ( α ) \phi'(\alpha) ϕ(α)
  • 关于斜率 ϕ ′ ( α ) ≤ C 1 ⋅ [ ∇ f ( x k ) ] T P k \phi'(\alpha)\leq \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k ϕ(α)C1[f(xk)]TPk点不再理会,而 [ ∇ f ( x k ) ] T P k [\nabla f(x_k)]^T \mathcal P_k [f(xk)]TPk ϕ ( 0 ) \phi(0) ϕ(0)的斜率,作为下界
    { ϕ ( α ) ≤ f ( x k ) + C 1 ⋅ [ ∇ f ( x k ) ] T P k ⋅ α ϕ ′ ( α ) ≥ C 1 ⋅ [ ∇ f ( x k ) ] T P k C 1 ∈ ( 0 , 1 ) \begin{cases} \phi(\alpha) \leq f(x_k) + \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \\ \phi'(\alpha) \geq \mathcal C_1 \cdot [\nabla f(x_{k})]^T \mathcal P_k \\ \mathcal C_1 \in (0,1) \end{cases} ϕ(α)f(xk)+C1[f(xk)]TPkαϕ(α)C1[f(xk)]TPkC1(0,1)

基于上述逻辑,被选择的 ϕ ( α ) \phi(\alpha) ϕ(α)见下图:
其中 A ′ \mathcal A' A点表示该图像中斜率与 L ( α ) \mathcal L(\alpha) L(α)相同的其他位置的点。
被选择的phi(alpha)

上述这种方式可取吗 ? ? ?逻辑角度上是可行的,但不可取

关于 C 1 \mathcal C_1 C1武断做法不可取的逻辑解释

  • 由于 C 1 ∈ ( 0 , 1 ) \mathcal C_1 \in (0,1) C1(0,1),因而 C 1 ⋅ [ ∇ f ( x k ) ] T P k < 0 \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k < 0 C1[f(xk)]TPk<0恒成立。也就是说:无论 C 1 \mathcal C_1 C1如何趋近于 0 0 0 Armijo \text{Armijo} Armijo准则划分边界 L ( α ) \mathcal L(\alpha) L(α)如何趋近于 ϕ ( α ) = f ( x k ) \phi(\alpha) = f(x_k) ϕ(α)=f(xk),都无法获取使 ϕ ′ ( α ) = 0 \phi'(\alpha) = 0 ϕ(α)=0的极值解
    很简单,就是因为取不到~

    而与此同时,我们为了追求这个极值解,可能反而会损失一系列 ϕ ( α ) \phi(\alpha) ϕ(α)优质 α \alpha α
    如果仅使用 C 1 \mathcal C_1 C1一个参数,那么要去除的点在 Armijo \text{Armijo} Armijo准则划分边界 L ( α ) \mathcal L(\alpha) L(α)确定的那一刻就已经被确定了,这势必会误伤一些 ϕ ( α ) \phi(\alpha) ϕ(α)优质的 α \alpha α结果

  • 其次,这里的操作是非精确搜索,因而不执著去追求极值解(那不就变成精确搜索了吗~),并且这仅仅是一次迭代的计算过程,没有必要消耗计算代价去追求更优质 ϕ ( α ) \phi(\alpha) ϕ(α),这也是我们希望尽量保留 ϕ ( α ) \phi(\alpha) ϕ(α)优质解的核心原因:
    与上一张图被选择的 ϕ ( α ) \phi(\alpha) ϕ(α)值对比观察,红色椭圆形虚线区域中描述的 ϕ ( α ) \phi(\alpha) ϕ(α)值是比较优质的,但因为 C 1 \mathcal C_1 C1的原因导致该部分结果被‘一刀切’了。这并不是我们希望看到的结果。
    一刀切描述

关于 C 1 \mathcal C_1 C1武断做法的改进: Wolfe Condition \text{Wolfe Condition} Wolfe Condition

如何避免上述一刀切的情况出现 ? ? ? Wolfe \text{Wolfe} Wolfe准则提供了而一种更软性的操作。

设置一个参数 C 2 ∈ ( C 1 , 1 ) \mathcal C_2 \in (\mathcal C_1,1) C2(C1,1),该参数对应的斜率表示为 C 2 ⋅ [ ∇ f ( x k ) ] T P k \mathcal C_2 \cdot [\nabla f(x_k)]^T \mathcal P_k C2[f(xk)]TPk,而该斜率在 ( [ ∇ f ( x k ) ] T P k , C 1 ⋅ [ ∇ f ( x k ) ] T P k ) ([\nabla f(x_k)]^T \mathcal P_k,\mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k ) ([f(xk)]TPk,C1[f(xk)]TPk)之间滑动(变换)。此时会出现一种缓和的情况:即便假设 C 1 \mathcal C_1 C1无限接近于 0 0 0,但由于 C 2 \mathcal C_2 C2的作用,使 ϕ ( α ) \phi(\alpha) ϕ(α)点的选择与 C 1 \mathcal C_1 C1没有太大关联

  • 这里相当于将斜率 C 1 ⋅ [ ∇ f ( x k ) ] T P k \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k C1[f(xk)]TPk视作一个边界。
  • 上面的一刀切情况相当于 C 1 ⇒ 0 \mathcal C_1 \Rightarrow 0 C10的同时, C 2 ⇒ C 1 \mathcal C_2 \Rightarrow\mathcal C_1 C2C1的情况。
  • 由于 C 2 ∈ ( C 1 , 1 ) \mathcal C_2 \in (\mathcal C_1,1) C2(C1,1)因而完全可以通过调整 C 2 \mathcal C_2 C2针对那些斜率小于 C 1 ⋅ [ ∇ f ( x k ) ] T P k \mathcal C_1 \cdot [\nabla f(x_k)]^T \mathcal P_k C1[f(xk)]TPk,但 ϕ ( α ) \phi(\alpha) ϕ(α)优质的结果进行酌情选择

最终根据 Armijo \text{Armijo} Armijo准则, Wolfe \text{Wolfe} Wolfe准则操作如下:
{ ϕ ( α ) ≤ f ( x k ) + C 1 [ ∇ f ( x k ) ] T P k ⋅ α ϕ ′ ( α ) ≥ C 2 ⋅ [ ∇ f ( x k ) ] T P k C 1 ∈ ( 0 , 1 ) C 2 ∈ ( C 1 , 1 ) \begin{cases} \phi(\alpha) \leq f(x_k) + \mathcal C_1 [\nabla f(x_k)]^T \mathcal P_k \cdot \alpha \\ \phi'(\alpha) \geq \mathcal C_2 \cdot [\nabla f(x_k)]^T \mathcal P_k \\ \mathcal C_1 \in (0,1) \\ \mathcal C_2 \in (\mathcal C_1,1) \end{cases} ϕ(α)f(xk)+C1[f(xk)]TPkαϕ(α)C2[f(xk)]TPkC1(0,1)C2(C1,1)

个人理解: Wolfe \text{Wolfe} Wolfe准则与 Armijo \text{Armijo} Armijo准则

在开头部分提到关于 Armijio \text{Armijio} Armijio准则的弊端,在介绍完 Wolfe \text{Wolfe} Wolfe准则之后,有种 Armijo \text{Armijo} Armijo准则的弊端卷土重来的感觉。个人认为: Wolfe \text{Wolfe} Wolfe准则提出的这种基于 C 2 ∈ ( C 1 , 1 ) \mathcal C_2 \in (\mathcal C_1,1) C2(C1,1)软性下界同样也在影响 C 1 \mathcal C_1 C1的选择

  • 如果是单纯的 Armijo \text{Armijo} Armijo准则,我们可能更偏好 C 1 \mathcal C_1 C1远离 0 0 0一些。因为 C 1 ⇒ 0 \mathcal C_1 \Rightarrow 0 C10意味着这种状态越趋近优化算法(四)中描述的必要不充分条件;这种 C 1 \mathcal C_1 C1的选择方式也势必会增加 Armijo \text{Armijo} Armijo准则弊端的风险
  • Wolfe \text{Wolfe} Wolfe准则中,即便 C 1 \mathcal C_1 C1偏向 0 0 0方向,我们依然可以通过调整 C 2 \mathcal C_2 C2对相对不优质的 ϕ ( α ) \phi(\alpha) ϕ(α)点进行过滤。从剩余的优质点中选择并进行迭代。

相关参考:
【优化算法】线搜索方法-步长-Wolfe Condition

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

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

相关文章

在excel中整理sql语句

数据准备 CREATE TABLE t_test (id varchar(32) NOT NULL,title varchar(255) DEFAULT NULL,date datetime DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO t_test VALUES (87896cf20b5a4043b841351c2fd9271f,张三1,2023/6/8 14:06); INSERT INTO t_test …

Maven可选依赖和排除依赖简单使用

可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候&#xff0c;添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…

无涯教程-Perl - Subroutines(子例程)

定义子程序 Perl编程语言中 Subroutine子程序定义的一般形式如下: sub subroutine_name {body of the subroutine } 调用该Perl Subroutine的典型方式如下- subroutine_name( list of arguments ); 在Perl 5.0之前的版本中&#xff0c;调用 Subroutine的语法略有不同&…

设计模式之模板方法

一、概述 定义一个操作中的算法的骨架&#xff0c;将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 二、适用性 1.一次性实现一个算法的不变的部分&#xff0c;并将可变的行为留给子类来实现。 2.各子类中公共…

Java课题笔记~ MyBatis接口开发(代理开发)

使用XML文件进行开发&#xff0c;在调用SqlSession进行操作时&#xff0c;需要指定MyBatis映射文件中的方法&#xff0c;这种调用方式过于烦琐。为解决此问题&#xff0c;MyBatis提供了接口开发的方式。 接口开发的目的&#xff1a; 解决原生方式中的硬编码 简化后期执行SQL …

nacos本地搭建+springCloud服务注册中心-nacos(简易实现)

一.nacos概述 nacos官网 二.Windows使用搭建nacos 较为完整使用参考 1.安装nacos 去nacos github下载nacos最新稳定版本&#xff0c;我用的是nacos-server-2.2.3.zip&#xff0c;下载后解压&#xff0c;得到 2.创建数据库 启动mysql&#xff0c;创建数据库nacos&#xff…

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…

Docker实战-操作Docker容器实战(一)

导语   在之前的分享中&#xff0c;我们介绍了关于如何去操作Docker镜像&#xff0c;下面我们来看看如何去操作容器。 简单来讲&#xff0c;容器是镜像运行的一个实例&#xff0c;与镜像不同的是镜像只能作为一个静态文件进行读取&#xff0c;而容器是可以在运行时进行写入操…

docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)

目录 docker端口映射详解 一、端口映射概述&#xff1a; 二、案例实验&#xff1a; 1、-P选项&#xff0c;随机端口 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port&#xff0c;任意地址的指定端口 Local_IP:Local_Port:Container_Port 映射到指定地…

Docker安装Grafana以及Grafana应用

Doker基础 安装 1、 卸载旧的版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 2、需要的安装包 sudo yum install -y yum-utils 3、设置镜像的仓库 yum-config-m…

Spring Boot 单元测试

目录 1.什么是单元测试&#xff1f; 2.单元测试的优点 3.Spring Boot 单元测试使用 3.1 生成单元测试的类 3.2 添加 Spring Boot 框架测试注解&#xff1a;SpringBootTest 3.3 添加单元测试业务逻辑 3.4 注解 Transactional 4. 断言 1.什么是单元测试&#xff1f; 单元…

39.利用matlab寻找素数(matlab程序)

1.简述 MATLAB嵌套循环允许使用一个循环在另一循环内&#xff0c;下面用一个嵌套循环来把所有从1到100的素数显示出来。 2.代码 %% 学习目标&#xff1a;寻找素数 clear sum5; %求0&#xff5e;100素数之和 ss0; %用来标定是否是素数&#xff0c;0表示不是 p…

C#使用EmguCV播放视频

目录 一、前言 1、简介 2、测试工程代码下载链接 3、EmguCV 库文件下载链接 二、工程环境配置 1、EmguCV控件添加引用 &#xff08;1&#xff09;窗口控件添加 &#xff08;2&#xff09;相关Dll文件添加添加引用 &#xff08;3&#xff09;工程运行基础文件夹添加 &a…

CVS,SVN,Git,Mercurial 代码管理工具

现代软件开发过程中要实现高效的团队协作&#xff0c;需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具&#xff0c;包括 CVS&#xff0c;SVN&#xff0c;Git&#xff0c;Mercurial 等 CVS 和 SVN 是集中管理&#xff0c;Git 具有非常…

解决github打不开的方法

解决github打不开的方法 本文参考文章&#xff1a;解决可ping通但无法访问github网站的问题 一、确定域名github.com的ip地址 进入网址 IP/服务器github.com的信息 - 站长工具 (chinaz.com)&#xff0c;查看 ip 地址。 20.205.243.166 github.com二、确定域名github.global.…

使用ubuntu-base制作根文件系统

1&#xff1a;ubuntu官网下载最小根文件系统&#xff1a; 放置到电脑的ubuntu中&#xff0c; Mkdir Ubuntu_rootfs Cd Ubuntu_rootfs Sudo tar –zxvf Ubuntu-bash-xxxxxx.tar.gz 2&#xff1a;电脑的ubuntu安装qemu搭建arm模拟系统 将/usr/bin/qemu-arm-static/(64位拷贝…

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…

LNMP及论坛搭建

安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0 1.安装依赖包 #nginx的配置及运行需要pcre、zlib等软件包的支持&#xff0c;因此需要安装这些软件的开发包&#xff0c;以便提供相应的库和头文件。 yum -y install pcre-devel zlib-devel…

抖音seo源码开发源代码搭建分享

抖音SEO源码开发涉及到以下几个方面&#xff1a; 前端开发&#xff1a;包括抖音SEO页面的设计与布局&#xff0c;以及需要使用到的前端技术&#xff0c;如HTML、CSS、JavaScript等。 后端开发&#xff1a;包括抖音SEO页面的数据获取和处理&#xff0c;以及需要使用到的后端技术…

JavaScript数据结构与算法——栈

文章目录 一、初始栈结构1.1 特性1.2 注意事项 二、栈结构的封装2.1 封装简单栈结构2.2 利用栈将十进制转二进制 一、初始栈结构 1.1 特性 类似于汉诺塔&#xff0c;后进先出&#xff0c;每次只能操作栈顶的元素。关键词&#xff1a;压栈、退栈 简单示意图&#xff1a; 1.…