交通 | 针对Close-Enough旅行商问题的一种分支定界算法

在这里插入图片描述

论文解读​:王飞龙,曲晨辉

1、问题背景

\qquad 旅行商问题(TSP)是一种众所周知的路径问题。TSP的目标是在图 G = ( V , E ) G=(V,E) G=(V,E)中找一条以场站为起终点的最短路,访问所有客户点 V V V,同时没有子环路。令 E E E表示网络中的弧集合,每条弧的长度通过欧式范数进行计算,如两个节点 p p p q q q之间的距离 d p q = ∣ ∣ v p − v q ∣ ∣ 2 d_{pq}=||v^p-v^q||_2 dpq=∣∣vpvq2 ,其中 v p v^p vp v q v^q vq分别表示节点 p p p q q q的坐标向量。

\qquad CETSP是TSP的一种变体形式,相比于TSP,CETSP中的每一个客户点均拥有一个覆盖域(covering region),旅行商不需要访问么一个客户点本身,只需要到达每一个客户点的覆盖域之内即可。在本文中,假设每个客户点的覆盖域是一个圆形,则只要旅行商经过以客户点 i i i为圆心,半径为 r i r_i ri的圆形区域 D i D_i Di,或者至少到达圆形区域 D i D_i Di的边缘之后,就称旅行商已经服务过客户点 i i i。CETSP的正式定义如下:给定一个二维空间中的节点集合 V = { 0 , . . . , n } V=\{0,...,n\} V={0,...,n},每一个节点的坐标为 ( x ‾ i , y ‾ i ) , i ∈ V (\overline{x}_i,\overline{y}_i),i\in V (xi,yi),iV,每一个节点 i i i都在其对应的圆形区域 D i D_i Di的圆心, D i D_i Di的半径为 r i r_i ri。假设网络中不存在重复节点,即 ( x ‾ i , y ‾ i ) ≠ ( x ‾ j , y ‾ j ) , i , j ∈ V , i ≠ j (\overline{x}_i,\overline{y}_i)\neq (\overline{x}_j,\overline{y}_j),i,j\in V,i\neq j (xi,yi)=(xj,yj),i,jV,i=j。CETSP需要决策旅行商到达每一个节点覆盖域的坐标 ( x i , y i ) ∈ R 2 , i ∈ V (x_i,y_i)\in \mathbb{R}^2, i \in V (xi,yi)R2,iV(hitting points),和节点的访问顺序 S = ( k 0 , k 1 , . . . , k n ) , k i ∈ V \mathscr{S}=(k_0,k_1,...,k_n),k_i\in V S=(k0,k1,...,kn),kiV,从而使得所有hitting points组成的哈密顿环路的距离最短。下图Figure 1展示了二维空间下的CETSP情景示例。
在这里插入图片描述

\qquad 其中,节点1和3只被访问了覆盖域中的一个点,节点2的覆盖域和当前路径有一段弧的交集。CETSP可以很简单地拓展到三维空间中去,只需要在每一个节点的坐标中添加一个维度即可,e.g., ( x ‾ i , y ‾ i , z ‾ i ) , i ∈ V (\overline{x}_i,\overline{y}_i,\overline{z}_i),i\in V (xi,yi,zi),iV。下图2和3分别展示了CETSP在二维和三维空间中的解方案示意。
在这里插入图片描述
在这里插入图片描述

\qquad CETSP在实践中有许多应用场景。如利用射频识别标签来给传输数据。在特定的物理仪表上安装射频标签,之后使用配备有自动抄表系统(AMR)的卡车来远距离收集仪表中的数据,这样卡车不需要访问每一个物理仪表所在的位置,只需要到达距离物理仪表一定的范围即可完成数据的收集和传输工作。近年来,无人机被广泛应用在军事和民用的各个领域。如空中侦查,火灾检测,船舶跟踪,物资配送,地理区域检测,管道检测等。如果为无人机配备无线传感器,其可以远距离对目标进行服务。

\qquad 本文基于分枝定界(branch-and-bound)算法框架设计了一种可以在有限步求解CETSP的精确算法,将CETSP进行分解,子问题是一个二阶锥规划(SOCP),算法可以求解1000个客户点规模的算例到最优,同时通过改变分枝规则和可行性检验规则,算法也可以处理椭圆形状的覆盖域。

2、针对CETSP的分枝定界算法框架

\qquad CETSP的BB框架的整体描述如下:分枝树中每一个节点均表示一个最优的路径片段(partial path),其中只访问了一部分客户点。在根结点,算法随机选择两个客户点作为初始序列的访问客户,同时可知,在TSP问题情境中,由于距离矩阵是对称的,所以只访问两个客户点没有顺序限制,正序和逆序访问的解是等效的。从而可以使用这两个随机选定的客户点组成的序列初始化分枝树的根结点,将这个序列输入到子问题SCOP模型中,得到的解作为原问题的一个有效下界。

\qquad 在分枝的过程中,若所有的客户点均被访问了,并且通过求解子问题得出当前序列是可行的,则找到原问题的一个有效上界,否则需要对分枝树结点进行分枝,随机选择一个未访问的客户点插入到当前序列的每一个位置。当出现下述两种情况时,对分枝树进行剪枝:某个分枝结点的下界解不小于当前最优上界解或者某个分枝结点中的客户点序列中包含所有的客户点。

\qquad 注意到,每一个分枝结点生成的子结点个数为当前分枝结点中包含的结点数量(场站算作一个节点)。下图4展示了包含6个客户点的分枝树示例。
在这里插入图片描述

\qquad 上图4中,未被访问的客户点被罗列在每一个分枝结点的右侧方框内,使用加粗表示选定插入的客户点。在这个情境中,根结点的节点序列选定为:0-3-6-0。之后,客户点1被选定插入到0-3-6-0的每一个位置中,生成3个子结点(如图4第二层所示)。当客户1被插入到0-3-6-0的第一个和第二个位置时,客户4可以被顺便访问到,从而0-1-3-6-0和0-3-1-6-0不需要重复访问客户4,但0-3-6-1-0需要对客户4进行访问。之后再对第二层的节点进行分枝,为了简单起见,图中没有罗列出剪枝的情况。最终,得到最优路径为0-3-1-6-5-0。

\qquad 分析分枝树中的节点数量,在分枝树的某一层 l l l最多生成的分枝结点数量为 ( l + 2 ) ! / 2 (l+2)!/2 (l+2)!/2,在最坏情况下,整个分枝过程生成的分枝结点数量为: ∑ l = 0 n ( ( l + 2 ) ! / 2 ) = O ( ( n + 2 ) ! ) \sum_{l=0}^n((l+2)!/2)=\mathscr{O}((n+2)!) l=0n((l+2)!/2)=O((n+2)!)

2.1 算法描述和精确性分析

\qquad N k \mathcal{N}_k Nk表示第 k k k个分枝树结点,其由一系列节点顺序组成: ( i 0 , . . . , i q ) (i_0,...,i_q) (i0,...,iq) N k \mathcal{N}_k Nk的子问题需要寻找在当前顺序下,访问顺序中每个节点的最优路径。令 c ( N k ) c(\mathcal{N}_k) c(Nk) V ( N k ) \mathscr{V}(\mathcal{N}_k) V(Nk)分别表示当前路径的成本和节点集合。

  • V ( N k ) = V \mathscr{V}(\mathcal{N}_k)=V V(Nk)=V,则当前节点无需进行后续分枝,被认定为求解完毕,同时使用求解完之后的路径成本更新上界解的值;

  • c ( N k ) c(\mathcal{N}_k) c(Nk)不小于当前最优上界,则表明继续对 N k \mathcal{N}_k Nk进行分枝也不能生成更优的解方案,则 N k \mathcal{N}_k Nk被认定为剪枝;

  • 否则,选定一个未访问的节点 i ∗ i^* i插入到 N k \mathcal{N}_k Nk中并生成 q q q个新的分枝子结点,则 N k \mathcal{N}_k Nk被认定为已处理

\qquad 文中对branch and bound求解CETSP的算法精确性进行了简单证明,应用了反证法的思路,首先令 S \mathscr{S} S 表示最优解方案的序列,令 c ∗ c^* c表示最优解目标值,令 N \mathcal{N} N表示一个被剪枝掉的关于 S \mathscr{S} S的一个子序列。根据动态规划的最有性保证,全局最优情况下可以推出局部最优, N \mathcal{N} N作为最优解 S \mathscr{S} S的子序列,存在关系 c ( N ) ≤ c ∗ c(\mathscr{N})\leq c^* c(N)c成立。若 N \mathcal{N} N被剪枝,则说明有另外一个序列的解方案的值优于 c ∗ c^* c,违背了 S \mathscr{S} S为最优解方案的假定,从而 N \mathcal{N} N不会被提前剪枝。

2.2 二阶锥规划

\qquad 为了求解分枝树中每一个结点的子问题,文中提出了一个二阶锥规划模型(SOCP)。令 S = ( i 0 , . . . , i q ) \mathscr{S}=(i_0,...,i_q) S=(i0,...,iq)表示一个分枝树分枝过程中某个分枝结点中的路径序列片段。子问题的的SOCP模型是为了寻找旅行商到达路径序列中每一个节点的位置坐标, ( x i k , y i k ) , k = 0 , . . . , q (x_{i_k},y_{i_k}),k = 0,...,q (xik,yik),k=0,...,q,从而使得路径片段的长度最小化。令 i − 1 = i q i_{-1}=i_q i1=iq,SOCP的形式如下所示:
在这里插入图片描述

\qquad 在SOCP模型中,目标函数(1)是线性的,变量 z k z_k zk表示旅行商在第 k − 1 k-1 k1个节点和第 k k k个节点之间行走的欧式距离。变量 w k , u k , s k , t k w_k, u_k, s_k, t_k wk,uk,sk,tk用来表示坐标之间的差值。二阶锥约束(6)表示当前分枝结点中,旅行商在不同节点之间行走的距离约束;二次约束(7)表示旅行商到达每一个节点的位置均需要在当前节点的覆盖域之内。约束(8)和(9)表示变量的取值范围约束。

\qquad SOCP可以再多项式时间内进行有效求解,同时,一些成熟的商用求解器,如CPLEX, Gurobi等都可以用来对SOCP进行有效求解。

2.3 根结点松弛

\qquad 根结点需要选择两个客户点组成初始序列,作为原问题的初始松弛问题。文章采用下述方式进行根结点序列的构建。首先选择场站作为根结点中的第一个节点,之后选择距离场站最近的节点作为第二个节点插入到根结点序列之中。第三个节点的选择需要将剩余没有服务的节点依次插入到根结点序列中,并求解不同序列的SOCP,选择下界值最大的SOCP对应的节点作为根结点的第三个节点。

2.4分枝树结点的可行性检测

\qquad 每一个分枝树结点的可行性检查就是需要检查当前是否所有节点均被服务到了,若是,则称当前分枝树是可行的。可行性检查的关键在于判断当前没有直接访问的客户点的覆盖域是否可以被当前已经构建的路径中的某条弧经过。令 d i ^ \hat{d_i} di^表示当前解方案中距离客户点 i i i最近的弧和客户点 i i i之间的距离,若 d i ^ > r i \hat{d_i}>r_i di^>ri说明客户点 i i i没有被访问到,则将客户点 i i i计入未访问的客户点集合 V ^ = { i ∈ V : d i ^ > r i } \hat{V}=\{i \in V:\hat{d_i}>r_i\} V^={iV:di^>ri}。若 V ^ = ∅ \hat{V}=\empty V^=,则说明当前结点的解方案已经可行。下面主要介绍对于一个选定的客户点 c c c怎样计算其到某一条弧 p 1 p 2 ‾ \overline{p_1p_2} p1p2的最短距离。客户点 c c c和弧 p 1 p 2 ‾ \overline{p_1p_2} p1p2之间的最短距离可以通过求解 d ^ = m i n 0 ≤ θ ≤ 1 ∣ ∣ ( 1 − θ ) p 1 + θ p 2 − c ∣ ∣ \hat{d}=min_{0 \leq \theta\le 1}||(1-\theta)p_1+\theta p_2-c|| d^=min0θ1∣∣(1θ)p1+θp2c∣∣子优化问题进行求解。其解析解表达形式如下所示:KaTeX parse error: Got function '\rm' with no arguments as superscript at position 22: …^*=-(p_2-p_1)^ \̲r̲m̲{T}(p_1-c)/||p_…,从而最短距离可以通过下式(10)进行计算。

d ^ = { ∣ ∣ p 1 − c ∣ ∣ ,    i f    θ ∗ ≤ 0 ∣ ∣ p − c ∣ ∣ ,    i f    0 < θ < 1 ∣ ∣ p 2 − c ∣ ∣ ,    i f    θ ≥ 1 \begin{equation} \tag{10} \hat{d}=\left\{ \begin{aligned} %\nonumber &||p_1-c||,\ \ if\ \ \theta^*\le 0\\ &||p-c||,\ \ if\ \ 0<\theta < 1 \\ &||p_2-c||,\ \ if\ \ \theta \ge 1 \\\end{aligned} \right.\end{equation} d^= ∣∣p1c∣∣,  if  θ0∣∣pc∣∣,  if  0<θ<1∣∣p2c∣∣,  if  θ1(10)

\qquad 其中 p = ( 1 − θ ∗ ) p 1 + θ ∗ p 2 p={(1-\theta^*)p_1+\theta^*p_2} p=(1θ)p1+θp2。假设当前有问题中有 n n n个节点,有 e e e条边,则可行性检查的时间复杂度为: O ( n e ) \mathscr{O}(ne) O(ne),这种检验规则在二维和三维空间之中均适用。

2.5 分枝规则

\qquad 文章基于算例中客户点的覆盖域的半径分布情况,提出了两种分枝方法。所谓的分枝方法就是选择一个未被访问的客户点,将其插入到当前分枝结点对应的序列中。

\qquad 如果所有未被服务的客户点的覆盖域半径均相同,则第一种分枝方法如下执行:首先计算所有未服务的节点中的 d ^ k , k ∈ V ^ \hat{d}_k,k\in \hat{V} d^k,kV^,之后选择其中最大的 d ^ k \hat{d}_k d^k对应的客户点作为分枝待插入的客户点,其示意图如下图6所示。
在这里插入图片描述

\qquad 这样的分枝规则保证了将节点插入到当前序列之后,下界的增量为 m a x k ∈ V ^ { d ^ k } max_{k\in \hat{V}}\{\hat{d}_k\} maxkV^{d^k}的一定比例,但如果所有未被访问的客户点的覆盖域半径不相同,则上述结论也不成立,需要使用下述第二种分枝规则进行分枝。

\qquad 对于第二种分枝规则,首先需要估计将某个未被服务的客户点 k ∈ V ^ k\in\hat{V} kV^插入到当前序列中后下界增量,记为 r k r_k rk。为了计算 r k r_k rk,首先计算出 D k D_k Dk边界上的一个点 p ~ k \tilde{p}_k p~k,使得 p ~ k \tilde{p}_k p~k到最近的弧 p 1 p 2 ‾ \overline{p_1 p_2} p1p2的距离最短。令 e ~ 1 k \tilde{e}_1^k e~1k e ~ 2 k \tilde{e}_2^k e~2k分别表示 p ~ k \tilde{p}_k p~k p 1 p_1 p1 p 2 p_2 p2的距离,令 e i j e_{ij} eij表示弧 p 1 p 2 ‾ \overline{p_1 p_2} p1p2的长度,则 r k = e ~ 1 k + e ~ 2 k − e i j r_k=\tilde{e}_1^k +\tilde{e}_2^k- e_{ij} rk=e~1k+e~2keij。计算完所有未访问客户点的 r k r_k rk之后,选定其中最大的 r k r_k rk对应的客户点作为分枝客户点。第二种分枝规则的示意图如下图7所示。
在这里插入图片描述

3、计算试验和结果

\qquad 作者进行了一系列的实验,以选择在计算上最有效的分支策略。主要使用了以下策略进行测试:深度优先搜索、广度优先搜索和最佳优先搜索。结果显示,最佳优先搜索是最适合应用于文章算法的策略。所提出的算法在824个实例中进行了测试,这些实例由Mennell(2009)和Behdani和Smith(2014)提出。

3.1 Behdani和Smith(2014)的小实例发现的结果

\qquad 表1显示了对Behdani和Smith(2014)的实例所发现的结果的总结。可以看出,所有的实例都在几秒钟内被解决到了最优状态。
在这里插入图片描述

3.2 为Mennell(2009)的二维实例找到的结果

\qquad 表2列出了Mennell(2009)的2D实例的结果。每个实例的时间限制为4小时。新的改进(最优)解决方案以黑体字突出显示。通过观察表2的结果,我们可以看到文章提出的B&B算法找到了62个实例中22个的最优解。
在这里插入图片描述
在这里插入图片描述

\qquad 我们还可以证实,所有文献中的下限都得到了极大的改善。此外,重叠率越大,算法的效果越好。这在某种程度上是意料之中的,因为最佳旅游路线中的顶点数量往往与重叠率值成反比,从而有助于B&B算法快速收敛到最佳解决方案,因为整个树上需要探索的节点较少。下图8-10描述了部分相关的最优路由。
在这里插入图片描述

3.3 为Mennell(2009)的三维实例找到的结果

\qquad 表3列出了Mennell(2009)的三维实例所得到的结果。本表中各列的含义与上一节相同。我们的算法找到了42个实例中的10个最优解。此外,所有的下限都得到了改善。图11-13中显示了一些相关的最优路由。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.4 重叠率对算法性能的影响

\qquad 如前所述,实例的难度与它的重叠率有关。在这一节中,我们提供了一些关于算法在对一个实例采用不同重叠率时的性能的见解。

\qquad 重叠率可以简单地定义为每个顶点的半径和涉及它的矩形的最大边,也就是说, o v e r l a p r a t i o = r / l m a x overlap ratio=r/l_{max} overlapratio=r/lmax,其中 r r r是每个覆盖圆的大小。对于Mennell(2009)建议的名为TSPLIB问题的基准数据集,所有顶点都有相同的半径。因此,我们可以通过将 r r r乘以一个常数 f f f来改变每个实例的重叠率,这里表示为半径因子。

\qquad 鉴于此,我们可以进行一个简单的实验来证明重叠率对分支和边界算法性能的影响。具体来说,我们对上述基准数据集的每个实例都运行了提出的算法,但考虑了 f f f的不同值,范围从0.5到1.5。

\qquad 正如预期的那样,该算法的性能随着顶点之间重叠度的增加而提高。此外,B&B节点的数量以及计算时间高度依赖于每个实例的重叠率。因此,对于顶点半径非常小的实例,枚举方案在实践中可能会失败。还要注意的是,如果重叠率下降到某一数值,这些性能指标可能会爆炸。一些实例的结果显示在图14-17中,从图中可以看出,以对数尺度,树的大小(连续线)和计算时间(虚线)是如何随着重叠率的增加而减少的。
在这里插入图片描述

在这里插入图片描述

4、结论和总结

\qquad 文章基于branch and bound算法框架,针对CETSP提出了一种精确求解算法,其中每个分枝结点的子问题都需要求解一个二阶锥规划来计算每一个客户点覆盖域中的最优访问位置。文章对824个benchmark算例进行了测试和计算,得到了其中752个算例的最优解方案,同时对于算例的整体下界有明显的改善。

\qquad 通过算例验证,文中提出的算法对于节点覆盖域重叠较大的算例计算效果较好,对于节点覆盖域重叠较小的算例(更加贴近TSP情景)的算例计算效果较差。从而后续研究可以针对节点覆盖域重叠较小的情景设计更加有效的方法来提升“根结点松弛”策略,加速此类算例的求解速度。

参考文献
Coutinho, W. P., Nascimento, R. Q. D., Pessoa, A. A., & Subramanian, A. (2016). A branch-and-bound algorithm for the close-enough traveling salesman problem. INFORMS Journal on Computing, 28(4), 752-765.

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

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

相关文章

实训笔记7.4

实训笔记7.4 7.4一、座右铭二、IDEA集成开发环境的安装和使用三、DEBUG断点调试四、Java设计模式4.1 适配器模式4.2 动态代理模式4.3 单例设计模式 五、Java中网络编程5.1 网络编程三个核心要素5.2 TCP网络编程 六、基于网络编程的聊天系统6.1 需求分析6.2 系统设计6.2.1 概要设…

VirtualBox安装Ubuntu(22.04.2)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

RabbitMQ学习笔记9 TTL死信队列+延迟队列实战

我们去新建一个交换机&#xff1a; 然后我们再用这种方法直接创建一个队列&#xff1a; 点击bind这样我们的交换机和队列就绑定到一起了。 然后我们要新建普通队列&#xff0c;设置过期时间&#xff0c;指定死信交换机。 发布一条消息。 它会把队列传递到死信队列中去。

SpringBoot整合SpringSecurity认证与授权

唠嗑部分 在项目开发中&#xff0c;权限认证是很重要的&#xff0c;尤其是一些管理类的系统&#xff0c;对于权限要求更为严格&#xff0c;那么在Java开发中&#xff0c;常用的权限框架有哪些呢&#xff1f; 推荐的有两种&#xff0c;Shiro 与 SpringSecurity&#xff0c;当然…

GC回收器演进之路

目录 未来演进方向 历经之路 引用计数法 标记清除法 复制法 标记整理 分代式 三色标记法的诞生 三色标记法的基本概念 产生的问题 问题 1&#xff1a;浮动垃圾 问题 2&#xff1a;对象消失 遍历对象图不需要 STW 的解决方案 屏障机制 插入屏障&#xff08;Dijks…

故障:启动修复无法修复你的电脑

有台笔记本很久没用了无法开机了&#xff0c;还是用的win7的系统&#xff0c;开机后提示我使用启动修复&#xff0c;但是失败了&#xff0c;提示我启动修复无法修复你的电脑 启动修复无法修复你电脑怎么办_自动修复电脑未正确启动的解决方法&#xff0d;win7之家 1、上网查了下…

Mybatis-SQL分析组件 | 京东云技术团队

背景 大促备战&#xff0c;最大的隐患项之一就是慢sql&#xff0c;带来的破坏性最大&#xff0c;也是日常工作中经常带来整个应用抖动的最大隐患&#xff0c;而且对sql好坏的评估有一定的技术要求&#xff0c;有一些缺乏经验或者因为不够仔细造成一个坏的sql成功走到了线上&am…

基于单片机智能衣柜 智能衣橱 换气除湿制系统紫外线消毒的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前衣柜温湿度和柜门开启关闭状态&#xff1b;按键设置当前衣柜湿度上限值、衣柜门打开和关闭&#xff0c;杀菌消毒&#xff1b;当湿度超过设置上限&#xff0c;继电器闭合开启风扇进行除湿&#xff1b;进行杀菌消毒时&am…

zk-IMG:对抗虚假信息

1. 引言 前序博客&#xff1a; ZKP图片授权——PhotoProof&#xff1a;proofs of permissible photo edits Daniel Kang等人2022年论文《ZK-IMG: Attested Images via Zero-Knowledge Proofs to Fight Disinformation》&#xff0c;在该论文中提供了一个简单的deep fake ima…

Web安全——渗透测试基础知识下

渗透测试基础 Web安全一、VMware虚拟机学习使用1、虚拟机简单介绍2、网络模式2.1 桥接网络&#xff08;Bridged Networking&#xff09;2.2 NAT模式2.3 Host-Only模式 3、通俗理解 二、Kali的2021安装与配置1、简单介绍2、Kali的版本3、配置3.1 安装虚拟机open-vm-tools-deskto…

IDEA中集成zookeeper的插件

IDEA中集成zookeeper的插件 一、IDEA中集成插件 搜索插件并安装&#xff1a; 安装完成&#xff0c;重启IDEA 配置zk集群 连接成功

哪家好用?四款国内外远程桌面软件横测:ToDesk、向日葵、TeamViewer、AnyDesk

一、前言 远程桌面软件对于职场人来说并不陌生&#xff0c;可以说是必备的办公软件之一。在经历过新冠疫情后&#xff0c;大家对于远程办公的认识越来越深入&#xff0c;也就在这段期间&#xff0c;远程桌面软件大范围的应用起来&#xff0c;真正走进大众视野并融入我们的工作和…

记一次阿里云被挖矿处理记录

摘要 莫名其妙的服务器就被攻击了&#xff0c;又被薅了羊毛&#xff0c;当做免费的挖矿劳动力了。 一、起因 上班&#xff08;摸鱼&#xff09;好好的&#xff0c;突然收到一条阿里云的推送短信&#xff0c;不看不知道&#xff0c;两台服务器被拉去作为苦力&#xff0c;挖矿去…

wireshark学习

抓包原理 哪种网络情况可以抓到包&#xff1f;&#xff08;1&#xff09;本机环境&#xff08;2&#xff09;集线器环境&#xff08;3&#xff09;交换机环境 交换机环境目前较为常用&#xff0c;这也分为三种情况&#xff08;1&#xff09;端口镜像&#xff08;2&#xff09…

生产环境 kafka 平滑迁移之旅

文章目录 背景分析测试环境验证现实很残酷两种抉择-----leader分区切换方案选择实施步骤手工副本集增加步骤手工leader分区切换步骤 总结 背景 线上kafka集群&#xff0c;3台机器&#xff0c;3个broker&#xff1b;其中某台机器因为硬件故障&#xff0c;需要停机维修&#xff…

HTML5 游戏开发实战 | 黑白棋

黑白棋&#xff0c;又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋、翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子&#xff0c;最后以棋盘上谁的棋子多来判断胜负。黑白棋的棋盘是一个有88方格的棋盘。开始时在棋盘正中有两白两黑四个棋子交叉放置&#xff0…

《PyTorch深度学习实践》第十一讲 循环神经网络(基础篇 + 高级篇)

b站刘二大人《PyTorch深度学习实践》课程第十一讲循环神经网络&#xff08;基础篇 高级篇&#xff09;笔记与代码&#xff1a; https://www.bilibili.com/video/BV1Y7411d7Ys?p12&vd_sourceb17f113d28933824d753a0915d5e3a90 https://www.bilibili.com/video/BV1Y7411d7Y…

【MySQL】在Linux下删除和安装MySQL

文章目录 一、前言二、检查、卸载内置环境三、获取mysql官方yum源四、正式安装MySQL服务五、登录MySQL配置my.cnf设置开机启动 一、前言 大家好久不见&#xff0c;今天开始分享关系型数据库Mysql的一些知识。 二、检查、卸载内置环境 2.1 首先使用命令查询当前mysql的运行状…

走向 Native 化:SpringDubbo AOT 技术示例与原理讲解

作者&#xff1a;刘军 Java 应用在云计算时代面临“冷启动”慢、内存占用高、预热时间长等问题&#xff0c;无法很好的适应 Serverless 等云上部署模式&#xff0c;GraalVM 通过静态编译、打包等技术在很大程度上解决了这些问题&#xff0c;同时针对 GraalVM 的一些使用限制&a…

Kubernetes service服务的发布 - kube-proxy(负载均衡器)-IPVS

目录 Service Service将内部的pod暴露到外面&#xff0c;让用户可以访问 负载均衡策略&#xff1a; Service 的类型&#xff1a; 案例&#xff1a;Service服务发布案例 扩展&#xff1a;我们在案例再加入一个探针的使用 更改后的my_nginx.yaml文件&#xff1a; 创建Pod&…