滴滴定价策略算法
一、CNN和全连接的区别
1.1. CNN(卷积层)
- 局部感受野:每个神经元只与输入的一部分连接。使用局部连接(卷积核只与输入数据的局部区域连接),通过滑动窗口的方式提取局部特征。
- 权重共享:同一卷积核在整个输入中滑动,提取局部特征。通过参数共享(同一卷积核在整张输入上共享权重)减少参数量。
- 输出为多维张量(特征图)。
1.2. 全连接层(FC层)
- 每个神经元与前一层所有神经元相连接。
- 无权重共享。
- 输出为一维向量。
1.3. 参数数量
- CNN:参数量少(因局部连接和参数共享),适合处理高维数据(如大尺寸图像)。
- FC:参数多(连接数=输入维度×输出维度)。
二、LSTM 相比 RNN 的改进
LSTM(Long Short-Term Memory)是为了解决传统 RNN 存在的长期依赖问题(Long-Term Dependency)而设计的,其在结构上做了关键改进。
2.1. RNN 的缺点
- 梯度消失或爆炸:在长序列中,RNN 很难有效传播梯度,导致模型难以学习长期依赖信息。
- 记忆能力弱:标准 RNN 结构缺乏机制去保留长期记忆,只能捕捉短期上下文。
2.2. LSTM 的改进
LSTM 引入了门控机制,通过精细控制信息的流动来缓解上述问题。
主要改进点:
结构 | 作用 |
---|---|
遗忘门(Forget Gate) | 决定丢弃多少先前的记忆(细胞状态) |
输入门(Input Gate) | 决定当前输入信息有多少被写入细胞状态 |
输出门(Output Gate) | 决定当前细胞状态有多少被输出为隐藏状态 |
细胞状态(Cell State) | 类似信息通道,可以长期传递和保留信息 |
三、预测一个城市不同区域一天的发单量。设计一些调度策略
3.1. 发单量预测模型设计
1. 数据需求
数据类型 | 示例 |
---|---|
历史发单数据 | 区域、时间、订单数量 |
天气数据 | 气温、降雨、风力等 |
地理信息 | 区域划分、POI(商圈/办公区/住宅) |
特殊事件 | 节假日、大型活动 |
实时流量 | 道路拥堵、交通事故 |
2. 特征工程
- 时间特征:小时、星期几、节假日、是否高峰期
- 空间特征:区域 ID、区域 POI 类型密度
- 历史统计特征:该区域历史同一时段平均订单数、波动率
- 天气特征:是否下雨、温度等级
- 用户行为特征:APP 打开率、下单转化率(如有)
3.2. 调度策略设计(基于预测结果)
1. 区域运力调配策略
- 预测高发单区提前补充运力
- 若预测订单数 > 当前司机数 + buffer,则提前调度空闲司机前往
- 动态运力流转
- 利用图优化算法(如最大流/最短路)将空闲运力从低需求区流转到高需求区
2. 动态定价(Surge Pricing)
- 预测需求高而供给低时,提高价格激励司机前往
- 基于供需比动态调整价格
- 降低乘客因等待放弃订单的概率
3. 热门区域临时站点调度
- 在大型活动或节假日临近区域设立临时接驳点
- 聚合乘客与司机,提升匹配效率
4. 时间窗口调度
- 按小时预测每区域订单需求波动
- 制定小时级调度策略,避免过早/过迟调度
5. 跨区域合作调度
- 相邻区域间联动
- 考虑司机移动路径和订单来源,规划最优迁移路线
四、143. 重排链表
- 思路:从中间阶段截断为两截列表,并对后面那一段链表反转。然后两截链表一个加一个,拼接起来
- 代码:
def middleNode(head):
slow = head
fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
def reverseList(head):
pre = None
cur = head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
"""
Do not return anything, modify head in-place instead.
"""
mid = middleNode(head)
head2 = reverseList(mid)
while head2.next:
nxt = head.next
nxt2 = head2.next
head.next = head2
head2.next = nxt
head = nxt
head2 = nxt2