Decision-making Strategy on Highway for Autonomous Vehicles using Deep Reinforcement Learning_idm mobil-程序员宅基地

技术标签: 自动驾驶  

 

Decision-making Strategy on Highway for Autonomous Vehicles using Deep Reinforcement Learning

采用深度强化学习的自主车辆的决策支持策略

 

摘要:汽车自动驾驶技术是减少交通事故、提高驾驶效率的一种很有前途的技术。本研究以深度强化学习(DRL)为工具,针对自动驾驶车辆在高速公路上的超车行为,建立了一个基于深度强化学习(DRL)的决策策略。首先,建立了一个高速公路驾驶环境,其中ego车辆的目标是以高效和安全的方式通过周围的车辆。提出了一种分层控制框架来控制这些车辆,上层管理驾驶决策,下层管理车速和加速度。然后,应用特定的DRL方法,即dueling deep Qnetwork(DDQN)算法,推导出高速公路决策策略。讨论并比较了deep Q-network和DDQN算法的详尽计算过程。最后,通过一系列估计仿真实验,对所提出的高速公路决策策略的有效性进行了评价。说明了该框架在收敛速度和控制性能方面的优势。仿真结果表明,基于DDQN的超车策略能够高效、安全地完成高速公路的行车任务。

关键词:自主驾驶、决策、深度强化学习、dueling deep Q-network、深度Q学习、超车策略。

 

INTRODUCTION 

自动驾驶(AD)使车辆能够在无人驾驶的情况下执行不同的驾驶任务[1,2]。在人工智能(AI)巨大潜力的推动下,自主车辆或自动车辆已成为世界各国的研究热点之一[3]。许多汽车制造商,如丰田、特斯拉、福特、奥迪、威莫、梅赛德斯-奔驰、通用汽车等都在开发自己的自主汽车,并取得了巨大的进步。同时,汽车研究人员也在关注如何克服制造全自动化汽车的关键技术[4]。

自主车辆包含四个重要模块,即感知、决策、规划和控制[5]。感知是指自主车辆根据雷达、激光雷达、全球定位系统(GPS)等多种传感器的功能来了解驾驶环境的信息。决策控制器管理车辆的驾驶行为,这些行为包括加速、制动、变道、车道保持等[6]。规划功能帮助自动汽车找到合理的从一点到另一点的运行轨迹。最后,控制模块将命令车载动力总成各部件精确操作,完成驾驶操作,并遵循规划路径。根据这些模块的智能程度,将AD分为L0到L5六个层次[7]。

决策策略被视为人脑,在自主车辆中非常重要[8]。该策略通常由基于人类驾驶经验的手动规则或从监督学习方法中学习的模拟操纵生成。例如,Song等人。应用连续隐马尔可夫链预测周围车辆的运动意图。然后,利用部分可观测马尔可夫决策过程(POMDP)来构造一般决策框架[9]。[10]中的作者发展了在城市道路交通状况下做出适当决策的高级能力。所提出的决策策略是多准则的,有助于城市汽车在不同条件下做出可行的选择。在文献[11]中,Nie等人。讨论了联网自动化汽车的车道变更决策策略。相关模型是将协同跟车模型和候选决策生成模块相结合。此外,在[12]中的作者提到了类似人类的驱动系统的思想。它可以通过考虑人类驾驶员的驾驶需求来调整驾驶决策。

深度强化学习(DRL)技术被视为处理长序列决策问题的有力工具[13]。近年来,人们对基于DRL的自主驾驶进行了许多尝试。例如,Duan等人。通过强化学习(RL)方法建立了一个学习决策策略的层次结构[14]。这项工作的专业是独立于历史标记驾驶数据。文献[15,16]利用DRL方法来处理自动车辆的避碰和路径跟踪问题。在这两个结果中,相关的控制性能优于传统的RL方法。此外,在[17]中,作者不仅考虑了路径规划,还考虑了自主车辆的燃料消耗。相关的算法是深度Q学习(deepq-learning,DQL),并被证明能够很好地完成这两个驱动任务。Han等人。采用DQL算法确定连通自主汽车的换道或保持车道,将附近车辆的信息作为来自网络的反馈知识[18]。结果表明,该政策能够促进交通流和驾驶舒适性。然而,由于连续动作空间和大状态空间,常用的DRL方法无法解决高速公路超车问题[19]。

在本研究中,针对自动驾驶车辆,建立了一个基于DRL的高速公路超车驾驶策略。如图1所示,对所提出的决策策略进行评估和估计以适应其他复杂场景。首先,所研究的驾驶环境是建立在高速公路上,其中一辆ego车辆的目标是高效和安全地通过特定的驾驶场景。然后,一个层次控制结构显示出操纵的横向和纵向运动的自我和周围的车辆。在此基础上,推导了一种特殊的DRL算法,称之为dueling deep Q-network(DDQN),并将其应用于高速公路决策策略的求解。从理论上对DQL和DDQN算法进行了比较和分析。最后,通过一系列的仿真实验,讨论了该控制框架的性能。仿真结果表明,基于DDQN的超车策略能够高效、安全地完成高速公路的行车任务。

图1 为自主车辆建造的深层次信息获取系统可能会超过驾驶政策。

 

本文的主要贡献和创新点体现在三个方面:1)提出了一种基于DRL自适应优化的自动车辆高速公路超车策略;2)利用deep Q-network(DDQN)算法来解决决策问题的大状态空间问题;3) 通过多次设计的实验,证明了该决策策略的收敛速度和控制优化。

本文的以下组织结构如下:第二节介绍了高速公路行驶环境以及ego和周边车辆的控制模块。第三节定义了DQL和DDQN算法,其中详细讨论了RL框架的参数。第四节给出了一系列仿真实验的相关结果。最后,在第五节得出结论。

 

DRIVING ENVIRONMENT AND CONTROL MODEULT(驾驶环境与控制模块)

在本节中,将介绍所研究的高速公路驾驶场景。在不损失通用性的前提下,构建了一个三车道高速公路环境。此外,还描述了一个分级运动控制器来管理ego和周围车辆的横向和纵向运动。上层包含两个模型,即智能驾驶员模型(IDM)和最小化由车道改变引起的总制动(MOBIL)[20]。较低级别侧重于调节车辆速度和加速度。

 

HIGHWAY DRIVING SCENARIO(公路驾驶场景)

自主驾驶决策是指选择一系列合理的驾驶行为来完成特定的驾驶任务。在高速公路上,这些行为包括变道、保持车道、加速、刹车。主要目标是避免碰撞、高效运行和在首选车道上行驶。加速超越其他车辆是一种典型的驾驶行为,称为超车。

本文讨论了自主车辆在高速公路上的决策问题,研究驾驶场景如图2所示。橙色的车辆是ego的车辆,其他绿色的车辆被命名为周围的车辆。驾驶环境中有三条车道,本文推导的决策策略易于推广到不同的情况。ego车辆将以随机速度在中间车道初始化。

图2 三车道公路行驶环境决策问题

 

ego车辆的目标是尽快从起点运行到终点,并兑现周围的车辆。因此,这一目标被解释为效率和安全。随机设计了周围车辆的初始速度和位置。这意味着驾驶场景由实际驾驶的不确定性组成。此外,为了模拟实际情况,ego车辆更倾向于停留在1号车道(L=1),并且可以从右侧或左侧超越其他车辆。

在这个驾驶任务开始时,所有周围的车辆都位于ego车辆的前面。在每个车道上,周围车辆的数量为M,表示在这种情况下,附近有3M辆车。有两种情况会中断ego车辆,即撞毁其他车辆或到达目的地。从起点到终点的过程称为一集。

在不失概括性的前提下,确定了ego车辆的初始速度为[23,25]m/s,最大速度为40 m/s,所有车辆的长度和宽度分别为5m和2m,每集持续时间为100 s,模拟频率为20 Hz。从[20,23]m/s中随机选取周围车辆的初始速度,并通过IDM和MOBIL来控制它们的行为。下一节将详细讨论这两个模型。

 

B . VEHICLE BEHAVIOR CONTROLLER

所有车辆在高速公路环境中的运动由一个分层控制框架控制,如图3所示。上层应用IDM和MOBIL来管理车辆的行为,下层的目标是使ego车辆跟踪给定的目标速度并沿着目标车道行驶。本文采用DRL方法对ego车辆进行控制。参考模型表明,ego车辆由图3中的双层结构控制,并以此作为评估基于DRL的决策策略的基准。

图3.在本工作中,针对自我车辆和周围车辆使用了分层控制框架。

 

上层的IDM是一种普遍的微观模型[21],可以实现汽车跟随和无碰撞。在自动驾驶汽车的自适应巡航控制器中,纵向行为通常由IDM决定。一般而言,IDM的纵向加速度确定为[22]:

其中v和a是当前的车辆速度和加速度。amax是最大加速度,△d是到前车的距离,δ称为恒加速度参数。Vtar和dtar是目标速度和距离,所需速度由amax和dtar实现。在IDM中,预期距离dtar受前面车辆的影响,计算方法如下:

其中d0是预定义的最小相对距离,T是达到安全目标的预期时间间隔,△v是两辆车之间的相对速度,b是根据舒适目的的减速率.

在IDM中,先定义相对速度和距离,以求出每个时间步的车速和加速度。默认配置如下:最大加速度amax为6m/s2,加速度变元δ为4,期望时间间隔T为1.5s,舒适减速率b为-5m/s2,最小相对距离d0为10m。

由于IDM用于确定纵向行为,因此MOBIL用于做出横向车道变更决策[23]。MOBIL声明变道行为应遵守两个限制,即安全标准和激励条件。这些约束与自我车辆和它的两个追随者有关(变化前和变化后)。假设aoldi和aoldj是这些跟随器在变化前的加速度,而anewi和anewj是变化后的加速度。

安全标准要求跟随者在期望的车道上(改变后)限制其加速度以避免碰撞。数学表达式如下所示:

其中bsafe是在变道行为中施加给跟随器的最大制动。通过遵循(3),可以有效地避免碰撞和事故。

激励条件通过加速度阈值ath施加于自我车辆及其追随者:

其中z被命名为礼貌系数,以确定追随者在换道行为中的影响程度。这种激励条件意味着期望的车道应该比旧车道更安全。对于应用,MOBIL中的参数定义如下:礼貌因子z为0.001,安全减速极限bsafe为2 m/s2,加速阈值ath为0.2 m/s2。在确定上层的纵向和横向行为之后,下层被应用来跟随目标速度和车道。

 

C .  VEHICLE MOTION CONTROLLER 车辆运动控制器

在下层,车辆在纵向和横向的运动受到控制。前者通过比例控制器调节加速度,如下所示:

其中Kp是比例增益。

在横向方向,控制器通过简单的比例-微分动作来处理车辆的位置和方向。该位置表明车辆的横向速度vlat计算如下:

其中Kp,lat被命名为位置增益,△lat是车辆相对于车道中心线的横向位置。然后,航向控制与横摆角速度指令φ相关,如下所示:

其中φtar是目标航向角,以跟随期望的车道,Kp,lat是航向增益。

因此,周围车辆的运动由图3中的双层控制框架实现。这些车辆的位置、速度和加速度被认为是自我车辆已知的。这种限制促使自我车辆通过试错法学习如何在场景中驾驶。在下一节中,将介绍并建立DRL方法,以实现这一学习过程并得出公路决策政策。

 

III. DRL METHOD OLOGYDRL方法论

这一部分介绍了RL方法,并展示了特殊的DRL算法。首先解释了在RL中代理和环境之间的交互。然后,提出了将神经网络和Qlearning算法相结合的DQL算法。最后,在DQL算法中构造了一个dueling network来重构神经网络的输出层,从而提出了DDQN方法。

 

  1. RL CONCEPT

RL方法描述了智能代理与其环境交互的过程。它对于解决顺序决策问题是强大而有用的。代理的目标是基于环境的反馈来搜索最优的控制动作序列。由于其自我评价和自我提升的特点,逆向学习被广泛应用于许多研究领域[24-28]。

在高速公路的决策问题中,主体和环境分别是自我车辆和周围车辆(包括行驶条件)。马尔可夫决策过程(MDPs)嵌入在马尔可夫属性中,即下一个状态变量只与当前状态和动作有关[29]。这种MDP经常被用来表示作为元组(S,A,P,R,γ)的RL交互,其中S和A是状态和控制集。P和R是关系学习环境中的重要元素,它们分别指的是过渡模式和奖励模式。在现实生活中,当前的行为会同时影响当前和未来的回报。因此,γ是平衡这两部分奖励的贴现因子。

为了表示未来奖励列表,累计奖励Rt定义如下:

其中t是时间瞬间,rt是相关的奖励。为了记录状态s和状态-动作对(s,a)的价值,两个价值函数由累积奖励表示为:

其中π被称为控制动作策略,V是状态值函数,Q是状态动作函数(简称Q表)。为了便于更新,状态-动作函数通常被重写为递归形式:

最后,关于控制策略π的最佳控制动作由状态动作函数确定:

因此,不同RL算法的本质是以各种方式更新状态动作函数。根据更新规则的类型,反向链路算法可以有不同的分类,例如基于模型和无模型、基于策略和基于值、时间差分和蒙特卡罗[30]。

 

B . DEEP Q NETWORK

Deep Q network(DQN)是在[31]中首次提出玩雅达利游戏的。它综合了深度学习(神经网络)和Q-learning的优点来获得新的状态值函数。在普通的Q-learning中,该函数的更新规则如下:

其中α∈ [0,1]被命名为一个学习率,用来权衡从环境中获得的新旧经验。s'和a’是下一步的状态和动作。

普通的Q学习不能处理状态变量空间大的问题,因为它需要大量的时间来获得可变的Q表。因此,在DQN,神经网络被用来近似Q表为Q(s,a;θ)。对于神经网络,输入是状态变量和控制动作的数组,输出是状态值函数[31]。

为了测量DQN近似Q表和实际Q表之间的差异,引入了损耗函数,如下式所示:

其中

可以看出,神经网络有两个参数(θ和θ’),代表DQN的两个网络。这些网络是预测和目标网络。前者用于估计当前控制动作,后者旨在生成目标值。通常,目标网络会每隔一定数量的时间步长从预测网络复制参数。这样,目标Q表将收敛到预测值,在一定程度上缓解了网络的不稳定性。

在DQN,在线神经网络通过梯度下降更新如下:

这个操作使DQN成为一个off-policy算法,状态和奖励是通过一个特殊的标准获得的。这个规则被称为ε贪婪,它表示代理以概率ε执行探索(选择一个随机动作),并以概率1-ε进行开发(使用当前的最佳动作)。

 

C . DUELING DQN ALGORITHM

在一些RL问题中,当前的控制动作的选择显然不会导致负面结果。例如,在高速公路环境中,许多动作不会导致碰撞。然而,这些选择可能会间接导致后来的糟糕回报[32]。受这一观点的启发,本文提出了一个dueling network来评估每一步控制行为的价值。一种新的神经网络被构造来近似公路决策问题中的Q表,如图4所示。

图4。dueling network 结合state-value network 和advantage network 进行Q表更新

两个完全连接层被用来估计每个动作的状态值函数和优势函数。因此,状态-动作函数(Q表)如下构成:

很明显,这个新的dueling network的输出也是一个Q表,因此在DQN使用的神经网络也可以用来近似这个Q表。具有两个参数的网络计算如下:

其中θ1和θ2分别是状态值函数和优势函数的参数。

为了更新DDQN中的Q表并实现最佳控制动作,将(18)重新表述如下:

可以推断,DDQN和DQN的输入输出接口是相同的。因此,(16)中的梯度下降能够在本工作中循环用于训练Q表。

 

D . VARIABLES SPECIFICATION.变量规格

为了得到基于DDQN的决策策略,初始条件初始化如下,计算过程很容易转化为类似的驾驶环境。控制作用是纵向和横向加速度(a1和a2),单位为m/s2和rad:

值得注意的是,当这两个加速度为零时,ego车辆采用idling控制。

在获得加速作用后,车辆的速度和位置可计算如下:

式中,v1、v2分别为车辆的纵向和横向速度,与d1和d2相似。策略频率为1Hz,表示时间间隔△t为1秒。值得注意的是,(23)和(24)同时适用于自我车辆和周围车辆,这些表达式被认为是RL中的过渡模型P。然后,将状态变量定义为ego与附近车辆之间的相对速度和距离:

上标ego和 sur分别代表自我车辆和周围车辆。

最后,以避免碰撞、尽可能快跑和尽可能在车道1(L=1)上行驶为最优控制目标,构建了奖励模型R。为了实现这一观点,瞬时奖励函数定义如下:

其中collision∈{0,1}和基于DDQN的高速公路决策策略的目标是最大化累积回报。

所提出的决策控制策略在基于OpenAI gym Python toolkit的仿真环境中进行了训练和评估[31]。车道和周围车辆的数量分别为3条和30辆。贴现率γ和学习率α分别为0.8和0.2。价值网络和优势网络的层次都是128。随着时间步长6 000,ε的值从1减小到0.05。不同DRL方法的训练集数为2000集。下一部分讨论了所提出的自动驾驶车辆决策策略的有效性。

 

IV. RESULTS AND EVALUATION(结果和评价)

在这一部分中,通过与基准方法的比较,对提出的公路决策政策进行了评估。这些技术是图3中的参考模型和第III.B节中的普通DQN。通过对这三种方法进行比较,分析了其最优性。此外,通过将训练好的模型应用于类似的高速公路驾驶场景,验证了该方法的适应性。

 

A . OPTIMALITY EVALUATION(最优性评价)

本节对参考模型、DQN和DDQN进行了比较。它们都采用了分级控制框架。下级相同,利用(5)-(7)来调节加速度、位置和航向。第III.B节的DQN算法,第III.C节的DDQN算法的上层不同,即IDM和Mobil。DQN和DDQN的默认参数相同。

图5描述了这三种方法的标准化平均回报。根据(27)中奖励函数的定义,较高的奖励表示以更有效的机动在首选车道上行驶。显而易见,DDQN的训练稳定性和学习速度优于其他两种方法。此外,在大约500集之后,DDQN的回报比其他两种方法更大,并且它一直保持这种势头。它们都比参考模型好。这主要是由DDQN中的优势网络造成的。这个网络可以评估每一步所选择的行动的价值,这有助于自我载体快速找到更好的决策策略。

图5。三种比较方法的平均报酬差异:参考模型、DQN和DDQN。

 

为了观察这项工作中状态变量的轨迹,图6显示了这三种比较技术中的平均车速和行驶距离。他们都经过2000集的训练。较高的平均值意味着自我车辆可以更快地通过驾驶场景,并获得更大的累积回报。行驶距离意味着自我车辆可以在没有碰撞的情况下行驶更长时间。这些结果直接反映了安全和效率的要求。显著的差异能够证明所提出算法的最优性。

图6。在这些比较技术的每一集中,自我车辆的车速和行驶距离。

由于自我车辆不愿意碰撞周围车辆,这三种控制情况的碰撞条件在图7中描述,其中碰撞具有两个值(碰撞= 0或1)。可以注意到,DDQN、DQN和支持参考模型的代理可以分别在1300、1700和1950集之后避免冲突。这个外观也可以证明基于DDQN的代理比其他两个代理更智能。由于安全声明是自动驾驶实际应用的首要关注点,因此基于DDQN的学习决策模型更有希望应用于现实环境。

图7。每种比较方法中自我车辆的碰撞情况:碰撞=0,自我车辆不碰撞其他车辆;碰撞=1,自我车辆碰撞其他车辆。

 

此外,在这三种方法中,防御的具体控制行为是不同的。图8给出了一个成功事件的控制动作序列曲线(意味着自我车辆可以从起点行驶到终点)。自我载体在纵向和后期方向上的动作不作为五个选择被告知。他们在换左车道,换右车道,空转速度,跑得更快,跑得更慢。这些轨迹之间的差异表明,所提出的决策策略不同于两种基准方法(在同一成功事件中)。总的来说,根据本小节中的所有显示结果,说明了启用DDQN的决策策略的最优性。

 

图8。在三种比较方法的一次成功发作中的控制动作:索引=1,改变左车道;索引=2,idling speed;索引=3,换右车道;索引=4,运行速度更快;索引=5,运行较慢。

B . COMPARISION BETWEEN DQN AND DDQN(DQN与DDQN的比较)

由于DQN和DDQN是两种永久的DRL算法,本实验旨在评价这两种方法的学习和训练过程。因为神经网络的目标是获取可变的Q表。两种方法在训练过程中Q表的归一化均值差异如图9所示。下降趋势图表明,两种自我驾驶车辆通过相互作用,对驾驶环境更加熟悉。此外,可以看出,通过相同的片段,DDQN可以学习到更多关于交通状况的知识,从而使学习过程更快。因此,在DDQN算法的指导下,自我车辆可以更高效、更安全地进行操作。

图9。两种DRL方法在训练过程中Q表的平均差异。

 

为了展示dueling network 在这个自主驾驶问题的未来决策中的使用,图10讨论了累积奖励的轨迹。上升趋势的变化意味着控制行为选择能够改善未来的回报。当DDQN大于DQN时,说明相关agent可以获得更好的控制性能。这也归因于DDQN中的优势网络,它使自我车辆能够量化当前控制行动的潜在价值。为了评估上述决策策略在类似驾驶条件下的适应性,下一节将讨论这些策略的适应性。

图10。DQN和DDQN累积奖励:累积奖励越高,控制行为选择越好。

 

C . ADAPT ABILITY ESTIMATION(适应能力评估)

在高速公路驾驶环境下对自动驾驶车辆进行学习和训练后,用一集来测试自动驾驶车辆的自适应能力。本作品的测试集数为10集。默认设置和车道数及周边车辆数与训练过程相同。神经网络的学习参数被保存起来,可以在新的条件下直接利用。最关心的因素是测试操作的平均报酬和碰撞条件。

图11为测试实验中参考模型、DQN和DDQN方法的归一化平均收益。由(27)可知,奖励主要受碰撞条件和车速的影响。平均奖励可能不会达到最高分(在这个作品中是100分),因为自我车辆有时不得不减速以避免碰撞。自负车也需要换道以实现超车过程。为了不失一般性,我们选择了两种典型的情况(两集,图10中的A和B点)来分析自我载体的决策行为。

图11。三种比较方法测试实验中的规范化奖励

 

图12描绘了一种驾驶情况,在该驾驶情况下,在该自我车辆前面有三个周围车辆(该情节由点A表示)。自我车辆必须长时间执行跟车策略,并等待超车的机会。因此,车辆速度可能达不到最大值,并且在到达目的地之前,自我车辆可能不会超过周围的所有车辆。此外,在图13中描述了罕见的驾驶状况(由B点表示的情节)。自我车辆想要实现一个危险的变道以获得更高的回报。然而,由于运营空间不够,它将附近的车辆变现。这种情况可能不会发生在训练过程中,因此自我车辆可能会导致碰撞。

图12。一个典型的测试驾驶条件是:自我车辆必须长时间执行跟车行为。

图13。另一个有代表性的测试驾驶条件:自我车辆进行危险的车道变换和碰撞发生。

 

基于图12和13中的详细分析,它提示我们花更多的时间来训练可变的决策策略。这些结果也提醒我们,相关的控制策略有可能应用于现实世界的环境中。表1提供了DQN和DDQN方法的培训和测试时间。虽然培训时间只能离线实现,但学习的参数和策略可以在线使用。这启发我们在可视化仿真环境中植入我们的决策策略,并在未来进行相关的回路实验。

 

V. CONCLUSION结论

本文讨论了利用DRL技术进行公路决策的问题。通过在设计的驾驶环境中应用DDQN算法,构建了一个高效安全的控制框架。通过一系列仿真实验,证明了算法的最优性、收敛速度和适应性。此外,对测试结果进行了分析,证明了该方法在实际环境中应用的潜力。未来的工作包括通过执行硬件在环(HIL)实验在线应用公路决策。此外,现实世界收集的公路数据库可以用来估计相关的超车策略

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45544836/article/details/107659409

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签