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

用TikZ绘制专业流程图:从入门到进阶(基于D3QN训练流程)

用TikZ绘制专业流程图:从入门到进阶(基于D3QN训练流程)

本文以 d3qn_training_process.tex 为案例,系统讲解如何使用 TikZ 在 LaTeX 中绘制专业流程图。内容循序渐进,覆盖:环境配置、基础语法(节点、箭头、定位、样式)、完整实战复现(经验回放-采样-网络-TD误差-梯度-优先级-拷贝)、进阶技巧(fit/background/calc)、常见问题与导出方法。读完即可独立绘制清晰、美观、可复用的流程图。


一、准备工作与环境配置

推荐使用 standalone 文档类单独编译图形,方便导入论文/幻灯片:

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz}
\usepackage{amsmath, amssymb, bm}
\usetikzlibrary{shapes,arrows,positioning,fit,backgrounds,calc}
  • standalone:独立产出 PDF/PNG,迁移方便
  • shapes/arrows:提供矩形、菱形、箭头等形状
  • positioning:基于相对位置的排版(below of= 等)
  • fit/backgrounds:群组和背景层,适合高阶布局
  • calc:坐标运算,便于绘制拐角箭头

编译命令(以 PDFLaTeX 为例):

pdflatex d3qn_training_process.tex

二、基础语法:节点、箭头、定位与样式

2.1 定义可复用样式

样式统一管理使图形风格一致、修改方便:

\tikzstyle{process} = [rectangle, draw, fill=blue!20,text width=3.5cm, text centered, rounded corners, minimum height=1.2cm]
\tikzstyle{network} = [rectangle, draw, fill=green!20,text width=4cm, text centered, rounded corners, minimum height=1.2cm]
\tikzstyle{buffer} = [rectangle, draw=none, fill=none,text width=3cm, text centered, minimum height=2cm, minimum width=4cm]
\tikzstyle{decision} = [diamond, draw, fill=yellow!20,text width=2cm, text centered, minimum height=1cm, aspect=2.5]
\tikzstyle{arrow} = [thick,->,>=stealth]
\tikzstyle{copyarrow} = [thick,->,>=stealth,dashed,red]
  • process/network:流程框与网络框,颜色区分语义
  • decision:菱形判定框,aspect 控制菱形比例
  • arrow/copyarrow:主流程箭头与“拷贝参数”虚线红箭头

2.2 放置节点(基于定位库)

\begin{tikzpicture}[node distance=2cm, auto]
% 经验回放“圆柱”容器:先占位,再用普通绘图命令画造型
\node [buffer] (buffer) {};% 基于相对定位
\node [process, below of=buffer, yshift=-0.5cm] (sampling) {Batch\\Sampling};
\node [network, below left of=sampling, xshift=-2cm] (current) {Current Network\\$\\bm{\\Theta} = \{\\bm{W}_V, \\bm{b}_V, \\bm{W}_A, \\bm{b}_A\}$};
\node [network, below right of=sampling, xshift=2cm] (target) {Target Network\\$\hat{\\bm{\\Theta}} = \{\hat{\\bm{W}}_V, \hat{\\bm{b}}_V, \hat{\\bm{W}}_A, \hat{\\bm{b}}_A\}$};
  • below ofbelow left ofbelow right of:不必手算坐标
  • xshift/yshift:微调位置,解决重叠或对齐问题

2.3 画箭头与拐角

\draw [arrow] (buffer) -- (sampling);         % 直连
\draw [arrow] (sampling) -| (current);        % 右角拐弯
\draw [arrow] (current) |- (tderror);         % 左角拐弯

-||- 提供直角转折,配合 calc 库可自定义拐点路径。


三、案例复现:D3QN训练流程图(逐步搭建)

目标流程:Experience Buffer → Batch Sampling → Current / Target Networks → TD Error → Gradient Update → Update Current Network → Update Buffer Priorities → 判定拷贝 → Copy → 参数回注与循环。

3.1 绘制“经验回放”圆柱

圆柱更贴近“缓冲区/数据库”语义:

\node [buffer] (buffer) {};
\begin{scope}[shift={(buffer.center)}]\draw[fill=cyan!20, draw=cyan!60, thick] (-1.5,-1) rectangle (1.5,1);\draw[fill=cyan!20, draw=cyan!60, thick] (0,1) ellipse (1.5cm and 0.3cm);\draw[fill=cyan!20, draw=cyan!60, thick] (0,-1) ellipse (1.5cm and 0.3cm);\node[text width=3cm, text centered] at (0,0) {Experience\\Buffer};
\end{scope}
  • scope+shift:局部坐标偏移,便于以节点中心为参照绘制复杂形状
  • 上下两个椭圆 + 中间矩形 = 经典圆柱体视觉

3.2 主干流程节点

\node [process, below of=buffer, yshift=-0.5cm] (sampling) {Batch\\Sampling};
\node [process, below of=sampling, yshift=-1.5cm] (tderror) {TD Error\\Calculation\\$\\delta = |y - Q(s,a)|$};
\node [process, below of=tderror] (gradient) {Gradient\\Update\\$\\nabla_\\theta \\bm{\\mathcal{L}}$};
\node [process, below of=gradient] (update_current) {Update Current\\Network Parameters};
\node [process, below of=update_current] (update_buffer) {Update Buffer\\Priorities\\$p_i = |\\delta_i|^\\alpha$};
\node [decision, below of=update_buffer, yshift=-0.5cm] (decision) {Every C\\Steps?};
\node [process, below of=decision, yshift=-0.5cm] (copy) {Copy Parameters\\$\hat{\\bm{\\Theta}} \leftarrow \\bm{\\Theta}$};

公式采用 amsmath/bm 宏包增强排版(粗体、帽子、向量等)。

3.3 分支:当前/目标网络

左右分支体现“估计”和“目标”网络:

\node [network, below left of=sampling, xshift=-2cm] (current) {Current Network\\$\\bm{\\Theta} = \{\\bm{W}_V, \\bm{b}_V, \\bm{W}_A, \\bm{b}_A\}$};
\node [network, below right of=sampling, xshift=2cm] (target) {Target Network\\$\hat{\\bm{\\Theta}} = \{\hat{\\bm{W}}_V, \hat{\\bm{b}}_V, \hat{\\bm{W}}_A, \hat{\\bm{b}}_A\}$};
\draw [arrow] (sampling) -| (current);
\draw [arrow] (sampling) -| (target);
\draw [arrow] (current) |- (tderror) node[pos=0.7, above] {$Q(s,a)$};
\draw [arrow] (target) |- (tderror) node[pos=0.7, above] {$y$};

node[pos=.., above]{...} 在箭头上添加标签,标明信息来源。

3.4 主流程箭头与循环

\draw [arrow] (buffer) -- (sampling);
\draw [arrow] (tderror) -- (gradient);
\draw [arrow] (gradient) -- (update_current);
\draw [arrow] (update_current) -- (update_buffer);
\draw [arrow] (update_buffer) -- (decision);
\draw [arrow] (decision) -- node[right] {Yes} (copy);
拷贝参数的“回注”路径(虚线红色)
\draw [copyarrow] (copy.east) -| ++(4.5,0) |- (target.east) node[pos=0.2, above] {update};
  • copy.east / target.east:使用锚点控制连线端点
  • -| 向右,再 |- 向上折返,避开主干

【逐段解释】

  • (copy.east):从节点 copy 的东侧锚点(右侧中点)出发。
  • -|:右角折线路由,几何含义为“先横后竖”。形式上 A -| B 等价于 A -- (x_B, y_A) -- B
  • ++(4.5,0):相对坐标并“更新当前点”。从当前位置向右移动 4.5(单位缺省为 cm),新的位置被设为“当前点”。因此 - | ++(4.5,0) 的效果是:先沿水平方向移到距 copy.east 右侧 4.5 的位置,作为折角转折点,拉开与主干的间距。
  • |- (target.east):左角折线路由,几何含义为“先竖后横”。对于当前点 C 与目标点 BC |- B 等价于 C -- (x_C, y_B) -- B,即先竖直到与 B 同 y,再横到 B
  • node[pos=0.2, above]{update}:在“整条路径”的 20% 处放置标签,位置相对于路径切线方向的上方。可用 pos=...(0~1)、near startmidwaynear endsloped 等微调。如果想明确标注在最后一段上,更稳妥的写法是将标签紧跟在 |- (target.east) 之后或把路径拆成两条。

【等价写法(更直观)】

% 用 calc 显式给出中间拐点:
\draw[copyarrow](copy.east) -- ($(copy.east)+(4.5,0)$)|- (target.east)node[pos=0.2, above]{update};

上述写法与原语句效果一致:第一段水平右移 4.5 形成“让路”的走线,再以 |- 竖直对齐后水平接入 target.east

决策失败与循环回到缓冲区
\draw [arrow] (decision.west) -| ++(-3.5,0) |- ($(buffer.west)+(0,-0.3)$);
\node [left of=decision, xshift=-1cm, yshift=0.25cm, font=\small] {No};
\draw [arrow] (copy.west) -| ++(-5.5,0) |- ($(buffer.west)+(0,0.3)$);
  • calc 库语法 $(A)+(dx,dy)$:相对位移更直观
  • 通过不同高度返回 buffer,避免线路重叠

四、进阶技巧:布局、分组与背景层

4.1 使用 fit 为子系统加外框

\node[draw=gray!60, rounded corners, inner sep=6pt, fit=(current)(target)] (netgroup) {};
\node[above=2pt of netgroup, font=\small, gray!70] {Networks};

fit 将多个节点打包为一个“群组”,便于标注模块边界。

4.2 背景层统一渲染

\begin{scope}[on background layer]\draw[fill=gray!5, draw=gray!20, rounded corners]($(buffer.north west)+(-0.8,0.8)$) rectangle ($(update_buffer.south east)+(0.8,-0.8)$);
\end{scope}

背景层避免覆盖前景节点/箭头,适合大区域底色与分区。

4.3 对齐与等距技巧

  • 使用 node distance 控制默认间距
  • xshift/yshift 精调
  • 复杂场景可借助隐式锚点(如不可见的对齐参考节点)

4.4 宏与样式参数化

将颜色、圆角、间距参数集中定义,便于不同主题复用:

\tikzset{flow/process/.style={rectangle, draw, rounded corners, fill=#1!18, text width=#2, minimum height=1.1cm, text centered},flow/process/.default={blue}{3.6cm}
}

调用:\node[flow/process=red]{...};\node[flow/process]{...};


五、常见问题与排错建议

  1. 箭头穿帮/重叠
    • 调整 -| / |- 转折路径
    • 使用 calc 的坐标计算插入中间拐点
  2. 节点文本溢出
    • 增大 text width 或缩小字体 font=\small
    • 使用换行 \\ 明确分行
  3. 整体不居中/留白过大
    • standaloneborder 控制边距
    • 外围再加一层 fit 背景框裁定视野
  4. 颜色太艳
    • color!x 的浅色系(如 blue!15green!20
  5. 可维护性差
    • 统一样式、集中宏定义;模块化分组;注释到位

六、完整代码与导出

将上述片段整合即可得到完整、可编译的 d3qn_training_process.tex(您已提供)。若需导出 PNG:

pdflatex d3qn_training_process.tex
magick -density 300 d3qn_training_process.pdf -quality 95 d3qn_training_process.png

或使用 ghostscript/pdftoppm 实现高分辨率转换。


七、小结与扩展

本文基于 D3QN 训练流程,系统演示了 TikZ 绘制流程图的全流程:从样式定义、相对定位、箭头拐角、到进阶的 fit/background/calc。当图逐渐复杂时,建议:

  • 把“数据流”和“控制流”用不同颜色/线型区分
  • 将模块封装成可复用样式或宏
  • 使用 scope 管理局部坐标与样式,减少重复

在此基础上,你可以快速构建训练流水线、软件架构、通信协议、任务调度等多类流程图,并保持学术级排版质量。

http://www.dtcms.com/a/506944.html

相关文章:

  • Java 反射机制实战:对象属性复制与私有方法调用全解析
  • 火星时代UE奶瓜粒子特效②
  • 网站制作流程图wordpress 维文版
  • MySQL与K8s:数据库运维新范式
  • 第9篇 opencv提取矩形角度不是很准确的处理方法
  • 检测十字标 opencv python
  • NSSCTF - Web | 【SWPUCTF 2021 新生赛】Do_you_know_http
  • Linux小课堂: 流、重定向与 cut 命令进阶
  • 虚拟内存核心常识
  • ubuntu配置mysql8.0并设置Navicat网络连接
  • 深圳网站维护一般多少钱网址大全黄免费片
  • 从若依框架看权限设计与数据字典:背后的工程化思考
  • 邦策网站建设平台网站建设文化咨询
  • ASTM D7033-2022 定向刨花板检测
  • 使用ThreadLocal的一些注意事项
  • Kotion 常见用法注意事项(持续更新...)
  • 如何使用思维导图提升信息整理效率
  • K-VXE-TABLE二次封装,含table‘自定义列功能
  • 基于 GEE 开发的一种利用 OTSU 算法实现水体提取的便捷工具
  • Linux小课堂: 深入解析 top、htop、glances 及进程终止机制
  • 建设协会网站洛阳伟创科技
  • MongoDB 提供的 `GridFSTemplate` 操作 GridFS 大文件系统的常用查询方式
  • 2025年ASOC SCI2区TOP,基于模糊分组的多仓库多无人机电力杆巡检模因算法,深度解析+性能实测
  • 无人机地面站中不同的飞行模式具体含义释义(开源飞控常用的5种模式)
  • Inventor 转换为 3DXML 全流程技术指南:附迪威模型网在线方案
  • Maven POM 简介
  • pytorch踩坑记录
  • seo每天一贴博客南宁网站排名优化电话
  • 手机端网站开发书籍徐州vi设计公司
  • STM32F1和STM32F4在配置硬件SPI1时有什么不同?