深度学习笔记: 最详尽估算送达时间系统设计

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

估算送达时间

1. 问题陈述

构建一个模型来估算在给定订单详情、市场条件和交通状况下的总送达时间。

为了简化,我们不考虑在此练习中对订单进行分批处理(在餐馆将多个订单合并处理)。

在构建估算总送达时间的模型时,“市场条件”指的是可能影响送餐过程的各种外部因素。一些市场条件的例子包括:

星期几:送达时间可能在工作日和周末之间有所不同。

一天中的时间:送达时间可能会受到高峰用餐时间(例如午餐或晚餐时间)或非高峰时间的影响。

天气状况:不利的天气如雨、雪或极端高温可能会延缓送达时间。

特殊事件:如体育比赛、音乐会或节日等当地事件可能会导致交通拥堵和送达时间延长。

假期:由于订单量增加和交通模式变化,假期期间的送达时间可能会更长。

促销和折扣:特殊促销或折扣期间,订单量增加可能会影响送达时间。

送达时间计算

DeliveryTime = PickupTime + PointtoPointTime + DropoffTime \text{DeliveryTime} = \text{PickupTime} + \text{PointtoPointTime} + \text{DropoffTime} DeliveryTime=PickupTime+PointtoPointTime+DropoffTime

2. 指标设计和要求

指标

离线指标: 使用均方根误差(RMSE)
RMSE = ∑ k = 1 n ( predict − y ) 2 n \text{RMSE} = \sqrt{\frac{\sum\limits_{k=1}^{n} (\text{predict} - y)^2}{n}} RMSE=nk=1n(predicty)2
其中,

  • n n n 是样本总数,
  • predict \text{predict} predict 是估算的等待时间,
  • y y y 是实际等待时间。

在线指标: 使用 A/B 测试并监控 RMSE、客户参与度、客户留存率等。

RMSE 是回归问题中常用的指标,包括估算送达时间。RMSE 衡量预测值与实际值之间误差的平均大小。通过取 MSE 的平方根,RMSE 将误差转换回目标变量的原始单位。这意味着 RMSE 与送达时间(分钟)具有相同的单位,更易于解释。例如,2.9 分钟的 RMSE 直接告诉我们,预测值平均偏差约为 2.9 分钟。

A/B 测试:将用户分为两组,一组使用新的送达时间估算模型,另一组使用现有模型。比较这些组之间的结果。

客户参与度:衡量客户与应用程序的互动,例如检查送达时间、订单频率和应用使用时长。

客户留存率:跟踪客户是否继续使用服务,这表明对送达体验的满意度。

要求

训练
  • 在训练期间,我们需要处理大量数据。为此,训练管道应具有高吞吐量。为实现此目的,数据可以组织在 Parquet 文件中。
  • 模型应每隔几小时重新训练一次。送达操作处于动态环境中,受许多外部因素影响:交通、天气状况等。因此,模型必须学习并适应新环境。例如,在比赛日,某些地区的交通状况会变差。如果没有重新训练的模型,当前模型将持续低估送达时间。调度器负责每天多次重新训练模型。
  • 平衡高估和低估。为此,每天多次重新训练以适应市场动态和交通状况。

高吞吐量:在机器学习中,“高吞吐量”指的是快速高效地处理大量数据的能力。

为实现高吞吐量,训练管道应优化速度和效率。这涉及使用允许快速读写数据的数据存储和处理技术。因此我们可以考虑使用 Parquet 文件 :Apache Parquet 是一种专为高效数据处理而设计的列式存储文件格式。

以下是使用 Parquet 文件帮助实现高吞吐量的原因:

Parquet 以列式格式存储数据,这意味着某个列的所有值都存储在一起。这与行式格式(如 CSV)形成对比,其中每行的数据存储在一起。对于许多机器学习任务,操作是在整个列上进行的(例如计算平均值、数据标准化)。列式存储使这些操作更高效。

Parquet 文件支持多种压缩算法(例如 Snappy、Gzip),减少了磁盘上的数据大小。
速度:较小的文件大小意味着需要从磁盘读取到内存的数据较少,加快了数据加载时间。

推理
  • 对于每次送达,系统需要尽可能频繁地进行实时估算。为了简单起见,我们假设每次送达需要进行 30 次预测。
  • 近实时更新:任何状态变化都需要尽快通过模型评分,即餐馆开始准备餐食,司机开始驾车前往客户。
  • 每当送达有变化时,模型运行新估算并向客户发送更新。
  • 捕获近实时聚合统计数据,即特征管道从多个源(Kafka、数据库)聚合数据以减少延迟。
  • 延迟为 100ms 至 200ms

特征管道是一个系统,它从不同来源收集原始数据,处理并将其转化为机器学习模型用于预测的特征。

总结

类型期望目标
指标优化为低 RMSE。估算时间应小于 10-15 分钟。如果我们高估,客户下单的可能性较低。低估可能会导致客户不满。
训练高吞吐量,能够每天多次重新训练
推理延迟为 100ms 至 200ms

3. 模型

特征工程

特征特征工程描述
订单特征小计、菜系
商品特征价格和类型
订单类型团体、餐饮
商户详情
商店ID商店嵌入
实时特征订单数量、骑手数量、交通状况、旅行时间估算
时间特征一天中的时间(午餐/晚餐)、星期几、周末、假日
历史汇总过去X周的平均送达时间:商店/城市/市场/一天中的时间
相似度平均停车时间、历史时间的方差
经纬度测量订单送达时间(到消费者)与餐馆之间的预计驾驶时间

订单特征:从订单详情中提取的特征。例如,订单的总成本(小计)和菜系类型(如意大利菜、中国菜)。这些特征可能会影响送达时间,因为不同菜系的准备时间可能不同。小计 是所有商品价格的总和。不包括税费、配送费或小费。

商品特征:从订单中的单个商品中提取的特征。商品价格和类型(如饮料、主菜)可以影响整体准备和包装时间。

订单类型:标识订单类型。与单个订单相比,团体订单和餐饮服务的准备和送达时间通常更长。

商户详情:关于商户(餐馆)的详细信息,如他们的历史表现、准备速度和受欢迎程度。这些因素会影响送达时间。

商店ID:商店的数值表示(嵌入),捕捉各种特征和历史表现。这有助于模型理解不同商店之间的差异。

实时特征:捕捉实时条件的特征,如当前正在处理的订单数量、可用的送餐员数量、当前交通状况和旅行时间估算。这些对准确预测实时送达时间至关重要。

时间特征:指示订单下单时间的时间特征。送达时间可能会根据是否在高峰时间(午餐或晚餐)、周末或假日期间显著变化。

历史汇总:汇总的历史数据,如特定商店、城市、市场和一天中某些时间段的过去几周的平均送达时间。这有助于根据过去的表现预测未来的送达时间。

相似度:捕捉条件相似性的特征,如送达地点的平均停车时间和历史送达时间的方差。这些可能表明潜在的延迟。

经纬度:测量从餐馆到送达地点的距离和预计驾驶时间的地理空间特征。这对于准确估算旅行时间至关重要。

训练数据

我们可以使用过去6个月的历史送达数据作为训练数据。历史送达数据包括送达数据和实际总送达时间、商店数据、订单数据、客户数据、位置和停车数据。

模型

梯度提升决策树
  • 梯度提升决策树示例

  • 梯度提升决策树的工作原理

  1. 计算基线:给定历史送达数据,模型首先计算平均送达时间。此值将用作基线。

  2. 测量残差:模型测量预测值与实际送达时间之间的残差(误差)。

    Error = Actual Delivery Time − Estimated Delivery Time \text{Error} = \text{Actual Delivery Time} - \text{Estimated Delivery Time} Error=Actual Delivery TimeEstimated Delivery Time

  3. 构建决策树:构建决策树以预测残差。每个叶子节点将包含对残差值的预测。

  4. 使用所有树进行预测:使用所有树进行预测。使用以下公式构建送达时间预测值:

    Estimated Delivery Time = Average Delivery Time + learning rate × residuals \text{Estimated Delivery Time} = \text{Average Delivery Time} + \text{learning rate} \times \text{residuals} Estimated Delivery Time=Average Delivery Time+learning rate×residuals

  5. 计算新残差:给定新的估算送达时间,计算新的残差。使用这些值在步骤3中构建新的决策树。

  6. 重复:重复步骤3-5,直到达到超参数中定义的迭代次数。

梯度提升决策树(GBDT) 中,目标是最小化预测值与实际值之间的差异。这些差异称为残差。通过构建决策树来预测残差,模型关注于先前预测所犯的错误。其思想是通过后续迭代纠正这些错误。

RMSE 优化问题

优化RMSE的一个问题是,它对低估预测和高估预测的惩罚是相同的。考虑下表。两个模型都使用提升决策树。

实际值模型1预测值模型1平方误差模型2预测值模型2平方误差
3034162616
35374334

虽然模型1和模型2有相同的RMSE误差,但模型1高估了送达时间,这会阻止客户下单。模型2低估了送达时间,可能会导致客户不满。

4. 计算与估算

假设

为简化,我们可以做以下假设:

  • 每月有200万活跃用户,总共有2000万用户,30万家餐馆,20万名司机送餐。
  • 平均每年有2000万次送达。

数据量

  • 1个月内,我们收集了200万次送达的数据。每次送达相关特征大约有500字节。

  • 总大小: 500 bytes × 2 × 1 0 6 = 1 0 9 bytes = 1 Gigabytes 500 \text{ bytes} \times 2 \times 10^6 = 10^9 \text{ bytes} = 1 \text{ Gigabytes} 500 bytes×2×106=109 bytes=1 Gigabytes

规模

  • 支持2000万用户。

5. 系统设计

  • 特征存储:提供快速查找以实现低延迟。具有高可用性的任何键值存储的特征存储是一个不错的选择,如 Amazon DynamoDB。
  • 特征管道:从 Kafka 读取数据,进行转换并汇总近实时统计数据。然后将它们存储在特征存储中。
  • 数据库:送达订单数据库存储历史订单和送达数据。数据准备是一个从数据库创建训练数据的过程。我们可以将训练数据存储在云存储中,例如 S3。
  • 我们有三个服务:状态服务、通知服务和估算送达时间服务。前两个服务处理实时更新,估算送达时间服务使用我们的机器学习模型来估算送达时间。
  • 我们有一个调度器,负责协调每天多次重新训练模型。训练后,我们将模型存储在模型存储中。

让我们检查系统的流程:

  1. 用户请求估算送达时间

  1. 估算送达时间服务返回时间估算给应用服务器。应用服务器将时间估算返回给用户

  • 主要有三种类型的用户:消费者/用户、送餐员和餐馆。

  • 用户流程

    • 用户访问主页,检查他们的食物订单,并请求应用服务器估算送达时间。
    • 应用服务器将请求发送到估算送达时间服务。
    • 估算送达时间服务从模型存储中加载最新的机器学习模型,并从特征存储中获取所有特征值。然后使用机器学习模型预测送达时间并将结果返回给应用服务器。
  • 餐馆/送餐员流程

    • 当餐馆有进展时,例如开始制作菜肴或包装食物,他们会将状态发送给状态服务。
    • 状态服务更新订单状态。此事件通常会在队列服务(如 Kafka)中更新,因此其他服务可以订阅并相应地获取更新。
    • 通知服务订阅消息队列(如 Kafka),并实时接收最新的订单状态。

6. 设计扩展

  • 我们扩展服务以处理大量每秒请求。我们还使用负载均衡器在应用服务器之间平衡负载。
  • 我们利用流处理系统如 Kafka 来处理通知以及模型预测。一旦我们的机器学习模型完成预测,它会将预测结果发送到 Kafka,以便其他服务可以立即获取通知。

7. 后续问题

问题答案
使用 StoreID 嵌入作为特征的缺点是什么?我们需要评估使用 StoreID 嵌入在处理新店方面是否有效。
我们需要多久重新训练一次模型?这取决于,我们需要有基础设施来监控在线指标。当在线指标下降时,我们可能需要触发模型重新训练。

缺点:处理新店:使用 StoreID 嵌入的一个重大挑战是处理没有历史数据的新店。由于新店的嵌入未定义,模型可能无法很好地处理这些新店。

8. 总结

  • 我们学习了如何使用梯度提升决策树将估算送达时间表述为一个机器学习问题。
  • 我们学习了如何收集和使用数据来训练模型。
  • 我们学习了如何使用 Kafka 处理日志和模型预测以实现近实时预测。

附录

离线指标示例

假设我们有5个送达订单,实际送达时间和预测送达时间如下(单位:分钟):

送达订单实际时间 (y)预测时间 (predict)
13032
22528
34036
43538
52022

首先,计算平方差:
( 32 − 30 ) 2 = 4 (32 - 30)^2 = 4 (3230)2=4
( 28 − 25 ) 2 = 9 (28 - 25)^2 = 9 (2825)2=9
( 36 − 40 ) 2 = 16 (36 - 40)^2 = 16 (3640)2=16
( 38 − 35 ) 2 = 9 (38 - 35)^2 = 9 (3835)2=9
( 22 − 20 ) 2 = 4 (22 - 20)^2 = 4 (2220)2=4

将这些平方差相加:
4 + 9 + 16 + 9 + 4 = 42 4 + 9 + 16 + 9 + 4 = 42 4+9+16+9+4=42

除以样本数 (n = 5) 并取平方根:
RMSE = 42 5 = 8.4 ≈ 2.9 \text{RMSE} = \sqrt{\frac{42}{5}} = \sqrt{8.4} \approx 2.9 RMSE=542 =8.4 2.9

因此,此示例中的RMSE约为2.9分钟。

梯度提升决策树的示例解释

让我们通过一个具体示例来逐步解释梯度提升决策树(GBDT)的工作原理。假设我们有以下历史送达数据(单位:分钟):

送达订单实际时间 (y)特征 (X)
13010
2258
34012
43511
5207

为了简化,假设只有一个特征 ( X ) 代表一些关于订单和交通状况的汇总信息。

第一步:计算基线

首先,我们计算所有历史数据的平均送达时间。此平均值作为所有送达的初始预测。

平均送达时间 = 30 + 25 + 40 + 35 + 20 5 = 30 分钟 \text{平均送达时间} = \frac{30 + 25 + 40 + 35 + 20}{5} = 30 \text{ 分钟} 平均送达时间=530+25+40+35+20=30 分钟

所以,我们对所有送达的初始预测为30分钟。

第二步:测量残差

接下来,我们计算实际送达时间和初始预测之间的残差(误差)。

送达订单实际时间 (y)初始预测残差 (误差)
130300
22530-5
3403010
435305
52030-10
第三步:构建决策树

我们使用特征 ( X ) 构建决策树来预测残差。

特征 (X)残差 (误差)
100
8-5
1210
115
7-10

假设决策树如下所示:

   X <= 9.5/      \
-7.5     X <= 11.5/       \7.5       5

此树将数据划分为不同区域,并预测每个区域的平均残差。

第四步:使用所有树进行预测

使用学习率调整预测值。假设学习率为0.1。更新后的预测值为:

新预测 = 初始预测 + 学习率 × 残差预测 \text{新预测} = \text{初始预测} + \text{学习率} \times \text{残差预测} 新预测=初始预测+学习率×残差预测

让我们计算更新后的预测值:

送达订单初始预测残差预测新预测
1307.5 (对 X > 9.5 X > 9.5 X>9.5)30 + 0.1 * 7.5 = 30.75
230-7.5 (对 X ≤ 9.5 X \leq 9.5 X9.5)30 + 0.1 * -7.5 = 29.25
3307.5 (对 X > 11.5 X > 11.5 X>11.5)30 + 0.1 * 7.5 = 30.75
4307.5 (对 9.5 < X ≤ 11.5 9.5 < X \leq 11.5 9.5<X11.5)30 + 0.1 * 7.5 = 30.75
530-7.5 (对 X ≤ 9.5 X \leq 9.5 X9.5)30 + 0.1 * -7.5 = 29.25
第五步:计算新残差

使用更新后的预测值计算新残差。

送达订单实际时间 (y)新预测新残差 (误差)
13030.7530 - 30.75 = -0.75
22529.2525 - 29.25 = -4.25
34030.7540 - 30.75 = 9.25
43530.7535 - 30.75 = 4.25
52029.2520 - 29.25 = -9.25
第六步:重复

我们根据超参数定义的迭代次数重复步骤3-5。每次迭代都会构建一个新的决策树来预测新残差并相应地调整预测值。

通过迭代地构建决策树来预测残差并调整预测值,GBDT模型逐步提高其估算送达时间的准确性。学习率确保每棵树仅做出小幅调整,以避免过拟合。

参考文献:

  • 来自educative的机器学习系统设计

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

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

相关文章

LeetCode | 168.Excel表列名称

这道题一开始以为是简单的进制转换问题&#xff0c;用的以往的思路&#xff0c;对于一般性的进制转换题目&#xff0c;只需要不断地对 columnNumber 进行 % 运算取得最后一位&#xff0c;然后对 columnNumber 进行 / 运算&#xff0c;将已经取得的位数去掉&#xff0c;直到 col…

ZYNQ7 Processing System IP核中PS侧Uart的用法

在ZYNQ7 Processing System IP核中集成的UART控制器是一个中全双工异步接收器和发送器&#xff0c;支持广泛的可编程波特率和I/O信号格式&#xff0c;可以适应自动奇偶校验生成和多主机检测模式。 UART操作由配置和模式寄存器控制。使用状态寄存器、中断状态寄存器和调制解调器…

JVM原理之运行时数据区域

Java运行时数据区(Runtime Data Area)是Java虚拟机(JVM)在运行Java程序时内部维护的一系列数据区域。这些区域共同协作,确保Java程序能够高效、稳定地运行。本文将详细介绍Java运行时数据区的结构和作用。 java虚拟机运行时数据区域 根据《Java虚拟机规范》规定,jvm内存…

【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总

网安AIGC专题 写在最前面一些碎碎念课程简介 0、课程导论1、应用 - 代码生成2、应用 - 漏洞检测3、应用 - 程序修复4、应用 - 生成测试5、应用 - 其他6、模型介绍7、模型增强8、数据集9、模型安全 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻…

EasyGBS服务器和终端配置

服务器配置 修改easygbs.ini sip/host为本机IP&#xff0c;否则终端能登录&#xff0c;无法视频。 [sip] host192.168.3.190 终端用于登录的用户名和密码 default_usertest default_passwordtest1234 default_guest_userguest default_guest_passwordtest1234终端配置 关…

【Postman的接口测试工具介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Excel最基本的常用函数

最基本最常用的函数&#xff0c;掌握了可以解决大部分问题。 (笔记模板由python脚本于2024年06月11日 19:05:56创建&#xff0c;本篇笔记适合熟悉excel的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣…

原型模式(大话设计模式)C/C++版本

原型模式 C 参考&#xff1a;https://www.cnblogs.com/Galesaur-wcy/p/15924300.html #include <iostream> #include <string> using namespace std;class WorkExprerience { private:string workDate;string company;public:WorkExprerience() {}~WorkExprerie…

14.基于人类反馈的强化学习(RLHF)技术详解

基于人类反馈的强化学习&#xff08;RLHF&#xff09;技术详解 RLHF 技术拆解 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念&#xff0c;我们按三个步骤分解&#xff1a; 预训练一个语言模型 (LM) &#xff1b;训练一个奖励模型 (Reward Model&#xff0c;RM) &#xf…

RabbitMQ实践——利用一致性Hash交换器做带权重的调度

在《RabbitMQ实践——利用一致性Hash交换器做负载均衡》一文中&#xff0c;我们介绍了如何开启一致性hash交换器&#xff0c;并实现了消息的负载均衡&#xff0c;以达到横向扩展消费者数量的能力。 但是现实中&#xff0c;可能存在这样的场景&#xff1a;一些队列所在的机器配置…

交易文本数据:情感分析 -另类数据交易- 舆情数据

交易文本数据:情感分析 这是三章中的第一章,专门介绍使用自然语言处理(NLP)和机器学习从文本数据中提取交易策略信号。 文本数据内容丰富但高度非结构化,因此需要更多预处理才能使ML算法提取相关信息。一个关键挑战是在不丢失其含义的情况下将文本转换为数值格式。我们将介绍…

第J7周:对于ResNeXt-50算法的思考

本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f680; 文章来源&#xff1a;K同学的学习圈子深度学习第J6周&#xff1a;ResNeXt-50实战解析K同学的学习圈子 在 ResNeXt 网络中&#xff0c;如果…

LeRobot——Hugging Face打造的机器人领域的Transformer架构

前言 如友人邓博士所说&#xff0c;“用 Stanford aloha 课题组提供的训练数据&#xff0c;训练他们研发的 Action Chunking Transformer 动作规划模型&#xff0c;训练结果&#xff0c;能用&#xff0c;但是稳定性有待提高 要提高稳定性&#xff0c;看来必须修改 Stanford a…

STM32学习笔记(三)--EXTI外部中断详解

&#xff08;1&#xff09;配置步骤1.配置RCC 打开外设时钟2.配置GPIO 选择端口输入模式3.配置AFIO 选择要用的一路GPIO 连接至EXTI 4.配置EXTI 选择边沿触发方式 上升沿 下降沿 双边沿 选择触发响应方式 中断响应 事件响应 5.配置NVIC 选择一个合适的优先…

喜讯:NetMarvel 深度合作伙伴「点金石」斩获2024·MAMA 营销增长奖

全球市场瞬息万变&#xff0c;如何让增长做到有迹可循&#xff1f; 5月20日&#xff0c;由 AppsFlyer 举办的「2024 MAMA 移动互联网高层峰会」在三亚拉开序幕。在本届颁奖典礼上&#xff0c;NetMarvel 深度合作伙伴——点金石&#xff08;GameGoing&#xff09; 荣获「营销增长…

PyQt5学习系列之新项目创建并使用widget

PyQt5学习系列之新项目创建并使用widget 前言报错新建项目程序完整程序总结 前言 新建项目&#xff0c;再使用ui转py&#xff0c;无论怎么样都打不开py文件&#xff0c;直接报错。 报错 Connected to pydev debugger (build 233.11799.298)新建项目程序 # Press ShiftF10 to…

【计算机视觉】人脸算法之图像处理基础知识(一)

图像处理基础知识&#xff08;一&#xff09; 1.图像的构成 图像的构成可以包括以下几方面知识&#xff1a; 1.像素&#xff1a;图像的基本单位&#xff0c;是图像中的一个点。每个像素都有特定的位置和色彩值。在数字图像中&#xff0c;像素的颜色通常由红、绿、蓝&#xf…

本地密码记录工具-KeePass

文章目录 软件界面软件下载KeePass配置KeePass修改中文创建数据库配置数据库锁定配置账户密码为不同应用配置账号密码插件安装及使用 数据库同步 在此之前&#xff0c;没有使用过类似的账户密码记录工具&#xff0c;甚至完全没有接触过&#xff0c;由于Edge浏览器自带保存密码并…

el-date-picker 有效时间精确到时分秒 且给有效时间添加标记

el-date-picker实现有效日期做标记且时分秒限制选择范围 代码如下&#xff1a; // html部分 <el-date-pickerv-model"dateTime"type"datetime":picker-options"pickerOptions" > </el-date-picker>// js部分 /*** 回放有效日期开始时…

通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知&#xff0c;采用滑模控制算法&#xff0c;其具有最快的收敛性能&#xff0c;较强的鲁棒性&…