【自动驾驶】决策规划算法 | 数学基础(二)凸优化与非凸优化

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【决策规划】系列,带您深入浅出,领略规划之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~

文章目录

  • 引言
  • 一、最优轨迹评价指标
  • 二、代价函数构建与约束条件
    • 1、构建代价函数
    • 2、约束条件
  • 三、高中数学求函数最值的方法回顾
  • 四、凸优化与迭代法的引入
    • 1、高维复杂函数的最值问题
    • 2、求导法的局限性
    • 3、迭代法求解的优势
    • 4、常见迭代算法概览
  • 五、梯度下降法原理与示例
    • 1、梯度下降法基本原理
    • 2、迭代过程示例
    • 3、梯度下降法收敛性
    • 4、梯度下降法与其他迭代算法的比较
  • 六、迭代法的缺点与初值敏感性
    • 1、迭代法对初值的敏感性
    • 2、性质较好的问题
  • 七、凸优化问题的定义与性质
    • 1、凸优化问题的性质
    • 2、凸空间的定义
  • 八、凸优化与自动驾驶规划算法的关系
    • 1、凸优化的重要性
    • 2、凸优化与自动驾驶规划的关系
    • 3、凸优化的基本因素
    • 4、自动驾驶中的避障约束空间
    • 5、凸优化与非凸优化的对比
  • 九、非凸优化问题的求解思路与策略
    • 1、非凸问题求解思路
    • 2、函数与约束空间非凸的情况
    • 3、非凸问题的求解流程
    • 4、非凸问题求解的局限性
  • 十、维度灾难
  • 十一、总结
  • 参考资料


引言

  各位小伙伴们大家好,本篇博客是自动驾驶决策规划算法数学基础的第二节,内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。

  凸优化是比二次规划更宽泛的概念。本篇博客的讲解不像数学系讲得那么细,比如凸优化的来源、凸优化的定义、怎么求解凸优化问题、KKT 条件之类的问题不会讲。对于做自动驾驶的人来说,凸优化就是调包,把数据结构弄好,然后喂到包里面去,算结果就可以了。

  无论是 Matlab 还是 C++,都有成熟的计算凸优化的包,所以不用关心到底是怎么算的,但是需要关心有什么使用条件,有什么优缺点,在什么地方可以用,在什么情况下会出问题。所以本节只是在宏观方面讲凸优化。

  自动驾驶规划目标:计算出一条满足各种约束的最优轨迹,然后把轨迹发给控制模块执行。

  在学习规划系列之前,要先把控制这块给过了,控制学会了再学规划,否则学习效果会大大打折扣,因为规划算完了,没法控制,也不知道规划得好不好,没有反馈。


一、最优轨迹评价指标

那么问题来了,什么是 最优轨迹 呢?最优的标准是什么呢?

一般有以下几个指标:

  • 平滑性
  • 舒适性
  • 长度短
  • 耗时少

二、代价函数构建与约束条件

  车辆轨迹表达式如下:
s = f ( t ) = a 0 + a 1 t + a 2 t 2 + a 3 t 3 + a 4 t 4 + a 5 t 5 s=f\left( t \right) =a_0+a_1t+a_2t^2+a_3t^3+a_4t^4+a_5t^5 s=f(t)=a0+a1t+a2t2+a3t3+a4t4+a5t5其中, a 0 , a 1 , a 2 , a 3 , a 4 . a 5 a_0,a_1,a_2,a_3,a_4.a_5 a0,a1,a2,a3,a4.a5都是未知常数

1、构建代价函数

  将评价指标量化,衡量轨迹质量用代价函数表示,代价函数可以写成:
在这里插入图片描述

  其中, w 1 、 w 2 、 w 3 w_1、w_2、 w_3 w1w2w3 是相应的权重。 J J J 越小意味着这些导数越靠近 0 0 0,也就意味着轨迹越平滑、越舒适。

2、约束条件

当然也要满足各种各样的约束条件:

  • 轨迹连续
  • 规避碰撞
  • 遵守交通规则
  • 满足车辆动力学约束

  但是在这里不具体讲怎样根据指标建立具体的代价函数,在后续讲规划时会讲到。

  本篇博客只讲数学问题,就是求解代价函数在约束下的最小值问题,即如何计算 y = f ( x ) y=f(x) y=f(x) 满足约束条件下的最小值。


三、高中数学求函数最值的方法回顾

  回忆高中时,解 y = f ( x ) y=f(x) y=f(x) x ∈ [ a , b ] x\in \left[ a,b \right] x[a,b] 上最小值时怎么算(假定 f ( x ) f(x) f(x) 是连续可导函数)。
在这里插入图片描述

  • 第一步:先算出端点值 f ( a ) 、 f ( b ) f(a)、f( b) f(a)f(b)

  • 第二步:对 y y y 求导 y ′ = f ′ ( x ) y'=f'\left( x \right) y=f(x)

  • 第三步:令导函数 y ′ = 0 y'=0 y=0,解出 f ′ ( x ) = 0 f'(x)=0 f(x)=0 的根,设为 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn

  • 第四步:计算 f ( x 1 ) , f ( x 2 ) , . . . , f ( x n ) f(x_1),f(x_2),...,f(x_n) f(x1),f(x2),...,f(xn),与端点值 f ( a ) , f ( b ) f(a),f(b) f(a),f(b) 比较,在 f ( x 1 ) , f ( x 2 ) , . . . , f ( x n ) , f ( a ) , f ( b ) f(x_1),f(x_2),...,f(x_n),f(a),f(b) f(x1),f(x2),...,f(xn),f(a),f(b) 中选最小值,就是 y = f ( x ) y=f(x) y=f(x) [ a , b ] [a,b] [a,b] 上的最小值


四、凸优化与迭代法的引入

1、高维复杂函数的最值问题

  上面这种方法无法快速求解高维复杂约束下复杂函数的最值问题。

  举个例子,比如以下函数:
y = ln ⁡ sin ⁡ ( x + 1 x 2 ) + e cos ⁡ ln ⁡ ( x 2 + 1 ) + x 5 + 1 x 2 + 6 y=\ln\sin \left( x+\frac{1}{x^2} \right) +e^{\cos\ln \left( x^2+1 \right)}+x^5+\frac{1}{x^2+6} y=lnsin(x+x21)+ecosln(x2+1)+x5+x2+61  看起来比较复杂,但是求导求 d y d x \frac{dy}{dx} dxdy 还是不难的,但是想快速求导函数的零点比较困难。

  这还是未知数只有一元函数的求最值问题,都已经比较复杂了,如果是高维的多元函数,通过求导数算最小值,是非常困难的。

2、求导法的局限性

  而且就算求出了导函数的零点,还有其他的问题,比如这样的函数:
在这里插入图片描述

就算求出极值点,但仍存在以下问题:

  • 极值点非常多,难以快速判断哪个是最小的极值点,还要和端点比较
  • 约束复杂,是许多不连续小区间的并集,处理麻烦

  所以一般求复杂函数在复杂约束下的最小值问题,都采用迭代法求解,而不采用求导法。

3、迭代法求解的优势

  迭代法的计算速度比求导法快很多,在自动驾驶里计算速度是非常重要的指标。在自动驾驶的功能不可能让慢慢地算,让慢慢地规划,这是不可能的,等算完了,说不定车都已经撞上去发生交通事故了,所以必须要有很高的执行速度。

4、常见迭代算法概览

常见的迭代算法:

  • 牛顿法:在《数值分析》这本书里面有
  • 梯度下降法:在机器学习中非常经典
  • 高斯牛顿法:在《视觉Slam 十四讲》书里提到过

  在这里不具体讲迭代算法是怎么工作的,如果对这些算法不是特别了解的,可以去看相关资料。在人工智能特别是深度学习中,数值求解代价函数最小值是非常经典的问题,网上相关的资料非常多,所以在这里就不细讲具体实现过程,只讲一下大概原理。


五、梯度下降法原理与示例

1、梯度下降法基本原理

  以梯度下降法为例,讲一下大概过程。

  比如这样的函数:
在这里插入图片描述

  首先给初值 x 0 x_0 x0,梯度下降法的大概的原理是根据初值的导数判断下一步迭代的方向,如果是一元函数就是导数,如果是多元函数就是梯度,所以叫梯度下降。的原理就是按照梯度的反方向迭代。

2、迭代过程示例

  比如, x 0 x_0 x0 的梯度为负,所以就往正方向迭代。迭代出 x 1 x_1 x1 x 1 x_1 x1 导数也为负,那就再往前一步到 x 2 x_2 x2,再迭代到 x 3 x_3 x3,梯度为正,就往后迭代成 x 4 x_4 x4,其梯度为是,再迭代叠到 x 5 x_5 x5,直到收敛。就按梯度反方向迭代,直到找到最小值。

  梯度下降法,下一步的迭代方向取决于上一步的导数的正负。如果导数为负,就往正方向迭代;如果导数为正,就往负方向迭代。

3、梯度下降法收敛性

梯度下降法算法如何收敛?

  因为迭代不仅有方向,还有大小,就是到底移动了多少,大小按照导数的大小判断,如果导数为负,但绝对值比较大,步长移动相对较长,如果导数为正,但相对较小,那么移动步长就比较小。

  在本例从 x 4 x_4 x4 x 5 x_5 x5 时, x 4 x_4 x4 虽然导数为正,应该向后迭代,但导数已经比较小了,所以从 x 4 x_4 x4 x 5 x_5 x5 的步长不会特别大,而 x 5 x_5 x5 的导数几乎为 0 0 0 ,下一步迭代就几乎不怎么动,所以最终收敛。

  梯度下降法收敛,要么直接收敛到极小值点,要么收敛到约束边界上。

  在带约束的求函数最小值问题,并且在约束的空间内,函数是单调的,即在约束空间内并没有极值点的话,梯度下降法最终会收敛到约束边界上。

4、梯度下降法与其他迭代算法的比较

  虽然只讲了梯度下降法这一种迭代方法,但实际上大多数迭代方法,比如牛顿法、高斯牛顿法,原理都和梯度下降法大同小异:

  • 梯度下降法:用到的就是一阶导数迭代
  • 牛顿法:不仅用了一阶导数,还用了二阶导数
  • 高斯牛顿法:是对牛顿法进行一些相关的改进,使计算起来更快一点。

六、迭代法的缺点与初值敏感性

1、迭代法对初值的敏感性

  先看这样的问题:
在这里插入图片描述
  约束界是两个小区间,如果用迭代法,以 x 0 x_0 x0 为迭代初值,最终会迭代到 x 1 x_1 x1,如果以 x 0 ′ x'_0 x0 为迭代初值,最终会得到 x 1 ′ x'_1 x1

  迭代法对初值比较敏感,即使约束比较简单(不是破碎空间,是比较完整的空间),也有可能收敛到局部极小值,比如下图:
在这里插入图片描述

函数有多个极小值,对迭代法的初值比较敏感。比如:

  • 初值为 x 0 x_0 x0,最终会迭代到 x n x_n xn
  • 初值为 x 0 ′ x'_0 x0,最终会迭代到 x n ′ x'_n xn
  • 初值为 x 0 ′ ′ x''_0 x0′′,最终会迭代到 x n ′ ′ x''_n xn′′

  即选不同的初值,会迭代到不同的局部极小值上。有可能运气好,能找到最小值,但是有可能运气不好,找到的是局部极小值。

2、性质较好的问题

  当然也有性质比较好的问题,比如这样的函数:
在这里插入图片描述

  在这样的约束空间下,只有极值点,且为极小值点,并且约束空间是一块完整的空间,不破碎。

  或者是这样的问题:
在这里插入图片描述

  没有极值点,但在整个约束空间中是单调的,而且约束空间也是完整的、不破碎的空间。


七、凸优化问题的定义与性质

  这种问题的迭代法对初值就不敏感,取什么初值都能迭代到最小值,而且迭代法收敛的解必然是全局最小,即在约束条件下的全局最小值。

  这种性质比较好的问题,叫做 凸优化

1、凸优化问题的性质

凸优化必然有两个性质:

  • 凸函数:代价函数只有单个极值点,且为极小值
    这样表述其实不严谨,因为代价函数可能没有极值点,为单调函数。
  • 凸空间:约束空间是一块完整的、不破碎的空间

求凸函数在凸空间的最小值问题被称为凸优化问题。

2、凸空间的定义

为什么完整的空间叫凸空间呢?

  凸空间的严谨定义由凸多边形衍生而来,凸多边形和凹多边形如下:
在这里插入图片描述

凸多边形:对于多边形内部任意的点 x 、 y x、y xy,都有 x + y 2 \frac{x+y}{2} 2x+y 表示的点也在多边形内部。

凹多边形:存在两个点 x 、 y x、 y xy,使得 x + y 2 \frac{x+y}{2} 2x+y 表示的点不在多边形内部。

凸空间:完整的空间,比如下图:
在这里插入图片描述

  区间内任选两点 x 、 y x、y xy,点 x + y 2 \frac{x+y}{2} 2x+y 也在区间里。

非凸空间:破碎的空间,比如下图:
在这里插入图片描述
  区间内存在两点 x 、 y x 、y xy,中点 x + y 2 \frac{x+y}{2} 2x+y 不在区间内。

  注意:多边形有凸多边形和凹多边形,但空间只有凸空间和非凸空间,没有凹空间,这不是专门的学术名词,只有凸空间和非凸空间,因为凸和非凸数学上已经远远超过几何意义了,是更抽象的东西。


八、凸优化与自动驾驶规划算法的关系

随之而来的两个问题:

  • 为什么要讲凸优化?
  • 凸优化和自动驾驶规划算法有什么联系?

1、凸优化的重要性

为什么讲凸优化呢?

  因为凸优化是最简单的非线性规划方法,也是人类唯一掌握的,唯一的研究的比较明白、比较彻底的一种非线性优化方法。凸优化是所有复杂优化方法的基石,很多非凸问题都是想办法去转化成凸问题,然后求凸优化的解。

2、凸优化与自动驾驶规划的关系

自动驾驶和凸优化有什么关系?

  自动化驾驶的规划的求解是凸优化问题。

3、凸优化的基本因素

凸优化有两个因素:

  • 代价函数
  • 约束空间

4、自动驾驶中的避障约束空间

考虑问题:自动驾驶中的避障约束空间是不是凸空间?

  显而易见,不是凸空间。

  举例如下:
在这里插入图片描述

  避障的约束空间是红色区域,除了树附近不能去之外,其他地方都可以去,那么这块空间很显然是一块破碎的空间,因为中间有个洞,作为车来说,可以从上面绕过,也可以从下面绕过,但是上面和下面加起来除以 2 2 2 这条绿色线,就不可以,上面这条线满足避障约束,下面也满足避障约束,但是和上向下加起来除以 2 2 2 就不满足避障约束,所以不是凸空间。

  对于动态障碍物也是一样的。

  比如下图车辆规避横穿马路的行人场景,如果规划车速较快,人到道路上时车已经远远超过人,满足避障约束。
在这里插入图片描述

  如果规划车速较慢,车还没到人的位置,也是满足避障约束。
在这里插入图片描述

  如果车速快 + + + 车速慢除以 2 2 2,人和车就贴在一起,发生交通事故。
在这里插入图片描述
  上面避让树是静态避障的案例,下面避让人是动态避障的案例。

  自动驾驶规划中静态和动态避障的约束空间都不是凸空间,所以规划算法相对比较复杂、比较难做。因为解空间或约束空间是非凸的,当然难点远不止于空间是非凸的,还有其他难点,后面再说。

  显然,虽然不知道代价函数是不是凸函数,但是至少解空间和约束空间肯定不是凸空间,所以肯定是非凸问题。

5、凸优化与非凸优化的对比

  对于凸问题,只要给初值,然后迭代就可求解,迭代的最后迭代收敛的值一定有全局最小值。这是凸问题的性质,是好性质。

  对于非凸问题,可能存在多个极值点,或者空间破碎,结论非常依赖于初值,初值选的不好就会收敛到局部极小值。

如何求解非凸问题的最小值?

  可以很遗憾地说,目前为止没有完美解决所有的非凸问题的算法,只是针对不同情况有不同的考虑。


九、非凸优化问题的求解思路与策略

1、非凸问题求解思路

  求解非凸问题的主要思路就是找非凸问题中的凸结构。

  比如这样的问题:

函数是凸的,但约束空间不是凸空间,要怎样求解这样的问题?

  主流方法是启发式算法,首先随机在约束空间里采样一些离散函数值,比大小,然后取值最小的作为迭代初值。

2、函数与约束空间非凸的情况

  对于非凸函数以及非凸空间的最小值问题,方法也差不多,比如这样的函数:
在这里插入图片描述

  先离散地在约束空间中采样取点,比较大小,从中选最小的作为初值迭代。用梯度下降法、高斯牛顿法这类方法迭代,先在约束空间里采样,然后再找到采样点的最小值。本质上是连续空间离散后,在离散约束空间的最优解。

3、非凸问题的求解流程

  举个例子,在连续的约束空间中采样撒点,想要在哪个点选最小值,本质上是把连续的约束空间转换为一个个离散点:
在这里插入图片描述
  即最优解只能在这些点中寻找,采样比大小,然后求出最小值,最小值本质上是连续约束空间离散化后,在离散约束空间的最优解,是粗略的解。

  对于非凸空间,求解过程如下:

非凸空间
离散化
粗解
迭代
最终解

  首先离散化,然后再采样得到粗解,再对粗解进行迭代,得到最终解,粗解起到基点的作用,以粗解为基础,然后得到最终解。

  求解思想:先离散地采样撒点,看一下最小值最有可能的位置,然后再根据最有可能位置作为初值迭代,从而找到最优解。

4、非凸问题求解的局限性

  当然方法也不是尽善尽美,比如这样的非凸问题:
在这里插入图片描述

  如果采样点较少,像这样采样点并没有落在最优解所在的约束空间,就容易陷入局部极小值。所以采样点越少就越容易收敛到局部最优,而不是整体得最值,但采样多容易发生维度灾难。


十、维度灾难

  • 一维空间中,在前后两个方向上采样:
    在这里插入图片描述

  • 二维空间中,在前后左右方向上采样:
    在这里插入图片描述

  • 三维空间中,在前后左右上下方向上采样。

  如果一维空间采样 100 100 100 个点,那么二维空间可能要采样 1 1 1 万个点,三维的话就要还要乘 100 100 100,就是采 100 100 100 万个点,所以非凸优化没有尽善尽美的解决方案,只能根据不同问题调整。


十一、总结

  本篇博客主要从宏观层面介绍了凸优化在自动驾驶规划中的应用,讲解了代价函数构建、约束条件处理、迭代法求解以及非凸优化问题的处理策略。

  下一节将介绍自然坐标系和直角坐标系之间的转化关系及相关推导。


参考资料

  自动驾驶决策规划算法第一章第二节 凸优化与非凸优化


后记:

🌟 感谢您耐心阅读这篇关于 凸优化与非凸优化 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

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

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

相关文章

初识Linux · 有关makefile

目录 前言: 1 makefile的简单使用 2 makefile介绍 前言: 我们上文介绍了gcc和g的基本使用,带了许多的子指令,但是有的时候啊,一个一个敲指令确实有点麻烦了,此时,一个工具就能派上用场&…

Linux学习-虚拟化平台安装和使用

注:系统使用Rock8.6 下载链接 通过百度网盘分享的文件:cirros.qcow2,node_base.xml等2个文件 链接:https://pan.baidu.com/s/1hupGQsMjrXMgngCy3lQLhw?pwdhlr6 提取码:hlr6[rootharbor ~]# cat /etc/redhat-releas…

Django+Vue宠物服务管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

2024-09-03作业

作业结果 作业代码 #include <iostream> using namespace std; class RMB { friend const RMB operator-(const RMB &L,const RMB &R); friend const RMB operator--(RMB &O,int); private: int yuan; int jiao; int fen; static…

JMeter 安装使用

JMeter 安装使用 a.安装 下载链接:Apache JMeter - Download Apache JMeter 环境变量 打开 cmd 输入 jmeter&#xff0c;即可启动 b.使用 http请求接口 300 个线程设置 1 s 的预热时间 右键 start

如何读懂以太坊源代码

以下是一个学习以太坊源代码的清晰思路&#xff1a; 一、前期准备 基础知识储备&#xff1a; 熟悉区块链的基本概念&#xff0c;如区块、交易、共识机制、哈希函数等。了解 Go 语言&#xff08;以太坊主要使用 Go 语言编写&#xff09;的基本语法和编程概念。 工具准备&#x…

Unity(2022.3.41LTS) - UI详细介绍-Scroll View(滚动视图)

目录 零.简介 一、基本功能与用途 二、主要组件 Rect Transform&#xff08;矩形变换&#xff09;&#xff1a; Scroll Rect&#xff08;滚动矩形&#xff09;组件&#xff1a; Scrollbar&#xff08;滚动条&#xff09;组件&#xff1a; Mask&#xff08;遮罩&#xff…

今天来聊一聊前端框架有哪些呢? 主流Vue和React

使用工具&#xff1a; 联网搜索 前端框架主要包括React.js、Vue.js、Angular等。在现代网络技术的快速发展中&#xff0c;前端框架成为了实现界面美观、交互性强、用户体验佳的网页和应用不可或缺的工具。下面将具体介绍几款目前主流的前端框架&#xff1a; React.js 简介&…

源代码怎么加密防泄漏?9种方法教会你

想做源代码加密防止泄漏&#xff0c;首先要了解程序员可以通过哪些方式将源代码传输出去&#xff01; 程序员泄密的常见方式 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘…

Learning——protobuf的下载

目录 一、protobuf在windows下安装 1.下载地址 2.配置环境变量 ①打开设置 ②搜索框中搜索编译环境变量 ③ 点击“环境变量” ④ 找到PATH并双击打开编辑 ⑤配置环境变量后点击确定 3.检验是否安装成功 二、protobuf在Linux下安装 1.库依赖安装 2.下载地址 我不能使用…

springboot中的请求过滤filter与拦截interceptor分析

首先我们要定义一个类&#xff0c;实现标准的过滤器 import lombok.extern.slf4j.Slf4j;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;WebFilter("/*") Slf4j public class AuthFilter implements Filter {Overr…

Elasticsearch 索引模板

文章目录 前言Elasticsearch 索引模板1. 作用2. 示例3. 查询索引模板4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…

html+css+js网页设计 故宫7个页面 ui还原度100%

htmlcssjs网页设计 故宫7个页面 ui还原度100% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1…

Anaconda安装和环境配置教程(深度学习准备)

目录 1.下载选择 2.prompt配置 3.虚拟环境配置 4.检查是不是安装成功 5.安装jupter 6.关闭anaconda重新进入 7.总结 1.下载选择 我第一次使用的这个官网上面的邮箱的方式下载的&#xff0c;但是这个方式真的特别慢&#xff0c;于是用了这个清华的镜像网站&#xff0c;网…

K8S日志收集

本章主要讲解在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志&#xff0c;包括程序直接输出到控制台日志、自定义文件日志等。 一、有哪些日志需要收集 为了更加方便的处理异常&#xff0c;日志的收集与分析极为重要&#xff0c;在学习日志收集之前&#xff0c;需要知…

GitLab 是什么?GitLab使用常见问题解答

GitLab 是什么 GitLab是由GitLab Inc.开发&#xff0c;使用MIT许可证的基于网络的Git仓库管理工具开源项目&#xff0c;且具有wiki和issue跟踪功能&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。 ​GitLab 是由 GitLab Inc.开发&#xff0c…

从0开始训练基于自己声音的AI大模型(基于开源项目so-vits-svc)

写在前面&#xff1a; 本文所使用的技术栈仅为&#xff1a;Python 其他操作基于阿里云全套的可视化平台&#xff0c;只需要熟悉常规的计算机技术即可。 目录 Step 1:注册及登录阿里云主机 Step 2:找到大模型项目 Step 3:创建大模型环境实例 Step 4:进入Ai_singer教程 Step…

C语言之猜数字小游戏

哈喽&#xff0c;大家好&#xff01;我是冰淇淋加点糖。今天我们来用前面所学的知识来开发一个猜数字的小游戏&#xff0c;锻炼我们的编程能力和编程思维。 猜数字小游戏功能简介 1.随机生成一个1-100的数字。 2.玩家用户开始猜数字。 > 猜大了&#xff0c;提醒猜大了…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-27浅谈XILINX BRAM的基本使用

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

C#/WinForm 演示遗传算法

一、一览 二、遗传算法流程 种群初始&#xff1a;随机生成一组N个DNA&#xff0c;每个DNA上都有S个基因&#xff0c;每个DNA都有自己的r值&#xff08;适度值&#xff09;。r最大的DNA为种群最优。 选择操作&#xff1a;将每个DNA的r值占总体的比例作为新一代选取的概率&#…