当前位置: 首页 > news >正文

Model-based RL自动出价算法的演进之路

▐ 导读

近年来,强化学习自动出价算法已成为智能投放领域的标志性技术,然而其所存在的在离线不一致、线上数据覆盖空间受限等关键问题尚未被完全解决。在本文中,我们提出一种Model-based RL(MBRL)自动出价算法训练新范式,进一步缓解上述两点挑战。经过一年的迭代,MBRL自动出价算法已在阿里妈妈万相台无界版全站推场景、货品场景、关键词场景和精准人群推广场景中完成扩流,显著增强了投放效果。未来,在基于监督学习的预训练方法逐渐收敛的趋势下,MBRL以其高效的样本利用率与基于探索超越数据集的能力,将进一步赋能生成式自动出价算法,焕发新的活力。

1. 概述

近年来,出价产品智能化已经成为在线广告行业的主要发展趋势之一。广告主只需要表达预算、优化目标及拿量成本,自动出价(Auto-bidding)算法就会代表广告主在海量流量上进行自动化竞价,以满足广告主的营销诉求。然而每个广告主的竞价流量数量众多且复杂多变,自动出价算法需要找到一个能够在整个投放周期内满足设定成本并效果最优的出价序列,是一个复杂的序列决策问题。随着机器学习的发展,从19年开始,以擅长序列决策问题著称的强化学习(Reinforcement Learning,RL)算法逐渐用于自动出价算法中。强化学习以试错学习(Trial&Error)为基本思想,在没有明确的最优出价序列的监督信号条件下,通过学习不同出价序列的反馈数据,逐步优化出价策略。至今,强化学习出价算法已经在业界大规模落地,显著提高了投放效果。

1.1 强化学习自动出价算法的范式变迁

纵观强化学习自动出价算法的发展历程,整体上经过了由基于离线仿真器训练(Simulation-based RL Bidding,简称SBRL,代表算法USCB [1]等)到抛弃离线仿真器、直接利用线上真实数据训练(Offline RL Bidding,简称ORL,代表算法CQL [2]等)的范式转变*(如图1中①和②所示)。众所周知,强化学习训练中的试错学习过程需要与问题对应环境交互以产生反馈样本,然而出于安全和效率考虑,线上竞价环境无法在强化学习训练中使用,因此一个自然的想法便是人为构建一个可以模拟线上竞价环境的离线仿真器用于训练,这就是SBRL范式。在19年到21年间的强化学习自动出价算法多采用SBRL范式进行训练。然而当时的离线仿真器多采用简单规则构建,与线上真实环境的gap很大,在离线不一致问题较为严重(见3.3.2实验1)。为缓解在离线不一致问题,从22年开始,一种主流的解决思路是能否抛弃离线仿真器、直接利用线上真实数据进行训练,这便是ORL范式的基本思路。然而线上真实数据集往往由单一的线上主模型产生,其覆盖的状态-出价空间有限,在没有离线仿真器可以进一步交互的条件下,ORL无法利用到数据集覆盖空间之外的状态-出价数据进行训练,导致训练得到的自动出价策略通常被限制在线上真实数据集附近,优化幅度较小(见3.3.2实验2)。

e631c6dba7888312d7c648cfa61babc8.png
图1. 强化学习自动出价算法的范式变迁。整体上其经过了由基于离线仿真器训练(SBRL)到抛弃离线仿真器、直接利用线上真实数据训练(ORL)的范式转变。本文提出了一种基于环境模型建模的新强化学习自动出价范式(MBRL)。

*图1展示的均为在没有进一步与线上竞价环境交互下的强化学习自动出价范式变迁。实际上,可以设计线上探索方法以扩充数据集&获得新反馈,这种线上探索的方法可以与上述每一种offline范式结合,升级为online的范式。online范式升级与图1展示的范式变迁正交,本文不做重点讨论,online范式的详细方法可见[3]。

1.2 MBRL自动出价算法演进之路Overview

23年10月,我们开始尝试基于环境模型的强化学习自动出价算法训练新范式(Model-based RL Bidding,简称MBRL)。如图1中③所示,MBRL的基本思路为:基于线上真实数据,利用深度学习训练一个泛化性较好的神经网络环境模型以模拟线上竞价环境,其所产生的数据在经过置信度处理后作为离线虚拟数据丰富训练集,与线上真实数据共同训练出价策略,构成 “虚实融合” 的训练新范式。MBRL避免了SBRL中对于离线仿真器的不精确(如果做精准会很复杂)的人工构建,通过深度学习实现对线上真实数据所包含竞价环境信息的提取,大幅缓解了在离线不一致问题;对比ORL范式,MBRL进行了丰富且可靠的训练数据扩充,打破了ORL中出价策略在只在数据集附近优化的束缚,为优化幅度的提升开拓了空间。

24年,我们将MBRL成功迁移到具有ROI约束的TargetROAS计划上,其中我们新增了Lagrange对偶梯度法计算ROI约束下的出价策略梯度,并利用神经网络环境模型提供梯度计算所需数据,提出了具有收敛性理论保证的Lagrange-MBRL算法。同年,我们针对MBRL训练中存在的问题进行技术打磨,大幅提升了其训练稳定性。

至今,MBRL已经在阿里妈妈万相台无界版的货品场景、关键词场景、精准人群推广场景和全站推场景中完成扩流,在大盘覆盖计划中带来 消耗 +3.5% / GMV +4.5% 的收益,显著增强了广告主的投放成效。

2. Preliminary:自动出价问题建模

为了便于后续算法展开,在本节我们给出自动出价问题的形式化建模并描述了出价的调控过程。考虑一个广告主的单个投放计划在一个投放周期(设定为一天)内的投放过程,自动出价问题可以统一形式化为:

99c4469967522d45a26d901b5e367b44.png

其中 代表第 个流量是否竞得 和 分别代表第 个流量的价值和竞得的扣费, 为第 个成本约束, 为广告主设定的预算。在本文中,我们主要考虑在阿里妈妈万相台无界版中消耗占比最多的两类自动出价问题:

  • BCB(Budget Constrained Bidding)问题:只有预算约束,没有成本约束;

  • TargetROAS(Target Return on Ad Spend )问题:成本约束为ROI约束。

对于这两种问题而言,在第 个流量上的最优出价形式为 [1],其中 是未知参数。基于此,我们设定投放周期内的调控过程为:在每个流量上采用上述出价形式,并且每隔固定的时间间隔对 进行一次调节,整个调控周期中共有 次 的调节。上述调控过程可以利用马尔可夫决策过程(Markov Decision Process,MDP) 进行建模,其中 为状态空间, 为动作空间:出价动作 即为 的调整幅度; 为状态转移函数,是由竞价环境决定的; 为奖励函数,针对BCB问题和TargetROAS问题需要进行不同设计。我们构建一个神经网络模型 用来学习每个时刻最优的 调整幅度,令 为神经网络的参数。我们称 为出价策略,也是最终要学习的目标。

下面我们将分别介绍针对阿里妈妈万相台无界版中消耗占比最多的BCB和TargetROAS两类计划的MBRL算法及其实验结果。

3. 针对BCB问题的MBRL算法

3.1 Overview

针对BCB问题的MBRL算法整体流程如图2所示:

  • 首先,我们基于线上真实数据拟合一个神经网络环境模型,并且利用出价策略与环境模型进行大量交互以产生丰富的离线虚拟数据。得利于神经网络的泛化性,神经网络环境模型可以大幅降低离线虚拟数据的在离线不一致问题;

  • 其次,离线虚拟数据会经过置信度处理,以进一步降低神经网络环境模型的不准确性对出价策略训练产生的负面影响。其中我们以环境模型的拟合方差来衡量离线虚拟数据的置信度,并对离线虚拟数据中的奖励函数进行正比于置信度的惩罚,从而避免环境模型的错误“乐观”(即对于奖励函数的高估)对出价策略训练带来误导;

  • 最后,离线虚拟数据与线上真实数据混合,一起作为训练集对出价策略 进行“虚实融合”训练。训练中我们发现:利用传统的RL方法训练会使得出价策略的各种离线指标不收敛的情况,这为后续的模型挑选带来困难。经过分析认为这种不收敛是由于贝尔曼方程的自举误差带来的,尤其在利用缺乏状态转移偏差修正的离线虚拟数据训练的情况下,这种自举误差更为严重。为此,我们设计了COMBO+MICRO的训练方法对离线虚拟数据的状态转移偏差进行限制以缓解自举误差,提升了出价策略训练的稳定性。

e268d50e1f6ab0f46c025fec8a3b451f.png
图2. 针对BCB问题的MBRL算法整体流程。

3.2 算法模块细节

下面分别介绍神经网络环境模型、置信度处理机制和COMBO+MICRO训练方法这三个主要模块。

3.2.1 神经网络环境模型

神经网络环境模型以状态 (或其历史序列)和出价动作 (或其历史序列)作为输入,输出奖励函数和下一时刻状态的高斯分布均值和方差,并通过重参数化的方式确定具体的奖励函数和下一时刻状态的预估值 和 。神经网络环境模型可以采用任意的网络结构,例如MLP、ResNet、Transformer等,拟合能力越强的网络结构越有助于提高环境模型的精度,也越有助于增强MBRL训练的出价策略 的性能。神经网络环境模型的训练是一个典型的监督学习问题,我们采用最大似然函数作为损失函数,并利用线上真实数据作为训练集,梯度更新其参数直到收敛,之后神经网络环境模型的参数便被freeze,在后续流程中不再变动。

3.2.2 置信度处理机制

为进一步降低神经网络环境模型预估的不准确性对策略训练带来的负面影响,我们对其产生的离线虚拟数据进行进一步的置信度处理。具体而言,在离线虚拟数据加入策略的训练集之前,我们对其中预估的奖励值施加一定的惩罚,由 变为 ,即

惩罚项

其中 代表惩罚项。这样做的目的是使得策略对线上真实数据集外的数据产生一定程度上的“悲观”,从而避免由于神经网络环境模型对状态空间中某些区域的错误乐观(即对奖励值的高估)而导致的策略性能下降,可以证明:利用置信度处理后的奖励 训练可以提升出价策略在真实竞价环境中性能的下界[4]。那么如何设计惩罚项 的具体形式呢?注意到由于神经网络往往在数据稠密的地方拟合效果好,方差小;在数据稀疏的地方拟合效果差,方差大,如图3所示,因此神经网络环境模型的拟合方差是一种天然的 选择。因此我们训练 个神经网络环境模型,让他们同时输出对于的奖励函数预测,并计算这些预测值的方差,记为 ,则惩罚项 的具体形式为:

其中 为常数。

3fe7850f190e7684149346ac2932b060.png
3.2.3 COMBO+MICRO训练算法

Q值不稳定问题:理论上任意RL算法均可以用于此处出价策略的训练,然而我们在实验过程中发现使用传统RL算法(例如SAC[3])训练出价策略的各项离线指标抖动较大,其中出价策略的Q值仍可能会不合理的持续升高,甚至无法收敛(如图4所示),这对策略的挑选带来影响。经过分析我们认为这种不收敛性来自于Q函数TD-loss中贝尔曼算子带来的误差累计。具体而言,TD-loss为:

´íÎó

其中 是基于当前Q函数估计的贝尔曼算子,公式为:

可以看到,TD-loss实际是一个以 为近似groundtruth的MSE-loss,而 中的第二项 就是Q函数本身,即Q函数的更新是自举的,Q函数的不准确性本身会导致其更新的不准确性,尤其在训练初期,Q函数不准确度很高,传统RL算法缺失了对Q函数本身的限制。此外,在置信度处理时我们仅对神经网络环境模型产生的奖励函数进行处理,而没有对其状态转移估计 的不准确性进行处理,神经网络环境模型可能产生不合理的远离线上真实数据集的 ,导致 值较高,从而带来Q函数的高估和不收敛问题。

COMBO+MICRO训练算法:针对Q值仍可能存在的高估和不收敛问题,我们参考了COMBO算法 [6]和MICRO算法[7]的思路,对两者进行融合,在原来Q函数损失函数的基础上做如下两项改动:

  • COMBO:对线上真实数据集之外的数据(s,a)进行均匀采样 ,并打压其Q值。由于Q值是后续累计奖励的期望,因此COMBO可以看成是对置信度处理机制的增强。

  • MICRO:考虑 的不确定性对 的影响,避免神经网络环境模型的不合理的 预估带来Q函数高估。具体而言,我们对神经网络环境模型预估的 进行采样,取最小的Q值作为 中的第二项,即 。

结合上述两项改动,得到最终的Q函数更新函数如下所示(红色为新增部分):

9d1b3092a89ab736b62abe0d79955e47.png

其中 为正则化系数,用于平衡真实数据集中的状态动作对和环境模型生成的状态动作对之间的保守性, 是均匀分布, 是真实数据集, 是混合数据集,由线上真实数据和神经网络环境模型生成的离线虚拟数据组成, 为 分布:若 ,则 ;否则 是神经网络环境模型的预估值, 从其输出的高斯分布中采样。

3.3 实验结果

3.3.1 线上实验

MBRL在阿里妈妈万相台无界版货品场景、关键词场景、精准人群推广场景的BCB计划上均取得了显著效果,带来消耗 +1.3% / GMV +5.0% / ROI +3.7% 的收益。

3.3.2 消融实验

为了进一步验证MBRL有效性,我们对MBRL进行了如下消融实验:

  • 神经网络环境模型准度评估:验证相比SBRL中的简单离线仿真器是否可以缓解离在线不一致问题?

    • 实验设置:神经网络环境模型与SBRL中常用的简单GSP环境模型进行对比;

    • 实验结果:状态转移MAE -68.3% ,奖励函数MAE -90.0%

    • 结论:神经网络环境模型可以大幅缓解在离线不一致问题。

  • 出价策略轨迹与线上真实数据集距离评估:我们已知MBRL相比ORL性能更好,我们想进一步查看性能更好的出价策略的轨迹与线上真实数据间的距离是否更大,以证明MBRL可以突破线上真实数据集的束缚寻优。

    • 实验设置:观测MBRL出价策略和ORL出价策略到线上真实数据集之间的Wasserstein距离;

    • 实验结果:效果较好的MBRL出价策略的轨迹会比效果较差的ORL出价策略的轨迹离线上真实数据集更远( +15.55% )。

    • 结论:验证了相比ORL是否可以探索出更优异的轨迹;

  • 训练稳定性评估:验证提出的COMBO+MICRO算法是否可以提升出价策略训练的稳定性?

    • 实验设置:对比了无COMBO+MICRO(图中MBRL-V1,蓝线)和包含COMBO+MICRO方法的MBRL(图中MBRL-V2,黄线)在9个稳定性指标上的稳定性差异;

    • 实验结果:如图5所示,增加COMBO+MICRO算法后,MBRL的训练稳定性有了明显的提升。

04e48f8cccd09259cc9f662f77d2df02.png
图5. 无COMBO+MICRO(MBRL-V1,蓝线)和包含COMBO+MICRO方法的MBRL(MBRL-V2,黄线)在9个稳定性指标上的稳定性差异。可以看到增加COMBO+MICRO算法后,MBRL的训练稳定性有了明显的提升。

4. 针对TargetROAS问题的Lagrange-MBRL算法

与BCB问题不同,TargetROAS问题中存在额外的ROI约束,如何训练满足ROI约束的出价策略是算法的设计关键。一种常用的处理ROI约束的方式是在奖励函数中额外加入ROI惩罚项,进行reward shaping。然而ROI只有在投放周期结束时才可以计算,导致ROI惩罚项只存在于最后一步的奖励函数中,造成了奖励稀疏的问题。此外,reward shaping的方式缺乏收敛的理论保证,这些都给TargetROAS出价策略训练带来困难。为此,我们提出了Lagrange-MBRL方法缓解了上述问题。

4.1 Lagrange-MBRL Overview

Lagrange-MBRL算法的整体框架如图6所示,主要包含拉格朗日对偶梯度法和神经网络环境模型两个模块,其中拉格朗日对偶梯度法给出了出价策略更新的方式,而神经网络环境模型则提供了用于支持出价策略进行拉格朗日对偶梯度法更新的数据。两个模块的基本思路如下:

  • 拉格朗日对偶梯度法:拉格朗日对偶梯度法从理论上计算出出价策略的梯度,并通过原域和对偶域交替的方式进行更新,实现了在保障ROI达标的基础上优化出价策略。对比reward shaping的方式,拉格朗日对偶梯度法可以通过根据ROI达标情况自动调节对偶系数的方式保障ROI约束,避免了稀疏ROI惩罚项的引入。此外拉格朗日对偶对偶梯度法具备收敛性的理论保障。

  • 神经网络环境模型:我们沿用BCB问题的MBRL算法中的神经网络环境模型方法,基于线上真实数据拟合神经网络环境模型以生成训练样本,产生用于拉格朗日拉对偶梯度法更新的数据。

d55aa27b8ab1da1bfc2f395bf4ff2c21.png
图6. Lagrange-MBRL算法的整体框架。

由于Lagrange-MBRL中神经网络环境模型的构建和训练与上一节相同,因此下文中主要对拉格朗日对偶梯度法进行介绍。

4.2 拉格朗日对偶梯度法

为方便后文的算法展开,我们对TargetROAS问题进行重新表述。在此,我们考虑同时拥有上界和下界ROI约束的TargetROAS问题:

eb7812c15471383e58a390a0a2cbdc17.png

其中 为出价策略参数, 表示一个投放周期内的拿量总和, 表示一个投放周期内的总消耗, 表示广告主设置的目标ROI值; 分别表示ROI的上界和下界限制系数,

等价问题:利用拉格朗日函数,上述Target ROAS问题可以等价地写为:

其中 为拉格朗日函数,其表达式如下所示:

b240fc5e3d5025a8101c0e3e04764cd1.png

其中 为拉格朗日系数, 对应超额约束(即ROI上界约束), 对应欠额约束(即ROI下界约束)。此外,我们把超过ROI上界的幅度称为超额幅度,把低于ROI下界的幅度成为欠额幅度。

对偶域-原域更新框架:对于该等价问题,我们借鉴经典的Primal-Dual Optimization(PDO[8])更新框架:首先随机初始化 ,然后交替进行对偶域和原域的更新。在对偶域中,我们固定 ,利用拉格朗日函数相对 的梯度更新 ,如下面公式(1)所示,其中与0取max是为了保障 非负;在原域中,我们固定 ,利用拉格朗日函数相对 的梯度更新 ,如下面公式(2)所示。可以证明,该框架可收敛到局部最优([8]中的定理7)。对偶域-原域更新的整体框架如下所示。

0acda85eb23615197cd638eca405c79a.png

在对偶域更新中,我们推导拉格朗日函数 相对 的梯度, ,得到 更新的解析表达式如下所示。可以看到更新表达式有明确的物理含义,其中 的更新表达式即为超额幅度, 的更新表达式即为欠额幅度。直观上, 如同ROI约束的监控器,可以自动感知超额和欠额幅度,并控制着拉格朗日函数中“超额和欠额惩罚项”的幅度,相比人工设定的固定惩罚项系数具有自动感知的优势。

61c0eb1f997c88276cd3399bd5021255.png

在原域更新中,我们推导拉格朗日函数 相对于出价策略参数 的梯度,,其解析表达式如下所示。可以看到出价策略梯度由拿量梯度和消耗梯度两部分构成。

1c2b77b4f2415557021ec23e04145700.png

可以利用经典策略梯度定理得到拿量梯度和消耗梯度的表达式。

4f5f79e9ac277de5c0f18c1539780357.png

其中 分别表示在状态s和出价a下按照出价策略到一天结束的累积拿量和消耗。

至此,我们给出完整的拉格朗日梯度更新框架如下所示:

217c71fa9031b5b4e3aaea033fdbe01e.png

其中 均需要当前出价策略的轨迹样本才可以计算,因此我们沿用了MBRL中的神经网络离线仿真器进行训练样本的生成。

下面展示了Lagrange-MBRL的整体算法流程。

1636219f107068a053f2b88aa6aabffa.png

4.3 实验结果

4.3.1 在线实验

我们在阿里妈妈万相台无界版全站推场景的 TargetROAS 计划上分别进行了Lagrange-MBRL的计划AB和预算AB实验,两个实验结论基本一致:带来消耗 +6.8% / GMV +3.8% / 达标率基本持平的效果提升。

4.3.2 消融实验

在消融实验中,我们考察拉格朗日对偶梯度法在训练过程中对于ROI约束的保障作用。

  • 实验设置:分别利用拉格朗日对偶梯度法和reward shaping的方法在10个不同的seed下训练出价策略。考察在训练过程中出价策略在10000个计划上超额和欠额的幅度情况(理想情况均应逐渐下降)。

  • 离线实验结果:如图7所示,可以看到利用拉格朗日对偶梯度法训练过程中出价策略的超额和欠额幅度均逐渐减小,而reward shaping方法则不能实现同时下降。特别地,拉格朗日对偶梯度法可以有效降低超额幅度,验证了拉格朗日对偶梯度法对于ROI约束的保障作用的优势。

  • 线上实验结果:超额交付计划比例-1pt,双边达标率+0.3pt,与离线结果一致。

ebf28cf9e1fadafc7257cfacb9b56c03.png
图7. 拉格朗日对偶梯度法和reward shaping方法在训练中出价策略的超额和欠额幅度的变化趋势。

▐  关于我们

阿里妈妈智能广告平台算法团队 主要负责建设阿里妈妈万相台无界版广告产品的算法体系和阿里妈妈决策智能平台,紧密围绕淘系电商商家的不同营销需求,利用最先进的算法技术帮助商家获得最极致的广告投放效果和体验,主要涉及强化学习、深度学习、运筹优化等前沿技术,团队发表过多篇NeurIPS、ICML、KDD等顶会论文。我们始终相信并且一直践行着通过技术创新来提升效率、变革商业、普惠商家。

📮 简历投递邮箱

alimama_tech@service.alibaba.com

▐  参考文献

[1] He Y, Chen X, Wu D, et al. A unified solution to constrained bidding in online display advertising[C]//Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021: 2993-3001.

[2] Kumar, A., Zhou, A., Tucker, G., & Levine, S. (2020). Conservative Q-Learning for Offline Reinforcement Learning. ArXiv, abs/2006.04779.

[3]新一代自动出价范式:在线强化学习SORL框架

[4] U, T., Thomas, G., Yu, L., Ermon, S., Zou, J. Y., Levine, S., ... & Ma, T. (2020). Mopo: Model-based offline policy optimization. Advances in Neural Information Processing Systems, 33, 14129-14142.

[5] Haarnoja, T., Zhou, A., Abbeel, P., & Levine, S. (2018, July). Soft actor-critic: Off-policy maximum entropy deep reinforcement learning with a stochastic actor. In International conference on machine learning (pp. 1861-1870). PMLR.

[6] Yu T, Kumar A, Rafailov R, et al. Combo: Conservative offline model-based policy optimization[J]. Advances in neural information processing systems, 2021, 34: 28954-28967.

[7] Liu X Y, Zhou X H, Li G T, et al. MICRO: Model-Based Offline Reinforcement Learning with a Conservative Bellman Operator[J]. arXiv preprint arXiv:2312.03991, 2023.

[8] Chow, Y., Ghavamzadeh, M., Janson, L., & Pavone, M. (2018). Risk-constrained reinforcement learning with percentile risk criteria. Journal of Machine Learning Research, 18(167), 1-51.

END

b93d6eac3ad72a28254db550cad7800d.gif

也许你还想看:

新一代自动出价范式:在线强化学习SORL框架

生成式拍卖:感知排列外部性的整页优化机制

PerBid:在线广告个性化自动出价框架

 强化学习在广告延迟曝光情形下的保量策略中的应用

Bidding模型训练新范式:阿里妈妈生成式出价模型(AIGB)详解

AIGB:基于生成式模型的自动出价优化新范式

万字长文,漫谈广告技术中的拍卖机制设计(经典篇)

开源 | AuctionNet: 针对大规模博弈环境的出价决策Benchmark

关注「阿里妈妈技术」,了解更多~

6349de24781705c4aad44b683d08b5d2.gif

喜欢要“分享”,好看要“点赞”哦ღ~

相关文章:

Model-based RL自动出价算法的演进之路

▐ 导读 近年来,强化学习自动出价算法已成为智能投放领域的标志性技术,然而其所存在的在离线不一致、线上数据覆盖空间受限等关键问题尚未被完全解决。在本文中,我们提出一种Model-based RL(MBRL)自动出价算法训练新范…...

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

资源及介绍接上篇 nuget引用以下组件 效果展示: 内存和cpu占有: 代码如下:路径换成自己的模型路径 模型请从上篇文尾下载 internal class Program{private static CancellationTokenSource? cts;private static IChatClient? model;privat…...

框架部分面试题学习

IOC容器,AOP IOC :依赖反转,将对象的创建,组装,管理的控制权限从应用程序反转到IOC容器中。由springboot的来实现对象的自动装配和注入。 当某个类使用了Componnet 注解后,标记为一个组件。那么这个类在项…...

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…...

Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)

Java 模板变量替换——字符串替换器&#xff08;思路Mybatis的GenericTokenParser&#xff09; 思路字符串替换器 思路 模板变量替换无非是寻找出字符串&#xff08;模板&#xff09;中的特殊标记&#xff0c;用对应的变量进行字符串替换。 提到变量替换&#xff0c;大家第一能…...

跨界融合:人工智能与区块链如何重新定义数据安全?

引言&#xff1a;数据安全的挑战与现状 在信息化驱动的数字化时代&#xff0c;数据已成为企业和个人最重要的资产之一。然而&#xff0c;随着网络技术的逐步优化和数据量的爆发式增长&#xff0c;数据安全问题也愈变突出。 数据安全现状&#xff1a;– 数据泄露驱动相关事件驱…...

android 自定义SwitchCompat,Radiobutton,SeekBar样式

纯代码的笔记记录。 自定义SwitchCompat按钮的样式 先自定义中间的圆球switch_thumb_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"oval&q…...

计算机网络的定义与发展历程

计算机网络的定义 计算机网络是指通过通信设备和传输介质将分布在不同地点的计算机及其相关设备&#xff08;如打印机、服务器等&#xff09;连接起来&#xff0c;按照一定的通信协议进行数据交换与资源共享的系统。计算机网络的基本功能包括&#xff1a;信息的传输、资源共享…...

对比学习 (Contrastive Learning) 算法详解与PyTorch实现

对比学习 (Contrastive Learning) 算法详解与PyTorch实现 目录 对比学习 (Contrastive Learning) 算法详解与PyTorch实现1. 对比学习 (Contrastive Learning) 算法概述1.1 自监督学习1.2 对比学习的优势2. 对比学习的核心技术2.1 正样本对与负样本对2.2 对比损失函数2.3 数据增…...

DBeaver执行本地的sql语句文件避免直接在客户端运行卡顿

直接在客户端运行 SQL 语句和通过加载本地文件执行 SQL 语句可能会出现不同的性能表现&#xff0c;原因可能包括以下几点&#xff1a; 客户端资源使用&#xff1a; 当你在客户端界面直接输入和执行 SQL 语句时&#xff0c;客户端可能会消耗资源来维护用户界面、语法高亮、自动完…...

C++ 的 pair 和 tuple

1 std::pair 1.1 C 98 的 std::pair 1.1.1 std::pair 的构造 ​ C 的二元组 std::pair<> 在 C 98 标准中就存在了&#xff0c;其定义如下&#xff1a; template<class T1, class T2> struct pair;std::pair<> 是个类模板&#xff0c;它有两个成员&#x…...

Zookeeper 集群安装

Zookeeper 集群 主机 IP SoftWare Port OS Myidnode1 192.168.230.128 apache-zookeeper-3.7.1 2181 Centos 7 1 node2 192.168.230.129 apache-zookeeper-3.7.1...

git merge与rebase区别以及实际应用

在 Git 中&#xff0c;merge 和 rebase 是两种将分支的更改合并到一起的常用方法。虽然它们都可以实现类似的目标&#xff0c;但它们的工作方式和效果有所不同。 1. Git Merge 定义&#xff1a;git merge 是将两个分支的历史合并在一起的一种操作。当你执行 git merge 时&…...

kvm虚拟机出现应用程序无法正常启动报0xc0000142错误

场景&#xff1a;我的是window10虚拟机&#xff0c;在运行我的软件的时候&#xff0c;出现0xc0000142错误&#xff0c;原因可能是cpu型号问题&#xff0c;某些虚拟cpu可能没有特定的指令&#xff0c;只需要修改虚拟机配置文件以下参数即可...

Redis 安装与 Spring Boot 集成指南

安装 Redis 和将其与 Spring Boot 应用集成是构建高效缓存解决方案的常见步骤。以下是详细的指南&#xff0c;帮助你在本地环境中安装 Redis&#xff0c;并在 Spring Boot 项目中配置和使用它。 1. 安装 Redis Windows 环境 Redis 官方并不直接支持 Windows&#xff0c;但你…...

Flink集成TDEngine来批处理或流式读取数据进行流批一体化计算(Flink SQL)拿来即用的案例

Flink 以其流批一体化的编程模型而备受青睐。它支持高吞吐、低延迟的实时流计算,同时在批处理方面也表现出色。Flink 提供了丰富的 API,如 DataStream API 和 DataSet API,方便开发者进行数据处理操作,包括转换、聚合、连接等,使得开发者能够轻松构建复杂的数据处理逻辑。…...

【STM32】利用SysTick定时器定时1s

1.SysTick简单介绍 SysTick定时器是一个24位的倒计数定时器&#xff0c;当计数到0时&#xff0c;将从RELOAD寄存器中自动重装载定时初值&#xff0c;开始新一轮计数。 SysTick定时器用于在每隔一定的时间产生一个中断&#xff0c;即使在系统睡眠模式下也能工作。 关于SysTic…...

Python中的format格式化、填充与对齐、数字格式化方式

文章目录 一、format语法二、format格式化的用法2.1、按照先后顺序替换{}2.2、按照索引进行匹配替换{0}2.3、按关键字索引进行匹配替换2.4、通过列表索引格式化字符串2.5、使用元组2.6、通过字典设置格式化字符串2.7、混合使用 三、字符串填充与对齐3.1、左对齐及填充3.2、右对…...

winform第三方界面开源库AntdUI的使用教程保姆级环境设置篇

1. AntdUI 1.1. 导入项目 1.1.1. 首先新建一个空白的基于.net的Winfrom项目1.1.2. 复制AntdUI中src目录到我们的解决方案下面1.1.3. 解决方案下添加现有项目1.1.4. 添加项目引用 1.2. 编写代码 1.2.1. 改写Form1类&#xff0c;让其继承自public partial class Form1 : AntdUI.W…...

如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目

Yarn Workspaces是Yarn提供的一种依赖管理机制&#xff0c;它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目&#xff0c;能够减少重复依赖&#xff0c;加快依赖安装速度&#xff0c;并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…...

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现&#xff0c;并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架&#xff0c;帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …...

物联网:七天构建一个闭环的物联网DEMO

我计划用七天的时间&#xff0c; 基于开源物联网平台&#xff0c; 打造一款物联网案例的闭环。 为了增加感观体验&#xff0c;欢迎大家与我保持亲密的沟通。 我们来看一段代码&#xff1a; Slf4j Component public class MqttSendManager {Resourceprivate MqttSendHandler m…...

景联文科技提供高质量多模态数据处理服务,驱动AI新时代

在当今快速发展的AI时代&#xff0c;多模态数据标注成为推动人工智能技术进步的关键环节。景联文科技作为行业领先的AI数据服务提供商&#xff0c;专注于为客户提供高质量、高精度的多模态数据标注服务&#xff0c;涵盖图像、语音、文本、视频及3D点云等多种类型的数据。通过专…...

c#13新特性

C# 13 即 .NET 9 按照计划会在2024年11月发布&#xff0c;目前一些新特性已经定型&#xff0c;让我们来预览一个比较大型比较重要的新特性。 正文 扩展类型 Extension types 在5月份的微软 Build 大会中的 What’s new in C# 13 会议上&#xff0c;两位大佬花了很长的篇幅来…...

LeetCode LCP17速算机器人

速算机器人&#xff1a;探索字符指令下的数字变换 在编程的奇妙世界里&#xff0c;我们常常会遇到各种有趣的算法问题&#xff0c;这些问题不仅考验我们的逻辑思维&#xff0c;还能让我们感受到编程解决实际问题的魅力。今天&#xff0c;就让我们一同探讨一个关于速算机器人的…...

杭州铭师堂的云原生升级实践

作者&#xff1a;升学e网通研发部基建团队 公司介绍 杭州铭师堂&#xff0c;是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育&#xff0c;让中国人都有好书读”的使命&#xff0c;致力于用“互联网教育”的科技手段让更多的孩子都能享有优…...

计算机网络之---MAC协议

MAC协议的作用 在数据链路层中&#xff0c;MAC&#xff08;媒介访问控制&#xff09;协议负责控制设备如何访问共享的通信介质&#xff08;如以太网、无线电波等&#xff09;&#xff0c;确保在多台设备共享同一传输媒介时能够有效地进行数据传输&#xff0c;避免冲突、控制流…...

微服务面试相关

Spring Cloud Spring Cloud五大组件 注册中心&#xff1a;Eureka、Nacos Ribbon负载均衡、负载均衡策略、自定义负载均衡 Ribbon负载均衡流程 Ribbon负载均衡策略 自定义负载均衡 服务雪崩、熔断降级 微服务监控-skywalking 业务相关 微服务限流&#xff08;令牌桶、漏桶算法…...

Google发布图像生成新工具Whisk:无需复杂提示词,使用图像和人工智能将想法可视化并重新混合

Whisk 是 Google Labs 的一项新实验&#xff0c;可使用图像进行快速而有趣的创作过程。Whisk不会生成带有长篇详细文本提示的图像&#xff0c;而是使用图像进行提示。只需拖入图像&#xff0c;即可开始创建。 whisk总结如下&#xff1a; Whisk 是 Google 实验室最新的生成图像实…...

docker pull(拉取镜像)的时候,无法下载或者卡在Waiting的解决方法

docker pull的时候&#xff0c;卡在Waiting的解决方法 一般情况&#xff08;大部分镜像都可以拉取&#xff09;更换镜像源 进一步&#xff08;如es等拉取不到&#xff09;在镜像同步站搜索详细步骤 还可以在挂载的时候&#xff0c;让其下载对应的版本 一般情况&#xff08;大部…...

昆山外贸网站建设推广/网页制作与设计

cudaMalloc(void** p, intsize):分配size字节的存储器&#xff0c;并将其首地址赋给&#xff0a;&#xff50;&#xff0c;至于参数为什么是二级指针&#xff0c;可在&#xff23;语言中找到答案cudaMallocHost():这个方法是在主机上分配空间&#xff0c;可以加快传输速度&…...

网站广告做的好的企业案例分析/google关键词优化排名

在互联网业务蒸蒸日上的今时今日&#xff0c;系统架构日渐复杂&#xff0c;随着软件产品和工程团队的变革&#xff0c;许多开源的监控工具应运而生&#xff0c;其中有一些相当出名&#xff0c;比如 Zabbix、Nagios 还有 StatsD。也有一些问题被大家不断讨论&#xff0c;例如&am…...

网站推广专家/百度 seo排名查询

2003年4月7日&#xff0c;马云&#xff0c;在杭州&#xff0c;成立了一个神秘的组织。他叫来十位员工&#xff0c;要他们签了一份协议&#xff0c;这份协议要求他们立刻离开阿里巴巴&#xff0c;去做一个神秘的项目。这个项目要求绝对保密&#xff0c;老马戏称“连说梦话被老婆…...

怎样做网站内链/宁德市人民医院

转&#xff1a;https://blog.csdn.net/u013673437/article/details/80534839 在编写MATLAB程序过程中&#xff0c;有时会遇到当程序运行到不满足if条件时让程序跳出&#xff0c;停止运行的情况&#xff0c;在MATLAB中&#xff0c;使用return语句实现程序跳出。 只将以上程序中变…...

做网站用哪里的服务器比较好/百度精准营销获客平台

1、调整状态 最近发生了很多事&#xff0c;很多不好的事&#xff0c;以至于时常状态不在线&#xff0c;没有去调整&#xff0c;会告诉自己都是假的&#xff0c;然后继续低落难过&#xff0c;这些负面影响抛不掉&#xff0c;今天尝试调整 &#xff08;1&#xff09;尽量不要去看…...

乌兰察布做网站的公司/现在阳性最新情况

1、使用参数化SQL语句进行模糊查找的正确方法&#xff1a;//定义sql语句string sql "SELECT StudentID,StudentNO,StudentName FROM Student WHERE StudentName like StudentName";//给参数赋值command.Parameters.AddWithValue("StudentName",txtStudent…...