Closed 88250 closed 3 years ago
a12 中会加入这个转换,但我这里缺少测试用例,所以处理结果不一定正确,麻烦 @ProgramFan @GuangDai 帮忙回测,谢谢。
OK。
a12转换还是有问题: 原始代码:
**蒙特卡洛树搜索**(英语:Monte Carlo tree search;简称:**MCTS**)是一种用于某些决策过程的[启发式](https://zh.wikipedia.org/wiki/%E5%90%AF%E5%8F%91%E5%BC%8F%E6%90%9C%E7%B4%A2 "启发式搜索")[搜索算法](https://zh.wikipedia.org/wiki/%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95 "搜索算法"),最引人注目的是在游戏中的使用。一个主要例子是[电脑围棋](https://zh.wikipedia.org/wiki/%E7%94%B5%E8%84%91%E5%9B%B4%E6%A3%8B "电脑围棋")程序[\[1\]](#cite_note-1),它也用于其他[棋盘游戏](https://zh.wikipedia.org/wiki/%E6%A3%8B%E7%9B%98%E6%B8%B8%E6%88%8F "棋盘游戏")、即时电子游戏以及不确定性游戏。
{: id="20210222145416-79sr77y"}
## <a id="历史"></a>历史
{: id="20210222145416-svbufay"}
基于随机抽样的[蒙特卡洛方法](https://zh.wikipedia.org/wiki/%E8%92%99%E7%89%B9%E5%8D%A1%E6%B4%9B%E6%96%B9%E6%B3%95 "蒙特卡洛方法")可以追溯到20世纪40年代。布鲁斯·艾布拉姆森(Bruce Abramson)在他1987年的博士论文中探索了这一想法,称它“展示出了准确、精密、易估、有效可计算以及域独立的特性“[\[2\]](#cite_note-Abramson-2)。他深入试验了[井字棋](https://zh.wikipedia.org/wiki/%E4%BA%95%E5%AD%97%E6%A3%8B "井字棋"),然后试验了[黑白棋](https://zh.wikipedia.org/wiki/%E9%BB%91%E7%99%BD%E6%A3%8B "黑白棋")和[国际象棋](https://zh.wikipedia.org/wiki/%E5%9B%BD%E9%99%85%E8%B1%A1%E6%A3%8B "国际象棋")的机器生成的评估函数。1992年,B·布鲁格曼(B. Brügmann)首次将其应用于对弈程序[\[3\]](#cite_note-Bruegmann-3),但他的想法未获得重视。2006年堪称围棋领域蒙特卡洛革命的一年[\[4\]](#cite_note-4),雷米·库洛姆(Remi Coulom)描述了蒙特卡洛方法在[游戏树](https://zh.wikipedia.org/wiki/%E5%8D%9A%E5%BC%88%E6%A0%91 "博弈树")搜索的应用并命名为蒙特卡洛树搜索[\[5\]](#cite_note-5)。列文特·科奇什(Levente Kocsis)和乔鲍·塞派什瓦里(Csaba Szepesvári)开发了UCT算法[\[6\]](#cite_note-Kocsis-Szepesvari-6),西尔万·热利(Sylvain Gelly)等人在他们的程序MoGo中实现了UCT[\[7\]](#cite_note-Gelly-et-al-7)。2008年,MoGo在九路围棋中达到[段位](https://zh.wikipedia.org/wiki/%E6%AE%B5%E7%BA%A7%E4%BD%8D%E5%88%B6 "段级位制")水平[\[8\]](#cite_note-8),Fuego程序开始在九路围棋中战胜实力强劲的业余棋手[\[9\]](#cite_note-9)。2012年1月,Zen程序在19路围棋上以3:1击败二段棋手约翰·特朗普(John Tromp)[\[10\]](#cite_note-10)。
{: id="20210222145416-kgr8s7o"}
[![](assets/5cfc3f8c9431468e93a6e0874be5124a.png)](https://zh.wikipedia.org/wiki/File:Computer-go-ratings-Chinese.png)
{: id="20210222145416-ftv9chg"}
自2007年以来KGS围棋服务器上最优秀围棋程序的评级。自2006年以来,最优秀的程序全部使用蒙特卡洛树搜索。[\[11\]](#cite_note-11)
{: id="20210222145416-jbalrac"}
蒙特卡洛树搜索也被用于其他[棋盘游戏](https://zh.wikipedia.org/wiki/%E6%A3%8B%E7%9B%98%E6%B8%B8%E6%88%8F "棋盘游戏")程序,如[六贯棋](https://zh.wikipedia.org/wiki/%E5%85%AD%E8%B2%AB%E6%A3%8B "六贯棋")[\[12\]](#cite_note-12)、[三宝棋](https://zh.wikipedia.org/wiki/%E4%B8%89%E5%AF%B6%E6%A3%8B "三宝棋")[\[13\]](#cite_note-13)、[亚马逊棋](https://zh.wikipedia.org/wiki/%E4%BA%9E%E9%A6%AC%E9%81%9C%E6%A3%8B "亚马逊棋")[\[14\]](#cite_note-14)和[印度斗兽棋](https://zh.wikipedia.org/wiki/%E5%8D%B0%E5%BA%A6%E9%AC%A5%E7%8D%B8%E6%A3%8B "印度斗兽棋")[\[15\]](#cite_note-15);即时电子游戏,如《[吃豆小姐](https://zh.wikipedia.org/w/index.php?title=%E5%90%83%E8%B1%86%E5%B0%8F%E5%A7%90&action=edit&redlink=1)》[\[16\]](#cite_note-16)[\[17\]](#cite_note-17)、《[神鬼寓言:传奇](https://zh.wikipedia.org/w/index.php?title=%E7%A5%9E%E9%AC%BC%E5%AF%93%E8%A8%80:%E4%BC%A0%E5%A5%87&action=edit&redlink=1)》[\[18\]](#cite_note-18)、《[罗马II:全面战争](https://zh.wikipedia.org/wiki/%E7%BE%85%E9%A6%ACII%EF%BC%9A%E5%85%A8%E8%BB%8D%E7%A0%B4%E6%95%B5 "罗马II:全面战争")》[\[19\]](#cite_note-19);不确定性游戏,如[斯卡特](https://zh.wikipedia.org/wiki/%E6%96%AF%E5%8D%A1%E7%89%B9 "斯卡特")[\[20\]](#cite_note-20)、[扑克](https://zh.wikipedia.org/wiki/%E6%92%B2%E5%85%8B "扑克")[\[21\]](#cite_note-21)、[万智牌](https://zh.wikipedia.org/wiki/%E4%B8%87%E6%99%BA%E7%89%8C "万智牌")[\[22\]](#cite_note-22)、[卡坦岛](https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%9D%A6%E5%B2%9B "卡坦岛")[\[23\]](#cite_note-23)。
{: id="20210222145416-ikj6b7l"}
## <a id="原理"></a>原理
{: id="20210222145416-swjw2ml"}
蒙特卡洛树搜索的每个循环包括四个步骤:[\[24\]](#cite_note-chaslot2008-24)
{: id="20210222145416-5ceerep"}
- {: id="20210222145416-uuy07ci"}选择(Selection):从根节点*R*开始,选择连续的子节点向下至叶子节点*L*。后面给出了一种选择子节点的方法,让[游戏树](https://zh.wikipedia.org/wiki/%E9%81%8A%E6%88%B2%E6%A8%B9 "游戏树")向最优的方向扩展,这是蒙特卡洛树搜索的精要所在。
- {: id="20210222145416-zwafw68"}扩展(Expansion):除非任意一方的输赢使得游戏在L结束,否则创建一个或多个子节点并选取其中一个节点*C*。
- {: id="20210222145416-oyf03ry"}仿真(Simulation):在从节点*C*开始,用随机策略进行游戏,又称为playout或者rollout。
- {: id="20210222145416-7wkiq79"}反向传播(Backpropagation):使用随机游戏的结果,更新从*C*到*R*的路径上的节点信息。
{: id="20210222145416-ozjsd10"}
每一个节点的内容代表*胜利次数/游戏次数*
{: id="20210222145416-1hndnfq"}
[![](assets/40aa069f493b417daddcc36549dc7c84.png)](https://zh.wikipedia.org/wiki/File:MCTS_%28English%29.svg)
{: id="20210222145416-c0gunkp"}
蒙特卡洛树搜索的步骤
{: id="20210222145416-jqrgo4w"}
## <a id="探索与利用"></a>探索与利用
{: id="20210222145416-ac83yju"}
选择子结点的主要困难是:在较高平均胜率的移动后,在对深层次变型的利用和对少数模拟移动的探索,这二者中保持某种平衡。第一个在游戏中平衡利用与探索的公式被称为UCT(Upper Confidence Bounds to Trees,上限置信区间算法 ),由匈牙利国家科学院计算机与自动化研究所高级研究员列文特·科奇什与[阿尔伯塔大学](https://zh.wikipedia.org/wiki/%E9%98%BF%E5%B0%94%E4%BC%AF%E5%A1%94%E5%A4%A7%E5%AD%A6 "阿尔伯塔大学")全职教授乔鲍·塞派什瓦里提出[\[6\]](#cite_note-Kocsis-Szepesvari-6)。UCT基于奥尔(Auer)、西萨-比安奇(Cesa-Bianchi)和费舍尔(Fischer)提出的UCB1公式[\[25\]](#cite_note-25),并首次由马库斯等人应用于多级决策模型(具体为[马尔可夫决策过程](https://zh.wikipedia.org/wiki/%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E5%86%B3%E7%AD%96%E8%BF%87%E7%A8%8B "马尔可夫决策过程"))[\[26\]](#cite_note-26)。科奇什和塞派什瓦里建议选择游戏树中的每个结点移动,从而使表达式 ![{\displaystyle {\frac {w_{i}}{n_{i}}}+c{\sqrt {\frac {\ln t}{n_{i}}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4d380bf26dc9feb4d3cb45c58adb1027cd575479)具有最大值。在该式中:
{: id="20210222145416-571739o"}
大多数当代蒙特卡洛树搜索的实现都是基于UCT的一些变形。
{: id="20210222145416-unn1ljp"}
## <a id="参见"></a>参见
{: id="20210222145416-pbck7tq"}
- {: id="20210222145416-ocqyylx"}[AlphaGo](https://zh.wikipedia.org/wiki/AlphaGo "AlphaGo"),一个同时使用蒙特卡洛树搜索和[深度学习](https://zh.wikipedia.org/wiki/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0 "深度学习")的相当于人类的围棋程序。
{: id="20210222145416-q54elq2"}
## <a id="参考来源"></a>参考来源
{: id="20210222145416-gp02mdj"}
1. {: id="20210222145416-1zo5jdh"}**[^](#cite_ref-1 "跳转")** [MCTS.ai: Everything Monte Carlo Tree Search](http://www.mcts.ai/?q=mcts). \[2012-02-19\].
2. {: id="20210222145416-h460wg6"}**[^](#cite_ref-Abramson_2-0 "跳转")** Abramson, Bruce. [The Expected-Outcome Model of Two-Player Games](http://academiccommons.columbia.edu/download/fedora_content/download/ac:142327/CONTENT/CUCS-315-87.pdf) (PDF). Technical report, Department of Computer Science, Columbia University. 1987 \[23 December 2013\].
3. {: id="20210222145416-q828dqx"}**[^](#cite_ref-Bruegmann_3-0 "跳转")** Brügmann, Bernd. [Monte Carlo Go](http://www.ideanest.com/vegos/MonteCarloGo.pdf) (PDF). Technical report, Department of Physics, Syracuse University. 1993.
4. {: id="20210222145416-i53wu0x"}**[^](#cite_ref-4 "跳转")** Rémi Coulom. The Monte-Carlo Revolution in Go. [Japanese-French Frontiers of Science Symposium](http://remi.coulom.free.fr/JFFoS/JFFoS.pdf) (PDF). 2008.
5. {: id="20210222145416-zg70rej"}**[^](#cite_ref-5 "跳转")** Rémi Coulom. Efficient Selectivity and Backup Operators in Monte-Carlo Tree Search. [Computers and Games, 5th International Conference, CG 2006, Turin, Italy, May 29–31, 2006. Revised Papers](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.81.6817). H. Jaap van den Herik, Paolo Ciancarini, H. H. L. M. Donkers (eds.). Springer. 2007: 72–83. [ISBN 978-3-540-75537-1](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/978-3-540-75537-1 "Special:网络书源/978-3-540-75537-1").
6. {: id="20210222145416-0afdko3"}^ [跳转至: **6.0**](#cite_ref-Kocsis-Szepesvari_6-0) [**6.1**](#cite_ref-Kocsis-Szepesvari_6-1) Kocsis, Levente; Szepesvári, Csaba. Bandit based Monte-Carlo Planning. [Machine Learning: ECML 2006, 17th European Conference on Machine Learning, Berlin, Germany, September 18–22, 2006, Proceedings. Lecture Notes in Computer Science 4212](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.1296). Johannes Fürnkranz, Tobias Scheffer, Myra Spiliopoulou (eds.). Springer. 2006: 282–293. [ISBN 3-540-45375-X](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/3-540-45375-X "Special:网络书源/3-540-45375-X").
7. {: id="20210222145416-gj7zet3"}**[^](#cite_ref-Gelly-et-al_7-0 "跳转")** Sylvain Gelly, Yizao Wang, Rémi Munos, Olivier Teytaud. [Modification of UCT with Patterns in Monte-Carlo Go](http://hal.inria.fr/docs/00/11/72/66/PDF/MoGoReport.pdf) (PDF). Technical report, INRIA. November 2006.
8. {: id="20210222145416-geyhdiz"}**[^](#cite_ref-8 "跳转")** Chang-Shing Lee, Mei-Hui Wang, Guillaume Chaslot, Jean-Baptiste Hoock, Arpad Rimmel, Olivier Teytaud, Shang-Rong Tsai, Shun-Chin Hsu, Tzung-Pei Hong. [The Computational Intelligence of MoGo Revealed in Taiwan’s Computer Go Tournaments](http://hal.inria.fr/docs/00/36/97/86/PDF/TCIAIG-2008-0010_Accepted_.pdf) (PDF). IEEE Transactions on Computational Intelligence and AI in Games. 2009, **1** (1): 73–89. [doi:10.1109/tciaig.2009.2018703](https://dx.doi.org/10.1109%2Ftciaig.2009.2018703).
9. {: id="20210222145416-jrazvmv"}**[^](#cite_ref-9 "跳转")** Markus Enzenberger, Martin Mūller. [Fuego – An Open-Source Framework for Board Games and Go Engine Based on Monte Carlo Tree Search](https://web.archive.org/web/20120529220112/https://www.cs.ualberta.ca/system/files/tech_report/2009/TR09-08_0.pdf) (PDF). Technical report, University of Alberta. 2008. ([原始内容](https://www.cs.ualberta.ca/system/files/tech_report/2009/TR09-08_0.pdf) (PDF)存档于2012-05-29).
10. {: id="20210222145416-11pligs"}**[^](#cite_ref-10 "跳转")** [The Shodan Go Bet](http://dcook.org/gobet/). \[2012-05-02\].
11. {: id="20210222145416-4e9px5x"}**[^](#cite_ref-11 "跳转")** [Sensei's Library: KGSBotRatings](http://senseis.xmp.net/?KGSBotRatings). \[2012-05-03\].
12. {: id="20210222145416-r1krnfq"}**[^](#cite_ref-12 "跳转")** Broderick Arneson, Ryan Hayward, Philip Henderson. [MoHex Wins Hex Tournament](http://webdocs.cs.ualberta.ca/~hayward/papers/rptPamplona.pdf) (PDF). ICGA Journal. June 2009, **32** (2): 114–116.
13. {: id="20210222145416-sktn559"}**[^](#cite_ref-13 "跳转")** Timo Ewalds. [Playing and Solving Havannah](http://havannah.ewalds.ca/static/thesis.pdf) (PDF). Master's thesis, University of Alberta. 2011.
14. {: id="20210222145416-tuzkrub"}**[^](#cite_ref-14 "跳转")** Richard J. Lorentz. Amazons Discover Monte-Carlo. Computers and Games, 6th International Conference, CG 2008, Beijing, China, September 29 – October 1, 2008. Proceedings. H. Jaap van den Herik, Xinhe Xu, Zongmin Ma, Mark H. M. Winands (eds.). Springer. 2008: 13–24. [ISBN 978-3-540-87607-6](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/978-3-540-87607-6 "Special:网络书源/978-3-540-87607-6").
15. {: id="20210222145416-s7jsdx2"}**[^](#cite_ref-15 "跳转")** Tomáš Kozelek. [Methods of MCTS and the game Arimaa](http://arimaa.com/arimaa/papers/TomasKozelekThesis/mt.pdf) (PDF). Master's thesis, Charles University in Prague. 2009.
16. {: id="20210222145416-2kopp0p"}**[^](#cite_ref-16 "跳转")** Xiaocong Gan, Yun Bao, Zhangang Han. Real-Time Search Method in Nondeterministic Game – Ms. Pac-Man. ICGA Journal. December 2011, **34** (4): 209–222.
17. {: id="20210222145416-j74z57a"}**[^](#cite_ref-17 "跳转")** Tom Pepels, Mark H. M. Winands, Marc Lanctot. [Real-Time Monte Carlo Tree Search in Ms Pac-Man](http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6731713). IEEE Transactions on Computational Intelligence and AI in Games. September 2014, **6** (3): 245–257. [doi:10.1109/tciaig.2013.2291577](https://dx.doi.org/10.1109%2Ftciaig.2013.2291577).
18. {: id="20210222145416-l5h3ujk"}**[^](#cite_ref-18 "跳转")** [Tactical Planning and Real-time MCTS in Fable Legends](https://web.archive.org/web/20150821022336/http://events.nucl.ai/track/decisions/#tactical-planning-and-real-time-mcts-in-fable-legends). \[2015-08-27\]. ([原始内容](http://events.nucl.ai/track/decisions/#tactical-planning-and-real-time-mcts-in-fable-legends)存档于2015-08-21).
19. {: id="20210222145416-5397cwg"}**[^](#cite_ref-19 "跳转")** [Monte-Carlo Tree Search in TOTAL WAR: ROME II's Campaign AI](https://web.archive.org/web/20170313041719/http://aigamedev.com/open/coverage/mcts-rome-ii/). \[2014-08-13\]. ([原始内容](http://aigamedev.com/open/coverage/mcts-rome-ii/)存档于2017-03-13).
20. {: id="20210222145416-cfuvmlc"}**[^](#cite_ref-20 "跳转")** Michael Buro, Jeffrey Richard Long, Timothy Furtak, Nathan R. Sturtevant. Improving State Evaluation, Inference, and Search in Trick-Based Card Games. [IJCAI 2009, Proceedings of the 21st International Joint Conference on Artificial Intelligence, Pasadena, California, USA, July 11–17, 2009](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.150.3077). Craig Boutilier (ed.). 2009: 1407–1413.
21. {: id="20210222145416-56zkyq3"}**[^](#cite_ref-21 "跳转")** Jonathan Rubin, Ian Watson. [Computer poker: A review](https://web.archive.org/web/20131001185632/http://www.cs.auckland.ac.nz/~jrub001/files/CPReviewPreprintAIJ.pdf) (PDF). Artificial Intelligence. April 2011, **175** (5–6): 958–987. [doi:10.1016/j.artint.2010.12.005](https://dx.doi.org/10.1016%2Fj.artint.2010.12.005). ([原始内容](http://www.cs.auckland.ac.nz/~jrub001/files/CPReviewPreprintAIJ.pdf) (PDF)存档于2013-10-01).
22. {: id="20210222145416-gzz31ks"}**[^](#cite_ref-22 "跳转")** C.D. Ward, P.I. Cowling. Monte Carlo Search Applied to Card Selection in Magic: The Gathering. [CIG'09 Proceedings of the 5th international conference on Computational Intelligence and Games](https://web.archive.org/web/20160528074031/http://scim.brad.ac.uk/staff/pdf/picowlin/CIG2009.pdf) (PDF). IEEE Press. 2009. ([原始内容](http://scim.brad.ac.uk/staff/pdf/picowlin/CIG2009.pdf) (PDF)存档于2016-05-28).
23. {: id="20210222145416-icnnekk"}**[^](#cite_ref-23 "跳转")** István Szita, Guillaume Chaslot, Pieter Spronck. Monte-Carlo Tree Search in Settlers of Catan. [Advances in Computer Games, 12th International Conference, ACG 2009, Pamplona, Spain, May 11–13, 2009. Revised Papers](https://web.archive.org/web/20160304082042/http://ticc.uvt.nl/icga/acg12/proceedings/Contribution100.pdf) (PDF). H. Jaap van den Herik, Pieter Spronck (eds.). Springer. 2010: 21–32 \[2016-03-15\]. [ISBN 978-3-642-12992-6](https://zh.wikipedia.org/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90/978-3-642-12992-6 "Special:网络书源/978-3-642-12992-6"). ([原始内容](http://ticc.uvt.nl/icga/acg12/proceedings/Contribution100.pdf) (PDF)存档于2016-03-04).
24. {: id="20210222145416-4tobckg"}**[^](#cite_ref-chaslot2008_24-0 "跳转")** G.M.J.B. Chaslot, M.H.M. Winands, J.W.H.M. Uiterwijk, H.J. van den Herik, B. Bouzy. [Progressive Strategies for Monte-Carlo Tree Search](https://dke.maastrichtuniversity.nl/m.winands/documents/pMCTS.pdf) (PDF). New Mathematics and Natural Computation. 2008, **4** (3): 343–359. [doi:10.1142/s1793005708001094](https://dx.doi.org/10.1142%2Fs1793005708001094).
25. {: id="20210222145416-lzvod93"}**[^](#cite_ref-25 "跳转")** Auer, Peter; Cesa-Bianchi, Nicolò; Fischer, Paul. [Finite-time Analysis of the Multiarmed Bandit Problem](https://web.archive.org/web/20140512220524/http://moodle.technion.ac.il/pluginfile.php/192340/mod_resource/content/0/UCB.pdf) (PDF). Machine Learning. 2002, **47**: 235–256 \[2016-03-15\]. [doi:10.1023/a:1013689704352](https://dx.doi.org/10.1023%2Fa%3A1013689704352). ([原始内容](http://moodle.technion.ac.il/pluginfile.php/192340/mod_resource/content/0/UCB.pdf) (PDF)存档于2014-05-12).
26. {: id="20210222145416-f7uletv"}**[^](#cite_ref-26 "跳转")** Chang, Hyeong Soo; Fu, Michael C.; Hu, Jiaqiao; Marcus, Steven I. [An Adaptive Sampling Algorithm for Solving Markov Decision Processes](http://scholar.rhsmith.umd.edu/sites/default/files/mfu/files/cfhm05.pdf?m=1449834091) (PDF). Operations Research. 2005, **53**: 126–139.
{: id="20210222145416-iwlwwx8"}
## <a id="延伸阅读"></a>延伸阅读
{: id="20210222145416-xq165cz"}
- {: id="20210222145416-r3ngdhj"}Cameron Browne, Edward Powley, Daniel Whitehouse, Simon Lucas, Peter I. Cowling, Philipp Rohlfshagen, Stephen Tavener, Diego Perez, Spyridon Samothrakis, Simon Colton. [A Survey of Monte Carlo Tree Search Methods(蒙特卡洛树搜索方法综述)](https://web.archive.org/web/20130309060408/http://www.cameronius.com/cv/mcts-survey-master.pdf) (PDF). IEEE Transactions on Computational Intelligence and AI in Games. March 2012, **4** (1). ([原始内容](http://www.cameronius.com/cv/mcts-survey-master.pdf) (PDF)存档于2013-03-09).
{: id="20210222145416-3iaujfp"}
{: id="20210222145416-9a2oadi" type="doc"}
结果:
收到,下个版本处理。
感觉是直接对原始文档进行了 HTML 转 Markdown 处理,应该进一步移除空链接,原来的 [\[1\]](#tagff-1)
中的转义字符是 Markdown 的语法要求,这里也应当处理一下。
这里的 [1]
等是通过 HTML 的锚标记做的页面内引用。如果能直接将 Markdown 的页面内引用转为思源的块引用,是最理想的。如果不能转,可考虑移除页面内引用。
我们移除锚文本为空的链接,不转引用了,抱歉。