2022 [KDD] 多视图解释轨迹:用于预计到达时间的层次自注意网络-程序员宅基地

技术标签: pytorch  智慧城市  大数据  数据挖掘  

2022 [KDD] 多视图解释轨迹:用于预计到达时间的层次自注意网络

论文标题: Interpreting Trajectories from Multiple Views: A Hierarchical Self-Attention Network for Estimating the Time of Arrival
作者: Zebin Chen、Xiaolin Xiao、Yue-jiao Gong、Jun Fang、Nan Ma、Hua Chai、Zhiguang Cao
机构: 华南理工大学、滴滴出行、新加坡制造技术研究院
发表: 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining. (KDD 2022 ADS Track)
论文链接https://dl.acm.org/doi/abs/10.1145/3534678.3539051
代码https://github.com/YuejiaoGong/HierETA

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BO0G5TMT-1691753120409)(img/title.png)]

0. 论文概述

在预计到达时间估计(Estimating the Time of Arrival,ETA)应用程序中,轨迹通常由一系列路段(segment)组成,如图1所示,本文从segment、link和intersection3个视图联合解释轨迹。其中,link表示长路段,segment是短路段,一个link通常由多个segment组成,而intersection则表示路口。以往的ETA问题往往只建模路段(segment),而忽略了路口(intersection)以及长路段(link)的信息。这篇论文提出了一种用于估计到达时间的分层自注意力网络(HierETA)。该网络通过多视图轨迹表示来解释轨迹的内在结构。它包括一个Segment编码器,用于描述细粒度的本地交通状况,以及一个联合link-intersection编码器,用于从粗粒度的角度描述轨迹属性。最后,设计了一个层次感知的注意力解码器来实现多视图时空特征之间的权衡。在两个大规模真实数据集上的实验表明,HierETA优于现有技术。

图1 segement,link和intersection3个视图解释轨迹

图1 segement,link和intersection3个视图解释轨迹

1. 问题动机

本文从segment,link和intersection这3个视图出发,探讨了现有ETA研究存在的两个问题。

  1. 现有研究大都直接使用segment视图的交通特征来近似表示link视图的交通特征,没有显式的去建模link视图的特征。从而很难建模link内各个segment之间的一致性。
  2. segment和intersection的数量和属性类型是不一致的。很难对这两个视图进行联合建模,因此intersection信息在很大程度上被忽略,或者过于简化。但是实际的到达时间在很大程度上会受到intersection的影响。例如在intersection密集的城市道路上,等待时间会迅速积累,。

2. 本文贡献

与简单地将LinkIntersection特征集成到传统的分段视图表示上相比,HierETA利用这三个视图之间的层次关系来描绘底层的道路结构。HierETA的主要贡献总结如下:

1.第一个使用多视图表示学习明确地表示道路网络上的轨迹的工作。提出的层次自注意网络根据SegmentLinkIntersection的自然关系有效地组织这些视图。

2.设计了一个自适应的自注意网络,在多视图表示框架内联合利用全局和局部模式进行时空依赖建模。

3.设计了一种层次感知注意解码器,利用来自不同粒度的学习上下文特征来估计旅行时间,能够平衡SegmentLinkIntersection特征。

4.我们评估了来自滴滴出行的两个大型数据集上的HierETA的性能。实验结果表明,HierETA具有一定的优越性。

3. 问题定义

•多视图轨迹表示

segment { s i j } i = 1 , j = 1 m , n \{s_{ij}\}_{i=1,j=1}^{m,n} { sij}i=1,j=1m,n link { l i } i = 1 m \{l_i\}_{i=1}^m { li}i=1m intersection { c i } i = 1 m \{c_i\}_{i=1}^m { ci}i=1m

每个视图都包含了一组特定于视图的属性,例如segment视图的长度、宽度和intersection视图的历史交通量。此外,一条轨迹还包含了一些外部因素,如工作日、开始时间段、驾驶方式和总行驶距离等。

•预计到达时间估计ETA

估计查询轨迹的持续时间: T q T_q Tq

4. 模型架构

HierETA_framework

图2 HierETA架构图

4.1 属性特征提取器(Attribute Feature Extractor)

首先,引入一个属性特征提取器来学习多视角上下文特征,即segment、link和segment属性。所有视角中的属性均为连续或分类属性。针对连续属性采用Z-score进行归一化。采用嵌入(embedding)学习分类特征,然后将相关向量作为视图特定的特征嵌入。在这里,segment,link和intersection视图的特征表示分别为:segment { x i j s } i = 1 , j = 1 m , n \{x_{ij}^s\}_{i=1,j=1}^{m,n} { xijs}i=1,j=1m,n link { x i l } i = 1 m \{x_i^l\}_{i=1}^m { xil}i=1m intersection { x i c } i = 1 m \{x_i^c\}_{i=1}^m { xic}i=1m。从实际的角度,segment视图特征以细粒度建模空间依赖关系,而link视图和intersection视图从粗粒度表示轨迹属性。此外,外部因素在整个轨迹中被共享,并被表示为 x r x_r xr

4.2 多视图轨迹表示的层次自注意力网络 (Hierarchical Self-Attention Network for Multi-View Trajectory Representation)

为从多视图解释轨迹的底层结构,设计了segment编码器和联合Link-Intersection编码器组成的层次自注意力网络。

segment编码器

将外部特征 x r x_r xr和segment特征 { x i j s } i = 1 , j = 1 m , n \{x_{ij}^s\}_{i=1,j=1}^{m,n} { xijs}i=1,j=1m,n连接 ,其中 x i j s x_{ij}^s xijs表示segment s i j s_{ij} sij的特征即第 i i i个link中第 j j j个segment。采用BiLSTM对第 j j j个连接的特征向量 [ x j s ∣ x r ] [x_j^s|x^r] [xjsxr]进行顺序编码(为了叙述简介,省略了link视图中的 i i i)。通过双向传播得到隐藏状态表示: H j s H_j^s Hjs

为了准确估计到达时间,需要获得道路网络在时空上复杂的依赖性信息。为了更好地建模空间依赖性,设计了一种自适应的自注意力网络。该网络能够联合利用交通模式的全局结构和局部语义,以捕获不同部分之间的依赖性。输入由BiLSTM编码过的隐藏状态序列 H s = [ H 1 s , … , H s n ] ∈ R n × d s H^s=[H_1^s,…,H_s^n]\in\mathbb{R}^{n\times d_s} Hs=[H1s,,Hsn]Rn×ds。segment的表示是显式关注一个link中的所有segment来学习的,因此segment encoder自然遵循了整个link的全局模式。定义 G P j ∈ R n GP_j\in\mathbb{R}^n GPjRn表示第 j j j个segment和在同一个link的segment的相似性。

G P j = Q j K T d s \begin{aligned} GP_j=\frac{Q_jK^T}{\sqrt d_s} \end{aligned} GPj=d sQjKT
但是全局模式在实际场景会存在一些问题,例如交通事故导致的拥堵传播会显著影响道路状况,导致邻近的segment有着相似的拥堵程度。因此除了全局模式,还接着引入一个局部语义模式 L P j LP_j LPj来准确评估相邻segment的影响:

L P j ( k ) = { G P j ( k ) , ∣ j − k ∣ ≤ ω − ∞ ,  otherwise  \begin{aligned} L P_{j}(k)=\left\{\begin{array}{ll} G P_{j}(k), & |j-k| \leq \omega \\ -\infty, & \text { otherwise } \end{array}\right. \end{aligned} LPj(k)={ GPj(k),,jkω otherwise 
其中 ω \omega ω是相邻segment的单侧窗口大小,因此局部模式接受的区域大小为 φ = 2 ω + 1 \varphi=2\omega+1 φ=2ω+1 L P j ( k ) LP_j(k) LPj(k) G P j ( K ) GP_j(K) GPj(K)表示第个segment和第个segment之间的局部和全局相似性。当第个segment位于第个segment的接受域内时,局部模式的强度被设置为与全局模式相同,否则将被忽略。使用这种策略,既可以捕获上游和下游的空间依赖关系。

通过联合考虑全局和局部模式,segment encoder能够处理每个link内复杂的真实交通条件。为了同时利用全局结构模式和局部语义模式,采用了一种门控机制,自适应地将它们聚合为:
F j s = ( 1 − z j ) ⊙ A t t ( G P j ) + z j ⊙ A t t ( L P j ) \begin{aligned} F_j^s=(1-z_j)\odot Att(GP_j)+z_j\odot Att(LP_j) \end{aligned} Fjs=(1zj)Att(GPj)+zjAtt(LPj)
其中 ⊙ \odot 表示元素级的乘法, A t t ( G P j ) Att(GP_j) Att(GPj) A t t ( L P j ) Att(LP_j) Att(LPj)分别表示全局和局部的segment注意力权重。门控标量 z j z_j zj通过 H j s , A t t ( G P j ) , A t t ( L P j ) H_j^s,Att(GP_j),Att(LP_j) Hjs,Att(GPj),Att(LPj)学习。
z j = σ ( W h H j s + W g A t t ( G P j ) + W l A t t ( L P j ) + b z ) z_j=\sigma(W_hH_j^s+W_gAtt(GP_j)+W_lAtt(LP_j)+b_z) zj=σ(WhHjs+WgAtt(GPj)+WlAtt(LPj)+bz)
其中, W h , W g , W l W_h,W_g,W_l Wh,Wg,Wl b z b_z bz是可学习的参数。 σ ( ⋅ ) \sigma(·) σ()表示sigmoid激活函数。然后使用残差链接和层归一化来生成segment视图的上下文特征 { h j s } j = 1 n \{h_j^s\}^n_{j=1} { hjs}j=1n。通过有效地利用全局结构和局部语义模式,学习到的上下文特征可以很好地展示来自segment视图的丰富信息。

segment encoder的目标是捕获同一link中segment的时空依赖性,合理地期望所有link都赋予了相似的依赖性结构。因此,segment encoder的可学习参数在所有link上共享并并行训练,这不仅大大减少了参数的数量,而且提高了HierETA模型的计算效率。

联合Link-Intersection编码器

虽然segment视图在现有工作中已有了广泛的应用。但是segment不能对同一个link中共享的一致性进行建模。因此,本文的层次网络中引入一个粗粒度的表示作为segment视图的补充。同时由于link和intersection是交替出现的,引入联合link和intersection的编码器,可以无缝集成这两个视图的特征。

在第 i i i个link中所有学习到的segment的上下文特征为 { h i j s } j = 1 n \{h_{ij}^s\}^n_{j=1} { hijs}j=1n。利用注意力机制将segment特征聚合为link的特征 x i l = ∑ j = 1 n γ i j h i j s x_i^l=\sum_{j=1}^n\gamma_{ij}h_{ij}^s xil=j=1nγijhijs。其中 γ i j = s o f t m a x j ( W r h i j s + b r ) \gamma_{ij}=\mathrm{softmax}_j(W_rh_{ij}^s+b_r) γij=softmaxj(Wrhijs+br) W r W_r Wr b r b_r br是线性变换和偏置。

link和intersection的特征表示为 { x i l } i = 1 m \{x_i^l\}_{i=1}^m { xil}i=1m { x i c } i = 1 m \{x_i^c\}_{i=1}^m { xic}i=1m。延续segment encoder的设计,用BiLSTM对link和intersection进行编码,并将BiLSTM的第 i i i个隐藏状态分别表示为 H i l H_i^l Hil H i c H_i^c Hic。之后,将两者连接得到 H ^ i l = [ H i l ∣ H i c ] \hat{H}_i^l=[H_i^l|H_i^c] H^il=[HilHic] H ^ i l \hat{H}_i^l H^il揭示了道路网络上轨迹的内在结构,其中link和intersection交替出现。为了捕获不同link和intersection之间的时空依赖性,联合Link-Intersection编码器还包括一个自注意层、一个残差连接和一个层归一化,以获得联合上下文特征 { h i l } i = 1 m \{h_i^l\}^m_{i=1} { hil}i=1m。但是这里消除了局部模式,这是因为相邻之间link之间的交通影响更弱也更稀疏,因此模型可能会过拟合。

总之,HierETA模型的编码器能够同时获得捕获局部交通条件的segment视图上下文特征和保留公共道路属性的联合link-intersection上下文特征。从3个视图学习到的上下文特征共同作用,全面建模道路网络上轨迹的底层结构,这样轨迹就可以被很好地探索,用于到达时间估计。

4.3 层次结构感知注意力解码器 (Hierarchy-Aware Attention Decoder)

在实际情况下,不同子路线之间的时空依赖性是高度动态和相关的,而到达时间估计的不确定性与关键成分密切相关。例如,如果一个轨迹包含拥堵的十字路口或路段,那么就应该更多地关注这些组件。因此,在实践中平等地对待所有子路线的特点是不公平的。因此,我们提出了一个层次结构感知的注意解码器来联合利用多视图的上下文特征。在形式上,路线 R \mathcal{R} R的最终表示为上下文特征的组合,即:
R = ( 1 − λ ) ∑ i = 1 m ∑ j = 1 n a i j h i j s + λ ∑ i = 1 m β i h i l \mathcal{R}=(1-\lambda)\sum^m_{i=1}\sum^n_{j=1}a_{ij}h_{ij}^s+\lambda\sum^m_{i=1}\beta_ih_i^l R=(1λ)i=1mj=1naijhijs+λi=1mβihil
其中 h i j s h_{ij}^s hijs h i l {h_i^l} hil分别表示 s i j s_{ij} sij和联合link-intersection l i l_i li的上下文特征, a i j a_{ij} aij β i \beta_i βi分别表示各自的注意力权重, λ \lambda λ是权衡细粒度和粗粒度权重的超参数。此外,由于相对不变的静态道路属性,一个link在一个有限时间内的驾驶条件往往是一致的。因此,在不考虑link视图相关性的情况下单独处理每个segment是有问题的,因为它缺乏来自link视图一致性的反馈。为了解决这一问题,设计了针对性的注意力机制,采用link视图的一致性来进一步调整segment视图的注意权重。首先针对link视图的注意力权重 β i \beta_i βi
β i = s o f t m a x i ( f l ( h i l , x r ) ) \beta_i=\underset{i}{\mathrm{softmax}}(f^l(h_i^l,x^r)) βi=isoftmax(fl(hil,xr))
其中 f l ( ⋅ ) f^l(·) fl()包含了link视图的时空特征 h i l h_i^l hil和外部因素 x r x^r xr
f l ( h i l , x r ) = v T t a n ( w 1 h i l + w 2 x r + b ) f^l(h_i^l,x^r)=v^T\mathrm{tan}(w_1h_i^l+w_2x^r+b) fl(hil,xr)=vTtan(w1hil+w2xr+b)
其中 v , w 1 , w 2 v,w_1,w_2 v,w1,w2 b b b是可训练的参数。针对segment视图的注意力权重 a i j a_ij aij由link视图的一致性引导进行更新:
a i j = s o f t m a x ( i , j ) ( β i f s ( h i j s , x r ) ) a_ij=\underset{(i,j)}{\mathrm softmax}(\beta_if^s(h^s_{ij},x^r)) aij=(i,j)softmax(βifs(hijs,xr))
使用层次结构感知注意力解码器,可以自适应地从不同的表示粒度中选择最相关的特征。最后,将全连接层应用于路线表示 R \mathcal{R} R,产生行程时间预测 Y ^ ∈ R N × 1 \hat Y \in \mathbb{R}^{N\times1} Y^RN×1,其中 N N N表示路线总数。

训练过程中,HierETA通过平均绝对误差(mean absolute error, MAE)作为损失函数,对HierETA训练:
L ( Θ ) = 1 N ∑ k = 1 N ∣ Y k − Y ^ k ∣ \mathcal{L}(\Theta)=\frac{1}{N}\sum_{k=1}^N|Y_k-\hat{Y}_k| L(Θ)=N1k=1NYkY^k
其中 Θ \Theta Θ表示HierETA中所有可训练的参数。

5. 实验

5.1 数据集

本文选择了滴滴出行提供的北京和广州两个城市的真实数据集,为了避免原始数据中异常情况造成的工件,删除了非常短的行驶时间(< 60s)、极高的行驶速度(>120公里/小时)、每个link中的segmen数目t和路线中的link数目分别限制在3-50和3-30,以适应一般情况。具体统计信息和旅行时间分布如下图所示。

数据集统计信息
旅行时间分布图
图3 数据集信息

5.2 实验结果

选择4个评价指标来进行性能评测。包括平均绝对误差(MAE)、均方根误差(RMSE)、平均绝对百分比误差(MAPE)和满意度(SR),其中SR是指错误率小于10%的行程比例,较高的SR能反映更好的性能和客户满意度。
M A E = 1 N ∑ K = 1 N ∣ y k − y ^ k ∣ R M S E = 1 N ∑ k = 1 N ( y k − y ^ k ) M A P E = 1 N ∑ k = 1 N ∣ y k − y ^ k y k × 100 % ∣ S R = 1 N ∑ k = 1 N ( ∣ y k − y ^ k y k ≤ 10 % ) × 100 % ∣ MAE=\frac{1}{N}\sum_{K=1}^N|y_k-\hat{y}_k| \\ RMSE=\sqrt{\frac{1}{N}\sum_{k=1}^N(y_k-\hat{y}_k)}\\ MAPE=\frac{1}{N}\sum_{k=1}^N|\frac{y_k-\hat{y}_k}{y_k}\times100\%|\\ SR=\frac{1}{N}\sum_{k=1}^N(|\frac{y_k-\hat{y}_k}{y_k}≤10\%)\times100\%| MAE=N1K=1Nyky^kRMSE=N1k=1N(yky^k) MAPE=N1k=1Nykyky^k×100%∣SR=N1k=1N(ykyky^k10%)×100%∣
其中 y k y_k yk y ^ k \hat{y}_k y^k分别表示真值和预测值。

如图5和图6所示,HierETA整体性能和不同行驶距离下的评价指标均表现最优。

HierETA在北京和广州数据集上的整体性能比较

图4 HierETA在北京和广州数据集上的整体性能比较

HierETA在MAPE上在不同行驶距离上的表现

图5 HierETA在MAPE上在不同行驶距离上的表现

5.3 超参实验

如图6所示,分析了两个超参数的影响,分别分析了不同窗口大小 φ \varphi φ下的局部segment注意力在北京数据集的影响。以及通过改变 λ \lambda λ从0到1来评估利用多视图特征的重要性。

图6(a)所示, φ = 3 \varphi=3 φ=3性能最佳,但是再随显示着窗口尺寸的增加,性能逐渐降低。这一观察结果可能来自于当注意的范围持续增加时,相邻segment之间的相关性略有降低,导致建模的不确定性增加。

图6(b)所示。 λ = 0.2 \lambda=0.2 λ=0.2性能最佳,当 λ \lambda λ=1或0,即只考虑segment视图或者只考虑link-intersection视图,结果均很差,说明了多视图具有鲁棒性和有效性。

图6 超参实验

图6 超参实验

5.3 消融实验

通过消融实验来验证HierETA各个模块的有效性,分别做了如下实验:

•w/o lcoal@e:去除编码器的局部注意力,验证语义交通条件建模的有效性。

•w/o global@e:去除全局注意力,验证提取结构性交通模式的必要性。

•w/o guide@d:辅助解码器的注意力删除,删除来自在等式中的Link视图一致性的反馈

•w/o cross info:去除intersection,只有segment和link视图

•w/o hier:去除联合link-intersection编码器来消除层次结构。

图7 消融实验

图7 消融实验

从图7所示结果,去除任一模块,HierETA均有所下降,从而验证了HierETA各个模块的有效性。

6. 结论

1.本文从segmentlinkintersection视图中全面解释轨迹,并相应地设计一种新的层次自注意网络HierETA来学习道路网络上轨迹的潜在结构。

2.考虑复杂的真实交通条件,HierETA自适应地集成了全局和局部模式来进行时空依赖建模。

3.设计了一个层次感知的注意解码器,自适应地平衡多视图上下文特征的重要性。

4.在滴滴出行的两个大规模真实数据集上的实验表明,HierETA达到了最先进的性能。此外,新的多视图轨迹表示法在实践中显示出了巨大的前景,从而为开发先进的轨迹数据挖掘模型开辟了新的机会。

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

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法