OM | 强化学习 + 约束规划求解组合优化问题

article/2025/11/9 10:19:16

组合优化在航空航天、交通规划以及经济学等众多学科领域中有广泛应用,其目标是在有限集中寻找最优解。然而状态空间过大的问题让目前组合优化变得棘手。在过去的几年中,使用深度强化学习(deep reinforcement learning,DRL)解决组合优化问题受到广泛关注。然而,现有的方法有两大缺点:

  1. 大部分工作主要集中在标准的TSP问题上,推广到其他问题并不容易。
  2. 只能提供一个近似最优解或者满意解,没有一个系统的方法来提升解的质量或者证明其最优性。

另一方面,约束规划(constraint programming,CP)是一种用于解决组合优化问题的有效方法,基于完全搜索的策略,如果时间足够,总可以找到最优解。分支决策是CP的关键选择,用于指导如何探索剩余的搜索空间。

本篇论文 [1] 的工作提出了一种基于DRL和CP的通用方法来解决组合优化问题。方法的核心是将动态规划作为连接两种方法的桥梁,首先通将组合优化问题建模成动态规划形式,再使用深度强化学习方法学习分支搜索方法,将学习到的agent用于CP的分支选取中,从而进一步提升CP的搜索效率提升算法性能。具体的结构如图1所示。

整体结构分为三个阶段,统一表示阶段是指将组合优化问题描述为动态规划模型,该动态规划模型既可以进一步描述为深度强化学习的训练形式用于训练agent,也可以进一步描述为CP模型并根据分支选择策略进行搜索求解。学习阶段主要通过随机生成的方法生成很多约束规划问题的样本,并根据样本进行求解训练。求解阶段将需要求解的问题实例通过动态规划描述为CP模型,并根据学习到的agent进行分支选择求解。图1中的蓝色模块为已有的成熟算法,绿色模块为本文的工作。
在这里插入图片描述图1 本篇论文总体方法架构

总的来说,本文结合了search-based和learning-based两种方法。基于搜索的方法可以保证最优解,但是往往不能从历史数据中得到经验,并且搜索过程有很大的提升空间。基于学习的方法可以利用历史经验,但是不能保证最优并且没有行之有效的提升手段。本文的方法结合了两者的优点,既可以保证最优解,又可以利用历史经验,同时还可以提升搜索效率。

将组合优化写为动态规划(DP)模型

动态规划是一种结合数学建模和编程的方法,通常用于解决复杂的优化问题。动态规划主要通过将问题分解为多阶段子问题,并通过状态转移方程将不同状态联系起来。通过最终的状态反向递推求解每个阶段的解。

考虑优化问题 Q : { max ⁡ f ( x ) : x ∈ X ⊆ Z n } \mathcal{Q}:\left\{\max f(x): x \in X \subseteq \mathbb{Z}^n\right\} Q:{maxf(x):xXZn}其中 x i x_i xi是决策变量,用于最小化目标函数 f ( x ) f(x) f(x)。将其改造后的动态规划由以下几部分组成 ⟨ S , X , T , R , V , P ⟩ \left \langle S,X,T,R,V,P\right \rangle S,X,T,R,V,P,现分别进行介绍。

S S S:系统状态:用于描述阶段 i , i ∈ { 1 , . . . , n } i,i \in \{1,...,n\} i,i{1,...,n}时的系统状态 s i s_i si

X X X:系统控制:用于描述阶段 i i i时系统实施的控制 x i x_i xi,其定义域是 D ( x i ) D(x_i) D(xi)

T T T:状态转移函数:用于描述阶段 i i i时系统状态 s i s_i si经过控制 x i x_i xi转移到下一阶段的状态 s i + 1 s_{i+1} si+1,即 T : S × X → S T:S\times X\rightarrow S T:S×XS

R R R:回报函数:用于描述阶段 i i i时系统状态 s i s_i si经过控制 x i x_i xi得到的回报 R ( s i , x i ) R(s_i,x_i) R(si,xi),即 R : S × X → R R:S\times X\rightarrow \mathbb{R} R:S×XR

V V V:可行条件:用于描述阶段 i i i时系统状态 s i s_i si是否可行,用于约束可行动作集,即 V : S × X → { 0 , 1 } V:S\times X\rightarrow \{0,1\} V:S×X{0,1}

P P P:支配条件:用于描述阶段 i i i时系统状态 s i s_i si是否被支配,同样用于约束可行动作集,即 P : S × X → { 0 , 1 } P:S\times X\rightarrow \{0,1\} P:S×X{0,1}

V , P V,P V,P都是用于约束可行动作集的,二者的区别是可行条件V是用于保证模型的可行性,而支配条件 P是用于动作集简化的效率提升手段。

本问题可以通过贝尔曼方程递归迭代求解,即 g i : X → R g_i:X\rightarrow \mathbb{R} gi:XR表示阶段i时的最优值函数,其递归迭代公式为 g i ( s i ) = max ⁡ { R ( s i , x i ) + g i + 1 ( T ( s i , x i ) ) } ∀ i ∈ { 1.. n } s.t.  T ( s i , x i ) ≠ ⊥ g_i\left(s_i\right)=\max \left\{R\left(s_i, x_i\right)+g_{i+1}\left(T\left(s_i, x_i\right)\right)\right\} \quad \forall i \in\{1 . . n\} \text { s.t. } T\left(s_i, x_i\right) \neq \perp gi(si)=max{R(si,xi)+gi+1(T(si,xi))}i{1..n} s.t. T(si,xi)=

在最终的时刻回报函数是0,依次递推至初始时刻,该值就是Q的最优值,然后通过递推依次赋值给每个阶段的控制 x i x_i xi并进行存储,即可得到最优解。

但是通常动态规划问题面临维数灾挑战,通常的操作是对支配动作进行剪枝,如果满足以下两个条件之一,该动作会被剪枝:​

•根据递推公式,严格地比另一个动作差​
•无法产生一个可行的状态转移​

但是在实际问题中,虽然剪枝策略可以有效的减少搜索空间,但是由于这两个条件是problem-dependent,因此识别这两个条件开销比较大。此外,有的问题即使进行了剪枝,动作集的维数仍然很大。

RL Encoding

强化学习的主要目的是研究并解决智能体的序贯决策问题,可以用四元组<S,A,T,R>定义强化学习的行为。其中, S S S为状态集合, A A A为动作集合, T T T为转移函数, R R R为奖励函数。注意在累积奖励函数中,删除了discounting factor,这是针对优化问题这一具体应用场景的改进。主流强化学习方法包括两类,即value-basedpolicy-based。Value-based的代表性算法Deep Q-learning (DQN),其应用深度网络近似action-value function,即 Q ^ ( s , a , w ) ≈ Q ( s , a ) \hat{Q}(s,a,\boldsymbol{w})\approx Q(s,a) Q^(s,a,w)Q(s,a),进而选择对应值最大的动作。Policy-based的代表性算法Proximal policy gradient (PPO),其基于policy gradient theorem,即 ∇ π ( V π ( s 0 ) ) = E π [ ∇ w l n π ( a ∣ s , w ) Q π ( s , a ) ) ] \nabla_\pi(V^\pi(s_0))=\mathbb{E}_\pi[\nabla_{\boldsymbol{w}}ln\pi(a|s,\boldsymbol{w})Q^\pi(s,a))] π(Vπ(s0))=Eπ[wl(as,w)Qπ(s,a))]直接应用梯度下降优化智能体策略 π \pi π

由于前文已经将原优化问题建模为DP形式,并得到了对应的六元组。本节的关键在于:如何利用六元组和一个给定问题实例 Q p \mathcal{Q}_p Qp生成强化学习所需的四元组?

State

对于DP模型的每一个阶段 i i i,我们定义其状态为 ( Q p , s i ) (\mathcal{Q}_p,s_i) (Qp,si)。其中 s i s_i si是动态变化的,并根据DP模型进行每阶段的实时更新; Q p \mathcal{Q}_p Qp是静态的,在每一个episode保持不变。在实践中,需要设计良好的嵌入层(Embedding layer),以提取状态向量的特征,并进一步将嵌入处理的结果输入后续的神经网络。

Action

给定DP模型在第 i i i阶段的状态 x i x_i xi和控制量 x i x_i xi,当前阶段的动作 a i ∈ A a_i\in\mathsf{A} aiA x i x_i xi具备一一对应关系。当然,在选择某个动作之前,需要根据有效性条件(Validity conditions)、支配条件(Dominance conditions)等判定其可行性。具体公式表示为 A i = { v i ∣ v i ∈ D ( x i ) ∧ V ( s i , v i ) = 1 ∧ P ( s i , v i ) = 1 } \mathsf{A}_i=\{v_i|v_i\in D(x_i)\wedge V(s_i,v_i)=1\wedge P(s_i,v_i)=1\} Ai={viviD(xi)V(si,vi)=1P(si,vi)=1}

Transition

RL的状态转移过程与DP一致,具体公式表示为 s i + 1 = T ( s i , a i ) = ( Q p , T ( s i , a i ) ) = ( Q p , T ( s i , v i ) ) s_{i+1}=\mathsf{T}(s_i,a_i)=(\mathcal{Q}_p,T(s_i,a_i))=(\mathcal{Q}_p,T(s_i,v_i)) si+1=T(si,ai)=(Qp,T(si,ai))=(Qp,T(si,vi))

Reward

奖励函数的设计对于RL来说至关重要,其提供了关键的训练反馈信息。本文指出,在具体的优化问题场景中,首先找到可行解(Feasible solution)相对于最大化奖励值,要处在更高的优先级上。基于此,本文提出了两条奖励函数设计时需要遵守的性质:(1)如果episode e 1 e_1 e1得到的解比episode e 2 e_2 e2的差,那么episode e 1 e_1 e1收集的奖励应该相对更少;(2)存在不可行解的episode收集的奖励,应比得到可行解的episode收集的奖励更少。由此,奖励函数使得智能体首先找到可行解,然后再不断提升可行解的质量。奖励函数具体为 R ( s , a ) = ρ × ( 1 + ∣ U B ( Q p ) ∣ + R ( s , a ) ) \mathsf{R}(s,a)=\rho\times(1+|\mathsf{UB}(\mathcal{Q}_p)|+R(s,a)) R(s,a)=ρ×(1+UB(Qp)+R(s,a))其中, U B ( Q p ) \mathsf{UB}(\mathcal{Q}_p) UB(Qp)表示组合优化问题 Q p \mathcal{Q}_p Qp目标函数值的上界(Upper bound)。缩放因子 ρ \rho ρ将奖励值的空间进行压缩,到更接近于0的区间值。

Network Architecture and Learning Algorithm

为了保证所提出框架的普适性和高效性,针对优化问题的特点,本文引入了两种深度网络架构,以对输入状态进行高质量的嵌入(Embedding)表征。第一个架构是图注意力网络(Graph attention network, GAT),这是由于许多组合优化问题天然地具备图结构,例如旅行商问题、车辆路径规划问题等。第二个架构是Set Transformer,这是由于在诸如投资组合优化问题中,我们希望保证输入变量顺序的不变性,例如编码的输入变量 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3} { x 3 , x 2 , x 1 } \{x_3, x_2, x_1\} {x3,x2,x1}应生成一致的输出。

无论是应用DQN还是PPO训练架构,本文均首先随机生成一系列训练样本,并使得训练样本的分布与我们试图解决问题的分布一致,这也是目前绝大多数应用机器学习求解NP-hard优化问题的研究的做法。

CP Encoding

约束规划(constraint programming,CP)是一种泛用性比较好的算法框架,在实际应用中常用于处理复杂的组合问题。因为应用场景和算法框架的相似,但却不像后者应用范围如此之广,所以人们常常将CP与整数规划(LP)进行比较,来更好的理解CP的特点与优势,如下图所示,虽然两种算法的框架都是系统性的搜索,但是在搜索中,CP不需要同时保证所有约束成立,而是对约束逐一分析,即约束传播(constraint propagation),再对变量的值域进行过滤,这使得CP在更复杂的组合问题(可行域连续性较差)中经常有超过LP的表现。
在这里插入图片描述
本文中的 CP 问题,可以使用一个四元组进行定义,其中 X X X 是所有变量构成的集合, D D D 是所有变量的值域构成的集合, C C C 是所有约束条件的集合, O O O 是目标函数。本节将会讲解如何通过 DP 模型的六元组得到 CP 所需的四元组并使用该四元组构建 CP 求解模型。

X X X:CP 问题中所需的变量分为两类,与 DP 相同,共有 n 各阶段,每个阶段有两个变量,分别为辅助变量 X i s X_i^s Xis 代表 i 阶段当前模型的状态,决策变量 X i a X_i^a Xia 代表 i 阶段所能够执行的决策动作,值得注意的是求解过程中只对决策变量进行搜索,辅助变量的值可在决策变量确定后通过约束得到。

D D D: CP 问题求解需要所有变量的值域,本文中两类变量的值域分别为 DP 中 S S S X X X 的值域集合。

C C C:包含所有 CP 模型中的约束条件,是 CP 建模的核心,具体的约束如下:

X i s = ϵ ( 1 ) X_i^s = \epsilon \quad(1) Xis=ϵ1
X i s + 1 = T ( X i s , X i a ) ∀ i ∈ { 1 , . . . , n } ( 2 ) X_i^{s+1} = T(X_i^s, X_i^a)\quad \forall i \in\{1, . . .,n\}\quad(2) Xis+1=T(Xis,Xia)i{1,...,n}(2)
v a l i d i t y C o n d i t i o n ( X i s , X i a ) ∀ i ∈ { 1 , . . . , n } ( 3 ) validityCondition(X_i^s, X_i^a) \quad\forall i \in\{1, . . .,n\}\quad (3) validityCondition(Xis,Xia)i{1,...,n}(3)
d o m i n a n c e C o n d i t i o n ( X i s , X i a ) ∀ i ∈ { 1 , . . . , n } ( 4 ) dominanceCondition(X_i^s, X_i^a) \quad\forall i \in\{1, . . .,n\}\quad(4) dominanceCondition(Xis,Xia)i{1,...,n}(4)

约束(1)代表初始状态设置为一个值(例如 ϵ \epsilon ϵ)(2)是通过 DP 的转换函数 T T T 将每个阶段的状态链接到前一个阶段 (3)使用 DP 中的 V V V 检验每个阶段状态的可行性 (4)添加 DP 中的 P P P 增加冗余约束加快收敛

O O O:给出 CP 问题的目标方程,本文中通过将每个阶段 CP 的决策变量与环境变量的取值对应到 DP 问题中得到每个阶段的回报 R R R 并求和。

max ⁡ x a ∑ i = 1 n R ( X i s , X i a ) \max_{x^a}\sum_{i=1}^{n} R(X_i^s, X_i^a) xamaxi=1nR(Xis,Xia)

Search Strategy

从前文中,我们已经将同一个DP模型同时转换为RL模型和CP模型,这使得我们可以将RL中训练得出的agent用于CP求解的搜索过程中,针对于不同的应用场景和不同的RL模型,本文提供了三种不同的CP搜索策略,深度优先分枝定界depth-first-branch-and-bound search (BaB),有限差异束搜索iterative limited discrepancy search (ILDS) 基于数值优化进行搜索,更适合于DQN训练出的Agent,而重启搜索restart based search需要一定的策略随机性,更适合policy-based的强化学习训练模型。

实验结果

为了评估算法的性能,本文在两个应用场景上分别测试了三种基于RL的CP搜索策略的算法,RL和CP不结合各自单独求解的算法以及一些工业求解器的算法,其中第一个测试场景为the travelling salesman problem with time windows (TSPTW),是包含非线性约束的常见组合优化问题,另一个测试场景为4-moments portfolio optimization problem (PORT),则是目标为非线性函数的经典组合优化问题。为确保公平性,训练时常都限制再48小时之内,内存占用在1Gb之内,都使用同一台GPU (Tesla V100-SXM2-32GB)执行所有算法。

TSPTW 实验结果

Table1中,我们可以看在城市的数量增长后 OR-Tools、CP-model 和 DQN 的结果明显差于各种RL和CP的混合方法。在混合方法中,基于 DQN 的搜索在寻找解决方案和证明最优性方面都给出了最好的结果。同时使用cache能够明显的提升混合算法的效率。这是因为RL训练得到模型调用次数极多,使用缓存会节约大量的搜索时间。

Table 1 主要实验结果1
在这里插入图片描述

PORT实验结果

Table2中,首先考虑目标函数连续的实例,其中size最小的实例,我们观察到 B a B − D Q N ⋆ BaB-DQN^{\star} BaBDQN, I L D S − D Q N ⋆ ILDS-DQN^{\star} ILDSDQN, 和 C P CP CP模型取得了最好的结果,但只有 B a B − D Q N ⋆ BaB-DQN^{\star} BaBDQN找到了所有的最优解。对于size较大的实例,非线性求解器可获得最佳结果,但紧随其后的是 R B S − P P O ⋆ RBS-PPO^{\star} RBSPPO。目标函数不连续时,非线性求解器由于难以利用求导来求解,而不再占有优势甚至APOPT不再支持这种问题的求解。但混合方法不受此影响,因为事先没有对 DP 公式进行连续性假设。从结果上看,各种混合式的求解算法效果更为优秀。

Table 2 主要实验结果2
在这里插入图片描述
Table 2 各算法在100个算例上的运行结果,其中高亮的是表现最好的算法,Sol代表算法给出的最优平均收益,Opt代表达到最优解的算例个数

总结

约束规划算法在组合优化中应用广泛且在复杂组合优化中表现出色,但性能受限于变量的搜索策略,本文通过动态规划作为桥梁联通强化学习和约束规划,将DQN和PPO等强化学习策略和BaB、RBS等搜索策略相结合,使得强化学习训练得到的经验能够帮助更好的进行CP搜索,同时在TSPTW和PORT两个普通组合优化算法表现不佳的非线性应用场景中进行了测试,展现了混合算法的显著提升。

参考文献

[1] Cappart, Q., Moisan, T., Rousseau, L. M., Prémont-Schwarz, I., & Cire, A. A. (2021, May). Combining reinforcement learning and constraint programming for combinatorial optimization. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 35, No. 5, pp. 3677-3687).
[2] Burak Gökgür, Brahim Hnich & Selin Özpeynirci (2018) Parallel machine scheduling with tool loading: a constraint programming approach, International Journal of Production Research, 56:16, 5541-5557, DOI: 10.1080/00207543.2017.1421781
[3] Kanet, John J.; Ahire, Sanjay L.; and Gorman, Michael F., “Constraint Programming for Scheduling” (2004). MIS/OM/DS Faculty Publications. Paper 1.


http://chatgpt.dhexx.cn/article/2H3F1iA4.shtml

相关文章

连续优化、离散优化、组合优化、整数优化和凸优化

optimization分类 4 Classification of optimization problem (IP: integer programming, MINLP: mixed integer non-linear programming, MILP: mixed integer linear programming, LP: linear programming, QP: quadratic programming, NLP: non-linear programming) 出自 其…

优化|深度学习或强化学习在组合优化方面有哪些应用?

来源&#xff1a;图灵人工智能 前 言 深度强化学习求解组合优化问题近年来受到广泛关注&#xff0c;是由于其结合了强化学习(Reinforcement learning)强大的决策(decision-making)能力和深度学习(deep learning)的各种模型(RNN、Transformer、GNN等等)强大的信息提取表征能力…

组合最优化

组合最优化(参考资料) 最优化问题 ​ 最优化问题涉及的应用领域很广&#xff0c;问题的种类与性质繁多&#xff0c;归纳起来&#xff0c;可分为函数优化问题和组合优化问题两大类。其中函数最优化问题的解是一定区域内连续取值的量&#xff0c;而组合优化问题的解则是离散取值…

进化算法——组合优化

离散优化问题&#xff0c;也被称为组合优化问题&#xff0c;我们可以视之为在候选目标的有限集中找出最优目标 被称为搜索空间的基数。在理论上我们可以通过评价这个解的每一个f(x)来求解上式&#xff0c;这种组合优化的方法被称为穷举搜索或蛮力。 目录 旅行商问题TSP 旅行商…

组合优化求解方法

1. 离散优化/整数规划 整数规划&#xff0c;或者离散优化&#xff08;Discrete Optimization&#xff09;&#xff0c;是指数学规划问题中自变量存在整数。 混合整数规划&#xff08;Mixed Integer Programming, MIP&#xff09;&#xff0c;即自变量既包含整数也有连续变量 …

【容器~原始真解】Docker —— 容器的使用

&#x1f50e;这里是【秒懂云原生】&#xff0c;关注我学习云原生不迷路 &#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励 欢迎各位&#x1f50e;点赞&#x1f44d;评论收藏⭐️ &#x1f440;专栏介绍 【秒懂云原生】 目前主要更新微服务和容器&#…

一文搞懂“镜像“和“容器“

众所周知&#xff0c;在云原生技术领域中&#xff0c;容器这一概念显得尤为重要&#xff0c;但是我们在使用Docker或Kubernetes中时常也会听说镜像这一概念&#xff0c;因此我们就利用一篇文章讲述下容器和镜像的概念和相互关系。 1 什么是镜像 1.1 概念 镜像&#xff08;Mi…

Docker容器的概念

一&#xff1a;Docker详情解释 Docker 包括三个基本概念 镜像&#xff08;Image&#xff09;容器&#xff08;Container&#xff09;仓库&#xff08;Repository&#xff09; 理解了这三个概念&#xff0c;就理解了 Docker 的整个生命周期 4.1 镜像&#xff08;Image&#x…

Java的容器

1 容器简介 容器&#xff0c;是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、 箱子和包等。如图所示&#xff1a; 程序中的“容器”也有类似的功能&#xff0c;用来容纳和管理数据。比如&#xff0c;如下新闻网站的新闻 列表、教育网站的课程列表就…

云计算——容器

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.容器简介 二.主流容器技术 1.docker &#xff08;1&#xff09;容器的组…

什么是容器

什么是容器 一&#xff1a;概念二&#xff1a;容器API类图2.1 Collection2.2 Set2.3 List2.4 Map 三&#xff1a;详细解释3.1 Collection接口3.1.1 Collection用法 3.2 Iterator接口3.3 List接口3.4 Comparable接口 四&#xff1a;如何选择数据结构4.1 衡量标准&#xff1a;读的…

什么是应用容器

转载自https://www.cnblogs.com/qcloud1001/p/9273549.html 一、什么是容器&#xff1f; 容器这个词&#xff0c;当你第一眼看它或许脑子里是这东西&#xff1a;瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么&#xff0c;总的来说&#xff0c;容器给人第一印象就是——“装”…

Docker解读(什么是容器)

一、What Is A Container 容器映像是一个软件的轻量级独立可执行软件包&#xff0c;包含运行它所需的一切&#xff1a;代码&#xff0c;运行时&#xff0c;系统工具&#xff0c;系统库&#xff0c;设置。不管环境如何&#xff0c;集装箱化软件都可以运行相同的Linux和Windows应…

什么是Docker容器?Docker容器是如何工作的?

Docker是一种轻量级的虚拟化技术&#xff0c;同时是一个开源的应用容器运行环境搭建平台&#xff0c;可以让开发者以便捷方式打包应用到一个可移植的容器中&#xff0c;然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机&#xff0c;Docker容器提供轻量化的…

什么是容器云?

作者&#xff1a;宝哥devops运维 链接&#xff1a;http://t.cn/ECwSNgj 容器技术是近几年云行业发展中不可缺少的一环。Docker和k8s的大热极大可能会推动云计算PAAS层的完善和普及。那么容器云到底是怎样的技术形态&#xff1f;究竟是概念还是可落地的应用&#xff1f;在这篇…

容器和镜像的区别

这篇文章希望能够帮助读者深入理解Docker的命令&#xff0c;还有容器&#xff08;container&#xff09;和镜像&#xff08;image&#xff09;之间的区别&#xff0c;并深入探讨容器和运行中的容器之间的区别。 当我对Docker技术还是一知半解的时候&#xff0c;我发现理解Doc…

Docker容器

什么是 Docker&#xff1f;为什么会有 Docker&#xff1f;Docker 的优势&#xff1f; 为什么会有 Docker&#xff1f; 我们知道一款产品从开发到上线&#xff0c;从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题&#xff0c;尤其是当我们的产品多版本迭代之…

搞懂什么是容器?

操作系统是如何管理进程的 进程的特点&#xff1a; 可以相互通信&#xff1a;具有高级权限的进程可以攻击其他进程共享同一份文件系统&#xff1a;&#xff08;1&#xff09;进程可以对已有的进程进行增删改查&#xff0c;也就意味着高级进程可以将其他应用所需要的进程删掉&…

通俗讲解:什么是容器?为什么我们要使用它?

作为程序员&#xff0c;让我们回忆我们每天从事的熟悉得不能再熟悉的软件开发工作&#xff1a; 在本地搭好开发环境&#xff0c;进行开发工作&#xff0c;完了进行单元测试&#xff0c;把开发好的代码部署到测试系统&#xff0c;重复测试&#xff0c;最后部署到生产系统。 我们…

容器化技术概述

容器技术概述 一、什么是容器&#xff1f; 容器这个词&#xff0c;当你第一眼看它或许脑子里是这东西&#xff1a;瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么&#xff0c;总体来说&#xff0c;容器给人第一印象就是——“装”。 那今天我们要说的容器技术是怎么一个概念呢…