diff --git a/critical/hutbthesis.cls b/critical/hutbthesis.cls new file mode 100644 index 00000000..3d7c2df3 --- /dev/null +++ b/critical/hutbthesis.cls @@ -0,0 +1,1227 @@ +% +% 本模版根据湖南工商大学本科生学位论文撰写规范创建 +% 论文内容一般应由十一个主要部分组成,依次为: +% 1.封面 +% 2.中文摘要; +% 3.英文摘要; +% 4.目录; +% 5.符号说明(必要时); +% 6.论文正文; +% 7.参考文献; +% 8.致谢。 +% +% +% 重构 +% 参考CSU Thesis,以及SJTU Thesis和WHU Thesis Latex模板进行重构。 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 声明部分(Identification) +% +% 指定模板使用的 Latex 版本,标识输出模板名 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{hutbthesis}[v0.1, edited by tp2008] + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 预先定义(Preliminary declarations) +% +% 定义kv对,在模板文件中使用的指令并引入依赖的包 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% 定义一些命令用于写文档 +% /cs 在ltxdoc 包中也提供,剩下是自定义的 +% 借鉴自thuthesis和ustcthesis模板 +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +\DeclareRobustCommand\file{\nolinkurl} +\DeclareRobustCommand\env{\textsf} +\DeclareRobustCommand\pkg{\textsf} +\DeclareRobustCommand\cls{\textsf} + +% 模板类型选取 +\newif\ifhutb@type@bachelor +\hutb@type@bachelortrue +\newif\ifhutb@type@master +\hutb@type@masterfalse +\newif\ifhutb@type@doctor +\hutb@type@doctorfalse +\newif\ifhutb@type@course +\hutb@type@coursefalse +\newif\ifhutb@type@print +\hutb@type@printfalse +\newif\ifhutb@type@graduate +\hutb@type@graduatefalse +\ifhutb@type@master + \hutb@type@graduatetrue +\fi +\ifhutb@type@doctor + \hutb@type@graduatetrue +\fi + +% 定义致谢环境,盲审下隐藏致谢 +\newif\ifhutb@review +\hutb@reviewfalse + +% 定义模板选项 +\DeclareOption{doctor}{\hutb@type@doctortrue} +\DeclareOption{master}{\hutb@type@mastertrue} +\DeclareOption{bachelor}{\hutb@type@bachelortrue} +\DeclareOption{course}{\hutb@type@coursetrue} +%\DeclareOption{forprint}{\hutb@type@printtrue} +% 使用 \XeTeX{} 引擎时,\pkg{fontspec} 宏包会被 \pkg{xeCJK} 自动调用。传递给 +% \pkg{fontspec} 宏包 \opt{no-math} 选项,避免部分数学符号字体自动调整为 CMR。 +% 并使用 \opt{quiet} 忽略警告。 +% \begin{macrocode} +% \PassOptionsToPackage{no-math,quiet}{fontspec} +\PassOptionsToPackage{no-math}{fontspec} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions\relax + + +% 读取基类 +% \LoadClass[a4paper,12pt]{article} +\LoadClass[UTF8,openany,a4paper,oneside,zihao=-4]{ctexbook} +% 注意openany和oneside参数,默认是无空白页不区分双面印。 + +% 加载宏包 +% 引擎执行判断宏包 +\RequirePackage{ifxetex} +% 加载xparse宏包 +\RequirePackage{xparse} +% 报错与警告 +\NewDocumentCommand{\hutb@error}{ m o }{ + \ClassError{hutbthesis_error}{#1}{#2} +} +\NewDocumentCommand{\hutb@warning}{m o }{ + \ClassWarning{hutbthesis_warning}{#1}{#2} +} + +\RequireXeTeX +\ifxetex + % Pass +\else + \hutb@error{Please use xelatex driver instead of pdflatex.} +\fi + +% 支持中文的 ctex 宏包 +\RequirePackage{ctex} +% 页面布局 +\RequirePackage{geometry} +% 使用 \pkg{amsmath} 处理数学公式 +\RequirePackage{amsmath} +% 下面的数学宏包和unicode-math 冲突 +% \RequirePackage{amsfonts} +% \RequirePackage{amssymb} +% \RequirePackage{bm} +% 使用 \pkg{unicode-math} 处理数学字体 +\RequirePackage{unicode-math} +% 算法排版宏包 +\RequirePackage[chapter]{algorithm} +\RequirePackage{algorithmic} +\floatname{algorithm}{算法} + +% 自定义关键词 +\RequirePackage{pgfkeys} +% 设置目录 +\RequirePackage{titletoc} +% 设置字体 +\RequirePackage{fontenc} +% 设置颜色 +\RequirePackage{xcolor} +% 下划线换行 +\RequirePackage{ulem} +% 设置页眉和页脚 +\RequirePackage{fancyhdr} +% 代码高亮 +% 注:该包依赖python环境Pygments语法高亮显示工具包 +% 并且需要 -shell-escape参数 +% TODO: 日后需要修改为可配置 + +% 超链接 hyperref 的设置 +% 提供书签与链接 +\RequirePackage{hyperref} +% 插入图片 +\RequirePackage{graphicx} +% 表格 +\RequirePackage{array} +% 长表格 +\RequirePackage{longtable} +% booktabs 提供了\toprule 等命令. +\RequirePackage{booktabs} +% multirow 支持在表格中跨行 +\RequirePackage{multirow} +% 调整间隔, 让表格更好看些 +\RequirePackage{bigstrut} +%在跨行表格中输入定界符 +\RequirePackage{bigdelim} +% 保护脆弱命令 +\RequirePackage{cprotect} +% 设置代码高亮 +% \RequirePackage{minted} +% 设置代码环境 +\RequirePackage{listings} +\lstset{ + breaklines, + columns=fixed, + numbers=none, % 在左侧显示行号 + numberstyle=\tiny\color{gray}, % 设定行号格式 + frame=single, % 不显示背景边框 + rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. commens (green here)) +% backgroundcolor=\color[RGB]{245,245,244}, % 设定背景颜色 + keywordstyle=\color[RGB]{40,40,255}, % 设定关键字颜色 + numberstyle=\footnotesize\color{darkgray}, + commentstyle=\it\color[RGB]{0,96,96}, % 设置代码注释的格式 + stringstyle=\rmfamily\slshape\color[RGB]{128,0,0}, % 设置字符串格式 + showstringspaces=false, % 不显示字符串中的空格 + language=c++, % 设置语言 + aboveskip=20pt +} + + +% jing: ccaption宏包不能出现在 caption 宏包之后 +% 设置浮动体的标题 +\RequirePackage[justification=centering]{caption} +\RequirePackage[justification=centering]{subcaption} +% 定制列表环境 +\RequirePackage{enumitem} +% 提供\AtBeginEnvironment以方便全局调整一些结构的设置 +\RequirePackage{etoolbox} +% 确定宏定义的位置 +\RequirePackage{filehook} +% 枚举 +\RequirePackage{enumitem} +% 末尾页 +\RequirePackage{lastpage} +% +% \RequirePackage{hypdoc} + +% 参考文献格式 GB/T7714-2015 +% 来自https://github.com/hushidong/biblatex-gb7714-2015 +\RequirePackage[backend=biber,gbpub=false, style=gb7714-2015]{biblatex} + +\AtEndOfClass{ +% 根据模板类型加载不同配置 + +%\input{undergraduate.cls} +%\ifhutb@type@graduate +% \input{graduate.cls} +%\else +% \input{undergraduate.cls} +% % \input{test.cls} +%\fi +} + + +% 字体配置 +\let\sjtu@font@family@xits\@empty +\newcommand\sjtu@font@set@xits@names{% + \ifx\sjtu@font@family@xits\@empty + \IfFontExistsTF{XITSMath-Regular.otf}{% + \gdef\sjtu@font@family@xits{XITS}% + \gdef\sjtu@font@style@xits@rm{Regular}% + \gdef\sjtu@font@style@xits@bf{Bold}% + \gdef\sjtu@font@style@xits@it{Italic}% + \gdef\sjtu@font@style@xits@bfit{BoldItalic}% + \gdef\sjtu@font@name@xits@math@rm{XITSMath-Regular}% + \gdef\sjtu@font@name@xits@math@bf{XITSMath-Bold}% + }{% + \gdef\sjtu@font@family@xits{xits}% + \gdef\sjtu@font@style@xits@rm{regular}% + \gdef\sjtu@font@style@xits@bf{bold}% + \gdef\sjtu@font@style@xits@it{italic}% + \gdef\sjtu@font@style@xits@bfit{bolditalic}% + \gdef\sjtu@font@name@xits@math@rm{xits-math}% + \gdef\sjtu@font@name@xits@math@bf{xits-mathbold}% + }% + \fi +} +\let\sjtu@font@family@libertinus\@empty +\newcommand\sjtu@font@set@libertinus@names{% + \ifx\sjtu@font@family@libertinus\@empty + \IfFontExistsTF{LibertinusSerif-Regular.otf}{% + \gdef\sjtu@font@family@libertinus@serif{LibertinusSerif}% + \gdef\sjtu@font@family@libertinus@sans{LibertinusSans}% + \gdef\sjtu@font@name@libertinus@math{LibertinusMath-Regular}% + \gdef\sjtu@font@style@libertinus@rm{Regular}% + \gdef\sjtu@font@style@libertinus@bf{Bold}% + \gdef\sjtu@font@style@libertinus@it{Italic}% + \gdef\sjtu@font@style@libertinus@bfit{BoldItalic}% + }{% + \gdef\sjtu@font@family@libertinus@serif{libertinusserif}% + \gdef\sjtu@font@family@libertinus@sans{libertinussans}% + \gdef\sjtu@font@name@libertinus@math{libertinusmath-regular}% + \gdef\sjtu@font@style@libertinus@rm{regular}% + \gdef\sjtu@font@style@libertinus@bf{bold}% + \gdef\sjtu@font@style@libertinus@it{italic}% + \gdef\sjtu@font@style@libertinus@bfit{bolditalic}% + }% + \fi +} +\newcommand\sjtu@set@font@xits{% + \sjtu@font@set@xits@names + \setmainfont{\sjtu@font@family@xits}[ + Extension = .otf, + UprightFont = *-\sjtu@font@style@xits@rm, + BoldFont = *-\sjtu@font@style@xits@bf, + ItalicFont = *-\sjtu@font@style@xits@it, + BoldItalicFont = *-\sjtu@font@style@xits@bfit, + ] +} +\newcommand\sjtu@set@font@times{% + \setmainfont{Times New Roman}[Ligatures = Rare] + \setsansfont{Arial} + \setmonofont{Courier New}[Scale = MatchLowercase] +} +\newcommand\sjtu@set@font@stix{% + \setmainfont{STIX2Text}[ + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, + ] +} +\newcommand\sjtu@set@font@step{% + \setmainfont{STEP}[ + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic, + ] +} +\newcommand\sjtu@set@font@source@sans@mono{% + \setsansfont{SourceSansPro}[ + Extension = .otf, + UprightFont = *-Regular , + ItalicFont = *-RegularIt , + BoldFont = *-Bold , + BoldItalicFont = *-BoldIt, + ] + \setmonofont{SourceCodePro}[ + Extension = .otf, + UprightFont = *-Regular , + ItalicFont = *-RegularIt , + BoldFont = *-Bold , + BoldItalicFont = *-BoldIt, + Scale = MatchLowercase, + ] +} +\newcommand\sjtu@set@font@termes{% + \setmainfont{texgyretermes}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]% +} +\newcommand\sjtu@set@font@pagella{% + \setmainfont{texgyrepagella}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]% +} +\newcommand\sjtu@set@font@texgyre@sans@mono{% + \setsansfont{texgyreheros}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]% + \setmonofont{texgyrecursor}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]% +} +\newcommand\sjtu@set@font@cambria{% + \setmainfont{Cambria} + \setsansfont{Calibri} + \setmonofont{Consolas}[Scale = MatchLowercase] +} +\newcommand\sjtu@set@font@libertinus{% + \sjtu@font@set@libertinus@names + \setmainfont{\sjtu@font@family@libertinus@serif}[ + Extension = .otf, + UprightFont = *-\sjtu@font@style@libertinus@rm, + BoldFont = *-\sjtu@font@style@libertinus@bf, + ItalicFont = *-\sjtu@font@style@libertinus@it, + BoldItalicFont = *-\sjtu@font@style@libertinus@bfit, + ]% + \setsansfont{\sjtu@font@family@libertinus@sans}[ + Extension = .otf, + UprightFont = *-\sjtu@font@style@libertinus@rm, + BoldFont = *-\sjtu@font@style@libertinus@bf, + ItalicFont = *-\sjtu@font@style@libertinus@it, + ]% + \setmonofont{lmmonolt10}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique, + ]% +} +\newcommand\sjtu@set@font@lm{% + \setmainfont{lmroman10}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + ]% + \setsansfont{lmsans10}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique, + ]% + \setmonofont{lmmonolt10}[ + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique, + ]% +} +% 使用 \pkg{unicode-math} 配置数学字体。 +\unimathsetup{ + math-style = ISO, + bold-style = ISO, + nabla = upright, + partial = upright, +} +\newcommand\sjtu@set@math@font@xits{% + \sjtu@font@set@xits@names + \setmathfont{\sjtu@font@name@xits@math@rm}[ + Extension = .otf, + BoldFont = \sjtu@font@name@xits@math@bf, + StylisticSet = 8, + ]% + \setmathfont{\sjtu@font@name@xits@math@rm}[ + Extension = .otf, + BoldFont = \sjtu@font@name@xits@math@bf, + StylisticSet = 1, + range = {cal,bfcal}, + ]% +} +\newcommand\sjtu@set@math@font@stix{% + \setmathfont{STIX2Math}[ + Extension = .otf, + StylisticSet = 8, + ]% + \setmathfont{STIX2Math}[ + Extension = .otf, + StylisticSet = 1, + range = {cal,bfcal}, + ]% +} +\newcommand\sjtu@set@math@font@step{% + \setmathfont{STEPMath-Regular}[ + Extension = .otf, + BoldFont = STEPMath-Bold, + StylisticSet = 8, + ]% + \setmathfont{STEPMath-Regular}[ + Extension = .otf, + BoldFont = STEPMath-Bold, + StylisticSet = 1, + range = {cal,bfcal}, + ]% +} +\newcommand\sjtu@set@math@font@termes{% + \setmathfont{texgyretermes-math.otf} +} +\newcommand\sjtu@set@math@font@pagella{% + \setmathfont{texgyrepagella-math.otf} +} +\newcommand\sjtu@set@math@font@cambria{% + \setmathfont{Cambria Math} +} +\newcommand\sjtu@set@math@font@libertinus{% + \sjtu@font@set@libertinus@names + \setmathfont{\sjtu@font@name@libertinus@math .otf}% +} +\newcommand\sjtu@set@math@font@lm{% + \setmathfont{latinmodern-math.otf}% +} +% \end{macrocode} +% +% 设置西文字体集。 +% \begin{macrocode} +\newcommand\sjtu@load@fontset@xits{% + \sjtu@set@font@xits + \sjtu@set@font@source@sans@mono + \sjtu@set@math@font@xits +} +\newcommand\sjtu@load@fontset@times{% + \sjtu@set@font@times + \sjtu@set@math@font@xits +} +\newcommand\sjtu@load@fontset@stix{% + \sjtu@set@font@stix + \sjtu@set@font@source@sans@mono + \sjtu@set@math@font@stix +} +\newcommand\sjtu@load@fontset@step{% + \sjtu@set@font@step + \sjtu@set@font@source@sans@mono + \sjtu@set@math@font@step +} +\newcommand\sjtu@load@fontset@termes{% + \sjtu@set@font@termes + \sjtu@set@font@texgyre@sans@mono + \sjtu@set@math@font@termes +} +\newcommand\sjtu@load@fontset@pagella{% + \sjtu@set@font@pagella + \sjtu@set@font@texgyre@sans@mono + \sjtu@set@math@font@pagella +} +\newcommand\sjtu@load@fontset@cambria{% + \sjtu@set@font@cambria + \sjtu@set@math@font@cambria +} +\newcommand\sjtu@load@fontset@libertinus{% + \sjtu@set@font@libertinus + \sjtu@set@math@font@libertinus +} +\newcommand\sjtu@load@fontset@lm{% + \sjtu@set@font@lm + \sjtu@set@math@font@lm +} +\newcommand\sjtu@load@fontset@none{\relax} +% \end{macrocode} +% +% 载入西文字体集。 +% \begin{macrocode} +% \newcommand\sjtu@load@fontset{% + % \@nameuse{sjtu@load@fontset@\sjtu@latinfontset} + % } +% latinfontset 是hutb的key 使用 对应的kv接口调用 现在没有实现 +% \sjtu@load@fontset@latinfontset +\sjtu@load@fontset@times +% linux系统请使用 stix +% \sjtu@load@fontset@stix +% \sjtu@option@hook{sjtu}{latinfontset}{% + % \sjtu@load@fontset + % } + + +\newcommand\hutb@pdfbookmark[2]{} +% 定义通用的chapter命令 +\NewDocumentCommand{\hutb@chapter}{s m}{ + \if@openright\cleardoublepage\else\clearpage\fi +% \addcontentsline{toc}{chapter}{#1}% +% \hutb@pdfbookmark{0}{#1} + \IfBooleanTF{#1}{ + \hutb@pdfbookmark{0}{#2} + }{ + \addcontentsline{toc}{chapter}{#2} + } + \chapter*{#2} +} + + +\AtEndOfPackageFile*{hyperref}{ + \hypersetup{ + linktoc = all, + bookmarksdepth = 2, + bookmarksnumbered = true, + bookmarksopen = true, + bookmarksopenlevel = 1, + unicode = true, + psdextra = true, + breaklinks = true, + plainpages = false, + pdfdisplaydoctitle = true, + hidelinks, + } + \newcounter{hutb@bookmark} + \renewcommand\hutb@pdfbookmark[2]{% + \phantomsection + \stepcounter{hutb@bookmark}% + \pdfbookmark[#1]{#2}{hutbchapter.\thehutb@bookmark}% + } +% \renewcommand\sjtu@phantomsection{% +% \phantomsection +% } +% \pdfstringdefDisableCommands{% +% \let\\\@empty +% \let\quad\@empty +% \let\hspace\@gobble +% } +% \@ifpackagelater{hyperref}{2019/04/27}{}{% +% \g@addto@macro\psdmapshortnames{\let\mu\textmu} +% }% +% \AtBeginDocument{% +% \hypersetup{ +% pdftitle = \sjtu@info@title, +% pdfsubject = \sjtu@name@subject, +% pdfkeywords = \sjtu@info@keywords, +% pdfauthor = \sjtu@info@author, +% pdfcreator = {LaTeX with SJTUThesis \version} +% } +% }% +} + + +% 定制titlepage +% 定义命令和定义相应的宏。 +%----------------------------------------------------------------------% +% 预定义全局使用的文字,如姓名、专业等信息,在content/info.tex中定义 +%----------------------------------------------------------------------% +% 以下定义封面相关命令和相应的宏,以titleen为例,\titleen为实际在源码中使用的命令,一旦执行就会因为\gdef\@titleen{#1}使得其产生一个\@titleen的宏,而该宏能够在后续的环境中使用。 +% TODO: 之后版本迁移至公共模板入口hutbthesis.cls 处(放置在引入子模版之后) +\newcommand*{\titlecn}[1]{\gdef\@titlecn{#1}} % 中文标题 +\newcommand*{\titleen}[1]{\gdef\@titleen{#1}} % 英文标题 +\newcommand*{\priormajor}[1]{\gdef\@priormajor{#1}} % 一级学科(学科专业) +\newcommand*{\minormajor}[1]{\gdef\@minormajor{#1}} % 二级学科(学科方向) +\newcommand*{\interestmajor}[1]{\gdef\@interestmajor{#1}} % 研究方向,关键词组 +\newcommand*{\department}[1]{\gdef\@department{#1}} % 二级培养单位 +\newcommand*{\supervisor}[1]{\gdef\@supervisor{#1}} % 导师 +\newcommand*{\supervisortitle}[1]{\gdef\@supervisortitle{#1}} % 导师职称 +\newcommand*{\myclass}[1]{\gdef\@myclass{#1}} % 班级 +\newcommand*{\subsupervisor}[1]{\gdef\@subsupervisor{#1}} % 副导师 +\newcommand*{\studentid}[1]{\gdef\@studentid{#1}} % 学号 + +\newcommand*{\clcnumber}[1]{\gdef\@clcnumber{#1}} % 中图分类号 Chinese Library Classification +\newcommand*{\schoolcode}[1]{\gdef\@schoolcode{#1}} % 学校代码 +\newcommand*{\udc}[1]{\gdef\@udc{#1}} % UDC +\newcommand*{\academiccategory}[1]{\gdef\@academiccategory{#1}} % 学术类别 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 页面布局 +% +% 设置页边距以及版芯行间距设置 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 边距要求上2.5cm,下2.5cm,左3cm,右2cm +\geometry{top=2.5cm,bottom=2.5cm,left=3cm,right=2cm} +% 本科生从摘要开始就要有 +% 设置页眉和页脚 % +\pagestyle{fancy} +% 本科学位论文底部样式 +\newcommand{\hutb@thepage@format@zh}[2]{第~{#1}~页 共~{#2}~页} +\newcommand{\hutb@thepage@format@en}[1]{#1} +% 空白页清空页眉页脚 +\patchcmd{\cleardoublepage}{\newpage}{\thispagestyle{empty}\newpage}{}{} +% 对章节首页的特殊page style清除页眉页脚 +\patchcmd{\chapter}{\thispagestyle}{\@gobble}{}{} +% 内芯页眉设置 +\ifhutb@type@print +%\fancyhead[L]{\includegraphics[scale=0.10]{hutb_logo_maoti.png}} +\else +%\fancyhead[L]{\includegraphics[scale=0.10]{hutb_logo_maoti.png}} +\fi +% \fancyhf[RH]{\heiti \zihao{-5} {图像与激光融合的轨道扣件脱落检测}} % 设置所有(奇数和偶数)右侧页眉 +% UPDATE 更新配置为论文标题 +% 清空页眉,具体设置规则参考:https://www.overleaf.com/learn/latex/Headers_and_footers +\fancyhf{} +\fancyhf[CH]{\heiti \zihao{-5} 湖南工商大学毕业论文} +% frontmatter设置 +\renewcommand{\frontmatter}{ + \cleardoublepage + \@mainmatterfalse + % 根据学校要求使用大罗马编号 + \pagenumbering{Roman} + \def\hutb@thepage{\thepage} + \def\hutb@lastpageref{\pageref{LastPage}} + \fancyfoot[C]{\zihao{-5} \hutb@thepage@format@en{\hutb@thepage}} +} +% mainmatter设置 +\renewcommand{\mainmatter}{ + \cleardoublepage + \@mainmattertrue + % 正文部分启用阿拉伯数字编号 + \pagenumbering{arabic} + \def\hutb@thepage{\thepage} + \def\hutb@lastpageref{\pageref{LastPage}} + \fancyfoot[C]{\zihao{-5} \songti \hutb@thepage@format@zh{\hutb@thepage}{\hutb@lastpageref}} +} +% 给页眉留足空间(否则会有 \headheight is too small的warning) +\setlength{\headheight}{14.5pt} +% “磅”是衡量印刷字体大小的单位,约等于七十二分之一英寸。 +% 而 1英寸=25.4毫米,则1磅=25.4/72≈0.353毫米。 +% 磅和 LaTeX的 pt- points (大约 1/72 inch) 是一致的。 +% 基本行间距设置 +\renewcommand*{\baselinestretch}{1.3} % 几倍行间距 +\setlength{\baselineskip}{20pt} % 基准行间距 +% \setlength{\bibsep}{0.5ex} % 参考文献条目间距 + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 字体设置 +% +% 进行相关字体设置,定义必须的新字体 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TODO: Times New Roman目前只能在Windows上使用,需要增加Linux系统字体 +% \setmainfont{Times New Roman} +% \setmonofont{Courier New} +% \setsansfont{Arial} +% \newfontfamily{\enheiti}{SimHei} % 解决标题英文括号不显示黑体 +% \newfontfamily{\enheiti}{\heiti} +% \renewcommand\normalsize{% + % \@setfontsize\normalsize{12.05}{14.45}% + % \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@ + % \abovedisplayshortskip \z@ \@plus3\p@ + % \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ + % } +% 协议页的标题按模板是华文新魏 +% \setCJKfamilyfont{hwxw}{STXinwei} +% \newcommand{\huawenxinwei}{\CJKfamily{hwxw}} +% 实现楷体GB_2312 +% \setCJKfamilyfont{kaitigb}{KaiTi_GB2312.ttf} +% \newcommand{\kgb}{\CJKfamily{kaitigb}} +% 重定义ctex定义好的宋体和黑体,以支持伪加粗AutoFakeBold +% 即支持类似word里的给黑体、宋体等中文字体加粗的操作,用\bfseries +% \let\heiti\relax +% \newCJKfontfamily[hei]\heiti{SimHei}[AutoFakeBold] +% \let\songti\relax +% \newCJKfontfamily[song]\songti{SimSun}[AutoFakeBold] +% \newcommand{\kaiti}{\CJKfamily{kai}} +% \newcommand{\kgb}{\CJKfamily{kai}} +% 设置参考文献的字体格式 +% \renewcommand{\bibfont}{\zihao{5} \kgb} + + +% 预定义名称 +\newcommand*{\hutb@name@cover}{扉页} +\newcommand*{\hutb@name@declaration@zh}{声明} +\newcommand*{\hutb@name@abstract@zh}{中文摘要} +\newcommand*{\hutb@name@abstract@en}{英文摘要} +\newcommand*{\hutb@name@keywords}{关键字} +\newcommand*{\hutb@name@contents}{目录} +\newcommand*{\hutb@name@listfigure}{插图清单} +\newcommand*{\hutb@name@listtable}{附表清单} +\newcommand*{\hutb@name@index}{索引} +\newcommand*{\hutb@name@figure}{图} +\newcommand*{\hutb@name@table}{表} +\newcommand*{\hutb@name@appendix}{附录} +\newcommand*{\hutb@name@acknowledge}{致谢} + +%--------------------------------------------- +%控制引用格式,选用上标引用 +% \newcommand\supercite[2][]{% + % \textsuperscript{\cite[#1]{#2}}} + + + + + +%\newCJKfontfamily\sonti{SimSun}[BoldFont=FandolSong-Bold] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 封面扉页 +% +% 提供本科毕业论文封面扉页设计 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 论文日期 +% 采用key-value对的方式来制定存储信息的pgf路径 +\pgfkeys{/thesisdate/pgf/.cd, % 定义pgf路径 + year/.store in = \year, % 指定关键词year的存储位置为\year + month/.store in = \month % 指定关键词month的存储位置为\month +} +% 利用上述的pgf的key-value定制论文日期命令 +\newcommand{\thesisdate}[1] { + \pgfkeys{/thesisdate/pgf/.cd,#1} % 指定使用/thesisdate/pgf/.cd来解释参数,然后在后文能直接使用存储位置来指定解释的内容 + \gdef\@thesisdate{\year{} 年 \month{} 月} % 将构建好的日期存储到宏(\@thesisdate)中 +} +% 重定义\maketitle实现封面(扉页)绘制 +\RenewDocumentCommand{\maketitle}{}{% + \hutb@pdfbookmark{0}{\hutb@name@cover} + \hutb@make@cover@zh% +} +% 构建封面绘制宏 +\NewDocumentCommand{\hutb@make@cover@zh}{} { + \thispagestyle{empty} + \begin{center} + \vspace*{0pt} + \begin{figure}[hbt] + \centering + \ifhutb@type@print + \includegraphics[width=0.6\textwidth]{hutb_logo_maoti.png} + \else + \includegraphics[width=0.6\textwidth]{hutb_logo_maoti.png} + \fi + \end{figure} + \vspace{0pt} + \begingroup + \fontsize{45}{50}\selectfont 本科毕业设计(论文) \par + % 45磅,黑体 + \endgroup + \vspace*{6pt} + \begingroup + % \zihao{1} \setmainfont{SimHei} GRADUATION DESIGN(THESIS) \par + % \zihao{1} GRADUATION DESIGN(THESIS) \par + % 1号,黑体 + \endgroup + \begin{figure}[hbt] + \centering + \ifhutb@type@print + \includegraphics[width=0.2\textwidth]{hutb_logo.png} + \else + \includegraphics[width=0.2\textwidth]{hutb_logo.png} + \fi + \end{figure} + \vspace{10pt} % 空行 + \begingroup + \linespread{1.3} + \zihao{-2} + \songti + \begin{tabular}{ll} + \hspace{12pt} \makebox[4em][s]{\textbf{题\qquad 目:}} & \underline{\parbox[b][][c]{250pt}{\center \kaishu \@titlecn}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{学生姓名:}} & \underline{\makebox[250pt][c]{\kaishu \@author}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{学\qquad 号:}} & \underline{\makebox[250pt][c]{\kaishu \@studentid}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{专\qquad 业:}} & \underline{\makebox[250pt][c]{\kaishu \@priormajor}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{班\qquad 级:}} & \underline{\makebox[250pt][c]{\kaishu \@myclass}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{指导老师:}} & \underline{\makebox[250pt][c]{\kaishu \@supervisor}} \\ + \hspace{12pt} \makebox[4em][s]{\textbf{职\qquad 称:}} & \underline{\makebox[250pt][c]{\kaishu \@supervisortitle}} \\ + %\hspace{12pt} \makebox[4em][s]{学\qquad 院:} & \underline{\makebox[220pt][c]{\kaishu \@department}} \\ + + \end{tabular} + \endgroup + \par + \vspace{40pt} + % \vfill + \begingroup + {\zihao{2} \heiti \@department \par} + \vspace{10pt} + {\zihao{-2} \heiti \@thesisdate \par} + \endgroup + \end{center} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 诚信声明 +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{declarationzh} { + %\begin{titlepage}% + \hutb@pdfbookmark{0}{\hutb@name@declaration@zh} + %\renewcommand*{\headsep}{20pt} + \vspace*{0pt} + % \begin{center} \zihao{-2} \heiti \@titlecn \end{center} + \vspace{0pt} + \begin{center} \zihao{2} \heiti 湖南工商大学本科毕业设计诚信声明 \end{center} % 摘要为三号黑体 + \vspace{12pt} + \linespread{1.5} + \zihao{4}\songti % 内容为四号宋体 + + %\end{titlepage}% + +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 摘要 +% +% 提供中英文摘要样式 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ---------------------------------------------- +% 中文摘要 +% ---------------------------------------------- +% 中文摘要格式具体见样例8,居中打印论文题名(三号黑体) +% 换行顶格编排“摘要”(四号黑体)及摘要内容(四号宋体)、 +% 每段开头空二格。摘要内容后下换行顶格编排“关键词”和“分类号”(四号黑体)。 +% 每篇论文应选取3-8个关键词,每一关键词之间用分号分开,最后一个关键词后不打标点符号。 +\newcommand*{\keywordscn}[1]{\gdef\@keywordscn{#1}} % 定义中文关键词 +%\newcommand*{\categorycn}[1]{\gdef\@categorycn{#1}} % 定义中文分类 +% 定义中文摘要环境 +\newenvironment{abstractzh} { + \hutb@pdfbookmark{0}{\hutb@name@abstract@zh} + \renewcommand*{\headsep}{0pt} + \vspace*{0pt} + %\begin{center} \zihao{-2} \heiti \@titlecn \end{center} + \vspace{0pt} + \begin{center} \zihao{3} \heiti 摘\qquad 要 \end{center} % 摘要为三号黑体 + \vspace{12pt} + \linespread{1.5} + \zihao{-4}\songti % 内容为四号宋体 +} +% 显示中文关键词和分类号 +{ + \begin{flushleft} + \noindent {\zihao{-4} \bfseries \songti 关键词:} {\zihao{-4} \songti \@keywordscn} \par % 关键词为小四号宋体加粗,内容为小四号宋体 + \end{flushleft} +} + +% ---------------------------------------------- +% 英文摘要 +% ---------------------------------------------- +% 英文摘要格式和内容与中文摘要相对应,另起一页,具体见样例9。居中打印论文英文题名(三号Times New Roman字体),换行顶格编排“Abstract”及英文摘要内容(四号Times New Roman字体),摘要内容每段开头留四个字符空格。摘要内容后下换行顶格编排“Keywords”和“Classification”。 +% 定义英文摘要,字体全部为timesnewroman +\newcommand*{\keywordsen}[1]{\gdef\@keywordsen{#1}} % 英文关键词 + +\newenvironment{abstracten} { % 新建英文摘要环境 + \hutb@pdfbookmark{0}{\hutb@name@abstract@en} + \vspace*{0pt} + %\begin{center} \zihao{-2} \bfseries \@titleen \end{center} + + \begin{center} \zihao{3} \bfseries ABSTRACT \end{center} + \vspace{12pt} + \linespread{1.5} + \zihao{-4} % 内容为四号宋体 +} +{ + \begin{flushleft} + \noindent {\zihao{4} \bfseries Key\ words:~} {\zihao{4} \@keywordsen} \par % 关键词为四号黑体,内容为四号宋体 + \end{flushleft} +} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 5. 目录 % +% -----------------------------------------------% +% 目录应列出论文的大标题、一级和二级节标题,逐项标明页码(具体见样例10)。各级标题应简明扼要、点出各部分主要内容。学位论文的页码编排为:正文和后置部分用阿拉伯数字编连续码,前置部分用罗马数字单独编连续码(封面除外)。 +% “目录”两字居中(三号黑体),下空两行为章、节、小节及其开始页码(靠右顶格)。章、节、小节分别以阶梯式排列:1(第1章)、1.1、1.1.1依次标出。章、节、小节的题名与页码之间用“......”连接。除“目录”两字外,其余字体均为小四号宋体。 + +%TODO: 本科和硕博目录格式要求不同 +% \renewcommand{\contentsname}{\hfill \heiti \zihao{3} 目\quad 录\hfill} +% \renewcommand{\contentsname}{目录} +% \renewcommand*{\baselinestretch}{1.5} % 行间距 +% \tableofcontents +% } +\renewcommand\tableofcontents{ +\hutb@chapter*{\contentsname} +% \hutb@pdfbookmark{0}{\contentsname} + +% \chapter*{目录} +% \hutb@pdfbookmark{0}{\hutb@name@contents} +\@starttoc{toc} +} + + + +\setcounter{secnumdepth}{3} +% 定义作为标题的格式 +% \titleformat{command}[shape]%定义标题类型和标题样式 +% {format}%定义标题格式 +% {label}%定义标题的标签,即标题的标号等 +% {sep}%定义标题和标号之间的水平距离 +% {before-code}%定义标题前的内容 +% [after-code]%定义标题后的内容 + +% TODO: 修复章节标题样式 +% \renewcommand{\chaptername}{第{\thesection}章} +% \titleformat{\chapter}{\zihao{3} \heiti \centering}{\chaptername}{1em}{} +% \titleformat{\section}{\zihao{-4} \heiti}{\thesection}{1em}{} +% \titleformat{\subsection}{\zihao{-4} \kaishu}{\thesubsection}{1em}{} + +% 定义在目录中的格式 +% \titlecontents{标题名} +% [左间距] +% {标题格式} +% {标题标志} +% {无序号标题} +% {指引线与页码} +% [下间距] + +% \titlecontents{section} +% [0em] % 按样例目录左侧是和前置部分文字左侧对齐的 +% {\zihao{-4} \songti} +% %{\contentslabel {1em}} +% {第\thecontentslabel\ 章\quad}% +% {\hspace*{-1em}} +% {\titlerule*[0.5pc]{.}\contentspage} + +% \titlecontents{subsection} +% [4em] +% {\zihao{-4} \songti} % note that 3.8 = 1.5 + 2.3 +% {\contentslabel{2.2em}} +% {\hspace*{-3.5em}} +% {\titlerule*[0.5pc]{.}\contentspage} + +% \titlecontents{subsubsection} +% [7em] +% {\zihao{-4} \songti} % note that 3.8 = 1.5 + 2.3 +% {\contentslabel{3.0em}} +% {\hspace*{-5em}} +% {\titlerule*[0.5pc]{.}\contentspage} + +% 6. 符号说明(必要时)% +% ---------------------------------------------------------% +% TODO: +% +% 如果论文中使用了大量的物理量符号、标志、缩略词、专门计量单位、自定义名词和术语等,应编写成注释说明汇集表,说明论文中所用符号所表示的意义及单位(或量纲)。若上述符号和缩略词使用数量不多,可以不设专门的注释说明汇集表,仅在论文中出现时加以说明。 +% “符号说明”四字居中(三号黑体)。 + + +% 7. 论文正文 % +% -------------------------------------------------------% +% 论文正文是主体,主体部分应从另页右页开始,每一章应另起页。一般由序号标题、文字叙述、图、表格和公式等五个部分构成。 +% 写作形式可因研究内容的性质不同而变化,一般可包括绪论(或综述)、理论分析、计算方法、实验装置和测试方法、实验结果分析和讨论、研究成果、结论及意义等。 +% 该部分由用户编写 + +% 图表等浮动环境设置 % +% ----------------------------------------------------------% +% TODO % +% 图、表、公式:文中的图、表、附注、公式一律采用阿拉伯数字分章(或连续)编号,如:图2-5,表3-2,公式(5-1)等。 +% 图序及图名居中置于图的下方,如果图中含有几个不同部分,应将分图号标注在分图的左上角,并在图解下列出各部分内容。图中的术语、符号、单位等应与正文表述所用一致。 +% 表序及表名置于表的上方,表中参数应标明量和单位的符号。表的编排应采用国际通用的三线表。续表均应重复表头,如表需转页接排,随后各页应重复表的编号,其后跟表题(可省略)和“续”置于表上方。 +% 图序及图名、表序及表名采用五号楷体字。若图或表中有附注,采用英文小写字母顺序编号,附注写在图或表的下方。公式的编号用括号括起写在右边行末,其间不加虚线。 +% 图、表、公式等与正文之间要有一定的行间距。 +% \RequirePackage{caption} +% 默认情况下, \LaTeX{} 要求每页的文字至少占据 20%,否则该页就只单独放置一个浮动环境, +% 而这通常不是我们想要的, 我们将这个要求降低到 5%. +\renewcommand*{\textfraction}{0.05} +% 有时如果多个浮动环境连续放在一起, \LaTeX{} +% 会将它们分在几个不同页,即使它们可在同一页放 +% 得下. 我们可以通过修改 |\topfraction| 和 |\bottomfraction| 分别设置顶端和底端的浮 +% 动环境的最大比例. +\renewcommand*{\topfraction}{0.9} +\renewcommand*{\bottomfraction}{0.8} +% 有时\LaTeX{}会把一个浮动环境单独放在一页, +% 我们要求这个环境至少要占据 85% 才能单独放在一页. +% 注意: |\floatpagefraction| 的数值必须小于 |\topfraction|. +\renewcommand*{\floatpagefraction}{0.85} +% 关于图片 graphicx +% 如果图片没有指定后缀, 依次按下列顺序搜索 +\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png,.tif} +% 设置图表搜索路径, 可以给图表文件夹取如下名字 +\graphicspath{{figures/}{figure/}{pictures/}% +{picture/}{pic/}{pics/}{image/}{images/}} + + + + +% 插图格式 +% ------------------------------------------------------% +% \captionsetup[subfigure]{labelfont=normalfont,textfont=normalfont,singlelinecheck=off,justification=raggedright} +% singlelinecheck=off 表示即使caption只有一行, justification 也生效 +% justification=raggedright 使子图 caption 靠左对齐,而caption的上下位置由\caption标签的位置决定,以此实现了学校要求的子图标签在左上角显示。 +% 这部分功能由 subcaption 这个包实现,而这个包不能和 subfigure 同时使用,所以子图的写法也与 subfigure 包的不大一样。 +\captionsetup[subfigure]{singlelinecheck=off,justification=raggedright} + +% 图下方描述的黑体 +\DeclareCaptionFont{hei}{\heiti} +\DeclareCaptionFont{five}{\zihao{5}} +\renewcommand{\thefigure}{\arabic{figure}} +% \renewcommand{\thefigure} {\thesection-\arabic{figure}} + +\captionsetup[figure]{ +format=plain, % 标题从第二行开始是否缩进,plain无缩进,hang有缩进 +labelsep=quad, % 分隔符是一个空格 +font={hei,five}, +position=bottom % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置. +} +% 表格格式 +% ------------------------------------------------------% +\renewcommand{\thetable}{\arabic{table}} +% \renewcommand {\thetable} {\thesection-\arabic{table}} +\counterwithout{figure}{chapter} +\counterwithout{table}{chapter} +\captionsetup[table]{ +format=plain, % 标题从第二行开始是否缩进,plain无缩进,hang有缩进 +labelsep=quad, % 分隔符是一个空格 +font={hei,five}, % 表的字体, 宋体小四 +position=top +} + + + +% 列表环境设置 % +% ------------------------------------------------------------------% +\setlist{% +topsep=0.3em, % 列表顶端的垂直空白 +partopsep=0pt, % 列表环境前面紧接着一个空白行时其顶端的额外垂直空白 +itemsep=0ex plus 0.1ex, % 列表项之间的额外垂直空白 +parsep=0pt, % 列表项内的段落之间的垂直空白 +leftmargin=1.5em, % 环境的左边界和列表之间的水平距离 +rightmargin=0em, % 环境的右边界和列表之间的水平距离 +labelsep=0.5em, % 包含标签的盒子与列表项的第一行文本之间的间隔 +labelwidth=2em % 包含标签的盒子的正常宽度;若实际宽度更宽,则使用实际宽度。 +} + +% 表格 % +% ------------------------------------------------------% +% 修改tabular 环境, 设置表格中的行间距为正文行间距. +\let\hutb@oldtabular\tabular +\let\hutb@endoldtabular\endtabular +\renewenvironment{tabular} { +\bgroup +\renewcommand{\arraystretch}{0.92} +\hutb@oldtabular +} { +\hutb@endoldtabular\egroup +} + +% 表格字号应比正文小,一般五号/10.5pt,但是暂时没法再cls里设置(不然会影响到封面等tabular环境) +% 所以目前只好在主文件里局部\AtBeginEnvironment + +% 数学环境, 定理等设置 % +% -------------------------------------------------------% +\newtheorem{definition}{\hutb@cap@definition} +\newtheorem{theorem}{\hutb@cap@theorem} +\newtheorem{lemma}{\hutb@cap@lemma} +\newtheorem{corollary}{\hutb@cap@corollary} +\newtheorem{assumption}{\hutb@cap@assumption} +\newtheorem{conjecture}{\hutb@cap@conjecture} +\newtheorem{axiom}{\hutb@cap@axiom} +\newtheorem{principle}{\hutb@cap@principle} +\newtheorem{problem}{\hutb@cap@problem} +\newtheorem{example}{\hutb@cap@example} +\newtheorem{proof}{\hutb@cap@proof} +\newtheorem{solution}{\hutb@cap@solution} + +% 数学定理相关的常量 +\newcommand*{\hutb@cap@definition}{定义} +\newcommand*{\hutb@cap@theorem}{定理} +\newcommand*{\hutb@cap@lemma}{引理} +\newcommand*{\hutb@cap@corollary}{推论} +\newcommand*{\hutb@cap@assumption}{假设} +\newcommand*{\hutb@cap@conjecture}{猜想} +\newcommand*{\hutb@cap@axiom}{公理} +\newcommand*{\hutb@cap@principle}{定律} +\newcommand*{\hutb@cap@problem}{问题} +\newcommand*{\hutb@cap@example}{例} +\newcommand*{\hutb@cap@proof}{证明} +\newcommand*{\hutb@cap@solution}{解} + + +% TODO 测试段落后间距 +% 各级标题格式设置。 +\ctexset{% +chapter = {% + format = \zihao{3} \heiti\centering, + name = {第, 章}, + nameformat = {}, + number = \arabic{chapter}, + numberformat = {}, + titleformat = {}, + aftername = \quad, + afterindent = true, + % beforeskip 默认为 50pt 适当缩减 + fixskip = true, + beforeskip = {15pt}, + % beforeskip = {\ifhutb@type@graduate 20pt \else 5pt\fi} + % afterskip 默认为 40pt 适当缩减 + afterskip = {40pt}, + % afterskip = {\ifhutb@type@graduate 30pt\else 20pt\fi}, +}, +section = {% + format = \zihao{-4} \bfseries \songti, + afterindent = true, + % beforeskip 默认为 3.5ex plus 1ex minus .2ex 适当缩减 + % beforeskip = {20pt}, + % beforeskip = {\ifhutb@type@graduate 30pt \else 20pt\fi} + % afterskip 默认为 2.3ex plus .2ex 适当缩减 + afterskip = {1ex \@plus .2ex}, +}, +subsection = {% + format = \zihao{-4} \songti, + afterindent = true, + % afterskip 默认为 2.3ex plus .2ex 适当缩减 + afterskip = {1ex \@plus .2ex}, + %fixskip = true, +}, +subsubsection = {% + format = \zihao{-4} \normalfont, + afterindent = true, + afterskip = {1ex \@plus .2ex}, + %fixskip = true, +}, +} + +% 定义描述距离的变量 +\newlength{\hutb@headings@indent@fixed} +\setlength{\hutb@headings@indent@fixed}{2\ccwd} +\newcommand{\hutb@style@set@indent@heading}{% +\gdef\hutb@headings@indent{\hutb@headings@indent@fixed} +% \ifsjtu@type@graduate\relax\else +% 本科毕设设置四级标题 +\ctexset{% + subsubsection/name = {(,)}, + subsubsection/number = \arabic{subsubsection}, +} +% \fi +% 设标题的缩进 +\ctexset{% + section/indent = \hutb@headings@indent, + subsection/indent = \hutb@headings@indent, + subsubsection/indent = \hutb@headings@indent, +} +} +\hutb@style@set@indent@heading + +% 全文首行缩进 2 字符, 标点符号用全角 +% \ctexset{% +% punct = quanjiao, +% space = auto, +% autoindent = true, +% } + +% % 编号分章节。如需要连续编号,注释\makeatletter下面对应内容即可。 +% \renewcommand{\theequation}{\arabic{section}-\arabic{equation}} +% \makeatletter +% \@addtoreset{figure}{section} +% \@addtoreset{table}{section} +% \@addtoreset{equation}{section} +% \makeatother + +% 8. 参考文献 % +% ------------------------------------------------------% +% TODO % +% 文后参考文献只列出作者直接阅读过、在正文中被引用过的文献资料,务必实事求是。参考文献一律列在正文的末尾,不得放在各章之后。人文社科类学位论文中不宜用文后参考文献列出的注释可采用页下注,包括对学位论文中某些关键词句、论点的详细说明。在引用别人的科研成果时,应在引用处加以说明,遵循学术道德规范,严禁论文抄袭、剽窃等学术不端行为。 +% 参考文献可以采用顺序编码制组织,也可以按“著者-出版年”制组织。建议按顺序编码制,即按中文引用的顺序将参考文献附于文末。作者姓名写到第三位,余者写“,等”或“,et al.”。“参考文献”四字居中(三号黑体),空一行左起按顺序依次列出参考文献,将序号置于方括号内(如[1]),用小四号宋体字,所有符号均用半角编排。 +% 目前采用bgt7714-2005标准进行文献索引,详见gbt7714-2005.bst. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 附录 +% +% 附录中主要列入正文内不便列出的过分冗长的公式推导,供查读方便所需的辅助性数学工具或表格、重复性数据图表、计算程序及说明等。 +% 附录依次为附录1,附录2……等,“附录X”三字居中(三号黑体)。附录中的图表公式另编排序号,与正文分开。 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 定义附录环境 +% 在\appendix 后直接使用 chapter +% 暂不需要 +% \newenvironment{appendixs}{ +% % \ifhutb@review\else +% \hutb@chapter{\hutb@name@appendix} +% % \fi +% } + + +% 10. 攻读学位期间主要研究成果 % +% --------------------------------------------------------% +% 分类按时间顺序列出作者在攻读学位期间取得的与学位论文相关的研究成果,含参加的研究项目、获奖情况、专利、专著、发表学术论文(含正式录用论文)等,书写格式参照参考文献格式。“攻读学位期间主要研究成果”字体居中(三号黑体) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 致谢 +% +% 作者对给予指导、各类资助和协助完成研究工作以及提供各种对论文工作有利条件的单位及个人表示感谢。“致谢”二字居中(三号黑体)。 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 定义致谢环境 +\newenvironment{acknowledgements}{ +% \ifhutb@review\relax\else +\ifhutb@review\else +% \hutb@chapter{\hutb@name@acknowledgements} +\hutb@chapter{\hutb@name@acknowledge} +\fi +} + + +% 篇眉和页码要求 % +% ---------------------------------------------------------% +% 篇眉从正文开始至全文结束,采用宋体五号字左起书写“博(或硕)士学位论文”,靠右写章标题。 +% 页码从正文开始至全文结束按阿拉伯数字连续编排,前置部分(如学位论文原创性声明和版权使用授权书、中文摘要、英文摘要、目录、符号说明等)用罗马数字分别单独编排。页码位于页面底端,居中书写。 + + + + +%\endinput diff --git a/critical/hutbthesis_main.tex b/critical/hutbthesis_main.tex new file mode 100644 index 00000000..a4f2408d --- /dev/null +++ b/critical/hutbthesis_main.tex @@ -0,0 +1,135 @@ +%!TEX program = xelatex +% !BIB program = biber +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 载入模版 +% +% 载入 hutbthesis.cls文件定义的模板 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[AutoFakeBold]{hutbthesis} + +\addbibresource{content/reference.bib} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 基本信息 +% +% 用户自行输入标题、作者等基本信息 +% 都存储在\content\info.tex文件中 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\include{content/cover} + + + +\begin{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 封面绘制 +% +% 1.5版本重新编写了封面绘制宏,并用latex使用者更习惯的 +% \maketitle代替之前的\makecoverpage +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\maketitle + +%\declarationzh + +% 启用大罗马字母进行编号 +\frontmatter +% 设置页眉和页脚 + +%\include{content/info} + +\include{content/declarationzh} +\include{content/authorization} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 中文摘要 +% +% 存储在\content\abstractzh.tex文件中 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\include{content/abstractzh} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 英文摘要 +% +% 存储在\content\abstracten.tex文件中 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\include{content/abstracten} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 目录 +% +% 使用重定义的tableofcontents宏绘制目录 +% 满足学校的样式要求 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\tableofcontents + + +% 启用数字编号,改为第 x 页 共 x 页格式 +\mainmatter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 正文 +% +% 存储在\content\content.tex文件中 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 正文 +%\include{content/content} + + +\include{content/chapter1.tex} +\include{content/chapter2.tex} +\include{content/chapter3.tex} +\include{content/chapter4.tex} +\include{content/chapter5.tex} + +% % 主文件有代码去掉页眉章节编号的“.”,但这会因为bug导致无编号章节显示一个错误编号,所以这里在无编号章节之前再次重定义sectionmark。 +% \renewcommand{\sectionmark}[1]{\markright{#1}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 致谢 +% +% 存储在\content\acknowledgements.tex文件中 +% 根据本科生院的要求,致谢应该在参考文献的前面,不编章号,而附录应该位于参考文献后。 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\include{content/acknowledgements} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 参考文献 +% +% 存储在\content\acknowledgements.tex文件中 +% 根据本科生院的要求,致谢应该在参考文献的前面,不编章号,而附录应该位于参考文献后。 +% 有待修复 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \section{参考文献} % bibliography会自动显示参考文献四个字 +\addcontentsline{toc}{chapter}{参考文献} % 由于参考文献不是chapter,这句把参考文献加入目录 +\nocite{*} % 该命令用于显示全部参考文献,即使文中没引用 +% cls文件中已经引入package,这里不需要调用 \bibliographystyle 了。 +%\bibliographystyle{gbt7714-2005} +%\bibliography{reference} + +\printbibliography + +%\bibliography{hutbtheisi_main} +\newpage + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 附录部分 +% +% 根据学校要求,正文中不应出现长篇幅的代码段或公式推证 +% 应单独放置在正文后的附录部分 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% https://www.zhihu.com/question/29413517/answer/44358389 % +% 说明如下: +% secnumdepth 这个计数器是 LaTeX 标准文档类用来控制章节编号深度的。 +% 在 article 中,这个计数器的值默认是 3,对应的章节命令是 \subsubsection。 +% 也就是说,默认情况下,article 将会对 \subsubsection 及其之上的所有章节标题进行编号,也就是 \part, \section, \subsection, \subsubsection。LaTeX 标准文档类中,最大的标题是 \part。它在 book 和 report 类中的层级是「-1」,在 article 类中的层级是「0」。这里,我们在调用 \appendix 的时候将计数器设置为 -2,因此所有的章节命令都不会编号了。不过,一般还是会保留 \part 的编号的。所以在实际使用中,将它设置为 0 就可以了。 + +% 在修改过程中请注意不要破环命令的完整性 + +% \renewcommand\appendix{\setcounter{secnumdepth}{-2}} +%\appendix +%\include{content/appendix} + +\end{document} diff --git a/critical/undergraduate/content/abstracten.tex b/critical/undergraduate/content/abstracten.tex index e604795b..4f27110a 100644 --- a/critical/undergraduate/content/abstracten.tex +++ b/critical/undergraduate/content/abstracten.tex @@ -1,4 +1,4 @@ -%!TEX root = ../csuthesis_main.tex +%!TEX root = ../hutbthesis_main.tex \keywordsen{Hazardous Driving Scenarios \ \ Reinforcement Learning \ \ Scenario Generation \ \ CARLA Simulation} \begin{abstracten} diff --git a/critical/undergraduate/content/abstractzh.tex b/critical/undergraduate/content/abstractzh.tex index 33b0ee96..d729739a 100644 --- a/critical/undergraduate/content/abstractzh.tex +++ b/critical/undergraduate/content/abstractzh.tex @@ -1,6 +1,6 @@ -%!TEX root = ../csuthesis_main.tex +%!TEX root = ../hutbthesis_main.tex % 设置中文摘要 -\keywordscn{危险驾驶场景\quad 强化学习\quad 场景生成\quad NSGA-II CARLA仿真} +\keywordscn{危险驾驶场景\quad 强化学习\quad 场景生成\quad CARLA仿真} %\categorycn{TP391} \begin{abstractzh} diff --git a/critical/undergraduate/content/chapter1.tex b/critical/undergraduate/content/chapter1.tex index 67dbd0ab..46dcd19c 100644 --- a/critical/undergraduate/content/chapter1.tex +++ b/critical/undergraduate/content/chapter1.tex @@ -41,7 +41,7 @@ \section{本文结构框架} 本文以问题提出→理论基础→基准实现→改进对比→总结展望为线索进行论述,共五章,各部分之间关系见图~\ref{img-1}。 \begin{figure}[ht] \centering - \includegraphics[width=0.8\textwidth]{figure_1.png} + \includegraphics[width=\textwidth]{figure_1.png} \caption{论文结构框架图} \label{img-1} \end{figure} @@ -52,6 +52,6 @@ \section{本文结构框架} 第三章主要介绍一种基于深度强化学习(DRL)框架下极端驾驶场景生成器的设计与实现,以深度Q网络(DQN)作为核心算法对对抗式智能体进行研究。在状态空间中考虑目标车辆以及自身车辆之间的空间几何关系、两者之间相对速度、所在车道数等因素;在动作空间方面选取加速减速、转向和平移三种动作构成一个动作集。为了提高模型的效果同时也保证其有效性,在奖励函数中加入为了保护自身车辆的安全而设计的惩罚项,进而改进算法优化过程。利用CARLA模拟器展示生成场景并导出标准格式的数据集文件(例如.xosc),在此之上进行十个不同类型的极端驾驶情况测试来检查提出的方案是否可行以及有效。 -第四章主要探讨使用Proximal Policy Optimization(PPO)算法生成极端驾驶情境以及对其评价的方法。由于传统的深度强化学习方法(例如Deep Q-Network, DQN等)难以处理具有连续动作空间并且有较大不确定性的决策问题,因此本文基于PPO进行改进来解决其应用于连续动作域的问题。文中设计了一种专门针对某类应用场合下的网络结构优化方案,并提出了一种新的可调节奖励设计思路,在此基础上还提出了一系列提高训练鲁棒性的技术手段。最后搭建一个一致的标准测试环境,在安全性(如最小碰撞距离、发生碰撞的概率)、场景丰富程度(如行为分布的一致性及覆盖区域的广泛性)以及生成速度上比较基于PPO算法得到对抗样本集与使用DQN的经典基线模型的优劣,从而证明该方法的有效性和实用性。 +第四章主要探讨使用PPO算法生成极端驾驶情境以及对其评价的方法。由于传统的深度强化学习方法(例如Deep Q-Network, DQN等)难以处理具有连续动作空间并且有较大不确定性的决策问题,因此本文基于PPO进行改进来解决其应用于连续动作域的问题。文中设计了一种专门针对某类应用场合下的网络结构优化方案,并提出了一种新的可调节奖励设计思路,在此基础上还提出了一系列提高训练鲁棒性的技术手段。最后搭建一个一致的标准测试环境,在安全性(如最小碰撞距离、发生碰撞的概率)、场景丰富程度(如行为分布的一致性及覆盖区域的广泛性)以及生成速度上比较基于PPO算法得到对抗样本集与使用DQN的经典基线模型的优劣,从而证明该方法的有效性和实用性。 第五章 总结与展望。总结全文主要工作内容以及成果、创新之处,指出现有工作的不足并提出进一步的研究设想。 diff --git a/critical/undergraduate/content/chapter2.tex b/critical/undergraduate/content/chapter2.tex index d450ba43..964bc2dd 100644 --- a/critical/undergraduate/content/chapter2.tex +++ b/critical/undergraduate/content/chapter2.tex @@ -51,6 +51,7 @@ \subsection{强化学习基本框架} 强化学习目标就是寻求最优策略$\pi^*$,使从某个初始状态出发所获得的总折现奖励期望最大,即: \begin{equation} \pi^* = \arg\max_{\pi} \mathbb{E}_{\pi}\left[ \sum_{t=0}^{\infty} \gamma^t R(s_t, a_t) \right] +\label{eq:rl_objective} \end{equation} \subsection{DQN算法原理} @@ -59,6 +60,7 @@ \subsection{DQN算法原理} 深度强化学习(DQN)的基本思路为用一个较深的神经网络拟合状态动作价值函数($Q(s,a)$),这个值表示在给定状态下采取某个动作后能得到的平均未来奖励,而它的最终目的是让经验数据学习尽可能接近贝尔曼最优方程给出的目标。 \begin{equation} Q^{*}(s,a) = R(s,a) + \gamma \sum_{s'} P(s'|s,a) \max_{a'} Q^{*}(s',a') +\label{eq:bellman_optimal} \end{equation} DQN在传统Q学习的基础上引入了两项关键改进: @@ -68,26 +70,27 @@ \subsection{DQN算法原理} (2)目标网络(Target Network):为了使策略学习和价值估计分开,在DQN的基础上增加了一个双网络的方法。其中主网络用于进行每次动作的选择,而目标网络只用来求出目标Q值并且保持其参数基本不变,在每隔一段时间之后,目标网络就会用来自主网络的权值更新自身的权值从而提高整个算法的鲁棒性和收敛速度,它的损失函数可以用如下的方式来表示: \begin{equation} L(\theta) = \mathbb{E}_{(s,a,r,s') \sim D} \left[ \left( r + \gamma \max_{a'} Q(s',a';\theta^-) - Q(s,a;\theta) \right)^2 \right] +\label{eq:dqn_loss} \end{equation} - 其中$\theta$是主网络的参数,$\theta^-$是目标网络的参数。 由于DQN算法对于离散的动作空间具有良好的适用性,在该应用场景下,可以将目标车辆可进行的操作对应到一定数量离散的状态集(例如加速、减速、变道等),利用DQN来学习各个状态下最优的动作。 \subsection{PPO算法原理} 一种基于OpenAI于2017年提出的一种新的策略梯度优化方法——近端策略优化(Proximal Policy Optimization, PPO),它打破了传统的强化学习的思想是以价值函数为中心的思想。不同于以往使用价值函数来进行间接选择的方法,PPO是直接对策略网络$\pi(a|s)$进行优化得到每一个状态下的各个动作的概率大小。这使得PPO具有更好的效果以及更广泛的应用场景。 -Proximal Policy Optimization (PPO) 的主要思想是在策略更新时找到一个在每一轮都可使算法得到改进同时又不至于因为调整过大而导致不稳定的方法,在此基础之上提出了梯度裁剪的方法来限制每个训练步骤中对策略参数的改变量,进而避免由于改变过多带来的问题。 +PPO的主要思想是在策略更新时找到一个在每一轮都可使算法得到改进同时又不至于因为调整过大而导致不稳定的方法,在此基础之上提出了梯度裁剪的方法来限制每个训练步骤中对策略参数的改变量,进而避免由于改变过多带来的问题。 PPO的目标函数为: \begin{equation} L^{\text{CLIP}}(\theta) = \mathbb{E}_t\left[ \min\left( r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t \right) \right] +\label{eq:ppo_clip_objective} \end{equation} - 其中: (1)PPO在训练时使用了一个概率比来表示新旧策略变化大小。 \begin{equation} r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} +\label{eq:ppo_ratio} \end{equation} (2)$A_t$是优势函数的估计值,在状态$s_t$下执行动作$a_t$相比于平均值的优势。 @@ -109,7 +112,7 @@ \subsection{DQN与PPO的对比分析} (3)训练更加稳定,不易出现Q值过估计或发散问题。 -本文基于Proximal Policy Optimization (PPO) 算法,提出更加复杂以及具有较高难度极限驾驶任务的同时也对这两种经典方法进行比较研究。为了更好地突出两者区别,本文从不同方面对其进行对比,包括它们的基本原理、学习速度以及鲁棒性等(如表~\ref{tab:dqn_ppo_compare}所示)\cite{zhang2025deep}。 +本文基于PPO算法,提出更加复杂以及具有较高难度极限驾驶任务的同时也对这两种经典方法进行比较研究。为了更好地突出两者区别,本文从不同方面对其进行对比,包括它们的基本原理、学习速度以及鲁棒性等(如表~\ref{tab:dqn_ppo_compare}所示)\cite{zhang2025deep}。 \begin{table}[htbp] \centering \caption{DQN与PPO算法对比表} diff --git a/critical/undergraduate/content/chapter3.tex b/critical/undergraduate/content/chapter3.tex index 5e31f1c2..b2b95046 100644 --- a/critical/undergraduate/content/chapter3.tex +++ b/critical/undergraduate/content/chapter3.tex @@ -5,6 +5,7 @@ \subsection{状态空间设计} 作为强化学习框架的重要组成部分,状态空间的设计对于智能体理解环境以及做出合理选择具有重要影响,在本工作中考虑对抗车辆作为智能主体,在真实世界道路交通环境中需根据实际情况不断改变策略以模拟可能给目标车辆造成危险的情况。为了达到这个目的同时保证系统运行效率以及良好的鲁棒性,本文提出一种五维连续型状态向量表示法。它包括如下几个部分:当前位置、当前车速、前方障碍物的距离、道路弯曲程度以及之前的行为总结等\cite{almahamid2025agile}。 \begin{equation} s = \left[ d_{\text{rel}}, v_{\text{rel}}, v_{\text{ego}}, \delta_{\text{lane}}, C_{\text{collision}} \right] +\label{eq:state_vector} \end{equation} 以下对各分量进行详细说明: @@ -14,11 +15,13 @@ \subsection{状态空间设计} 相对距离为主车与对抗车辆之间的欧式距离,是衡量两车接近程度最直接的参数,在数值上越小说明两者距离越近,发生碰撞的可能性越大,其表达式为: \begin{equation} d_{\text{rel}} = \sqrt{(x_{\text{ego}} - x_{\text{adv}})^2 + (y_{\text{ego}} - y_{\text{adv}})^2} +\label{eq:relative_distance} \end{equation} 为了使神经网络可以接受这种形式的数据,在相对距离基础上进行归一化到[0,1]。取最大感知距离是50米,则归一化的公式为: \begin{equation} d_{\text{rel}}^{\text{norm}} = \min\left(1.0, \frac{d_{\text{rel}}}{50.0}\right) +\label{eq:normalized_distance} \end{equation} 当两车间距大于等于50米时,取值为1.0;当距离小于等于1米时,取值为0.02(留有很小数值防止除以零)。 @@ -28,6 +31,7 @@ \subsection{状态空间设计} 相对速度表示两辆车之间的距离变化情况,是预测未来发生碰撞的重要指标,在数学上它是对抗车辆的速度与本车速度之差。 \begin{equation} v_{\text{rel}} = v_{\text{adv}} - v_{\text{ego}} +\label{eq:relative_velocity} \end{equation} (3)主车速度 $v_{\text{ego}}$ @@ -35,13 +39,15 @@ \subsection{状态空间设计} 主车行驶速度对发生碰撞及后果起着重要作用,在相同相对位移情况下,车辆行驶速度与其制动距离成正比关系,从而决定了可能发生碰撞的风险大小以及采取应急措施的效果,其取值范围从0到100km/h,然后进行线性变换映射到[0,1]用于后续研究使用。 \begin{equation} v_{\text{ego}}^{\text{norm}} = \min\left(1.0, \frac{v_{\text{ego}}}{100.0}\right) +\label{eq:normalized_ego_speed} \end{equation} -(4)车道偏移量 $δ_{\text{lane}}$ +(4)车道偏移量 $\delta_{\text{lane}}$ 车道偏离量是衡量目标车辆横向偏离情况的一个重要参数,用来判断其是否有变道意图,在目标车辆纵坐标方向上相对于所在车道几何中心线的距离即为其大小,数值越大说明车辆越偏离原行驶轨迹并且有可能马上进行转向或者越过车道边界。为了便于比较和分析,将其缩放至[0, 1]之间:如果等于0说明车辆处于车道中间;如果接近1说明车辆已经接近一条车道边沿,一般对应实际车道宽度约为3.5m处。 \begin{equation} \delta_{\text{lane}}^{\text{norm}} = \min\left(1.0, \frac{|y_{\text{adv}} - y_{\text{lane}}|}{3.5}\right) +\label{eq:lane_offset} \end{equation} (5)碰撞标志 $C_{\text{collision}}$ @@ -49,6 +55,7 @@ \subsection{状态空间设计} 作为一种二元逻辑变量,碰撞标志用以表示上一时间片是否出现过碰撞情况。它可以给智能体提供直接负反馈信息,使其改善自身躲避障碍物方法以及改善运动规划结果。该变量只有两种取值,即0或者1;0表示无碰撞;1表示有碰撞。 \begin{equation} C_{\text{collision}} \in \{0, 1\} +\label{eq:collision_flag} \end{equation} 状态向量在每次仿真过程中不断更新并被送入DQN网络。所有的连续部分都被上述归一化方式归一化到一个固定范围以便使神经网络学习更加鲁棒、快速地收敛。 @@ -105,9 +112,9 @@ \subsection{奖励函数设计} (一)危险度奖励 $R_{\text{danger}}$ -作为一个重要组成部分,危险性评估模块对主车的安全起到决定性作用,在本课题中采用碰撞时间($Time to Collision, TTC$)来衡量危险的程度,即在当前相对运动状态下,两辆车或者多辆车之间发生碰撞所需要的时间,数值越小说明在短时间内受到撞击的可能性越大,从而使得整个系统的安全性大幅下降。 +作为一个重要组成部分,危险性评估模块对主车的安全起到决定性作用,在本课题中采用碰撞时间(Time to Collision, TTC)来衡量危险的程度,即在当前相对运动状态下,两辆车或者多辆车之间发生碰撞所需要的时间,数值越小说明在短时间内受到撞击的可能性越大,从而使得整个系统的安全性大幅下降。 -$TTC$计算方法在第二章已经介绍,在此不再赘述。而根据$TTC$大小进行危险度奖励也是用一段函数表示: +TTC计算方法在第二章已经介绍,在此不再赘述。而根据TTC大小进行危险度奖励也是用一段函数表示: \begin{equation} R_{\text{danger}} = \begin{cases} @@ -116,6 +123,7 @@ \subsection{奖励函数设计} +1.0, & 2.0\,\text{s} \le TTC < 3.0\,\text{s} \\ 0, & TTC \ge 3.0\,\text{s} \end{cases} +\label{eq:danger_reward} \end{equation} (二)碰撞惩罚 $R_{\text{collision}}$ @@ -123,6 +131,7 @@ \subsection{奖励函数设计} 在对抗性情况下,如果目标车和自身发生碰撞,则该次交互视为非法而结束,在此基础上,还会给到智能体一个较强的负面反馈来起到制约效果,这个惩罚力度以及其取值是由设计者根据一定标准设定并可适当改变的。 \begin{equation} R_{\text{collision}} =-20.0 +\label{eq:collision_penalty} \end{equation} 这个数值绝对值远远大于危险度奖励最大值(10.0)以使智能体在面临危险接近以及发生碰撞之间进行比较时总是倾向于避开碰撞。 @@ -136,6 +145,7 @@ \subsection{奖励函数设计} -1.0, & \delta_{\text{lane}} > 0.8 \\ 0, & \text{其他} \end{cases} +\label{eq:lane_penalty} \end{equation} 此车道偏离距离量化的设计参数有明显的导向作用,主要目的是起到引导作用而不是限制作用。柔性约束,即在一定条件下(例如紧急避险时)适当超出也是允许的。 @@ -145,6 +155,7 @@ \subsection{奖励函数设计} 为了避免对抗车辆完全停止或者以较低速度移动较长时间(这种情况不符合“极端驾驶”目的),给予速度奖励使智能体有适当移动。 \begin{equation} R_{\text{speed}} = +0.11 \times \min\left( \frac{v_{\text{adv}}}{20.0}, 1.0 \right) +\label{eq:speed_reward} \end{equation} 其中,速度$v$是用每小时千米来表示汽车行驶速度。而这个激励有以下特点:随车速增加而增加奖励,在一定范围内呈饱和状态并且最大值为0.1;当车速小于等于20公里每小时时候,奖励会按比例减少,使智能体能够控制自身速度。但是相比于可能出现惩罚力度来说,这个奖励太高,所以很明显它主要目的是避免发生交通事故。 @@ -154,6 +165,7 @@ \subsection{奖励函数设计} 总奖励函数为上述各分量的加权和: \begin{equation} R = R_{\text{danger}} + R_{\text{collision}} + R_{\text{lane}} + R_{\text{speed}} +\label{eq:total_reward} \end{equation} 本研究采取等权重分配方法,在各个评估因素上不设置特定权重,而是根据它们所占比例确定它们的重要性。其中,风险程度得分为最高10分;碰撞事件扣除最低2分;车道偏离扣除1分;最佳车速给予每提高0.1分奖励。这样可以使得系统更注重对于危险情况处理能力的同时也考虑对于可能发生冲突预警能力和良好驾驶行为。 @@ -163,6 +175,7 @@ \subsection{引入注意力机制对DQN的优化} 注意力机制的核心思想在于:为输入特征中的不同部分分配不同权重,使模型能够重点关注更重要的信息,同时抑制无关信息以及噪声信息。其数学表达形式可以概括为:给定查询(Query)、键(Key)和值(Value)三个矩阵后,注意力函数会先计算查询与各键之间的相似度,从而得到对应的注意力权重,再将权重与对应值进行加权求和,最终得到注意力输出: \begin{equation} \text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^T}{\sqrt{d_k}} \right) V +\label{eq:attention} \end{equation} 其中,$d_k$表示键向量维度,主要用于缩放处理,避免点积数值过大导致梯度饱和。该缩放点积注意力机制也是Transformer模型的重要组成部分,并且已经被证明具备优异的特征提取能力。 @@ -202,7 +215,7 @@ \subsection{引入PPO算法} (一)连续动作空间支持 -作为强化学习一个重要方向,策略梯度方法(例如Proximal Policy Optimization, PPO)由于可以直接对概率分布进行优化,在处理连续动作空间的问题上有着明显的优势。本文将目标车的动作命令视为一个连续的量:油门踏板的位置限定在[0, 1]之间,方向盘的角度位于[-0.5, 0.5]范围内,制动踏板的压力大小也处于[0,1]之内。相比于传统的离散动作的选择方式,这样的连续的动作更有利于提高对抗任务上的效率以及灵活性,也能做到更加细腻的操作,比如渐进式的改变行驶路线或者是逐渐地完成变道动作等。这在很大程度上改善了以往基于固定的离散动作集来进行的深度强化学习所存在的弊端\cite{fei2023improved}。 +作为强化学习一个重要方向,PPO由于可以直接对概率分布进行优化,在处理连续动作空间的问题上有着明显的优势。本文将目标车的动作命令视为一个连续的量:油门踏板的位置限定在[0, 1]之间,方向盘的角度位于[-0.5, 0.5]范围内,制动踏板的压力大小也处于[0,1]之内。相比于传统的离散动作的选择方式,这样的连续的动作更有利于提高对抗任务上的效率以及灵活性,也能做到更加细腻的操作,比如渐进式的改变行驶路线或者是逐渐地完成变道动作等。这在很大程度上改善了以往基于固定的离散动作集来进行的深度强化学习所存在的弊端\cite{fei2023improved}。 (二)随机策略增强探索能力 @@ -217,7 +230,7 @@ \subsection{PPO算法的网络结构与奖励重塑} 基于Actor-Critic框架的PPO算法有两个主要部分,即Actor网络以及Critic网络,在这两个网络之间进行合作以得到一个较好的策略并不断改善它。具体的网络结构如图~\ref{fig:ppo_network_structure}所示\cite{yan2024ppo}。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_3.png} + \includegraphics[width=\textwidth]{figure_3.png} \caption{PPO网络结构图} \label{fig:ppo_network_structure} \end{figure} @@ -231,6 +244,7 @@ \subsection{PPO算法的网络结构与奖励重塑} 在训练过程中,策略网络产生的动作的概率分布被建模成对角高斯分布,即认为每一个动作都是一个相互独立的随机变量并且各自符合一个独立的高斯分布,在此基础上采样得到具体的动作。 \begin{equation} a \sim \mathcal{N}(\mu, \sigma^2) +\label{eq:action_gaussian} \end{equation} (2)Critic网络(价值网络) @@ -240,11 +254,13 @@ \subsection{PPO算法的网络结构与奖励重塑} 本模型以一个五维的状态向量为输入并产生一个标量作为输出,也就是在这个状态下应用这个策略所获得的期望长期累积奖励。这个输出表示的是在这个状态下采取某种动作之后将来得到回报的一个平均估计。 \begin{equation} V(s) = \mathbb{E}\left[ \sum_{t=0}^{\infty} \gamma^t r_t \mid s_0 = s \right] +\label{eq:value_function} \end{equation} -这个因素是算法设计中的一个重要因素,在算法中起着至关重要的作用,它用来表示目标行为的表现和预期目标之间的差距并且用于评价一个模型的好坏,在训练时,它是一个需要最小化的量,尽量让预测结果和实际回报之间的差距变小而改变参数值,在基于策略梯度的强化学习方法中(例如Proximal Policy Optimization, PPO),价值网络的损失一般使用均方误差(Mean Squared Error, MSE)。 +这个因素是算法设计中的一个重要因素,在算法中起着至关重要的作用,它用来表示目标行为的表现和预期目标之间的差距并且用于评价一个模型的好坏,在训练时,它是一个需要最小化的量,尽量让预测结果和实际回报之间的差距变小而改变参数值,在基于策略梯度的强化学习方法中,价值网络的损失一般使用均方误差(Mean Squared Error, MSE)。 \begin{equation} L^{VF}(\phi) = \frac{1}{T} \sum_{t=1}^{T} \left( V_\phi(s_t) - \hat{R}_t \right)^2 +\label{eq:value_loss} \end{equation} 其中$\hat{R}_t$是从时间步t开始的真实累计奖励,$V_\phi(s_t)$是 critic 网络所估计的值。 @@ -255,28 +271,29 @@ \subsection{PPO算法的网络结构与奖励重塑} 输入层:5个神经元,接收归一化后的状态向量; -第一隐藏层:128个神经元,使用$ReLU$激活函数,输出维度128。 +第一隐藏层:128个神经元,使用ReLU激活函数,输出维度128。 -第二个隐藏层:128个神经元,使用$ReLU$作为激活函数,输出维度为128。 +第二个隐藏层:128个神经元,使用ReLU作为激活函数,输出维度为128。 -Actor输出层:6个神经元(3个均值+3个标准差),使用$tanh$激活函数使均值在一定范围内。 +Actor输出层:6个神经元(3个均值+3个标准差),使用tanh激活函数使均值在一定范围内。 Critic输出层:一个神经元,无激活函数,直接输出标量值。 -在设计神经网络结构上,要兼顾模型效果以及计算成本。实验结果显示,设置128个隐藏层神经元可以很好地拟合状态-动作之间的关系,同时也能较好地避免过拟合现象并且加快训练速度。本文使用$ReLU$作为激活函数,因为其具有速度快、传梯度好等优点,能很好地解决传统的激活函数容易出现的梯度消失的问题。 +在设计神经网络结构上,要兼顾模型效果以及计算成本。实验结果显示,设置128个隐藏层神经元可以很好地拟合状态-动作之间的关系,同时也能较好地避免过拟合现象并且加快训练速度。本文使用ReLU作为激活函数,因为其具有速度快、传梯度好等优点,能很好地解决传统的激活函数容易出现的梯度消失的问题。 (二)连续动作空间建模 -相比于 Deep Q-Network(DQN) 算法,Proximal Policy Optimization(PPO) 算法更适用于解决连续动作空间的问题,这也是 PPO 最大的优点,在第三章中本文将对抗车辆的操作指令简化成五个不同的状态,虽然这可以大大增加问题求解的可能性,但是也减少对于一些细微之处的关注。而本文提出了一种新的方法,在此基础上进一步提出了用三维连续向量来表示对抗车辆的动作参数,这样就可以极大地提高对于复杂情况的反应速度以及控制能力。 +相比于 DQN 算法,PPO 算法更适用于解决连续动作空间的问题,这也是 PPO 最大的优点,在第三章中本文将对抗车辆的操作指令简化成五个不同的状态,虽然这可以大大增加问题求解的可能性,但是也减少对于一些细微之处的关注。而本文提出了一种新的方法,在此基础上进一步提出了用三维连续向量来表示对抗车辆的动作参数,这样就可以极大地提高对于复杂情况的反应速度以及控制能力。 \begin{equation} \mathbf{a} = \left[ a_{\text{throttle}}, a_{\text{brake}}, a_{\text{steer}} \right] +\label{eq:continuous_action} \end{equation} 各维度的物理含义及取值范围如下: -油门开度是一个位于[0,1]之间实数值,用来表示汽车加速度大小,在油门开度为0时,说明司机已经把油门完全松开,这时汽车主要是靠自身惯性来降低速度;而在油门开度为1时,则是把油门踩到底,使汽车具有最大加速度。不同于DQN只能给出离散选择,采用PPO(Proximal Policy Optimization)算法强化学习可以得到连续实数值,这有利于更精准控制发动机扭矩以及提高整个自动驾驶过程舒适性和效率。 +油门开度是一个位于[0,1]之间实数值,用来表示汽车加速度大小,在油门开度为0时,说明司机已经把油门完全松开,这时汽车主要是靠自身惯性来降低速度;而在油门开度为1时,则是把油门踩到底,使汽车具有最大加速度。不同于DQN只能给出离散选择,采用PPO算法强化学习可以得到连续实数值,这有利于更精准控制发动机扭矩以及提高整个自动驾驶过程舒适性和效率。 -制动力度在[0,1]范围内取值,该值表示汽车减速程度。即数值为0表示制动不起作用,数值为1时表示已经施加最大制动力,一般情况下这将导致$ABS$起作用。为了模拟紧急制动情况,在程序中使用一个可变制动力度进行制动操作,从开始时较小制动力度(如0.3)逐渐增加到较大制动力度(如0.8),相比于一般强化学习所使用的固定减速率方法,这种方法更加符合实际情况同时也对目标检测车辆避险提出更高要求。 +制动力度在[0,1]范围内取值,该值表示汽车减速程度。即数值为0表示制动不起作用,数值为1时表示已经施加最大制动力,一般情况下这将导致ABS起作用。为了模拟紧急制动情况,在程序中使用一个可变制动力度进行制动操作,从开始时较小制动力度(如0.3)逐渐增加到较大制动力度(如0.8),相比于一般强化学习所使用的固定减速率方法,这种方法更加符合实际情况同时也对目标检测车辆避险提出更高要求。 当转向角度位于[-0.5, 0.5]区间时,该参数主要作用是控制汽车左右移动,不同数值改变会对变道以及转向产生较大影响,负数为向左打方向,正值为向右打方向,数值越大说明方向盘转动程度越大,即绝对值等于0.5时为最大转向角度(约25°),0.1为较小的方向盘转动量。 @@ -295,6 +312,7 @@ \subsection{PPO算法的网络结构与奖励重塑} 在强化学习框架下,奖励函数起到至关重要的作用,它决定了智能体对于某种行为学习的效果及效果的好坏,在PPO中使用平滑奖励代替DQN中的原始奖励,该奖励是为了解决连续动作空间问题而提出的,可以使动作更加流畅、稳定的同时也可以避免出现较大或者不稳定的情况发生,这也正是PPO的一个亮点之处。 \begin{equation} R_{\text{smooth}} = -0.1 \times \| a_t - a_{t-1} \|_2 +\label{eq:smooth_reward} \end{equation} 上述公式中用$a_t$、$a_{t-1}$分别表示当前时刻以及上一时刻的动作向量,而使用$\|\cdot\|_2$的是欧几里得范数计算两者之差值大小。这个奖励是为了让模型注意到相邻两个时间点之间行为的变化情况,在两者差距很大时给予较大的负奖励。由于欧几里得范数考虑多个维度的动作参数共同作用,因此这样做可以更全面地反映一个行为序列的整体趋势以及它们之间的关系而不只是某个方面。 @@ -305,13 +323,15 @@ \subsection{PPO算法的网络结构与奖励重塑} \section{算法场景生成实现} \subsection{算法生成流程} 这一节将介绍一种基于深度强化学习的方法(以DQN算法为例)来生成极端驾驶场景的过程,在此过程中利用CARLA仿真环境并且在同步模式下进行以保证每个时间步之间的一一对应关系,具体过程如图~\ref{fig:dqn_generation_flow}所示。 -\begin{figure}[htbp] +\begin{figure}[H] \centering - \includegraphics[width=0.8\textwidth]{figure_4.png} + \includegraphics[width=0.6\textwidth]{figure_4.png} \caption{算法流程图} \label{fig:dqn_generation_flow} \end{figure} + + 步骤一:环境初始化 然后运行CARLA仿真器,连接至服务器,加载所需地图,在表2不同场景下所对应的参数进行配置。 @@ -344,7 +364,7 @@ \subsection{算法生成结果} 训练过程对比结果如图~\ref{fig:rainy_following_results}所示,其中左图表示奖励曲线,右图表示评估结果。横轴为训练轮次(Episode),纵轴为每100轮计算得到的滑动平均奖励值(Avg Reward),主要用于反映算法学习效率以及策略稳定性。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_5.png} + \includegraphics[width=\textwidth]{figure_5.png} \caption{暴雨天跟车场景训练结果对比} \label{fig:rainy_following_results} \end{figure} @@ -370,7 +390,7 @@ \subsection{算法生成结果} 训练结果如图~\ref{fig:emergency_braking_results}所示,对比显示Attention-DQN 的奖励曲线整体呈现持续增长趋势。奖励值从初始接近0开始,在第2轮快速提升至20左右并短暂保持稳定,随后继续增长,最终在第10轮达到72以上。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_6.png} + \includegraphics[width=\textwidth]{figure_6.png} \caption{前车紧急制动场景训练结果对比} \label{fig:emergency_braking_results} \end{figure} @@ -394,7 +414,7 @@ \subsection{算法生成结果} 训练结果如图~\ref{fig:pedestrian_crossing_results}所示,Attention-DQN 与 Smooth-PPO 的训练曲线基本重合,说明两种算法在该场景中的平均奖励水平保持一致。结合右侧评估指标可以发现,虽然最终均实现安全避让,但 Attention-DQN 的训练过程缺少明显学习趋势,策略优化过程并不突出。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_7.png} + \includegraphics[width=\textwidth]{figure_7.png} \caption{行人横穿马路场景训练结果对比} \label{fig:pedestrian_crossing_results} \end{figure} @@ -412,7 +432,7 @@ \subsection{算法生成结果} 训练过程对比如图~\ref{fig:foggy_overtake_results}所示,Attention-DQN的训练曲线未能完整呈现,这表明算法在大雾低能见度场景中未形成明显奖励变化,其学习过程并不完整,策略优化趋势也难以追踪。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_8.png} + \includegraphics[width=\textwidth]{figure_8.png} \caption{雾天鬼探头场景训练结果对比} \label{fig:foggy_overtake_results} \end{figure} @@ -435,7 +455,7 @@ \subsection{从 Attention-DQN 到 Smooth-PPO稳定性的演进} (一)Attention-DQN 的稳定性方案:注意力机制 + 经验回放 + 目标网络 -Attention-DQN 在标准 DQN 基础上引入注意力模块,增强对相对距离、$TTC$、车道偏移等关键危险特征的聚焦能力,并保留经验回放与目标网络保证训练稳定:注意力机制动态加权状态维度,提升关键危险信息的感知效率;经验回放打破样本时序相关,提升离散动作学习的稳定性:目标网络延迟更新,避免$Q$值估计震荡与过估计问题。 Attention-DQN 的稳定性提升依赖特征优化与数据层面优化,属于间接稳定手段,在连续控制与湿滑路面、低能见度等复杂场景下仍存在动作跳变、策略波动等不足。 +Attention-DQN 在标准 DQN 基础上引入注意力模块,增强对相对距离、TTC、车道偏移等关键危险特征的聚焦能力,并保留经验回放与目标网络保证训练稳定:注意力机制动态加权状态维度,提升关键危险信息的感知效率;经验回放打破样本时序相关,提升离散动作学习的稳定性:目标网络延迟更新,避免Q值估计震荡与过估计问题。 Attention-DQN 的稳定性提升依赖特征优化与数据层面优化,属于间接稳定手段,在连续控制与湿滑路面、低能见度等复杂场景下仍存在动作跳变、策略波动等不足。 (二)Smooth-PPO 的稳定性方案:剪切策略更新 + 动作平滑约束 @@ -454,11 +474,11 @@ \subsection{从 Attention-DQN 到 Smooth-PPO稳定性的演进} \subsection{目标函数的数学关联} Attention-DQN 与 Smooth-PPO 在目标函数设计上具有明显的递进关系与互补特征,体现出价值学习与策略学习之间的内在联系。 -(一)Attention-DQN:基于贝尔曼方程的价值优化,Attention-DQN 以 Q 值学习作为核心,通过最小化 TD 误差来完成价值函数拟合(见公式3)。 +(一)Attention-DQN:基于贝尔曼方程的价值优化,Attention-DQN 以 Q 值学习作为核心,通过最小化 TD 误差来完成价值函数拟合(见公式~\eqref{eq:dqn_loss})。 其主要目标是学习状态—动作价值函数,并利用贪心策略完成动作选择,因此属于典型的价值驱动方法。 -(二)Smooth-PPO:基于策略梯度的剪切优化,Smooth-PPO 则直接对策略概率分布进行优化,并采用剪切目标函数对策略更新过程进行约束(见公式4)。 +(二)Smooth-PPO:基于策略梯度的剪切优化,Smooth-PPO 则直接对策略概率分布进行优化,并采用剪切目标函数对策略更新过程进行约束(见公式~\eqref{eq:ppo_clip_objective})。 与此同时,还加入平滑奖励机制来限制动作变化幅度,因此属于策略驱动与安全约束相结合的方法。 @@ -468,7 +488,7 @@ \subsection{目标函数的数学关联} 稳定性目标一致:Attention-DQN 的目标网络与 Smooth-PPO 的剪切机制,都是通过限制更新幅度实现稳定训练; -危险导向统一:两者奖励函数均以 $TTC$、碰撞风险、安全距离为核心,目标都是生成高真实性极端驾驶场景。 +危险导向统一:两者奖励函数均以 TTC、碰撞风险、安全距离为核心,目标都是生成高真实性极端驾驶场景。 \subsection{联系与区别的总结} 两种算法之间的联系:均面向极端驾驶场景设计,以生成危险对抗行为为目标;均采用多维度状态空间(相对距离、相对速度、车道偏移等);均以安全性、收敛性、场景真实性为优化方向;最终均可输出符合 OpenSCENARIO 标准的.xosc 场景文件。 diff --git a/critical/undergraduate/content/chapter4.tex b/critical/undergraduate/content/chapter4.tex index 826eaecc..03618244 100644 --- a/critical/undergraduate/content/chapter4.tex +++ b/critical/undergraduate/content/chapter4.tex @@ -7,7 +7,7 @@ \subsection{极端天气类场景生成效果} (二)浓雾天气巡航场景 -如图\ref{fig:foggy_cruise}在浓雾天气下能见度设置为50米,主车以50km/h速度巡航。Smooth-PPO算法在该场景中展现出良好的鲁棒性,能够在能见度受限的条件下有效逼近主车。生成场景的最小$TTC$为2.0秒,危险成功率为79\%。值得注意的是,Smooth-PPO的随机策略使其在浓雾环境中具有更强的适应性,收敛速度较Attention-DQN提升约36\%。 +如图\ref{fig:foggy_cruise}在浓雾天气下能见度设置为50米,主车以50km/h速度巡航。Smooth-PPO算法在该场景中展现出良好的鲁棒性,能够在能见度受限的条件下有效逼近主车。生成场景的最小TTC为2.0秒,危险成功率为79\%。值得注意的是,Smooth-PPO的随机策略使其在浓雾环境中具有更强的适应性,收敛速度较Attention-DQN提升约36\%。 \begin{figure}[htbp] \centering \begin{minipage}{0.45\textwidth} @@ -63,7 +63,7 @@ \subsection{对抗车辆类场景生成效果} (一)前车紧急制动场景 -前车紧急制动是测试主车反应能力的经典场景。如图\ref{fig:emergency_braking}对抗车辆需要在主车接近时触发紧急制动,以最小化主车的安全距离。Smooth-PPO算法学习到了渐进式制动策略,制动过程分为预警制动、持续压缩和极限增强三个阶段,使$TTC$呈现平滑下降形态。与Attention-DQN的触发式急刹相比,Smooth-PPO生成的制动曲线更加平滑,对抗行为更加真实自然,接近人类驾驶中的点刹操作,能够在保持高危险度的同时有效控制碰撞风险。 +前车紧急制动是测试主车反应能力的经典场景。如图\ref{fig:emergency_braking}对抗车辆需要在主车接近时触发紧急制动,以最小化主车的安全距离。Smooth-PPO算法学习到了渐进式制动策略,制动过程分为预警制动、持续压缩和极限增强三个阶段,使TTC呈现平滑下降形态。与Attention-DQN的触发式急刹相比,Smooth-PPO生成的制动曲线更加平滑,对抗行为更加真实自然,接近人类驾驶中的点刹操作,能够在保持高危险度的同时有效控制碰撞风险。 (二)旁车强行加塞场景 @@ -135,10 +135,10 @@ \subsection{多因素耦合场景生成效果} \section{生成场景的.xosc文件输出} \subsection{.xosc文件的生成方法与流程} -OpenSCENARIO是ASAM(自动化及测量系统标准协会)制定的自动驾驶仿真场景描述标准,采用XML格式定义动态交通场景。本研究采用Python编程语言结合开源库$scenariogeneration$进行.xosc文件的自动生成。该库提供了完整的OpenSCENARIO XML构建接口,支持场景参数化定义和批量生成\cite{yu2021openscenario}。整体生成流程如图~\ref{fig:xosc_generation_flow}所示。 +OpenSCENARIO是ASAM(自动化及测量系统标准协会)制定的自动驾驶仿真场景描述标准,采用XML格式定义动态交通场景。本研究采用Python编程语言结合开源库scenariogeneration进行.xosc文件的自动生成。该库提供了完整的OpenSCENARIO XML构建接口,支持场景参数化定义和批量生成\cite{yu2021openscenario}。整体生成流程如图~\ref{fig:xosc_generation_flow}所示。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{figure_19.png} + \includegraphics[width=\textwidth]{figure_19.png} \caption{.xosc文件生成流程图} \label{fig:xosc_generation_flow} \end{figure} @@ -163,7 +163,7 @@ \subsection{.xosc文件的生成方法与流程} 最后,将生成的.xosc文件导入 CARLA 模拟器中进行加载与运行,验证场景的可复现性与逻辑正确性,确保生成的场景能够在仿真环境中按预期执行。 \subsection{.xosc文件实现} -以 $ASAM OpenSCENARIO$ 1.2 为标准,预定义 XML 模板 $template.xosc$,采用 \texttt{\{\{key\}\}} 占位符标记动态字段,\texttt{\{\{\#section\}\}}...\texttt{\{\{/section\}\}} 标记条件块。模板包含 FileHeader、ParameterDeclarations、RoadNetwork、Entities、Storyboard 等核心标签。 +以 ASAM OpenSCENARIO 1.2 为标准,预定义 XML 模板 template.xosc,采用 \texttt{\{\{key\}\}} 占位符标记动态字段,\texttt{\{\{\#section\}\}}...\texttt{\{\{/section\}\}} 标记条件块。模板包含 FileHeader、ParameterDeclarations、RoadNetwork、Entities、Storyboard 等核心标签。 本文使用旁车加塞的.xosc文件为例,对文件的实现进行说明。 (一)文件头 diff --git a/critical/undergraduate/content/cover.tex b/critical/undergraduate/content/cover.tex index 030f819f..e5629dc3 100644 --- a/critical/undergraduate/content/cover.tex +++ b/critical/undergraduate/content/cover.tex @@ -10,7 +10,8 @@ \studentid{2209040015} \priormajor{机器人工程} \myclass{机器人2201班} -\supervisor{王海东教授} +\supervisor{王海东} +\supervisortitle{讲师} \department{智能机器人学院} \thesisdate{year=2026, month=5} diff --git a/critical/undergraduate/images/figure_1.drawio.pdf b/critical/undergraduate/images/figure_1.drawio.pdf new file mode 100644 index 00000000..3ee8ed4a Binary files /dev/null and b/critical/undergraduate/images/figure_1.drawio.pdf differ diff --git a/critical/undergraduate/images/figure_19.drawio.pdf b/critical/undergraduate/images/figure_19.drawio.pdf new file mode 100644 index 00000000..8343183f Binary files /dev/null and b/critical/undergraduate/images/figure_19.drawio.pdf differ diff --git a/critical/undergraduate/images/figure_2.drawio.pdf b/critical/undergraduate/images/figure_2.drawio.pdf new file mode 100644 index 00000000..ccb9921a Binary files /dev/null and b/critical/undergraduate/images/figure_2.drawio.pdf differ diff --git a/critical/undergraduate/images/figure_3.drawio.pdf b/critical/undergraduate/images/figure_3.drawio.pdf new file mode 100644 index 00000000..7cfc344a Binary files /dev/null and b/critical/undergraduate/images/figure_3.drawio.pdf differ diff --git a/critical/undergraduate/images/figure_4.drawio.pdf b/critical/undergraduate/images/figure_4.drawio.pdf new file mode 100644 index 00000000..ba568319 Binary files /dev/null and b/critical/undergraduate/images/figure_4.drawio.pdf differ diff --git a/critical/undergraduate/images/figure_5.drawio.pdf b/critical/undergraduate/images/figure_5.drawio.pdf new file mode 100644 index 00000000..0b520bdf Binary files /dev/null and b/critical/undergraduate/images/figure_5.drawio.pdf differ