<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.swarma.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aceyuan</id>
	<title>集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.swarma.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aceyuan"/>
	<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Aceyuan"/>
	<updated>2026-11-02T20:55:05Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46955</id>
		<title>袁冰</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46955"/>
		<updated>2025-10-13T07:44:38Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 单位 ==&lt;br /&gt;
&lt;br /&gt;
集智科学研究中心&lt;br /&gt;
&lt;br /&gt;
== 教育背景 ==&lt;br /&gt;
&lt;br /&gt;
*1993-1996，硕士，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
*1989-1996，本科，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
&lt;br /&gt;
== 工作背景 ==&lt;br /&gt;
&lt;br /&gt;
- 电商系统，供应链、价格预测模型研发&lt;br /&gt;
- 电信系统，中间件软件研发&lt;br /&gt;
- 通讯行业，网络管理、计费系统软件研发&lt;br /&gt;
&lt;br /&gt;
== 研究兴趣 ==&lt;br /&gt;
&lt;br /&gt;
因果涌现，复杂系统多尺度自动建模，因果科学，机器学习&lt;br /&gt;
&lt;br /&gt;
== 学术论文 ==&lt;br /&gt;
&lt;br /&gt;
Bing Yuan, Jiang Zhang, Aobo Lyu, et al. Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies. Entropy, 2024, 26(2024): 108&lt;br /&gt;
&lt;br /&gt;
Jiang Zhang, Ruyi Tao, K. Leong, et al. Dynamical reversibility and a new theory of causal emergence based on SVD. npj Complexity, 2024, 2(1): 3&lt;br /&gt;
&lt;br /&gt;
Mingzhe Yang, Zhipeng Wang, Kaiwei Liu, et al. Finding emergence in data by maximizing effective information. National Science Review, 2024, nwae279&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Bing Yuan, Jiang Zhang. An Exact Theory of Causal Emergence for Linear Stochastic Iteration Systems. Entropy, 2024, 26(8): 618&lt;br /&gt;
&lt;br /&gt;
Lyu, A., Yuan, B., Deng, O., Yang, M., Clark, A., &amp;amp; Zhang, J. (2023). System Information Decomposition.&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Linli Pan, Zhipeng Wang, et al. SVD-based Causal Emergence for Gaussian Iterative Systems. arXiv:2502.08261, 2025&lt;br /&gt;
&lt;br /&gt;
== 学术会议 ==&lt;br /&gt;
&lt;br /&gt;
2024.05， 第八届中国系统科学大会，口头报告&lt;br /&gt;
&lt;br /&gt;
== 导师及合作者 ==&lt;br /&gt;
&lt;br /&gt;
张江，王志鹏，杨明哲，刘凯威，荣英淇，吕奥博，梁京昊，崔鹏，牟牧云，陶如意&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46954</id>
		<title>袁冰</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46954"/>
		<updated>2025-10-13T07:30:53Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 教育背景 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 单位 ==&lt;br /&gt;
&lt;br /&gt;
集智科学研究中心&lt;br /&gt;
&lt;br /&gt;
== 教育背景 ==&lt;br /&gt;
&lt;br /&gt;
*1993-1996，硕士，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
*1989-1996，本科，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
&lt;br /&gt;
== 研究兴趣 ==&lt;br /&gt;
&lt;br /&gt;
因果涌现，复杂系统多尺度自动建模，因果科学，机器学习&lt;br /&gt;
&lt;br /&gt;
== 学术论文 ==&lt;br /&gt;
&lt;br /&gt;
Bing Yuan, Jiang Zhang, Aobo Lyu, et al. Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies. Entropy, 2024, 26(2024): 108&lt;br /&gt;
&lt;br /&gt;
Jiang Zhang, Ruyi Tao, K. Leong, et al. Dynamical reversibility and a new theory of causal emergence based on SVD. npj Complexity, 2024, 2(1): 3&lt;br /&gt;
&lt;br /&gt;
Mingzhe Yang, Zhipeng Wang, Kaiwei Liu, et al. Finding emergence in data by maximizing effective information. National Science Review, 2024, nwae279&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Bing Yuan, Jiang Zhang. An Exact Theory of Causal Emergence for Linear Stochastic Iteration Systems. Entropy, 2024, 26(8): 618&lt;br /&gt;
&lt;br /&gt;
Lyu, A., Yuan, B., Deng, O., Yang, M., Clark, A., &amp;amp; Zhang, J. (2023). System Information Decomposition.&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Linli Pan, Zhipeng Wang, et al. SVD-based Causal Emergence for Gaussian Iterative Systems. arXiv:2502.08261, 2025&lt;br /&gt;
&lt;br /&gt;
== 学术会议 ==&lt;br /&gt;
&lt;br /&gt;
2024.05， 第八届中国系统科学大会，口头报告&lt;br /&gt;
&lt;br /&gt;
== 导师及合作者 ==&lt;br /&gt;
&lt;br /&gt;
张江，王志鹏，杨明哲，刘凯威，荣英淇，吕奥博，梁京昊，崔鹏，牟牧云，陶如意&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E7%94%A8%E6%88%B7:Aceyuan&amp;diff=46953</id>
		<title>用户:Aceyuan</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E7%94%A8%E6%88%B7:Aceyuan&amp;diff=46953"/>
		<updated>2025-10-13T07:29:13Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：Aceyuan移动页面用户:Aceyuan至袁冰&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[袁冰]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46952</id>
		<title>袁冰</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46952"/>
		<updated>2025-10-13T07:29:13Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：Aceyuan移动页面用户:Aceyuan至袁冰&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 单位 ==&lt;br /&gt;
&lt;br /&gt;
集智科学研究中心&lt;br /&gt;
&lt;br /&gt;
== 教育背景 ==&lt;br /&gt;
&lt;br /&gt;
1993-1996，硕士，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
1989-1996，本科，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
&lt;br /&gt;
== 研究兴趣 ==&lt;br /&gt;
&lt;br /&gt;
因果涌现，复杂系统多尺度自动建模，因果科学，机器学习&lt;br /&gt;
&lt;br /&gt;
== 学术论文 ==&lt;br /&gt;
&lt;br /&gt;
Bing Yuan, Jiang Zhang, Aobo Lyu, et al. Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies. Entropy, 2024, 26(2024): 108&lt;br /&gt;
&lt;br /&gt;
Jiang Zhang, Ruyi Tao, K. Leong, et al. Dynamical reversibility and a new theory of causal emergence based on SVD. npj Complexity, 2024, 2(1): 3&lt;br /&gt;
&lt;br /&gt;
Mingzhe Yang, Zhipeng Wang, Kaiwei Liu, et al. Finding emergence in data by maximizing effective information. National Science Review, 2024, nwae279&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Bing Yuan, Jiang Zhang. An Exact Theory of Causal Emergence for Linear Stochastic Iteration Systems. Entropy, 2024, 26(8): 618&lt;br /&gt;
&lt;br /&gt;
Lyu, A., Yuan, B., Deng, O., Yang, M., Clark, A., &amp;amp; Zhang, J. (2023). System Information Decomposition.&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Linli Pan, Zhipeng Wang, et al. SVD-based Causal Emergence for Gaussian Iterative Systems. arXiv:2502.08261, 2025&lt;br /&gt;
&lt;br /&gt;
== 学术会议 ==&lt;br /&gt;
&lt;br /&gt;
2024.05， 第八届中国系统科学大会，口头报告&lt;br /&gt;
&lt;br /&gt;
== 导师及合作者 ==&lt;br /&gt;
&lt;br /&gt;
张江，王志鹏，杨明哲，刘凯威，荣英淇，吕奥博，梁京昊，崔鹏，牟牧云，陶如意&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46951</id>
		<title>袁冰</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%A2%81%E5%86%B0&amp;diff=46951"/>
		<updated>2025-10-13T07:27:22Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：建立内容为“== 单位 ==  集智科学研究中心  == 教育背景 ==  1993-1996，硕士，华中科技大学，固体电子学系，电子材料与元器件专业 1989-199…”的新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 单位 ==&lt;br /&gt;
&lt;br /&gt;
集智科学研究中心&lt;br /&gt;
&lt;br /&gt;
== 教育背景 ==&lt;br /&gt;
&lt;br /&gt;
1993-1996，硕士，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
1989-1996，本科，华中科技大学，固体电子学系，电子材料与元器件专业&lt;br /&gt;
&lt;br /&gt;
== 研究兴趣 ==&lt;br /&gt;
&lt;br /&gt;
因果涌现，复杂系统多尺度自动建模，因果科学，机器学习&lt;br /&gt;
&lt;br /&gt;
== 学术论文 ==&lt;br /&gt;
&lt;br /&gt;
Bing Yuan, Jiang Zhang, Aobo Lyu, et al. Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies. Entropy, 2024, 26(2024): 108&lt;br /&gt;
&lt;br /&gt;
Jiang Zhang, Ruyi Tao, K. Leong, et al. Dynamical reversibility and a new theory of causal emergence based on SVD. npj Complexity, 2024, 2(1): 3&lt;br /&gt;
&lt;br /&gt;
Mingzhe Yang, Zhipeng Wang, Kaiwei Liu, et al. Finding emergence in data by maximizing effective information. National Science Review, 2024, nwae279&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Bing Yuan, Jiang Zhang. An Exact Theory of Causal Emergence for Linear Stochastic Iteration Systems. Entropy, 2024, 26(8): 618&lt;br /&gt;
&lt;br /&gt;
Lyu, A., Yuan, B., Deng, O., Yang, M., Clark, A., &amp;amp; Zhang, J. (2023). System Information Decomposition.&lt;br /&gt;
&lt;br /&gt;
Kaiwei Liu, Linli Pan, Zhipeng Wang, et al. SVD-based Causal Emergence for Gaussian Iterative Systems. arXiv:2502.08261, 2025&lt;br /&gt;
&lt;br /&gt;
== 学术会议 ==&lt;br /&gt;
&lt;br /&gt;
2024.05， 第八届中国系统科学大会，口头报告&lt;br /&gt;
&lt;br /&gt;
== 导师及合作者 ==&lt;br /&gt;
&lt;br /&gt;
张江，王志鹏，杨明哲，刘凯威，荣英淇，吕奥博，梁京昊，崔鹏，牟牧云，陶如意&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45523</id>
		<title>竞争与合作——动态博弈模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45523"/>
		<updated>2025-07-11T05:15:16Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 程序简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
|description=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=程序简介=&lt;br /&gt;
* 名    称： 竞争与合作——动态博弈模拟&lt;br /&gt;
* 作    者： 盛昭瀚－Mathematica版本，[[Jake]]－Java版本&lt;br /&gt;
* 源程序下载： pdcelluar.zip&lt;br /&gt;
&lt;br /&gt;
竞争与合作——动态博弈模拟系统的javascript程序（下载：[https://wiki.swarma.org/applets/pdcelluar-web/pdcelluar.zip pdcelluar.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/pdcelluar-web/pdcelluar.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 700px; height: 440px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序说明=&lt;br /&gt;
    &lt;br /&gt;
这是一个多个企业参与的竞争环境。每个格子（蓝色的或红色的）都是一个企业，它们在随机的游走着，并会与其它的格子相遇，当与其它的企业相遇的时候，他们就进行囚徒困境博弈，其中蓝色的格子表示采用合作的策略，红色的格子表示采用背叛的策略。根据博弈的规则，每个企业都会有一个盈利数表示收益。所有的企业都向学习它的邻居中盈利最多的企业的策略。你会看到，在这样的环境中，竞争或者合作会自发的演化。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=操作说明=&lt;br /&gt;
&lt;br /&gt;
* 点击开始按钮，模拟程序开始运行。格子会随机的游走，并不断向他们的环境学习。&lt;br /&gt;
* 点击“单步运行”表示每次只进行一步，这方便我们的观察。&lt;br /&gt;
* 选择不同的显示方法可以从不同的角度观察企业的运动，其中策略是观察整个合作与不合作策略的分布，id是跟踪每个企业，移动方向观察每个企业下一步将移动向何方。 &lt;br /&gt;
* 点击“设置”按钮可以更改一些程序的属性。点击“查看”可以观察系统总的时间-状态图，你会看到使用不同策略的企业在时间上的分布。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=设置参数的说明=&lt;br /&gt;
    &lt;br /&gt;
* 世界的尺寸：程序中一共有多少方格，方格数越大运行越慢；&lt;br /&gt;
* 企业的总比例：企业数占总的方格数的比例；&lt;br /&gt;
* 合作者的比例：在企业中，初始时刻合作者占的比例；&lt;br /&gt;
* 邻居类型：在两种邻居类型中选择一种，两种类型示意图如下：其中黑色的表示当前的方格，黄色的表示他的邻居。&lt;br /&gt;
[[File:图1.jpg|800px]]&lt;br /&gt;
* 刷新间隔：每次刷新世界演化几步。比如刷新间隔为2，则每走两步才刷新视图一次。&lt;br /&gt;
* 博弈规则：确定当合作者与不合作者相遇的时候不合作者能够得到的收益数（&amp;gt;1）。&lt;br /&gt;
&lt;br /&gt;
=规则说明=&lt;br /&gt;
    &lt;br /&gt;
个体：每个企业可以用一个三元组表示(s,m,d)。其中s为企业当前使用的规则，s只能取1（表示合作），2（表示不合作）两种状态。m表示与该企业的所有邻居分别进行囚徒困境博弈以后的总盈利。d表示随机选择的移动方向（在vonNerman类型中有上、下、左、右4个方向，Moore类型有上、下、左、右、左上、左下、右上、右下8个方向）。程序中黑色的区域表示空区域，没有被企业占领。如果某个企业已经占领了一个方格，则其它企业不能介入。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=博弈规则： 每个企业都跟它的邻居进行囚徒困境博弈=&lt;br /&gt;
&lt;br /&gt;
囚徒困境博弈，博弈的矩阵如下表所示：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| (企业1，企业2) || 合作 || 不合作&lt;br /&gt;
|-&lt;br /&gt;
| 合作 || 1,1 || 0,p&lt;br /&gt;
|-&lt;br /&gt;
| 不合作 || p,0 || 0,0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
这个矩阵为简化了的囚徒困境博弈的形式。即，如果两个企业都采取合作的策略，那么它们各得1单位收益，如果一方合作另一方不合作， 那么合作的一方吃亏得益为0，不合作的一方占便宜，得益为p（&amp;gt;1）；双方都不合作那么都不收益。    &lt;br /&gt;
&lt;br /&gt;
学习规则：每个企业在每次循环中都跟它周围的邻居中这次循环的收益最多的企业学习，把它的策略拷贝过来作为自己的。即如果四个邻居中收益最高的是背叛，那么这个企业下一个循环也选择背叛策略，如果收益最高的是合作，那么下一时刻，该企业也采取合作策略。&lt;br /&gt;
&lt;br /&gt;
移动规则：每个企业在每次循环的时候都随机的选择一个方向，如果这个方向指向的方格为空，并且没有其他企业指向这个方格，那么下一时刻它就移动到那个格子中，否则它原地不动。&lt;br /&gt;
&lt;br /&gt;
规则的运行：系统采用离散时间运行，每个周期内，所有的企业先按照自己的s取值也就是策略跟每个邻居都进行博弈确定它的收入m；然后每个企业开始在4个邻居中寻找最大的m对应的企业，学习它的策略作为下一周期的策略s'；然后企业根据移动规则向它的临近方格移动。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=集体涌现行为=&lt;br /&gt;
    &lt;br /&gt;
根据多次系统运行规律观察，得到的几条规律如下：&lt;br /&gt;
# 系统最后的演化结果是依赖于初始分布的；&lt;br /&gt;
# 企业的总比例越大，合作者越容易存活，不合作者将趋于灭亡。相反，企业的比例越小，合作者越容易转变成不合作者；&lt;br /&gt;
# 相同的企业往往集中在某几个特定的区域；&lt;br /&gt;
# 系统演化的结果是对博弈规则敏感的，如果m数值设置的越大，则合作者越不容易占上风；&lt;br /&gt;
# 每个企业的邻居数越多，则合作策略越容易占上风；&lt;br /&gt;
# 不同的参数设置会导致不同的结果，一种情况是最后全是竞争的企业，一种情况是全是合作的企业，还有可能合作与竞争长时间共存，并且演化规则特别复杂。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=对这现实经济环境中的指导意义=&lt;br /&gt;
# 只有企业和企业之间建立起比较完善的交互体系的时候，合作的可能性才会增强。&lt;br /&gt;
# 同类之间连成一片可以抵御外来者的进攻。&lt;br /&gt;
# 囚徒困境博弈是一种竞争关系的博弈，企业和企业之间本质的关系是竞争的，但是合作却能在一定的条件下自发的演化出来。因此，竞争中的合作是一种多个个体相互学习适应过程中得到的。&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;br /&gt;
[[category:博弈模型]]&lt;br /&gt;
[[category:旧词条迁移]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E4%BA%BA%E5%B7%A5%E6%A8%A1%E6%8B%9F%E8%82%A1%E5%B8%82&amp;diff=45522</id>
		<title>人工模拟股市</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E4%BA%BA%E5%B7%A5%E6%A8%A1%E6%8B%9F%E8%82%A1%E5%B8%82&amp;diff=45522"/>
		<updated>2025-07-11T03:53:51Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 程序运行说明 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工社会, 人工股市,遗传算法&lt;br /&gt;
|description=人工社会, 人工股市,遗传算法&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
# 程序名称：人工模拟股市&lt;br /&gt;
# 作者：Santa Fe Instutive(Swarm版)，[[jake]](java版)&lt;br /&gt;
# 源代码：[http://wiki.swarma.net/index.php/File:ASM_swarm.zip ASM_swarm.zip]  [http://wiki.swarma.net/index.php/File:asm_java.zip.zip asm_java.zip]&lt;br /&gt;
&lt;br /&gt;
[[File:14.gif|right|frame|人工模拟股市]]&lt;br /&gt;
&lt;br /&gt;
=程序简介=&lt;br /&gt;
&lt;br /&gt;
人工股市（Artificial Stock Market，简称ASM）是模拟股市运作的一个程序。在这个电脑中的虚拟市场中，若干被称为交易者的人工智能程序(Agent)通过观察它们所在的数字世界中股价和股息的不断变换而做出预测，并且根据这些预测做出购买股票与否以及购买股票数量的决策。反过来，所有的交易者的决策又决定了股票的价格，这样，整个的股票交易市场就构成了一个自我封闭的计算系统。同时，这些交易者都具有学习的能力，可以根据以前预测的成功或者失败对自己的决策进行调整，并且通过一种被称为遗传算法的方法产生创新能力。总之，ASM是一个电脑中不断进化的虚拟股票市场！通过研究ASM，我们可以更好的理解现实世界的行为，并且它提供了一个很好的现实股市的隐喻。&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
点击下排的'''开始'''按钮，则股市开始运作。首先，程序需要对每个Agent和整个世界进行初始化，然后才进入ASM的实际运行阶段，这个时候，你可以点击'''曲线图'''、'''柱状图'''等按钮察看世界运行的情况，得到价格、股息等信息的直观显示。当点击'''结束'''的时候，股市停止运行，这个时候你可以设置一些参数，再次点击'''开始'''可以在新的参数下运行程序。察看规则部分可以让你看到每个Agent的内部规则，并且可以看到它们与真实世界价格、股息、编码的对比情况。点击暂'''停按'''钮后，你还可以'''单步运行股市'''。&lt;br /&gt;
&lt;br /&gt;
人工模拟股市的javascript程序（下载：[https://wiki.swarma.org/applets/asm_java/artificial_stock_market.zip artificial_stock_market.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/asm_java/artificial_stock_market.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1200px; height: 1630px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=详细说明=&lt;br /&gt;
	&lt;br /&gt;
1.参数说明:&lt;br /&gt;
*遗传算法概率：每隔多长周期执行一次遗传算法。&lt;br /&gt;
*变异率：执行遗传算法的时候，变异操作的概率。&lt;br /&gt;
*交叉率：执行遗传算法的时候交叉操作的概率。&lt;br /&gt;
*Agent的数量：进行股票交易的交易者数量。&lt;br /&gt;
*规则的数量：每个Agent所拥有的预测规则的数量。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.图形说明:&lt;br /&gt;
&lt;br /&gt;
世界的状态显示的是有关整个股市的状况，包括股价、股息等等，风险中性价格即股息/利息的值。Agent的状况则显示了每个Agent的变量的变化趋势。曲线图画出了单一变量与时间的关系，柱状图主要显示了各个变量的Agent之间的对比情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.关于图形操作:&lt;br /&gt;
&lt;br /&gt;
曲线图，可以在一个坐标系下察看两种变量的情况。蓝色表示一个变量，红色表示另一个，可以从下面的选择框选择不同的变量。关于柱状图，可以变换不同的变量察看情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4.关于规则察看的操作:&lt;br /&gt;
&lt;br /&gt;
在上面列表中显示了当前的Agent拥有的所有的规则，选择最下方的Agent编号，可以察看不同的Agent的规则，选择中间的察看方式：全部规则还是激活规则则可以分别察看当前Agent的所有规则和被激活的规则。点击列表框中的一个规则，则在下面的文本框中显示了该规则的具体对应的条件部分的编码，和代表的预测意义。世界状态则表示了当前世界股票价格、股息等变量的二进制编码。下面显示的价格和股息都是当前股市的股价和股息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=关于本程序=&lt;br /&gt;
该程序是作者对SFI的ASM2.2版本运用java进行重写和改造。其中有不少对源程序的改动，可能会造成一些运行结果与源程序的不同，也可能存在着一些bug，所以我们提供了该java版本程序的下载以及Swarm源程序的下载&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
关于人工股市的具体原理请看下面的文章：&lt;br /&gt;
&lt;br /&gt;
=人工股市(ASM)介绍= &lt;br /&gt;
&lt;br /&gt;
张江&lt;br /&gt;
&lt;br /&gt;
==经济系统、股票交易系统中的复杂性==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
新古典主义经济学告诉我们，我们赖以生存的经济系统是由若干被称作“经济人”的个体组成的，这些“经济人”具有完全的理性、并且对整个市场的具有完全信息，因此经济学家证明了，市场最终将处于一种均衡的状态，在这种状态下需求量刚好等于供给量，并且在没有外部的干扰条件下，系统将静止不再演变。&lt;br /&gt;
&lt;br /&gt;
然而看看我们身处的经济系统，它并不是理论家们预言的那个样子。首先经济中的个体并不是全知全能且具有完全理性的，当然这些个体也不是完全随机相互作用的一群无规则运动的分子，他们更像是处于完全理性与随机性之间的一种状态。关键是，这些个体是具有学习功能的，他们并不是像一台计算的机器一样总是做出理性的判断和决策，而是通过经济活动的实践逐渐积累经验，通过与其周围有限环境内的其它经济个体的交互中，慢慢的适应，从而进行有限理性的行为。当环境发生变化的时候，他们往往可以调整自己的策略，从而使得自己能够尽量的谋得经济利益。由这样的适应性个体组织成的经济系统是一个复杂的系统，而且这个系统会因为每个个体的不断调整从而永不停息的变化着，似乎现实的经济系统从来不会平衡下来，而是象一个有机的生命体一样始终处于复杂的运动变化当中。&lt;br /&gt;
&lt;br /&gt;
复杂系统的方法[1]致力于用一种全新的观点理解经济系统中的复杂性。在微观上，首先，按照前面的叙述，人们扬弃了完全理性、全知全能的“经济人”的假设取而代之的是能够学习和适应环境的运用归纳法决策的有限理性人。其次，在微观上，人们用“规则”代替计算来给每一个个体进行建模；在宏观上，人们扬弃了简单的还原论思想—即认为研究清楚系统组分的行为就相当于认识了系统的行为思想，把经济系统就看成是由若干相互作用的个体进行复杂交互的复杂系统；在方法论上，人们扬弃了纯粹的数学推理的方法，取而代之的是计算机模拟技术。&lt;br /&gt;
&lt;br /&gt;
股市无非是若干复杂经济系统中的一个特例。传统的股市模型假设股票交易者根据全局的行情进行完全理性的判断，并利用理性的预期进行决策。在这种模型的假设前提下，股市更像一个“死”的物理系统。而现实的股市远不是如此，人们常常用诸如“股市持续低迷”、“狂涨”等等类似描述人类心理现象的语言描述股市，而且还常常出现类似“黑色星期五”这种有关股市心理的现象。由此可见，我们需要用复杂系统的理论来对其进行重新的理解，看看能够得到什么结果。“人工股市”[2](Artificial Stock Market简称ASM)是由圣塔菲研究所（Santa Fe Institute）的W.Brian Arthur和John Holland于1987年提出来的一个模拟股市运作的计算机系统，它用具有学习能力的AI（人工智能）程序代替全知全能的股票交易者，在电脑中重建一个模拟的股票交易环境，看看在这样的计算机世界中能不能得到与现实股市相近的数码股市的拷贝。&lt;br /&gt;
&lt;br /&gt;
在下面的讨论中，第2节概述了人工股市系统的运作机理，第3节详细介绍模型的内部结构，其中包括股市环境、相互作用的作用者模型、学习算法等等细节问题。第4节介绍系统的运行情况与仿真结果，看看这样一种有归纳的作用这形成的股市系统到底有什么神奇之处。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ASM系统模型概述==&lt;br /&gt;
&lt;br /&gt;
===系统结构===&lt;br /&gt;
&lt;br /&gt;
ASM系统主要分成两个大部分，一部分是股票交易者（我们称其为Agent，意为智能代理），另一部分是每个Agent所面临的环境。它主要模拟了单一股票的交易情况（也就是说市场上仅仅有一种股票发行）。&lt;br /&gt;
&lt;br /&gt;
其中Agent模型又是由预测规则、效用函数、财富状态以及参数集合四个部分组成的。预测规则是形如if [condition] then [result]这样的规则，其中[condition]部分都是经过编码后的01序列抽象信息，[result]是当agent采用当前规则所采取的动作。为了模拟现实中的交易者的多样性，每个Agent都有一组不同的规则，而且学习效应是在规则层次体现的。具体说来，就是Agent通过不断的运用规则对股票的价格进行预测从而进行买入或者卖出或者持有的决策，然后根据预测的后果来对他们运用的规则进行评价，从而确定每个规则作用的排序，然后运用一种称为“遗传算法”的方法模拟大自然的优胜劣汰，淘汰掉评价不好的规则，同时产生新的更好的规则。Agent的效用函数表达了每个Agent对股票价格以及股票持有量之间的偏好，给定当前的股票价格、该Agent对未来股价的预期就可以得到Agent对股票持有的需求量。为了设计简便，系统给每个Agent设计了同一类型的效用函数。Agent的财富状态主要包括当前该Agent的股票持有量和现金量。Agent的参数集合定义了Agent在运行过程中的不同行为参数，包括效用函数的具体参数、遗传算法的参数、最大（小）持有股票量等等。&lt;br /&gt;
&lt;br /&gt;
ASM的环境主要包括下列几个部分：股市的状态以及状态的历史信息、一个分析专家、一个随机股息流（可以认为单一股票的股息是由外部不确定信息确定的）、股市的参数集合。 具体说来，股市的状态包括了股票当前的价格、股息、利率、风险中性价格（也就是利率与股息的比值）、股票交易量。状态历史就是股市状态在最近几期内的历史纪录，其中历史的记录长度是事先由用户给定的，系统还会根据当前的股市状态以及状态的历史信息进行编码从而得到一串01编码传递给Agent，Agent根据这些编码可以查找哪条规则的condition部分与其匹配从而激活这条规则进行预测。分析专家的作用是根据市场供求关系确定股票的交易价格等作用。随机股息流就是一个满足正态的独立同分布的随机过程。参数集合定义了股市运作过程中的一些参数，包括历史纪录的长度、正态分布的具体参数等等。&lt;br /&gt;
&lt;br /&gt;
综合起来，我们可以得到下面的三个图分别来说明Agent的结构、股市环境的结构，以及Agent与股市的相互作用结构。&lt;br /&gt;
&lt;br /&gt;
[[File:图片.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===系统运行===&lt;br /&gt;
&lt;br /&gt;
系统的运行是在离散的时间基础上周期性的不断演化的。在每个周期内，Agent要完成决策、学习的运作，环境完成交易并保证股票市场的出清。Agent在进行决策时需要根据股市上的信息不断利用自己的规则对股票的价格进行预测，然后根据这个预测的结果与自己的偏好进行是应该抛出股票还是买进股票或者是持有当前的股票坐吃股息的决策。如果Agent抛出股票，这能够为他在短期内赚取一定量的现金，并且持有现金可以让他在每个周期内赚取现金的利息，但是同时他的股票减少了，因此它损失了股票的股息；如果Agent买进了股票，那么它的现金少了并损失了现金的利息，但同时它能够争取更多的股息；如果Agent不采取任何动作，虽然它能够坐吃股息和利息但是它同时要被征税，征税是根据Agent的总资产即股票价值与现金价值的总和决定的。因此从整体上，每个Agent必须对自己是否买进或者卖出股票做出决策，同时征税保证了每个Agent不能永远停止不动（否则它的财富会被征税征收光）。而因为股息是一个随机过程上下波动，所以每个Agent对股票的需求量和供给量就会随时间变化，通过需求与供给的相互竞争的结果决定了股票的当前价格，而股票的价格又反过来决定了每个Agent的财富拥有量。因此我们看到，我们得到了一个封闭的系统，在这个系统中Agent的决策决定了系统的环境状况，环境的状况同时又影响了每个生存在这个环境中的Agent拥有的财富。&lt;br /&gt;
&lt;br /&gt;
当系统多次循环以后，每个Agent便有机会对自己所采用过的规则进行评价。因为在每一种环境中，Agent都有机会选择很多与当前情况匹配的规则做出决策，而显然这些规则有些能够很好的预测了股票的价格，有些不能够预测，因此这就造成了规则按照评价结果的排序。利用遗传算法对这些规则进行优胜劣汰并创造新的规则就能完成Agent的学习过程。Agent在学习变得越来越聪明的同时也会影响整体股市环境，而上文已经说了股市翻过来会再次影响Agent的行为，这样我们可以看到，人工股市是一个多个Agent共同进化的生态环境。&lt;br /&gt;
&lt;br /&gt;
在系统运行的初始时刻，我们先给每个Agent分配了等量的现金和股票持有量，让他们有一个平等竞争的开始，但随着系统的运行，有些Agent能够对环境的变化做出积极的反应，有些不行，因此贫富差距开始加大，总之整个系统的动态只有在运作系统后才能看出来，运用ASM我们可以观察到很多真实股市中的有趣现象。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ASM的系统结构和算法==&lt;br /&gt;
&lt;br /&gt;
上一节，我们简单的介绍了ASM的结构和运行机理，对人工股市有了一个感性的认识，下面我们要详细的介绍人工股市的内部结构和具体的运行算法。详细介绍主要分环境和个体两部分进行。&lt;br /&gt;
&lt;br /&gt;
===股市环境===&lt;br /&gt;
&lt;br /&gt;
在上一节我们已经大概介绍了股市的环境由股市的状态以及状态的历史信息、分析专家、随机股息流、股市的参数集合这五个部分组成，下面分别进行介绍：&lt;br /&gt;
&lt;br /&gt;
1.股市状态及状态历史编码&lt;br /&gt;
&lt;br /&gt;
在ASM模型中，股市的状态包括下面这些量：当前的仿真周期（用t表示）、t周期内的股票价格（用pt表示）、当前股票的股息（用dt表示）、当前的现金利息率（用r表示，在我们的模型中假设r不随时间变化）。这些状态信息中，只有pt和dt是常常随时间变化的，他们都可以用实数来表示，这样状态的历史就记载了从t-h期到t期的pt和dt的历史信息。所以，状态历史可以用下面的集合表示：&lt;br /&gt;
&lt;br /&gt;
 [[File:(1).png|400px]]   （1）&lt;br /&gt;
&lt;br /&gt;
其中参数h为历史记忆的深度，t-h期以外的状态将被“遗忘”，每进行一个新的周期则历史信息更新一次。&lt;br /&gt;
&lt;br /&gt;
为了能够让Agent使用的规则识别出当前环境的整个运行状态及信息，我们需要对状态历史信息进行编码。在这里我们用一个60位长的二进制串对股市的状态历史编码，其中这个二进制串的一个位就代表股市历史Ht符合一个描述判断。具体说来，我们可以采用一组诸如“股息上升”、“股息在5个周期内的平均值持续上升”、“当前股息大于最近100个周期内的股息平均值”以及“价格在4个周期内一直上升”、“价格*利率与股息的比大于1/2”等等这样的语句来描述股市状态以及历史信息，这样每一个语句就构成了对股市的一个判断，所以我们把一个二进制位对应一个语句。这样，就得到了一个环境编码和与其对应的语句集合：&lt;br /&gt;
&lt;br /&gt;
环境编码： [[File:2.png|100px]]其中[[File:10.png|150px]]           &lt;br /&gt;
&lt;br /&gt;
语句集合： [[File:4.png|100px]]其中[[File:11.png|20px]] 是一个语句，[[File:5.png|100px]]&lt;br /&gt;
&lt;br /&gt;
两个向量有对应关系，如果[[File:6.png|60px]]表示si语句被满足，反之  [[File:7.png|60px]]  为si不满足。系统的环境状态模块部分负责根据当前的股市状态以及状态的历史翻译成不同的语句判断，并形成二进制编码。在实验中，语句一共可以分成10个组分别记录了股息走势、股息均值的走势、当前股息与其均值的大小关系、股息短期均值与长期均值的关系、股息与股息总体均值之间的比例([[File:8.png|60px]])、股票价格*利率/股息（[[File:9.png|40px]]）、股价的走势、股价均值的走势、股价与不同时期均值的关系、股票价格短期均值与长期均值的关系等信息。&lt;br /&gt;
&lt;br /&gt;
2.分析专家&lt;br /&gt;
&lt;br /&gt;
股市分析专家的作用为：在每个仿真周期内，收集所有Agent的股票需求量并按照一定的规则设定股票的价格，使得在这个价格下，股票市场能够得到出清（也就是说让需求量与供给量达到均衡）。&lt;br /&gt;
&lt;br /&gt;
我们假设系统中一共有n个交易者（即Agent），并且发行的单一股票数量为N保持不变，假设交易者Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;在t时刻对股票的持有量需求用X&amp;lt;small&amp;gt;i,t&amp;lt;/small&amp;gt;表示（包括Agent &amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;手中原来就持有的股票数）。这样，因为股票发行的总量不变为N，&lt;br /&gt;
&lt;br /&gt;
则显然有： [[File:(2).png|100px]]  （2）&lt;br /&gt;
&lt;br /&gt;
但是在仿真的任意一个周期里，每个Agent的股票需求量和供给量不会一下子达到平衡，因此分析专家的职能就是负责规定当前股票的交易价格Pt并传递给每个交易者，交易者再根据新的交易价格Pt修改对这个股票价格和股息的预期，从而根据效用函数重新计算需求量。这样如果交易量没达到平衡则在按照上述步骤重新计算，直到平衡为止。如果我们设Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;对价格的预期为E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;)，这表示在t时刻，Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;根据当前的信息I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;（包括股票价格、股息）对t+1期的股价及股息做出预测为E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;+d&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;)，Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;的效用函数决定了在给定股价、股价的预期的情况下该Agent对股票的需求量X&amp;lt;sub&amp;gt;i,t&amp;lt;/sub&amp;gt;，简单的表示成：&lt;br /&gt;
&lt;br /&gt;
X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,t=U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(pt, E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(P&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;+D&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;))    （3）&lt;br /&gt;
&lt;br /&gt;
那么分析家解决市场出清的算法可以表示如下：&lt;br /&gt;
&lt;br /&gt;
(1)将当前的P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;传递给每个Agent，并让他们根据X&amp;lt;sub&amp;gt;i,t&amp;lt;/sub&amp;gt;=U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;, E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;))计算股票持有的需求量；&lt;br /&gt;
&lt;br /&gt;
(2)如果市场出清，即，（为事先给定的一个小量），则算法结束返回均衡价格P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;，以及每个Agent的真实股票持有量即x&amp;lt;sub&amp;gt;i,t+1&amp;lt;/sub&amp;gt;；&lt;br /&gt;
&lt;br /&gt;
(3)否则判断是否大于或小于0，根据所有Agent的总和边际效用（）调整股票价格即根据重新计算P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;，返回第1步。&lt;br /&gt;
&lt;br /&gt;
3.随机股息流&lt;br /&gt;
&lt;br /&gt;
    在ASM模型中，股息被认为是一个由外部确定的随机过程，具体的，我们用下面式子计算股息：&lt;br /&gt;
&lt;br /&gt;
        （4）&lt;br /&gt;
&lt;br /&gt;
    其中表示当期t的股息；表示股息波动的基准线由用户事先确定；可以理解为一种惯性系数，也就是说当期的股息与上期的股息相关的程度，也是由用户事先给定；是一个满足分布即标准正态分布的随机过程。&lt;br /&gt;
&lt;br /&gt;
    根据上面的式子，系统不断计算t时刻的股息流注入系统中。&lt;br /&gt;
   另外，关于参数集合部分就是对各部分参数的付值过程，在此处不进行详细讨论。&lt;br /&gt;
&lt;br /&gt;
===Agent内部结构与算法===&lt;br /&gt;
&lt;br /&gt;
    Agent是股票交易者的模型，是真实世界中的股票交易者的模拟，它们是一些具有学习和创新能力的人工智能程序，每个Agent都由一组规则、效用函数和参数集合构成，这其中若干规则是完成Agent的决策、学习、创新的主要部分，在下面的部分中我们首先简单介绍效用函数，然后详细介绍规则的构成以及学习算法和运作机理等。&lt;br /&gt;
&lt;br /&gt;
3.2.1、'''&amp;lt;big&amp;gt;效用函数&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    文章[2]指出，在ASM模型里面，假设所有的Agent都是风险厌恶的决策者，并且它们具有(CARA)型效用函数，即。如果在t时刻Agenti对股市运行状态在t+1时刻的预期为Ei(pt+1+dt+1)，方差为：，并且假设它是当前股价和股息的线性函数，也就是说：&lt;br /&gt;
&lt;br /&gt;
        （5）&lt;br /&gt;
&lt;br /&gt;
    其中a和b为两个参数，不同的Agent在不同的时刻使用不同的规则的时候，a与b的值都不一样，因此得到的对股价和股息的预期也会不一样。如果该预期满足正态分布，则根据CARA效用函数，我们能计算出Agenti对股票的持有量需求为：&lt;br /&gt;
&lt;br /&gt;
        （6）&lt;br /&gt;
&lt;br /&gt;
    因此，边际需求量为：&lt;br /&gt;
&lt;br /&gt;
            （7）&lt;br /&gt;
&lt;br /&gt;
    有了效用函数，在确定了股价、股息以及对股价与股息的预期情况下就能精确的确定出Agenti对股票的持有量了。&lt;br /&gt;
&lt;br /&gt;
3.2.2、'''&amp;lt;big&amp;gt;规则&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    我们已经反复强调了，Agenti进行决策、学习的核心部分就是它的一组规则。具体来讲，如果Agenti具有m个规则，那么，对任意一条规则rulej来讲，它是形如下面这样的判断语句：&lt;br /&gt;
&lt;br /&gt;
      （8）&lt;br /&gt;
&lt;br /&gt;
    其中conditionj是条件部分，它是一个长度为60（与环境的编码长度一样）的位串：&lt;br /&gt;
&lt;br /&gt;
          其中，#为通配符表示0或者1都可以，(aj,bj)为预期中的系数。因此不同的规则就会给出不同的预测。&lt;br /&gt;
&lt;br /&gt;
    下面举例来进行具体的说明。假设Agenti有3条规则分别是（简化对环境的编码采用7位）：&lt;br /&gt;
&lt;br /&gt;
1：if 01001## then (0.5,0.2)&lt;br /&gt;
&lt;br /&gt;
2：if 0100110 then (0.4,0.8)&lt;br /&gt;
&lt;br /&gt;
3：if 10###110 then (4.3,2)&lt;br /&gt;
&lt;br /&gt;
    那么在运行中，如果在环境的编码为10010110，它刚好与第三条规则的条件部分匹配（注意#代表的是0或者1都可以匹配），那么Agenti就会采用规则3来对股票价格和股息进行预测，也就是利用4.3*(pt+dt)+2来得到t+1时刻的pt+1+dt+1。&lt;br /&gt;
&lt;br /&gt;
    又例如当前环境的编码为0100110的话，可以看出规则1和2都与环境的编码匹配，那么我们就称规则1和规则2处于被激活状态。究竟用1或者2的哪一条规则呢？这需要Agenti对这些激活的规则进行排序，确定出在一个具体的条件下采用哪个规则。我们可以通过给每一条规则赋予一个实数值表示的强度来给激活的规则排序，也就是强度越大规则就会排在前面，反之排在后面。假设规则rulej的强度为，那么强度的计算公式就是：&lt;br /&gt;
&lt;br /&gt;
      （9）&lt;br /&gt;
&lt;br /&gt;
    其中，M是一个预先设定的常数，也是预先设定的系数，s是规则rulej的条件部分中为#的位数，例如上例中的规则1的s=2，规则2的s=0，是规则rulej的预测精度，一般随着系统的运行，通过比较预测与实际的差值来确定该项，具体使用下面的公式跌代：&lt;br /&gt;
&lt;br /&gt;
      （10）&lt;br /&gt;
&lt;br /&gt;
   其中为权重参数，，因此不同的规则得到不同的预测，从而根据实际运行的结果得到真实的来确定每一条规则预测的准确性。&lt;br /&gt;
&lt;br /&gt;
    这样看来，如果在某种情况下有多条规则同时被激活的时候，那些预测准确的、能够得到具体条件的（也就是说s值偏小）的规则能够优先被使用。通过按照强度把激活规则进行排序，Agenti选出一个强度最高的规则来进行预测。当有两个以上的规则强度值相同的时候，则只能在这些规则中随机的选择一个了。这样，在我们上面的例子中，一般情况下规则2的强度大于规则1，所以Agenti选择用规则2来进行预测，从而用公式0.4*(pt+dt)+0.8得出对股价和股息的预测值。&lt;br /&gt;
&lt;br /&gt;
3.3.3、===Agent的学习与创新功能===&lt;br /&gt;
&lt;br /&gt;
    当在时刻t每个Agent的预测都结束了以后，根据第2节的叙述，环境部分中的分析专家就会根据每个Agent的股票需求量定出真实的t+1时刻的股票价格，并且随机过程会确定t+1时刻的股息。这个时候Agenti会根据这些真实的情况进行学习。所谓的学习就是要对m条规则的强度进行更新并且重新确定这m条规则的强度排序。强度更新主要是对规则的预测精度进行的，即按照（10）式进行更新。&lt;br /&gt;
&lt;br /&gt;
    每个Agent还可以通过遗传算法进行创新，也就是通过变异和交叉来产生新的规则并利用选择的机制淘汰旧的规则。下面具体介绍遗传算法的运行机理。&lt;br /&gt;
   首先，根据强度我们可以把m条规则进行排序，从而得到一个序列：&lt;br /&gt;
&lt;br /&gt;
      （11）&lt;br /&gt;
&lt;br /&gt;
    其中排在前面的强度小，排在后面的强度大。然后挑出排在前面的k个规则淘汰掉，并且用k个新规则代替这些规则，这k个新的规则在剩下的m-k个规则基础上运用交叉与变异的操作得到。&lt;br /&gt;
&lt;br /&gt;
    下面以例子说明变异和交叉是如何进行的，假如规则库中有两条规则是rule1: if 01001##011 then (3.5,6.8)和 rule2: if 01#0111#10 then (2,6.5)。&lt;br /&gt;
&lt;br /&gt;
    首先说明变异操作，系统在m-k条不被淘汰的规则中任意选中一条规则进行变异，比如选中的规则就是rule1。针对条件部分，任意选择一位把这位上的编码转换成其它的，比如选择了第3位，那么把0变为#就得到了新规则的条件部分。针对结果部分可以让新规则的(a,b)在允许范围内随机的任意选值。比如a,b都在[-10,10]内取值，那么新的(a,b)就可以是(-5,2.8)，这样从规则1变异出的新规则为if 01#01##011 then (-5,2.8)。上述的变异过程如下示：&lt;br /&gt;
&lt;br /&gt;
if 01001##011 then (3.5,6.8) -&amp;gt; if 01#01##011 then (-5,2.8)&lt;br /&gt;
&lt;br /&gt;
    交叉操作首先需要在不被淘汰的规则选择两个规则作为父母，比如选择到rule1,rule2为父母进行交叉操作。针对条件部分，首先随机的选取一个位作为交叉位置，然后把两个串进行首尾的交换得到新的串，比如我们选择交叉位置为第5位，那么交叉操作如下图所示：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    针对结果部分，我们可以采取加权平均的办法得到新规则的结果。比如新规则的(a,b)可以通过,得到，其中w是权重系数，可以随机的确定。&lt;br /&gt;
&lt;br /&gt;
    无论是交叉还是变异，得到的新规则的精确度都可以根据父母继承得到。Agent通过遗传算法可以得到新的规则并且淘汰旧的规则，这就既保证了创新性（由交叉和变异操作保证），又保证了优胜略汰的机制（由初始的规则排序并淘汰一部分规则保证）。另外，为了保证系统不会因为经常运用遗传算法而变得混乱不堪，所以我们制定了一个参数v表示运行遗传算法的概率，例如如果v=0.001则表示系统每运行1000次仿真周期才进行一次遗传算法的操作。&lt;br /&gt;
&lt;br /&gt;
    至此，我们已经介绍了ASM模型的全部部分，下面看看，从这样的归纳学习系统中，我们到底能得到什么样的涌现结果。&lt;br /&gt;
&lt;br /&gt;
== 编者推荐 ==&lt;br /&gt;
&lt;br /&gt;
=== 集智文章推荐 ===&lt;br /&gt;
&lt;br /&gt;
[[File:13.png|500px|thumb|right|利用深度学习算法来自动构建复杂系统模型的基本流程]]&lt;br /&gt;
====[https://swarma.org/?p=20306 张江：从图网络到因果推断，复杂系统自动建模五部曲]====&lt;br /&gt;
:随着深度学习崛起和图结构数据井喷，从复杂系统角度揭开人工智能黑箱、利用人工智能辅助复杂系统建模都成为可能。集智俱乐部组织了系列闭门读书会，在7月5日的第一场讨论中，张江直播分享了复杂系统建模的深度学习技术综述。&lt;br /&gt;
&lt;br /&gt;
=== 集智课程推荐 ===&lt;br /&gt;
====[https://campus.swarma.org/course/1117    模拟复杂性]====&lt;br /&gt;
:本课程中，将讲解如何借鉴前面各章对复杂之道的理解来设计复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/592 群体模拟与Netlogo]====&lt;br /&gt;
:在本节课程中我们将从理论回到现实中学习到实际的本领：关于Netlogo的操作。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:许许|许许]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:模拟程序]]&lt;br /&gt;
[[Category:人工社会]]&lt;br /&gt;
[[Category:复杂系统]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45521</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45521"/>
		<updated>2025-07-11T03:51:39Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* Java 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
* Javascript 源代码：[https://wiki.swarma.org/applets/selfref/selfref.zip selfref.zip]&lt;br /&gt;
&lt;br /&gt;
摄像-屏幕自指的Javascript模拟程序：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 770px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45520</id>
		<title>蚁迹寻踪</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45520"/>
		<updated>2025-07-11T03:47:07Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 程序运行说明 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
|description=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
}}&lt;br /&gt;
* 名 称：蚁迹寻踪&lt;br /&gt;
* 作 者：[[Jake]]&lt;br /&gt;
* 源代码：[[Media:Antcolony.zip|Antcolony.zip]]&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony.gif|right|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
首先您要保证你的浏览器支持javascript，然后能够正确加载这个程序。在此前提下，按开始按钮，蚂蚁们开始从窝里出动了，寻找食物；他们会顺着地形爬满整个画面，直到找到食物再返回。&lt;br /&gt;
&lt;br /&gt;
其中，浅蓝色的点表示食物，黄色的点表示窝，雾状的点表示蚂蚁留下的信息素，红色的点表示障碍物，白色的动点就是蚂蚁了。&lt;br /&gt;
&lt;br /&gt;
按设置按钮你可以更改一些环境变量，也可以更改单个蚂蚁的属性。在设置参数窗口中显示了整个蚂蚁群中找到的从它的窝到食物的最短路径。&lt;br /&gt;
&lt;br /&gt;
使用环境参数设置和个体蚂蚁的设置可以让你观察到这些参数是怎样影响蚂蚁的行为的。其中信息素的大小和消散的快慢直接决定了蚂蚁找到食物的快慢。（具体见后面的参数说明）&lt;br /&gt;
&lt;br /&gt;
编辑地图让你能够随心所欲的更改蚂蚁的环境，你会看到，无论你怎样精心巧妙的设计地图，小蚂蚁最终都能找到食物！我们为你准备了一个地图库，可以自动调出不同的地图。&lt;br /&gt;
&lt;br /&gt;
蚁迹寻踪的javascript模拟程序（下载：[https://wiki.swarma.org/applets/antcolony/ant_colony_simulation.zip ant_colony_simulation.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/antcolony/ant_colony_simulation-10.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 835px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=预期的结果=&lt;br /&gt;
&lt;br /&gt;
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后，它会向环境释放一种信息素，吸引其他的蚂蚁过来，这样越来越多的蚂蚁会找到食物！有些蚂蚁并没有象其它蚂蚁一样总重复同样的路，他们会另辟蹊径，如果令开辟的道路比原来的其他道路更短，那么，渐渐，更多的蚂蚁被吸引到这条较短的路上来。最后，经过一段时间运行，可能会出现一条最短的路径被大多数蚂蚁重复着。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=原理=&lt;br /&gt;
&lt;br /&gt;
为什么小小的蚂蚁能够找到食物？他们具有智能么？设想，如果我们要为蚂蚁设计一个人工智能的程序，那么这个程序要多么复杂呢？首先，你要让蚂蚁能够避开障碍物，就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物，其次，要让蚂蚁找到食物，就需要让他们遍历空间上的所有点；再次，如果要让蚂蚁找到最短的路径，那么需要计算所有可能的路径并且比较它们的大小，而且更重要的是，你要小心翼翼的编程，因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序！太复杂了，恐怕没人能够完成这样繁琐冗余的程序。&lt;br /&gt;
&lt;br /&gt;
然而，事实并没有你想得那么复杂，上面这个程序每个蚂蚁的核心程序编码不过100多行！为什么这么简单的程序会让蚂蚁干这样复杂的事情？答案是：简单规则的涌现。事实上，每只蚂蚁并不是像我们想象的需要知道整个世界的信息，他们其实只关心很小范围内的眼前信息，而且根据这些局部信息利用几条简单的规则进行决策，这样，在蚁群这个集体里，复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律！那么，这些简单规则是什么呢？下面详细说明：&lt;br /&gt;
#范围：蚂蚁观察到的范围是一个方格世界，蚂蚁有一个参数为速度半径VR（一般是3），那么它能观察到的范围就是VR*VR个方格世界，并且能移动的距离也在这个范围之内。&lt;br /&gt;
#环境：蚂蚁所在的环境是一个虚拟的世界，其中有障碍物，有别的蚂蚁，还有信息素，信息素有两种，一种是找到食物的蚂蚁洒下的食物信息素，一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。&lt;br /&gt;
#觅食规则：在每只蚂蚁能感知的范围内寻找是否有食物，如果有就直接过去。否则看是否有信息素，并且比较在能感知的范围内哪一点的信息素最多，这样，它就朝信息素多的地方走，并且每只蚂蚁多会以小概率犯错误，从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样，只不过它对窝的信息素做出反应，而对食物信息素没反应。&lt;br /&gt;
#移动规则： 每只蚂蚁都朝向信息素最多的方向移，并且，当周围没有信息素指引的时候，蚂蚁会按照自己原来运动的方向惯性的运动下去，并且，在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈，它会记住最近刚走过了哪些点，如果发现要走的下一点已经在最近走过了，它就会尽量避开。&lt;br /&gt;
#避障规则：如果蚂蚁要移动的方向有障碍物挡住，它会随机的选择另一个方向，并且有信息素指引的话，它会按照觅食的规则行为。&lt;br /&gt;
#播撒信息素规则：每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多，并随着它走远的距离，播撒的信息素越来越少。根据这几条规则，蚂蚁之间并没有直接的关系，但是每只蚂蚁都和环境发生交互，而通过信息素这个纽带，实际上把各个蚂蚁之间关联起来了。比如，当一只蚂蚁找到了食物，它并没有直接告诉其它蚂蚁这儿有食物，而是向环境播撒信息素，当其它的蚂蚁经过它附近的时候，就会感觉到信息素的存在，进而根据信息素的指引找到了食物。&lt;br /&gt;
&lt;br /&gt;
=问题=&lt;br /&gt;
说了这么多，蚂蚁究竟是怎么找到食物的呢？&lt;br /&gt;
在没有蚂蚁找到食物的时候，环境没有有用的信息素，那么蚂蚁为什么会相对有效的找到食物呢？这要归功于蚂蚁的移动规则，尤其是在没有信息素时候的移动规则。首先，它要能尽量保持某种惯性，这样使得蚂蚁尽量向前方移动（开始，这个前方是随机固定的一个方向），而不是原地无谓的打转或者震动；其次，蚂蚁要有一定的随机性，虽然有了固定的方向，但它也不能像粒子一样直线运动下去，而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性，尽量保持原来的方向，但又有新的试探，尤其当碰到障碍物的时候它会立即改变方向，这可以看成一种选择的过程，也就是环境的障碍物让蚂蚁的某个方向正确，而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。&lt;br /&gt;
当然，在有一只蚂蚁找到了食物的时候，其他蚂蚁会沿着信息素很快找到食物的。&lt;br /&gt;
&lt;br /&gt;
蚂蚁如何找到最短路径的？这一是要归功于信息素，另外要归功于环境，具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多，因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物，开始的时候，走这两条路的蚂蚁数量同样多（或者较长的路上蚂蚁多，这也无关紧要）。当蚂蚁沿着一条路到达终点以后会马上返回来，这样，短的路蚂蚁来回一次的时间就短，这也意味着重复的频率就快，因而在单位时间里走过的蚂蚁数目就多，洒下的信息素自然也会多，自然会有更多的蚂蚁被吸引过来，从而洒下更多的信息素……；而长的路正相反，因此，越来越多地蚂蚁聚集到较短的路径上来，最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题，实际上蚂蚁逐渐接近全局最短路的，为什么呢？这源于蚂蚁会犯错误，也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径，这可以理解为一种创新，这种创新如果能缩短路途，那么根据刚才叙述的原理，更多的蚂蚁会被吸引过来。&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony2.gif|center|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
上图说明了这个过程，从a出发到e有两条路，左边的较长，右边的较短，在这两个图中，开始的时候（左图）蚂蚁选择两条路的机会是均等的，当时间流逝以后（右图所示），更多的蚂蚁聚集到右边的较短的路上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申=&lt;br /&gt;
跟着蚂蚁的踪迹，你找到了什么？通过上面的原理叙述和实际操作，我们不难发现蚂蚁之所以具有智能行为，完全归功于它的简单行为规则，而这些规则综合起来具有下面两个方面的特点：&lt;br /&gt;
#多样性&lt;br /&gt;
#正反馈&lt;br /&gt;
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环，正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力，而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见，而多样性是打破权威体现的创造性，正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。&lt;br /&gt;
&lt;br /&gt;
引申来讲，大自然的进化，社会的进步、人类的创新实际上都离不开这两样东西，多样性保证了系统的创新能力，正反馈保证了优良特性能够得到强化，两者要恰到好处的结合。如果多样性过剩，也就是系统过于活跃，这相当于蚂蚁会过多的随机运动，它就会陷入混沌状态；而相反，多样性不够，正反馈机制过强，那么系统就好比一潭死水。这在蚁群中来讲就表现为，蚂蚁的行为过于僵硬，当环境变化了，蚂蚁群仍然不能适当的调整。&lt;br /&gt;
&lt;br /&gt;
既然复杂性、智能行为是根据底层规则涌现的，既然底层规则具有多样性和正反馈特点，那么也许你会问这些规则是哪里来的？多样性和正反馈又是哪里来的？我本人的意见：规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢？为什么在你眼前呈现的世界是如此栩栩如生呢？答案在于环境造就了这一切，之所以你看到栩栩如生的世界，是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了，被环境淘汰了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=参数说明=&lt;br /&gt;
最大信息素：蚂蚁在一开始拥有的信息素总量，越大表示程序在较长一段时间能够存在信息素。食物释放信息素的半径：在食物点和窝点附近都会释放相应的信息素以便蚂蚁能更快的找到它们。这个半径越大，则越容易被蚂蚁找到。信息素消减的速度：随着时间的流逝，已经存在于世界上的信息素会消减，这个数值越大，那么消减的越快。&lt;br /&gt;
&lt;br /&gt;
在设置蚂蚁个体属性的时候，选择特定的蚂蚁编号，可以对这只蚂蚁的属性进行修改。错误概率表示这个蚂蚁不往信息素最大的区域走的概率，越大则表示这个蚂蚁越有创新性。速度半径表示蚂蚁一次能走的最大长度，也表示这个蚂蚁的感知范围。记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标，这个值避免了蚂蚁在本地打转，停滞不前。而这个值越大那么整个系统运行速度就慢，越小则蚂蚁越容易原地转圈。按钮（应用于所有蚂蚁）：是把当前更改的所有蚂蚁的个体属性应用到所有的蚂蚁身上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E4%B8%80%E7%BB%B4%E5%85%83%E8%83%9E%E8%87%AA%E5%8A%A8%E6%9C%BA&amp;diff=45519</id>
		<title>一维元胞自动机</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E4%B8%80%E7%BB%B4%E5%85%83%E8%83%9E%E8%87%AA%E5%8A%A8%E6%9C%BA&amp;diff=45519"/>
		<updated>2025-07-11T03:43:45Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 一维元胞自动机的模拟程序 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=一维基础元胞自动机=&lt;br /&gt;
== 一维元胞自动机的模拟程序==&lt;br /&gt;
&lt;br /&gt;
（下载：[https://wiki.swarma.org/applets/onedimCA/cellular_automata_viz.zip cellular_automata_viz.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/onedimCA/cellular_automata_viz.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 900px; height: 640px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==基础元胞自动机==&lt;br /&gt;
最简单的元胞自动机就是一维的元胞自动机。每个元胞都有黑、白两种颜色。邻居是一个半径为1的区域，每个元胞都有左右两个邻居。这样每一个方格单元和它的邻居可以表示如下：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
 &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; bordercolor=&amp;quot;#999999&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt; &lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#666666&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#000000&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#666666&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
由于每个元胞有两个状态{0,1}，这样，当前元胞加上左右两个邻居一共就有8种状态：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:8种状态.png|屏幕快照 2015-12-11 23.34.46.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
他们表示的状态分别是：000，001，010，011，100，101，110，111，其中0表示白色，1表示黑色。&lt;br /&gt;
===规则与编号===&lt;br /&gt;
下面考虑规则，假设当前考虑的细胞为&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;，他在t时刻的状态为&amp;lt;math&amp;gt;s_{i,t}&amp;lt;/math&amp;gt;，而它的两个邻居状态为&amp;lt;math&amp;gt;s_{i-1,t}&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;s_{i+11,t}&amp;lt;/math&amp;gt;,则&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;，,在下一时刻的状态为&amp;lt;math&amp;gt;s_{i,t+1}&amp;lt;/math&amp;gt;,则转换规则用函数表示为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;s_{i,t+1}=f(s_{i-1,t},s_{i,t},s_{i+1,t})&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;s_{i,t}&amp;lt;/math&amp;gt;∈{0,1}，对于任意的i和t。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
由于元胞自动机的规则就是根据每个元胞和它的邻居的当前状态转移到下一个时刻该元胞的状态。无论规则是什么样的黑箱，它的输入就是上面列出的8种组合之一，因为表示的是每个元胞下一时刻的状态，而状态只可能有0、1两种，则规则的输出要么是0，要么是1。这样，任何一个规则都是一个或者一组转换，比如下图表示的就是一条规则：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则1.png|屏幕快照 2015-12-11 23.36.07.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
另外，若有一个规则是：“如果输入的三个元胞中黑色方格只有1个，那么下一时刻当前元胞就是黑色”可以表示成下面的图：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则2.png|屏幕快照 2015-12-11 23.36.54.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
下面我们再把目光转到规则集上。由于每一条规则都是一个状态或一组状态的转换，那么把输入的8种可能情况转换到当前元胞的下一状态。我们可以用一个转换表表示一组规则集，例如：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则3.png|屏幕快照 2015-12-11 23.37.37.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
这个规则集也可以用下面的一组数字表示为：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则集1.png|屏幕快照 2015-12-12 00.36.36.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
那么这组规则就对应着编码：10100011，也就是把八个位置上的方格进行一个排列。我们可以把输出部分的二进制编码转换成十进制数的形式：163，这就是该细胞自动机的编码。当状态数增多，半径增大的时候，这种编码方式就不实用了，我们需要用另一种方式来编码。考虑下面这样的规则若有一个规则是：“如果输入的三个方格中黑色方格只有1个，那么下一时刻当前方格就是黑色；如果有两个黑色方格，则下时刻是白色，如果有三个方格，则下时刻是黑色，如果有4个方格，那么下一时刻是白色”可以表示成下面的函数表：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=1&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=1&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=0&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=1&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=3&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=0&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
其中&amp;lt;math&amp;gt;s_{i,t}\in\{0,1\}&amp;lt;/math&amp;gt;, 对于任意的i和t&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这种情况下，输入就仅仅有4种情况，因此可以得到下面的表：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|输入||0||1||2||3&lt;br /&gt;
|-&lt;br /&gt;
|输出||0||1||0||1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同样的道理，我们可以对它进行编码为：0101，表示为十进制就是5。显然，这种编码方式比前一种短，但是这种编码方法不能反映所有的细胞自动机。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
每一组规则集也可以表示成类似于上面的图和表，例如下面的另外一组规则&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则集2.png|屏幕快照 2015-12-12 00.36.43.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
由于邻居加上当前元胞一共8种状态，每一个状态对应两种可能转换规则，所以规则一共就有&amp;lt;math&amp;gt;2^8=256&amp;lt;/math&amp;gt;种，我们可以为每一个规则编码，然后对其进行穷举。&lt;br /&gt;
&lt;br /&gt;
===动态行为===&lt;br /&gt;
下面我们来考察这256中元胞自动机所具备的可能动态行为。对于一维的情况，我们假设所有的元胞都分布在一条直线上，并且直线的长度为300，也就是说有300个元胞在这条直线上，那么一条断续的横线就是当前所有细胞状态的一种分布。这些方格随着时间变化，就形成了不同的横线。我们把这些随着时间变化的线纵向拼在一起形成了一个网格区域。其中纵轴表示时间的流逝（往下为正），横轴为“元胞自动机在对应时刻的状态，就能得到一幅图像：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:元胞自动机图像.png|屏幕快照 2015-12-12 00.42.38.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
这个元胞的每一行都是某一个时刻元胞自动机的状态。因而从上到下数第1、2、3、4、5、6行可以分别表示第1、2、3、4、5、6时间步的元胞自动机状态。因此这里的一个平面的图案就是元胞自动机在时间上的发展动态。下面我们分别挑选几种典型的动态情况示于下图（下方的数字是元胞自动机的编码）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:动态情况1.png|屏幕快照 2015-12-12 00.42.44.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:动态情况2.png|屏幕快照 2015-12-12 00.44.21.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:184号.jpg|CA 00：184号&lt;br /&gt;
&lt;br /&gt;
File:250号.jpg|CA 01：250号&lt;br /&gt;
&lt;br /&gt;
File:254号.jpg|CA 02：254号&lt;br /&gt;
&lt;br /&gt;
File:300号.jpg|CA 03：300号&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
经过对比分析，我们把细胞自动机归为四种类别，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*固定值型：细胞自动机经过若干步运算便停留在一个固定的状态；&lt;br /&gt;
*周期型：细胞自动机在几种状态之间周期循环；&lt;br /&gt;
*混沌型：细胞自动机处于一种完全无序随机的状态，几乎找不到任何规律；&lt;br /&gt;
*复杂型：细胞自动机在运行的过程中可能产生复杂的结构，这种结构既不是完全的随机混乱，又没有固定的周期和状态。&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45518</id>
		<title>竞争与合作——动态博弈模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45518"/>
		<updated>2025-07-11T03:40:37Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 程序简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
|description=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=程序简介=&lt;br /&gt;
* 名    称： 竞争与合作——动态博弈模拟&lt;br /&gt;
* 作    者： 盛昭瀚－Mathematica版本，[[Jake]]－Java版本&lt;br /&gt;
* 源程序下载： pdcelluar.zip&lt;br /&gt;
&lt;br /&gt;
竞争与合作——动态博弈模拟系统的javascript程序（下载：[https://wiki.swarma.org/applets/pdcelluar/pd_cellular_automaton.zip pd_cellular_automaton.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/pdcelluar/pd_cellular_automaton.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 700px; height: 1000px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序说明=&lt;br /&gt;
    &lt;br /&gt;
这是一个多个企业参与的竞争环境。每个格子（蓝色的或红色的）都是一个企业，它们在随机的游走着，并会与其它的格子相遇，当与其它的企业相遇的时候，他们就进行囚徒困境博弈，其中蓝色的格子表示采用合作的策略，红色的格子表示采用背叛的策略。根据博弈的规则，每个企业都会有一个盈利数表示收益。所有的企业都向学习它的邻居中盈利最多的企业的策略。你会看到，在这样的环境中，竞争或者合作会自发的演化。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=操作说明=&lt;br /&gt;
&lt;br /&gt;
* 点击开始按钮，模拟程序开始运行。格子会随机的游走，并不断向他们的环境学习。&lt;br /&gt;
* 点击“单步运行”表示每次只进行一步，这方便我们的观察。&lt;br /&gt;
* 选择不同的显示方法可以从不同的角度观察企业的运动，其中策略是观察整个合作与不合作策略的分布，id是跟踪每个企业，移动方向观察每个企业下一步将移动向何方。 &lt;br /&gt;
* 点击“设置”按钮可以更改一些程序的属性。点击“查看”可以观察系统总的时间-状态图，你会看到使用不同策略的企业在时间上的分布。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=设置参数的说明=&lt;br /&gt;
    &lt;br /&gt;
* 世界的尺寸：程序中一共有多少方格，方格数越大运行越慢；&lt;br /&gt;
* 企业的总比例：企业数占总的方格数的比例；&lt;br /&gt;
* 合作者的比例：在企业中，初始时刻合作者占的比例；&lt;br /&gt;
* 邻居类型：在两种邻居类型中选择一种，两种类型示意图如下：其中黑色的表示当前的方格，黄色的表示他的邻居。&lt;br /&gt;
[[File:图1.jpg|800px]]&lt;br /&gt;
* 刷新间隔：每次刷新世界演化几步。比如刷新间隔为2，则每走两步才刷新视图一次。&lt;br /&gt;
* 博弈规则：确定当合作者与不合作者相遇的时候不合作者能够得到的收益数（&amp;gt;1）。&lt;br /&gt;
&lt;br /&gt;
=规则说明=&lt;br /&gt;
    &lt;br /&gt;
个体：每个企业可以用一个三元组表示(s,m,d)。其中s为企业当前使用的规则，s只能取1（表示合作），2（表示不合作）两种状态。m表示与该企业的所有邻居分别进行囚徒困境博弈以后的总盈利。d表示随机选择的移动方向（在vonNerman类型中有上、下、左、右4个方向，Moore类型有上、下、左、右、左上、左下、右上、右下8个方向）。程序中黑色的区域表示空区域，没有被企业占领。如果某个企业已经占领了一个方格，则其它企业不能介入。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=博弈规则： 每个企业都跟它的邻居进行囚徒困境博弈=&lt;br /&gt;
&lt;br /&gt;
囚徒困境博弈，博弈的矩阵如下表所示：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| (企业1，企业2) || 合作 || 不合作&lt;br /&gt;
|-&lt;br /&gt;
| 合作 || 1,1 || 0,p&lt;br /&gt;
|-&lt;br /&gt;
| 不合作 || p,0 || 0,0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
这个矩阵为简化了的囚徒困境博弈的形式。即，如果两个企业都采取合作的策略，那么它们各得1单位收益，如果一方合作另一方不合作， 那么合作的一方吃亏得益为0，不合作的一方占便宜，得益为p（&amp;gt;1）；双方都不合作那么都不收益。    &lt;br /&gt;
&lt;br /&gt;
学习规则：每个企业在每次循环中都跟它周围的邻居中这次循环的收益最多的企业学习，把它的策略拷贝过来作为自己的。即如果四个邻居中收益最高的是背叛，那么这个企业下一个循环也选择背叛策略，如果收益最高的是合作，那么下一时刻，该企业也采取合作策略。&lt;br /&gt;
&lt;br /&gt;
移动规则：每个企业在每次循环的时候都随机的选择一个方向，如果这个方向指向的方格为空，并且没有其他企业指向这个方格，那么下一时刻它就移动到那个格子中，否则它原地不动。&lt;br /&gt;
&lt;br /&gt;
规则的运行：系统采用离散时间运行，每个周期内，所有的企业先按照自己的s取值也就是策略跟每个邻居都进行博弈确定它的收入m；然后每个企业开始在4个邻居中寻找最大的m对应的企业，学习它的策略作为下一周期的策略s'；然后企业根据移动规则向它的临近方格移动。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=集体涌现行为=&lt;br /&gt;
    &lt;br /&gt;
根据多次系统运行规律观察，得到的几条规律如下：&lt;br /&gt;
# 系统最后的演化结果是依赖于初始分布的；&lt;br /&gt;
# 企业的总比例越大，合作者越容易存活，不合作者将趋于灭亡。相反，企业的比例越小，合作者越容易转变成不合作者；&lt;br /&gt;
# 相同的企业往往集中在某几个特定的区域；&lt;br /&gt;
# 系统演化的结果是对博弈规则敏感的，如果m数值设置的越大，则合作者越不容易占上风；&lt;br /&gt;
# 每个企业的邻居数越多，则合作策略越容易占上风；&lt;br /&gt;
# 不同的参数设置会导致不同的结果，一种情况是最后全是竞争的企业，一种情况是全是合作的企业，还有可能合作与竞争长时间共存，并且演化规则特别复杂。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=对这现实经济环境中的指导意义=&lt;br /&gt;
# 只有企业和企业之间建立起比较完善的交互体系的时候，合作的可能性才会增强。&lt;br /&gt;
# 同类之间连成一片可以抵御外来者的进攻。&lt;br /&gt;
# 囚徒困境博弈是一种竞争关系的博弈，企业和企业之间本质的关系是竞争的，但是合作却能在一定的条件下自发的演化出来。因此，竞争中的合作是一种多个个体相互学习适应过程中得到的。&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;br /&gt;
[[category:博弈模型]]&lt;br /&gt;
[[category:旧词条迁移]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E5%BA%B7%E5%A8%81%E7%9A%84%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F_Conway%27s_Game_of_Life&amp;diff=45517</id>
		<title>康威的生命游戏 Conway's Game of Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E5%BA%B7%E5%A8%81%E7%9A%84%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F_Conway%27s_Game_of_Life&amp;diff=45517"/>
		<updated>2025-07-11T03:36:09Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* Javascript代码实现的模拟程序 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=元胞自动机,人工生命, 复杂&lt;br /&gt;
|description=元胞自动机, 人工生命,复杂&lt;br /&gt;
}}&lt;br /&gt;
[[File:Lggun.gif|400px|right|thumb|康威生命游戏中的一种可持续繁殖模式：“高斯帕 Bill Gosper 机枪”不断制造“滑翔机”]]&lt;br /&gt;
[[File:Conways game of life breeder.png|400px|right|thumb|一个河豚型繁殖者（红色）的截图，它在滑行后留下滑翔机枪（绿色），从而创建了滑翔机（蓝色）（动画）]]&lt;br /&gt;
'''康威生命游戏 （Conway's Game of Life）'''，又称'''康威生命棋'''，是英国数学家[[约翰·何顿·康威 John Horton Conway]]在1970年发明的[[元胞自动机]]。&amp;lt;ref&amp;gt;{{cite journal | url=https://web.stanford.edu/class/sts145/Library/life.pdf | title=Mathematical Games - The Fantastic Combinations of John Conway's New Solitaire Game 'Life' | first=Martin | last=Gardner  | issue=223 | journal=Scientific American | date=October 1970 | pages=120–123| doi=10.1038/scientificamerican1070-120 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
该游戏是[https://en.wikipedia.org/wiki/Zero-player_game 零玩家游戏]，这意味着它的发展由其初始状态决定，不需要进一步的输入。通过创建初始配置并观察其演变，它可以与生命游戏互动。它是具有[[图灵完备性]]的，可以模拟[https://en.wikipedia.org/wiki/Von_Neumann_universal_constructor 通用构造器]或任何其他图灵机。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==规则==&lt;br /&gt;
我们所说的生命游戏是一个无限的，二维正方形的栅格单元网格，每一个单元格有2种状态可能性：活或死的（或者黑和白）。每个单元格都与其八个相邻的单元交互，这八个单元格是水平、垂直或对角线相邻的单元格。在每个时间步上，都会发生以下转换：&lt;br /&gt;
&lt;br /&gt;
# 当前细胞为存活状态时，当周围的存活细胞低于2个时（不包含2个），该细胞变成死亡状态。（模拟生命数量稀少）&lt;br /&gt;
# 当前细胞为存活状态时，当周围有2个或3个存活细胞时，该细胞保持原样。&lt;br /&gt;
# 当前细胞为存活状态时，当周围有超过3个存活细胞时，该细胞变成死亡状态。（模拟生命数量过多）&lt;br /&gt;
# 当前细胞为死亡状态时，当周围有3个存活细胞时，该细胞变成存活状态。（模拟繁殖）&lt;br /&gt;
&lt;br /&gt;
这些将自动机的行为与现实生活进行比较的规则可以归纳为以下内容：&lt;br /&gt;
# 任何有两个或三个邻居的活细胞都可以存活。&lt;br /&gt;
# 具有三个活动邻居的任何死细胞都将成为活细胞。&lt;br /&gt;
# 所有其他活细胞将在下一代死亡。同样，所有其他死细胞仍保持死亡状态。&lt;br /&gt;
可以把最初的细胞结构定义为种子，当所有在种子中的细胞同时被以上规则处理后，可以得到第一代细胞图。按规则继续处理当前的细胞图，可以得到下一代的细胞图，周而复始。&lt;br /&gt;
&lt;br /&gt;
==起源==&lt;br /&gt;
1940年末，[https://en.wikipedia.org/wiki/John_von_Neumann 约翰·冯·诺依曼 John von Neumann]将生命定义为可以自我复制且可模拟图灵机的存在。冯·诺依曼考虑使用随机漂浮在液体或气体中的电磁成分来模拟生命。&amp;lt;ref&amp;gt;{{cite book|last=Wolfram|first=Stephen|title=A New Kind of Science|publisher=Wolfram Media, Inc.|year=2002|page=[https://archive.org/details/newkindofscience00wolf/page/1179 1179]|isbn=978-1-57955-008-0|url=https://archive.org/details/newkindofscience00wolf/page/1179}}&amp;lt;/ref&amp;gt;然而受当时技术所限，他的方案并未成为现实。后来，[https://en.wikipedia.org/wiki/Stanislaw_Ulam 乌兰姆 Stanislaw Ulam]发明了元胞自动机，旨在模拟冯·诺依曼的理论电磁构造。乌兰姆在他的几篇论文中讨论了用计算器在二维晶格中模拟元胞自动机。与此同时，[[约翰·冯·诺依曼 John von Neumann]]也在尝试构建乌兰姆的元胞自动机。虽然进展顺利，但他同时忙于其他项目，有一些细节未完成。他构造的机器很复杂，因为加入了一些他自己的工程设计。随着时间推移，有其他研究人员提供了更简单的构造，并发表在论文和书籍中。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
受数学逻辑问题以及乌兰姆等学者在模拟游戏方面工作的启发，约翰·康威 John Conway于1968年开始使用各种不同的2D元胞自动机规则进行实验。&amp;lt;ref&amp;gt;{{cite book|last=Wolfram|first=Stephen|title=A New Kind of Science|publisher=Wolfram Media, Inc.|year=2002|page=[https://archive.org/details/newkindofscience00wolf/page/877 877]|isbn=978-1-57955-008-0|url=https://archive.org/details/newkindofscience00wolf/page/877}}&amp;lt;/ref&amp;gt;Conway的最初目标是定义一种有趣且不可预测的元胞自动机。因此，他希望一些运行实例可以能持续很长时间后终止，而另一些运行实例则在不出现循环的情况下永久运行下去。这是一个巨大的挑战。也是多年以来一个悬而未决的问题。后来元胞自动机专家们终于证明Conway的生命游戏满足Von Neumann提出的两个基本要求。在Conway之前，生命游戏以证明为导向，而Conway以构造简单的生命游戏模型为导向，并没有先验地证明自动机可以持续存活。&lt;br /&gt;
&lt;br /&gt;
经过大量实验后，Conway仔细选择了自己的规则，使得符合以下条件：&lt;br /&gt;
# 不应出现爆炸性增长。&lt;br /&gt;
# 应该存在小的初始模式，这些模式会导致混沌，不可预测的结果。&lt;br /&gt;
# 冯·诺依曼通用构造机（universal constructor）应该有潜力。&lt;br /&gt;
# 在遵守上述约束的同时，规则应尽可能简单。&amp;lt;ref&amp;gt;Conway, private communication to the 'Life list', 14 April 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
自从发明以来，Conway的生命游戏就吸引了很多人，因为它可以使初始模式以令人惊讶的方式进行演变。生命游戏是系统涌现和自组织的一个例子。计算机科学，物理学，生物学，生物化学，经济学，数学，哲学和生成科学等各个领域的学者都可从这种“通过执行简单规则即可产生复杂模式”的方式汲取营养。生命游戏也可以用作教学分析，用于展现一些反直觉的观念，即设计和组织可以在没有设计师的情况下自发出现。例如，认知科学家丹尼尔·丹内特 Daniel Dennett广泛使用了Conway生命游戏中的 “宇宙” ，来说明复杂的哲学构造（如意识和自由意志）可能从相对简单的确定性物理定律集演化而来，而这些简单的物理定律可以控制我们的宇宙。&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first=D. C.|date=1991|title=Consciousness Explained|location=Boston|publisher=Back Bay Books|isbn=978-0-316-18066-5|url-access=registration|url=https://archive.org/details/consciousnessexp00denn}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first= D. C. |date=1995|title=Darwin's Dangerous Idea: Evolution and the Meanings of Life|url=https://archive.org/details/darwinsdangerous0000denn|url-access=registration|location=New York|publisher= Simon &amp;amp; Schuster |isbn= 978-0-684-82471-0}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first= D. C. |date=2003 |title=Freedom Evolves |location=New York |publisher=Penguin Books |isbn =978-0-14-200384-8}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conway的生命游戏之所以受欢迎，是因为它的问世刚好赶上新一代的廉价计算机进入市场的时机。生命游戏可以在这些机器上运行数小时。对一些来说，生命游戏仅仅是编程挑战：一种有趣的方式来占用CPU使用率，反正不用也会浪费。对另一些人来说，生命戏则具有哲学内涵。当前的发展已经达到在生命游戏的范畴内创建计算机系统的理论仿真的程度。&amp;lt;ref&amp;gt;{{cite web|url=http://rendell-attic.org/gol/tm.htm|title=A Turing Machine in Conway's Game of Life|author=Paul Rendell|date=January 12, 2005|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/index.php?title=Spartan_universal_computer-constructor|title=Spartan universal computer-constructor|author=Adam P. Goucher|publisher=LifeWiki|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==模式示例==&lt;br /&gt;
在生命游戏中会出现许多不同类型的模式，可根据行为特点对这些模式进行分类。常见的模式类型包括：&lt;br /&gt;
&lt;br /&gt;
1.静态，从一代到下一代都不会改变；&lt;br /&gt;
&lt;br /&gt;
2.振荡态，经过有限的迭代后返回其初始状态；&lt;br /&gt;
&lt;br /&gt;
3.太空船态，可在网格中进行自我变换。&lt;br /&gt;
&lt;br /&gt;
4.穿梭机态，蜂王可以在两个静态块之间往复移动。&lt;br /&gt;
&lt;br /&gt;
5.滑翔机枪，它由两个块稳定的蜂王穿梭机组成，可以向外发射滑翔机。&lt;br /&gt;
&lt;br /&gt;
6.图灵机，它是一种能够进行图灵完备计算的模式，可以执行任意计算。它由 Paul Rendell 创建，于 2000 年 4 月 2 日完工。这个特殊的图灵机是无限的，因为它需要无限长的磁带来执行任意计算。一个周期需要 11040 代。&lt;br /&gt;
&lt;br /&gt;
7.生命游戏里的细胞，细胞是生命游戏平面的子集（通常是矩形或正方形），它与固定数量的不同图案一起平铺在平面上，每个平铺都采用其中一种图案，因此它可以模拟元胞自动机本身。第一个细胞由 David Bell 于 1996 年建造。它采用标准的滑翔机逻辑来确定是否应该存在滑翔机。这两种状态的区别在于一个滑翔机。2004 年，Jared James Prince修改了David Bell的生命单元，以支持生命宇宙的两层（因此是多层），创造了“深细胞”。深细胞的周期为 7680。''A0'' 的开/关状态每 7680 代（从第 0 代开始）出现一次，由左上象限的 6 艘长船之间是否存在滑翔机来表示（下面以绿色圈出）。''B0'' 的状态以相同的方式表示，但偏移 3840 轮。这个版本的模式设置为 ''A0'' 最初开启，''B0'' 处于启动前开启状态（由左下象限垂直腔室中的 3 个方块表示，下方以红色圈出），因此 ''B0'' 将在 3840 代后正式开启。要启动 ''A0'' OFF，需要删除滑翔机。要启动 ''B0'' OFF，需要删除 3 个方块。&lt;br /&gt;
&lt;br /&gt;
生命游戏最早的比较有趣的模式是在不使用计算机的情况下就被发现的。最简单的静态和振荡态是在使用方格纸、黑板和物理游戏板记录一些运行实例时发现的。在早期研究中，Conway发现“R-pentomino”在次数较少的迭代中无法稳定。实际上，它需要1103次迭代才能稳定下来，到那时它已拥有116个种群，并已产生了6个移动的“滑翔机”。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/index.php?title=R-pentomino|title=R-pentomino|publisher=LifeWiki|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;这是有史以来发现的第一批“太空船”模式。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/ref/lexicon/lex_g.htm#glider|author=Stephen A. Silver|title=Glider|publisher=The Life Lexicon|accessdate=March 4, 2019}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下面显示了上述六种模式类型的常见&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/soup/census.asp?rule=B3/S23&amp;amp;sl=1&amp;amp;os=1&amp;amp;ss=1|archiveurl=https://web.archive.org/web/20090910010855/http://conwaylife.com/soup/census.asp?rule=B3%2FS23&amp;amp;sl=1&amp;amp;os=1&amp;amp;ss=1|archivedate=2009-09-10|title=Census Results in Conway's Game of Life|publisher=The Online Life-Like CA Soup Search|accessdate=July 12, 2009|url-status=dead}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://wwwhomes.uni-bielefeld.de/achim/moving.html|title=Spontaneous appeared Spaceships out of Random Dust|publisher=Achim Flammenkamp (1995-12-09)|accessdate=July 10, 2012}}&amp;lt;/ref&amp;gt;示例（因为它们经常从随机的细胞初始配置中出现），活细胞显示为黑色，死细胞显示为白色。周期指的是模式返回初始配置之前必须迭代的周期数。&lt;br /&gt;
&lt;br /&gt;
===静态示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Game_of_life_block_with_border.svg.png|方块&lt;br /&gt;
File:Game_of_life_loaf.svg.png|面包&lt;br /&gt;
File:Game_of_life_beehive.svg.png|蜂巢&lt;br /&gt;
File:lg4.png|大船&lt;br /&gt;
File:lg5.png|小船&lt;br /&gt;
File:lg6.png|花&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg7.png|池塘&lt;br /&gt;
File:lg9.png|航空母舰&lt;br /&gt;
File:lg10.png|独木舟&lt;br /&gt;
File:lg11.png|芒果&lt;br /&gt;
File:lg12.png|鸭子&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===震荡态示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg13.gif|信号灯（周期=2轮）&lt;br /&gt;
File:lg14.gif|蟾蜍（周期=2轮）&lt;br /&gt;
File:lg152.gif|红绿灯（周期=2轮）&lt;br /&gt;
File:lg16.gif|烽火（周期=2轮）&lt;br /&gt;
File:lg17.gif|脉冲星（周期=3轮）&lt;br /&gt;
File:lg18.gif|慨影（周期=15轮）&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===太空船示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg19.gif|滑翔机（4轮）&lt;br /&gt;
File:Animated_Hwss.gif|太空船（4轮）&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 穿梭机示例 ===&lt;br /&gt;
&amp;lt;gallery class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:穿梭;块“在同一侧”.gif|穿梭;块“在同一侧”&lt;br /&gt;
文件:穿梭机;块“在不同的侧面”.gif|穿梭机;块“在不同的侧面”&lt;br /&gt;
文件:蜂王环穿梭机.gif|蜂王环穿梭机&lt;br /&gt;
文件:火花穿梭机.gif|火花穿梭机&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 滑翔机枪示例 ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:销毁式滑翔机枪.gif|销毁式滑翔机枪&lt;br /&gt;
文件:Gosper滑翔机枪.gif| Gosper滑翔机枪 &lt;br /&gt;
文件:Gosper滑翔机双枪.gif| Gosper滑翔机双枪 &lt;br /&gt;
文件:Simkin滑翔机枪.gif| Simkin滑翔机枪 &lt;br /&gt;
文件:Simkin滑翔机枪（单侧）.gif| Simkin滑翔机枪（单侧） &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 图灵机示例 ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:元胞图灵机.gif|这个图灵机是无限的，因为它需要无限长的磁带来执行任意计算。一个周期需要 11040 代。&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 生命游戏里的细胞示例 ===&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:细胞.png|绿色圆圈处有无滑翔机决定了细胞是“死的”还是“活的”。&lt;br /&gt;
文件:深细胞.png|绿色圆圈中滑翔机的存在与否决定了 ''A0'' 中的这个单元格是“死的”还是“活的”。红色圆圈中圈出的三个方块的存在与否决定了 ''B0'' 中的这个单元格是 “死的” 还是 “活的”。&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==不可判定性==&lt;br /&gt;
生命游戏中的许多模式最终成为静止态、振荡态和太空船态的组合; 其他模式可以被称为混沌。 一个模式可能会在很长一段时间内保持混乱，直到它最终稳定为这样一个组合。生命是无法判定的，这意味着给定一个初始模式和一个后来的模式，没有算法能够判断后来的模式是否会出现。 这是不确定问题的必然结果: 从一个最初的输入开始，在给定参数的情况下，模型是会一直运行下去还是结束运行。&amp;lt;ref&amp;gt;Elwyn R. Berlekamp, John H. Conway, and Richard K. Guy, Winning Ways for your Mathematical Plays. Academic Press, 1982&amp;lt;/ref&amp;gt;事实上，由于生命游戏包含一个相当于通用图灵机的模式，这个决策算法，如果它存在的话，可以用来解决停机问题，方法是将初始模式作为对应于一个通用图灵机加上一个输入的模式，将后面的模式作为对应于一个通用图灵机的停机状态的模式。 同时，一些模式永远保持着混乱的状态。 如果不是这样的话，你可以按顺序进行游戏，直到一个非混乱的模式出现，然后计算是否会出现一个后来的模式。&lt;br /&gt;
&lt;br /&gt;
==自我复制==&lt;br /&gt;
2010年5月18日，安德鲁·约翰·韦德 Andrew John Wade宣布了一个自我构建的模式，被称为“双子座” ，在摧毁母体的同时创建一个自我复制品。&amp;lt;ref&amp;gt;{{cite web|url=http://conwaylife.com/forums/viewtopic.php?f=2&amp;amp;t=399&amp;amp;p=2327#p2327 |title=Universal Constructor Based Spaceship |publisher=Conwaylife.com |accessdate=2012-06-24}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://conwaylife.com/wiki/index.php?title=Gemini |title=Gemini – LifeWiki |publisher=Conwaylife.com |accessdate=2012-06-24}}&amp;lt;/ref&amp;gt; 这种模式经过3400万代的复制，使用由滑翔机制成的指令带在两个由查普曼-格林结构臂构成的稳定结构之间来回摆动。 这些，反过来，会创建新的副本的模式，并销毁以前的副本。 双子座也是太空船态，是生命游戏中建造的第一艘倾斜的太空船，它既不是正交的也不是纯对角的。&amp;lt;ref&amp;gt;Aron, Jacob (16 June 2010). &amp;quot;First replicating creature spawned in life simulator&amp;quot; [https://www.newscientist.com/article/mg20627653.800-first-replicating-creature-spawned-in-life-simulator.html]. New Scientist. Retrieved 12 October 2013.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;&amp;quot;Gemini – LifeWiki&amp;quot; [http://www.conwaylife.com/wiki/Types_of_spaceships#Knightship].Conwaylife.com. Retrieved 2013-10-16.&amp;lt;/ref&amp;gt;2015年12月，斜对角线版的双子座建成了。 &amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/Demonoid|title=Demonoid|publisher=LifeWiki|access-date=18 June 2016}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
2013年11月23日，Dave Greene 在 Conway 的《生命游戏》中制造了第一个复制因子，这个复制因子可以创建一个完整的自我拷贝，包括指令带。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=2&amp;amp;t=1006&amp;amp;p=9917#p9901|title=Geminoid Challenge|publisher=Conwaylife.com|accessdate=2015-06-25}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
2018年10月，Adam p. Goucher 完成了0E0P metacell 的建造工作，这是一个可以存储自我复制的 metacell。 这与之前的元细胞不同，比如 Brice Due 的 OTCA metapixel，它只能理附近已经构建好的副本。&amp;lt;ref&amp;gt;{{Citation|last=Passe-Science|title=Automate Cellulaire - Passe-science #27|date=2019-05-29|url=https://www.youtube.com/watch?v=CfRSVPhzN5M|access-date=2019-06-25}}&amp;lt;/ref&amp;gt;  0E0P 元细胞的工作原理是使用构造臂来创建模拟编程规则的副本。 对 Conway’ s Life 或其他 Moore 邻居规则的实际模拟是通过使用具有更多状态的冯诺依曼邻域来模拟一个等价规则来完成的。&amp;lt;ref&amp;gt;{{Cite web|url=https://cp4space.wordpress.com/2018/11/12/fully-self-directed-replication/|title=Fully self-directed replication|last=apgoucher|date=2018-11-12|website=Complex Projective 4-Space|language=en|access-date=2019-06-25}}&amp;lt;/ref&amp;gt;0E0P 是“ Zero Encoded by Zero Population”的缩写，这意味着0E0P 元胞不是处于“关闭”状态，而是在细胞进入“关闭”状态时自行移动，留下空白空间。&amp;lt;ref&amp;gt;{{Cite web|url=http://www.conwaylife.com/wiki/0E0P|title=0E0P metacell - LifeWiki|website=www.conwaylife.com|access-date=2019-06-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==迭代==&lt;br /&gt;
从网格上最随机的细胞初始模式中，观察者会发现人口随着时代的推移而不断变化。 从简单规则中产生的模式可以被认为是数学美的一种形式。 没有初始对称性的孤立的小亚模式趋向于对称。 一旦这种情况发生，对称性可能会增加丰富性，但它不会丢失，除非附近的子模式接近到足以干扰它。 在极少数情况下，社会最终会消亡，所有的活细胞都会消失，尽管这种情况可能不会发生很多代。 大多数最初的模式最终会结束，产生稳定的数字或模式，永远在两个或两个以上的状态之间振荡; &amp;lt;ref&amp;gt;{{cite web|url=http://www.geocities.com/conwaylife/|author=Andrzej Okrasinski|title=Game of Life Object Statistics|accessdate=July 12, 2009|archiveurl=https://web.archive.org/web/20090727010353/http://geocities.com/conwaylife/ |archivedate=2009-07-27}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/soup/|archiveurl=https://web.archive.org/web/20090910010849/http://conwaylife.com/soup/ |archivedate=2009-09-10|author=Nathaniel Johnston|title=The Online Life-Like CA Soup Search|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;许多还产生一架或多架滑翔机或太空飞船，它们可以无限期地远离最初的位置。 由于基于最近邻的规则，没有任何信息能够以大于每单位时间一个单元的速率通过网格，所以这个速度被称为光的细胞自动机速度，并用 c 表示。&lt;br /&gt;
&lt;br /&gt;
==算法==&lt;br /&gt;
[[file:Oscillator.gif|right|400px|thumb|来自2-D六角形生命游戏的48步振荡器以及2步振荡器和4步振荡器的样本（规则H：B2 / S34）]]&lt;br /&gt;
在具有未知前景的早期模式，如 R-pentomino，使世界各地的计算机程序员编写程序来跟踪生命模式的演变。 大多数早期的算法是相似的: 它们将生命模式表示为计算机内存中的二维数组。 通常使用两个数组: 一个用于保存当前生成，另一个用于计算其后续数组。 通常0和1分别代表死细胞和活细胞。 嵌套的 for 循环依次考虑当前数组的每个元素，计算每个单元格的活动邻居，以决定后续数组的相应元素是0还是1。对于下一次迭代，数组交换角色，以便上一次迭代中的后继数组成为下一次迭代中的当前数组。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
对这个基本方案进行各种小的改进是可能的，并且有许多方法可以节省不必要的计算。 如果一个单元格在上一个时间步骤中没有发生更改，而且其邻居也没有发生更改，则保证该单元格在当前时间步骤中也不发生更改。 因此，跟踪哪些区域处于活动状态的程序可以通过不更新非活动区域来节省时间。&amp;lt;ref&amp;gt;{{cite web|url=http://www.ibiblio.org/lifepatterns/lifeapplet.html|title=About my Conway's Game of Life Applet|author=Alan Hensel|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
为了避免计数循环中的决定和分支，规则可以以自我为中心的方法从内域对其邻域的重新设定，科学观察者的观点: 如果一个给定邻域的所有九个场之和为3，下一代的内域状态将是生存; 如果全场和为4，内域保持其当前状态; 其他的和，则内域状态是死亡。&lt;br /&gt;
&lt;br /&gt;
如果希望节省内存，可以将存储量减少到一个数组加两个行缓冲区。 一个行缓冲区用于计算一行的继承状态，然后第二个行缓冲区用于计算下一行的继承状态。 然后将第一个缓冲区写入其行，并释放以保存第三行的继承者状态。 如果使用环形数组，则需要第三个缓冲区，以便保存数组中第一行的原始状态，直到计算最后一行。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
原则上，生命域是无限的，但计算机的内存是有限的。 当活动区域侵入阵列的边界时，这就会导致问题。 程序员使用了几种策略来解决这些问题。 最简单的策略是简单地假设阵列外的每个单元格都已死亡。 这是很容易编程，但会导致不准确的结果，使得活动区跨越边界。 一个更复杂的技巧是考虑将场的左右边缘结合在一起，以及顶部和底部边缘，生成一个环形阵列。 其结果是，跨越场边缘的活动区域在相反的边缘重新出现。还可以使用动态存储分配技术，创建越来越大的数组来保存生长模式。 有时对有限域上的生命进行明确的研究; 有些实现，例如 Golly，支持在标准无限域、一维无限域或有限域中进行选择，并可选择柱面、环面或[https://en.wikipedia.org/wiki/M%C3%B6bius_strip Möbius strip]。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
或者，程序员可以放弃用二维数组表示 Life 字段的概念，而使用不同的数据结构，例如用坐标对表示活细胞的向量。 这种方法允许模式在场中不受阻碍地移动，只要人口不超过活动坐标阵列的大小。 缺点是计算生存的邻居变成了散列表查找或搜索操作，降低了模拟速度。 使用更复杂的数据结构，这个问题也可以基本上得到解决。&lt;br /&gt;
&lt;br /&gt;
对于在非常长的时间深度探索大型模式，像 Hashlife 这样的复杂算法可能是有用的。 还有一种方法，也适用于其他细胞自动机，用任意的异步更新来实现生命游戏，同时仍然完全模仿同步游戏的行为。&amp;lt;ref&amp;gt;{{cite conference|title=Self-Reproduction in Asynchronous Cellular Automata |first=Chrystopher L. |last=Nehaniv |date=15–18 July 2002 |conference=2002 NASA/DoD Conference on Evolvable Hardware |conference-url=http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=8000 |publisher=IEEE Computer Society Press |location=Alexandria, Virginia, USA |pages=201–209 |isbn=0-7695-1718-8 |doi=10.1109/EH.2002.1029886 }}&amp;lt;/ref&amp;gt; 在 Rosetta Code 中可以找到用各种编程语言(包括 c、 c + + 、 Java 和 Python)实现基本生命游戏场景的源代码示例。&amp;lt;ref&amp;gt;{{cite web|url=http://rosettacode.org/wiki/Conway%27s_Game_of_Life|title=Conway's Game of Life}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==代码实现==&lt;br /&gt;
===Netlogo代码实现===&lt;br /&gt;
代码整体分为两部分，'''setup'''和'''go'''部分。其中setup进行环境的初始化，go进行持续运行。[[媒体文件:Life game.zip|Netlogo源代码]] &lt;br /&gt;
====setup部分====&lt;br /&gt;
setup的核心代码如下：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
patches-own[living]&lt;br /&gt;
&lt;br /&gt;
to setup&lt;br /&gt;
   clear-all&lt;br /&gt;
   reset-ticks&lt;br /&gt;
   ask patches[       &lt;br /&gt;
    if random-float 1 &amp;lt; 0.5 [    #以0.5的概率设置白格，黑白格比例为1:1,可以在实际中将0.5改为其他值，来模拟不同黑白格比例&lt;br /&gt;
      set pcolor white&lt;br /&gt;
    ]&lt;br /&gt;
    set living 0&lt;br /&gt;
  ]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
to go&lt;br /&gt;
  ask patches[&lt;br /&gt;
    set living count neighbors with [pcolor = black]&lt;br /&gt;
  ]&lt;br /&gt;
  ask patches[&lt;br /&gt;
    ifelse pcolor =  black[&lt;br /&gt;
      if living &amp;gt; 3 or living &amp;lt; 2[&lt;br /&gt;
        set pcolor white&lt;br /&gt;
      ]&lt;br /&gt;
    ][&lt;br /&gt;
      if living = 3[&lt;br /&gt;
        set pcolor black&lt;br /&gt;
      ]&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
  tick&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
运行效果如下所示：&lt;br /&gt;
[[File:code1.png|400px|thumb|setup运行初始状态|center]]&lt;br /&gt;
====go部分====&lt;br /&gt;
go按钮在创建之时就设定了持续执行，因此程序会一直进行下去。在每一轮中，程序都会遍历每个格，来判断每个格周围的存活数量。如果黑格周围存活数不等于3，其将死亡，表现为由黑格转为白格。若一个白格周围存活数正好是3，会变为黑色，即为存活状态。在棋盘上所有格子均判断完一轮后，由于设定了持续执行，程序会再次进行遍历，不断循环下去。随着迭代次数的增加，整个环境也会趋于较稳定状态。go部分的核心代码如下：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
  ask patches[&lt;br /&gt;
    ifelse pcolor =  black[&lt;br /&gt;
      if living &amp;gt; 3 or living &amp;lt; 2[&lt;br /&gt;
        set pcolor white&lt;br /&gt;
      ]&lt;br /&gt;
    ][&lt;br /&gt;
      if living = 3[&lt;br /&gt;
        set pcolor black&lt;br /&gt;
      ]&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
运行结果：&lt;br /&gt;
[[File:lgss.gif|400px|thumb|运行过程|center]]&lt;br /&gt;
===Python代码实现===&lt;br /&gt;
以下代码在安装相应的库后复制粘贴便可运行。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
class GameOfLife(object):&lt;br /&gt;
  def __init__(self, cells_shape):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Parameters&lt;br /&gt;
    ----------&lt;br /&gt;
    cells_shape : 一个元组，表示画布的大小。&lt;br /&gt;
    Examples&lt;br /&gt;
    --------&lt;br /&gt;
    建立一个高20，宽30的画布&lt;br /&gt;
    game = GameOfLife((20, 30))    &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # 矩阵的四周不参与运算&lt;br /&gt;
    self.cells = np.zeros(cells_shape)&lt;br /&gt;
    real_width = cells_shape[0] - 2&lt;br /&gt;
    real_height = cells_shape[1] - 2   &lt;br /&gt;
    self.cells[1:-1, 1:-1] = np.random.randint(2, size=(real_width, real_height))&lt;br /&gt;
    self.timer = 0&lt;br /&gt;
    self.mask = np.ones(9)&lt;br /&gt;
    self.mask[4] = 0  &lt;br /&gt;
  def update_state(self):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;更新一次状态&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    buf = np.zeros(self.cells.shape)&lt;br /&gt;
    cells = self.cells&lt;br /&gt;
    for i in range(1, cells.shape[0] - 1):&lt;br /&gt;
      for j in range(1, cells.shape[0] - 1):&lt;br /&gt;
        # 计算该细胞周围的存活细胞数&lt;br /&gt;
        neighbor = cells[i-1:i+2, j-1:j+2].reshape((-1, ))&lt;br /&gt;
        neighbor_num = np.convolve(self.mask, neighbor, 'valid')[0]&lt;br /&gt;
        if neighbor_num == 3:&lt;br /&gt;
          buf[i, j] = 1&lt;br /&gt;
        elif neighbor_num == 2:&lt;br /&gt;
          buf[i, j] = cells[i, j]&lt;br /&gt;
        else:&lt;br /&gt;
          buf[i, j] = 0&lt;br /&gt;
    self.cells = buf&lt;br /&gt;
    self.timer += 1  &lt;br /&gt;
  def plot_state(self):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;画出当前的状态&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    plt.title('Iter :{}'.format(self.timer))&lt;br /&gt;
    plt.imshow(self.cells)&lt;br /&gt;
    plt.show()&lt;br /&gt;
  def update_and_plot(self, n_iter):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;更新状态并画图&lt;br /&gt;
    Parameters&lt;br /&gt;
    ----------&lt;br /&gt;
    n_iter : 更新的轮数&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    plt.ion()&lt;br /&gt;
    for _ in range(n_iter):&lt;br /&gt;
      plt.title('Iter :{}'.format(self.timer))&lt;br /&gt;
      plt.imshow(self.cells)&lt;br /&gt;
      self.update_state()&lt;br /&gt;
      plt.pause(0.2)&lt;br /&gt;
    plt.ioff()&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  game = GameOfLife(cells_shape=(60, 60))&lt;br /&gt;
  game.update_and_plot(200)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
运行效果：&lt;br /&gt;
[[File:lgpy.gif|thumb|400px|Python运行结果|center]]&lt;br /&gt;
'''总结'''：相比较Netlogo与Python实现，可以看出，python实现首先需要构建运行环境，再实现功能，最终实现的功能也并没有NetLogo丰富，建议从NetLogo实现开始。&lt;br /&gt;
&lt;br /&gt;
===Javascript代码实现的模拟程序===&lt;br /&gt;
&lt;br /&gt;
（下载：[https://wiki.swarma.org/applets/java_cellular/game_of_life.zip game_of_life.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/java_cellular/game_of_life.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 550px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==音乐==&lt;br /&gt;
各种音乐创作技术都会使用康威的生命游戏。&amp;lt;ref&amp;gt; Burraston, Dave; Edmonds, Ernest; Livingstone, Dan; Miranda, Eduardo Reck (2004). &amp;quot;CellularAutomata in MIDI based Computer usic&amp;quot; [http://quod.lib.umich.edu/i/icmc/bbp2372.2004.047?view=image]. Proceedings of the 2004 International Computer Music Conference.CiteSeerX 10.1.1.6.3882 httpps://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.3882].hdl:10453/1425 [https://hdl.handle.net/10453%2F1425].&amp;lt;/ref&amp;gt;特别是在 [https://en.wikipedia.org/wiki/MIDI MIDI]旋律中，有各种各样的程序可以从生命游戏中产生的模式中发出声音。&amp;lt;ref&amp;gt; &amp;quot;glitchDS – Cellular Automaton Sequencer For The Nintendo DS&amp;quot; [http://www.synthtopia.com/content/2008/05/29/glitchds-cellular-automaton-sequencer-for-the-nintendo-ds/].Synthtopia.com. 2008-05-29. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt; &amp;quot;Game Of Life Music Sequencer&amp;quot; [http://www.synthtopia.com/content/2009/04/29/game-of-life-music-sequencer/]. Synthtopia.com. 2009-04-29. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;&amp;quot;Game Of Life Music Sequencer For iOS, Runxt Life&amp;quot; [http://www.synthtopia.com/content/2011/01/12/game-of-life-music-sequencer-for-ios-runxt-life/]. Synthtopia.com. 2011-01-12. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 游戏试玩 ==&lt;br /&gt;
下面是康威生命游戏的玩法演示。您可以选择不同的初始模式，点击开始按钮▷来观察元胞的演化过程，点击'更新为初始状态'按钮来重置游戏，选择Empty模式可以自定义游戏的初始状态。&lt;br /&gt;
此游戏的源代码来自github：https://github.com/rowett/lifeviewer&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/lifeviewer/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 980px; height: 730px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Aliquot_sequence|Aliquot sequence 真因子数列]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Artificial_life 人工生命]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Glory_Season Glory Season 荣耀之季]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Langton%27s_ant 朗顿蚂蚁]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Poietic_Generator 电子发生器]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system 反应扩散系统]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
&lt;br /&gt;
====[https://pattern.swarma.org/path?id=11 人工生命入门路径]====&lt;br /&gt;
[[File:706dc47a9fa44219bbc25f3d4332d23f.png|600px|right|thumb|[https://campus.swarma.org/course/594 探索元胞自动机]]]&lt;br /&gt;
该文章整理自Lana Sinapayen为人工智能研究者们提供的一份人工生命入门指南，主要介绍了人工生命的研究目标、简史以及与人工智能之间的关系。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://conwaylife.com/ 生命游戏]====&lt;br /&gt;
该网站是一个在线的生命游戏网站，可实际体验生命游戏过程。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===相关课程===&lt;br /&gt;
[[File:swarma2-1551174608.gif|400px|right|thumb|[https://swarma.org/?p=14794 算法描绘的“人造生命”，运动流畅自然，如同显微镜下的实景]]]&lt;br /&gt;
====[https://campus.swarma.org/course/1098 用“生命游戏”认识Patch]====&lt;br /&gt;
该课程利用NetLogo搭建出“生命游戏”这个虚拟宇宙。并在该过程中了解NetLogo中的Patch（即方格）对象，以及if，ifelse，随机数发生器random-float等最基本的语法。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/594 课程视频：探索元胞自动机]====&lt;br /&gt;
该课程可以帮助初学者将更加深入地探索元胞自动机的其它方面，并进行有趣的现实创造，比如元胞自动机创造的音乐。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/593 课程视频：认识元胞自动机]====&lt;br /&gt;
该课程带领初学者将进入到元胞自动机的学习中，并运用Netlogo完成计算机模拟。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
===集智相关文章===&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=14794 算法描绘的“人造生命”，运动流畅自然，如同显微镜下的实景]====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:11795|11795]]用户参与编译，[[用户:Ilseyao1980|Ilseyao1980]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:模拟程序]]&lt;br /&gt;
[[category:元胞自动机]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45516</id>
		<title>迭代函数系统</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45516"/>
		<updated>2025-07-11T03:33:51Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=分形,IFS,有限收缩映射集&lt;br /&gt;
|description=是一种构造分形几何的方法&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Sierpinski_triangle.png|thumb|right|250px|使用IFS创建的Sierpinski三角形（用颜色来说明自相似结构）。]]&lt;br /&gt;
[[File:Chris Ursitti fractal 0000.png|thumb|right|200px| 彩色 IFS 使用Apophysis 软件设计，使用Electric Sheep渲染。]]&lt;br /&gt;
在数学中，'''迭代函数系统 iterated function systems（IFS）'''是一种构造[[分形几何 Fractal]]的方法；产生的分形通常是自相似的。IFS分形与集合论的关系比分形几何更大。&amp;lt;ref name=&amp;quot;picg&amp;quot;&amp;gt;{{cite book |title=Progress in Computer Graphics: Volume 1 |last=Zobrist |first= George Winston |author2=Chaman Sabharwal |year=1992 |publisher=Intellect Books |isbn=9780893916510 |page=135 |url=https://play.google.com/store/books/details?id=Ai6Qo0qoE9EC |accessdate=7 May 2017}}&amp;lt;/ref&amp;gt;它们于1981年被提出。&lt;br /&gt;
&lt;br /&gt;
IFS分形，正如他们被通常称呼一样，可以是任何维度的，但通常在2维空间计算和绘制。分形是由其本身的几个副本的结合体组成，每个副本都由一个函数变换而成（因此称为 &amp;quot;函数系统&amp;quot;）。典型的例子是[[谢尔宾斯基三角形]] Sierpiński triangle。这些函数通常是收缩的，这意味着它们使点更接近，使形状更小。因此，IFS分形的形状是由若干个可能重叠的较小副本组成的，每个副本也是由自己的副本组成的，无穷无尽[[ad infinitum]]。这就是其自相似分形性质的来源。&lt;br /&gt;
&lt;br /&gt;
自相似分形的javascript模拟程序（下载：[https://wiki.swarma.org/applets/java_ifs/ifs.zip ifs.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/java_ifs/ifs_fractal_generator.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 780px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==定义==&lt;br /&gt;
从形式上看，迭代函数系统是一个完整的度量空间上的有限收缩映射集。&amp;lt;ref&amp;gt;Michael Barnsley (1988). ''Fractals Everywhere'', p.82. Academic Press, Inc{{cite book |isbn=9780120790623}}&amp;lt;/ref&amp;gt;符号表示为，&lt;br /&gt;
:&amp;lt;math&amp;gt;\{f_i:X\to X\mid i=1,2,\dots,N\},\ N\in\mathbb{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
如果每个&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都是完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;上的收缩，则是一个迭代函数系统。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==性质==&lt;br /&gt;
[[File:Chaosgame.gif|thumb|right|250px|通过[[chaos game]] (动画) 构建的一个IFS]]&lt;br /&gt;
[[File:Ifs-construction.png|thumb|IFS由两个函数构建。]]&lt;br /&gt;
&lt;br /&gt;
约翰·哈钦森 Hutchinson(1981)表明，对于度量空间&amp;lt;math&amp;gt;&amp;lt;mathbb{R}^n&amp;lt;/math&amp;gt;，或者更一般地说，对于一个完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;，这样的函数系统有一个唯一的非空紧凑(闭合且有界)的固定集S。构造固定集的一种方法是，从初始的非空的闭且有界集合S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;开始，迭代f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;的作用，取S&amp;lt;sub&amp;gt;n+1&amp;lt;/sub&amp;gt;为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;在f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;下的图像的联合；然后取S为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;的联合的闭合。用符号可以表示为，唯一的固定(非空紧凑)集合&amp;lt;math&amp;gt;S&amp;lt;subseteq X&amp;lt;/math&amp;gt;具有如下性质:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S = \overline{\bigcup_{i=1}^N f_i(S)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
集合''S''因此是[[Hutchinson算子]]的固定集。&amp;lt;math&amp;gt;F: 2^X/to 2^X&amp;lt;/math&amp;gt;定义为&amp;lt;math&amp;gt;A/subseteq X&amp;lt;/math&amp;gt;，通过&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(A)=\overline{\bigcup_{i=1}^N f_i(A)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''S''的存在性和唯一性是压缩映像原理的结果，就如&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\lim_{n\to\infty}F^{\circ n}(A)=S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
对于&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;中的任何非空紧集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;。(对于收缩型IFS，即使对于任何非空的闭合有界集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;，也会发生这种收敛。)。任意接近''S''的随机元素可以通过下面描述的 &amp;quot;chaos game &amp;quot;获得。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最近，人们证明了非收缩型的IFS(即由相对于''X''中的任何拓扑等价度量不收缩的映射组成)可以产生吸引子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些都是在投影空间中自然产生的，尽管经典的圆上的无理旋转也可以适应。&amp;lt;ref&amp;gt;M. Barnsley, A. Vince, The Chaos Game on a General Iterated Function System&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
函数的集合&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;能产生是运算下的独异点。如果只有两个这样的函数，那么这个单体可以可视化为一棵二叉树，在树的每一个节点上，我们可以用一个或另一个函数进行合成（''即''取左支或右支）。一般来说，如果有''k个''函数，那么可以将单子可视化为一个完整的[[k-ary树|''k-''ary树]]，也称为[[Cayley tree]]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==构建==&lt;br /&gt;
[[File:Fractal_fern_explained.png|thumb|upright|[[Barnsley's fern]]，一个早期的 IFS]]&lt;br /&gt;
[[File:Menger sponge (IFS).jpg|thumb|200px|[[Menger sponge]]，一个3维的 IFS.]]&lt;br /&gt;
[[File:Coupe d'arbre.png|thumb|IFS &amp;quot;tree&amp;quot; constructed with non-linear function Julia|链接=Special:FilePath/Coupe_d'arbre.png]]&lt;br /&gt;
[[File:HERBO_avecTige.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;140&amp;quot;&amp;gt;&lt;br /&gt;
File:Golden_Square_fractal_6.png|[[Golden ratio|Golden square]] 分形&lt;br /&gt;
File:Half_square_fractal_5.svg.png| 半分形&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有时，每个函数&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都必须是线性变换，或者更一般的仿射变换，因此用矩阵表示。然而，IFS也可以由非线性函数建立，包括[[projective transformation]]和[[Möbius transformation]]。[[Fractal flame]]是一个非线性函数的IFS的例子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
计算IFS分形最常用的算法叫做“混沌游戏 chaos game”。它包括在平面上随机选取一个点，然后反复应用从函数系统中随机选取的一个函数来变换该点，去得到下一个点。另一种算法是生成每一个可能的函数序列，直到给定的最大长度，然后将这些函数序列中的每一个应用于初始点或形状的结果绘制出来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些算法中的每一种都提供了一个全局结构，生成分布在整个分形上的点。如果正在绘制分形的一小块区域，这些点中的许多将落在屏幕边界之外。这使得放大以这种方式绘制的IFS结构不切实际。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
虽然IFS的理论要求每个功能都是收缩的，但实际上实现IFS的软件只要求整个系统平均是收缩的。&amp;lt;ref&amp;gt;{{cite web |last=Draves |first=Scott |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==分割迭代函数系统==&lt;br /&gt;
分割迭代函数系统 partitioned iterated function systems（PIFS），也叫局部迭代函数系统，&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt; 给出了令人惊讶的良好的图像压缩效果，即使是对于那些看起来不具有简单的IFS分形所显示的自相似结构的照片。&amp;lt;ref name=&amp;quot;SIGGRAPH'92&amp;quot;&amp;gt;{{cite conference|url= https://karczmarczuk.users.greyc.fr/matrs/Dess/RADI/Refs/fractal_paper.pdf|last= Fischer|first= Yuval|title= SIGGRAPH'92 course notes - Fractal Image Compression|conference= SIGGRAPH|conference-url= http://www.siggraph.org/|editor= Przemyslaw Prusinkiewicz|publisher= [[ACM SIGGRAPH]]|volume= Fractals - From Folk Art to Hyperreality|date= 1992-08-12}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==逆问题==&lt;br /&gt;
有非常快速的算法可以从一组IFS或PIFS参数生成图像。与存储和传输图像中每个像素的颜色相比，存储描述如何创建图像、将该描述传输到目标设备并在目标设备上重新生成图像的速度更快，所需的存储空间也更小。&amp;lt;ref name=&amp;quot;lacroix&amp;quot;&amp;gt;Bruno Lacroix. [http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/ftp01/MQ36939.pdf &amp;quot;Fractal Image Compression&amp;quot;]. 1998.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
逆问题比较困难：给定一些原始的任意数字图像，如一张数字照片，试图找到一组IFS参数，通过迭代评估后，产生另一幅与原始图像视觉上相似的图像。在1989年，Arnaud Jacquin 提出了一个只用 PIFS 的限制形式的反问题的解，反问题的一般形式仍未解决。&amp;lt;ref&amp;gt;Dietmar Saupe, Raouf Hamzaoui.[https://www.uni-konstanz.de/mmsp/pubsys/publishedFiles/SaHa94.pdf &amp;quot;A Review of the Fractal Image Compression Literature&amp;quot;].&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;kominek&amp;quot;&amp;gt;John Kominek.&lt;br /&gt;
[https://pdfs.semanticscholar.org/d77b/ffac2560c92771d3756c0e29863a44919d6f.pdf &amp;quot;Algorithm for Fast Fractal Image Compression&amp;quot;]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt;并由迈克尔·巴恩斯利的著作《分形无处不在》而流行开来。1992年，斯科特·德拉维斯发明了分形火焰算法。截至1995年，所有分形压缩软件都是基于Jacquin的方法。&amp;lt;ref name=&amp;quot;kominek&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==范例==&lt;br /&gt;
&lt;br /&gt;
该图显示了两个仿射函数在IFS上的构造。这两个函数用它们对双单位正方形的影响来表示（函数将轮廓正方形转化为阴影正方形）。两个函数的组合形成[[Hutchinson算子]]。图中显示了该算子的三次迭代，然后是定点的最终图像，即最终的分形。&lt;br /&gt;
&lt;br /&gt;
IFS可以生成分形的早期例子包括[[Cantor set]]，最早描述于1884年；[[de Rham curve]]，[[Georges de Rham]]在1957年描述的一种自相似曲线。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==进一步阅读==&lt;br /&gt;
{{Portal|Mathematics}}&lt;br /&gt;
*[[Complex-base system#Base .E2.88.921.C2.B1i|Complex-base system]]&lt;br /&gt;
*[[Collage theorem]]&lt;br /&gt;
*[[Infinite compositions of analytic functions]]&lt;br /&gt;
*[[L-system]]&lt;br /&gt;
*[[Fractal compression]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==相关链接==&lt;br /&gt;
*{{cite web |last=Draves |first=Scott |author-link=Scott Draves |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&lt;br /&gt;
*{{cite book |last=Falconer |first=Kenneth |author-link=Kenneth Falconer (mathematician) |title=Fractal geometry: Mathematical foundations and applications |url=https://archive.org/details/fractalgeometrym0000falc/page/113 |url-access=registration |publisher=John Wiley and Sons |year=1990 |isbn=0-471-92287-0 |pages=[https://archive.org/details/fractalgeometrym0000falc/page/113 113–117, 136] }}&lt;br /&gt;
*{{cite journal |last=Barnsley |first=Michael |author-link=Michael Barnsley |author2=Andrew Vince |arxiv=1005.0322 |title=The Chaos Game on a General Iterated Function System |journal=Ergodic Theory Dynam. Systems |volume=31 |year=2011 |issue=4 |pages=1073–1079|bibcode=2010arXiv1005.0322B }}&lt;br /&gt;
*'''For an historical overview, and the generalization :''' {{cite journal |first=Claire|last=David  |  title=fractal properties of Weierstrass-type functions |journal=Proceedings of the International Geometry Center |volume=12 |year=2019 |issue=2 |pages=43–61|url=https://journals.onaft.edu.ua/index.php/geometry/article/view/1485 }}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==编辑推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
====[http://rrd.me/gfyYz  分形对象：形、机遇和维数  Fractals:From,Chance,and Dimension]====&lt;br /&gt;
本书考察和研究出现在自然界中的若干典型分形对象，为我们提供了一个关于分形的内容，意义及方法的扼要介绍。尽管自该书第一版（法文版）问世以来，分形的理论及其应用发展极为迅速，并出现了大量的有关著作，但此书仍不失为分形理论最好的入门书之一&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfzjk  大自然的分形几何 The Fractal Geometry of Nature ]====&lt;br /&gt;
这本书介绍了自然界中各种各样的分形理论，从海岸线、雪花，到河流、星系等自然现象，去阐述分形这一概念。作为多个学科的交叉，分形几何对以往欧氏几何不屑一顾（或说无能为力）的“病态”曲线（如科赫雪花曲线等）的全新解释，是人类认识客观世界不断开拓的必然结果。这说明欧氏几何只是对客观世界的近似反映，而分形几何则深化了这种认识，因此分形几何学是描述各种复杂自然曲线的大自然的几何学。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfz56   市场的（错误）行为：风险、破产与收益的分形观点The Misbehavior of Markets: A Fractal View of Financial Turbulence]====&lt;br /&gt;
《市场的（错误）行为》以分形视角观察金融市场的行为，推翻了作为当代金融分析基础的“随机游走”理论。通过分形模型，市场表现被重新阐释。本书是现代金融理论标准工具和模型的一次革命性重估，书中的观点颠覆了成千上万投资者的既有观念。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===网站资源===&lt;br /&gt;
====[http://www.fxysw.com/forum-12-1.html  分形艺术网]====&lt;br /&gt;
[[File:003522d0gu40lukr822vwu.jpg|400px|right|thumb|分形艺术网作品]]&lt;br /&gt;
分形艺术网是一个展示分形艺术之美，学习交流分形艺术创作的平台，其中包含了很多分形艺术作品及分形资源推荐。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===视频资源===&lt;br /&gt;
====[http://www.ted.com/talks/benoit_mandelbrot_fractals_the_art_of_roughness.html  TED分享视频：伯努·瓦曼德布洛特: 分形和粗糙的艺术 Benoit Mandelbrot: Fractals and the Art of Roughness ]====&lt;br /&gt;
Benoit Mandelbrot的研究使世界对分形有了更深刻的理解，分形是研究粗糙的广泛而有力的工具，在自然界和人类的作品中都是如此。该视频概述了分形的研究，以及它们为许多领域带来的颠覆性见解。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://www.bilibili.com/video/av13766486/?p=2  寻找隐藏的维 Hunting the Hidden Dimension]====&lt;br /&gt;
什么是电影特效，股票市场，和心脏病的共同点？它们连接了一个革命性的新的数学分支，改变了我们看世界，开辟了广阔的新领域，以科学的分析和理解。数学家们开发不规则碎片形是从单纯的好奇心到接触几乎每一个分科的理解，包括我们宇宙的命运。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===课程推荐===&lt;br /&gt;
[[File:分形课程.png|400px|thumb|upright=3|[https://campus.swarma.org/play/coursedetail?id=10419  系统科学简史与现代复杂系统科学,本课程主要探讨了现代复杂系统科学的研究主题，同时也介绍了系统科学的历史，生命游戏与分形结构等知识点]|right]]&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10621  分形与奇异吸引子的几何学]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。主讲人为Steven Strogatz。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10698  分形的世界]====&lt;br /&gt;
在此堂课程，主要介绍了关于分形的思想与脉络，分形现象、分形维数、利用分形规律的计算方法以及混沌。主讲人为北京师范大学系统学院狄增如教授。狄增如教授主要从事复杂网络和经济（金融）物理学等方面的研究，是国内最早从事经济物理学研究的学者之一。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===集智百科文章===&lt;br /&gt;
*[https://mp.weixin.qq.com/s/XpdpBfeMgN43HC7BXAbdIQ  与树共舞：分形舞蹈可视化]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/WIoTavOE1c98USA1cGoPmw?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552553&amp;amp;enterid=1584552553  城市为何遵循规模法则？分形几何揭开幂律成因]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/AGt-C281sPBa25fXAWhoJA?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552710&amp;amp;enterid=1584552710  混沌、分形理论及其在信息科学中的应用 | IWCFTA2018]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:Eatcosmos2|Eatcosmos2]]编译，[[用户:Inch|Inch]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[分类:Iterated function system fractals 迭代函数系统分形]]&lt;br /&gt;
[[分类:1981 introductions]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=L%E7%B3%BB%E7%BB%9F&amp;diff=45515</id>
		<title>L系统</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=L%E7%B3%BB%E7%BB%9F&amp;diff=45515"/>
		<updated>2025-07-11T03:30:48Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, L系统,分形&lt;br /&gt;
|description=人工生命, L系统,分形&lt;br /&gt;
}}&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
* 名 称：数字花园&lt;br /&gt;
* 作 者：Keats（程序），[[Jake]]（文章）&lt;br /&gt;
* 源代码：[[Media:Java_lsys.zip]]&lt;br /&gt;
&lt;br /&gt;
L系统的javascript程序（下载：[https://wiki.swarma.org/applets/lsv/lsys.zip lsys.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/lsv/&amp;quot; style=&amp;quot;display: block; width: 850px; height: 600px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lindermayer系统（简称L系统）是另外一种分形图形生成的方法，其主要原理是设定基本简单的绘图规则，然后让计算机根据这些规则进行反复跌代，就可以生成各种各样的图形来。用L系统可以非常逼真的模拟植物的生长过程。上面的程序就是L系统的一个展示。我们已经设定好了一个规则库，你可以通过选择不同的规则画出不同的图形来，同时，你可以通过“设置参数”来改变这些规则从而画出你自己的图形来&lt;br /&gt;
&lt;br /&gt;
=原理= &lt;br /&gt;
  &lt;br /&gt;
你所看到的所有复杂图形都是用非常简单的规则生成的！究竟是怎么生成的呢？首先，我们来考察一下人们画图的过程。无论什么样的复杂图形，我们都可以把图形看成若干线条构成的，而一个线条是由起点和它的方向决定的，这样，人们复杂的画图动作可以分解为若干线条的连接组合。根据这些，我们来讨论计算机绘图。&lt;br /&gt;
&lt;br /&gt;
首先，计算机绘图也是要确定一个起始点和开始画线的方向这叫做初始状态，当画图进行到任意一个阶段的时候，我们可以用（x,y,a）这三个量来确定任意一个画图的状态，即当前的坐标x,y和当前要画线条的方向角a。然后，我们需要考虑的是状态到状态是如何转换的。我们把状态之间的转换称为动作，不难看出，仅仅用平移和旋转方向就能完成状态之间的转换。接下来，我们用符号定义一些简单的动作（包括评议、旋转和辅助动作）。&lt;br /&gt;
&lt;br /&gt;
F：表示在当前的位置画一条长为l的直线段。l是由用户事先任意设定的数值，表示基本线段的长度。&lt;br /&gt;
&lt;br /&gt;
+：表示逆时针旋转一个角θ，θ的数值由用户事先确定&lt;br /&gt;
&lt;br /&gt;
-：表示顺时针旋转一个角θ；&lt;br /&gt;
&lt;br /&gt;
[：表示暂时保存当前的画图状态&lt;br /&gt;
&lt;br /&gt;
]：表示提取出保存的画图状态。 “[”和“]”要成对的出现。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这样，确定了开始的坐标和方向，由上面符号组成的任意的一系列指令就能指导画图了。比如：FF+F，其中长度l=1,θ=90度角，开始坐标是2，0，开始方向角是90度。&lt;br /&gt;
&lt;br /&gt;
其中蓝色的线条是画图指令画出的图。开始的时候画图状态为(2,0,90)，也就是说起点在2,0这个点，并且这个时候画图的方向是朝上的，然后开始画指令F，它的意思是方向不变，往前走1个步长并且画线连接上起始的点和下一个将要移动到的点(2,1)，因此画图机器就往正上方画了一条蓝色的长度为1的线段，并且把当前的状态改为了(2,1,90)就是说坐标移动到了2，1这个点，而方向角没变还是垂直向上。接下来画下一个F，仍然是朝上方画一个长度为1的线段。然后是+表示画图状态的方向逆时针旋转90度，然后这个时候的状态变为(2,2,180)，就是说坐标为(2,2)方向朝左方。然后再画一个F，就是往左画一个小线段状态改为(1,2,90)，到此画图命令FF+F执行结束。综合起来，我们能得到下面的表：&lt;br /&gt;
&lt;br /&gt;
下面看看比较复杂的画图指令：FF[+F][-F]，起始状态和刚才一样仍然是(2,0,90)，且l为1，转角为90度。&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|指令||状态||画图动作&lt;br /&gt;
|-&lt;br /&gt;
|起始时刻||(2,0,90)||无&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,1,90)||向上画一条长为1的线段&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,2,90)||向上画一条长为1的线段&lt;br /&gt;
|-&lt;br /&gt;
||+||(2,2,180)||逆时针旋转90度，不画图&lt;br /&gt;
|-&lt;br /&gt;
|F||(1,2,180)||向左画一条长为1的线段&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
前两个F和上面叙述的执行情况差不多，下面开始讲&amp;quot;[&amp;quot;操作，&amp;quot;[&amp;quot;操作的含义就是把当前的画图状态先存起来，假设有一个大皮包M可以存放这些状态，那么当执行完操作FF的时候，画图状态是(2,2,90)，下面遇到了&amp;quot;[&amp;quot;&lt;br /&gt;
命令，那么我们把这个状态存到皮包M中，这样M={(2,2,90)}，表示M中有一个状态为(2,2,90)，&amp;quot;[&amp;quot;指令除了存储状态到皮包中其他什么动作也不做，当前的状态仍然是(2,2,90)。接下来执行+命令，逆时针旋转90度，则状态变成(2,2,180)，然后是F则往左画一条线段，状态为(1,2,180)。接下来执行指令&amp;quot;]&amp;quot;，它表示从皮包中取出一个状态作为当前的状态，这样，皮包中有一个状态(2,2,90)，因此当前的状态就变为了(2,2,90)，也就是说我们的铅笔回到了(2,2)点，并且方向朝上，这个时候由于从皮包M中取走了东西，所以皮包就空了。结下的指令为[依然把状态(2,2,90)存到皮包中，然后-则顺时针旋转90度，状态变为(2,2,0)，执行F则往右画一条线段。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
画这个图形的命令执行、当前状态、存储情况如下表：&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|指令||状态||M中存储的值||画图动作&lt;br /&gt;
|-&lt;br /&gt;
|起始时刻||(2,0,90)||空||无&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,1,90)||空||向上画一条长为1的线段&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,2,90)||空||向上画一条长为1的线段&lt;br /&gt;
|-&lt;br /&gt;
|[||(2,2,90)||(2,2,90)||无&lt;br /&gt;
|-&lt;br /&gt;
||+||(2,2,180)||(2,2,90)||逆时针旋转90度，不画图&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,1,180)||(2,2,90)||向左画一条长为1的线段&lt;br /&gt;
|-&lt;br /&gt;
|]||(2,2,90)||空||无&lt;br /&gt;
|-&lt;br /&gt;
|[||(2,2,90)||(2,2,90)||无&lt;br /&gt;
|-&lt;br /&gt;
||-||(2,2,0)||(2,2,90)||无&lt;br /&gt;
|-&lt;br /&gt;
|F||(2,3,0)||(2,2,90)|| 向右画一条长为1的线段 &lt;br /&gt;
|-&lt;br /&gt;
|]||(2,2,90)||空||无&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
我们已经知道了由F,+,-,[,]这样的符号可以构成一串画图的指令指导机器画图，也就是说给定一个符号串就能对应的画出这个符号串代表的图形，那么如果用一种办法能够生成这样的符号串序列，那么相当于可以构造出图形来。这种生成指令的办法是什么呢？答案就是产生式系统。&lt;br /&gt;
&lt;br /&gt;
产生式（也叫做规则）是形如X-&amp;gt;Y的式子，其中X叫做左件，Y叫做右件。X-&amp;gt;Y表示X能够推导出Y。如果X是一个字符串，Y也是字符串，那么X-&amp;gt;Y表示能够用Y来替换X。例如如果给定一个初始时刻的字符串ABXXTT，那么运用规则X-&amp;gt;Y就能把这个字符串变成ABYYTT。如果产生式的右件多于一个字符，那么就能推导出比原来字符串更长的字符串来。例如如果X-&amp;gt;YYY，那么ABXXTT会被替换成ABYYYTT，显然后来的字符串比原来的长。我们已经看到了从简单的字符串生成复杂字符串的可行性了。&lt;br /&gt;
&lt;br /&gt;
接下来，要说明的是产生式可以进行嵌套的表示，比如说X-&amp;gt;XY就是一种嵌套的形式。因为当你用右件XY代替前件X的时候产生的新字符又会产生X，而X又可以运用规则X-&amp;gt;XY，这样可以无限次的迭代下去。&lt;br /&gt;
&lt;br /&gt;
好了，有了产生式就不难理解产生式系统了，它就是由若干个产生式构成的一组语句。并且各个产生式之间可以相互替换字符串。比如如下的产生式系统：X-&amp;gt;YF, Y-&amp;gt;+FX，开始时刻的字符串是X，用这两个规则跌代1次就能得到字符串：+FXF，迭代2次就是+F+FXFF，3次是+F+F+FXFFF，……。（这里跌代一次表示的是用产生式系统中的所有产生式规则都来替换当前的字符串）。我们已经看到，最后的式子就是形如我们上面列举的指令例子，如果把最后的X忽略掉，这个指令串就能指导机器画图了！这就是L系统的工作原理！下面我们以画出下面的枝条为例，再看看L系统是如何运行的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
已知这个图形的产生式系统是：F-&amp;gt;F[+F]F[-F]F，开始的时候字符串是F。转角为-25.7341度。这样，我们跌代6次就可以得到最终的画图指令（太长，此处略去），再把这个指令字符串对应的指导机器画出图形，就能得到上面的图。你可以点击程序中单步运行的按钮，看看系统跌代不同的次数能够产生什么样的图形。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申= &lt;br /&gt;
  &lt;br /&gt;
在这里我们看到了产生式系统是如何产生复杂的符号串序列，而符号串序列又是如何指导画图的。整个这个过程都体现了复杂系统的思想，也就是简单的规则孕育着复杂的行为。不难看出来，程序里的图形大部分都是类似于植物的，那么L系统的方法就给了我们启示，植物的生长是受类似于产生式规则指导的生成过程。如果我们完全把图形上画一条线段理解成植物枝干的一次生长，那么运用L系统的方法我们不难生成类似于真正植物的人工植物。&lt;br /&gt;
&lt;br /&gt;
L系统的方法还能回答这个问题：为什么小小的种子可以孕育整个的植物呢？要知道，自然界的植物形态是非常非常复杂的，因此植物所包含的信息量也是很大的，种子这个小东西怎么能包含整个树木的信息呢？如果你理解了L系统的工作原理，你就不难回答这个问题了，那就是种子中包含的信息不是整个树的信息，而是生成这个树木的规则！而这个规则是简单的，信息量是很小的。这样，树木的生长就是一个根据种子中的规则和自然界的相互作用产生复杂树木的过程。&lt;br /&gt;
&lt;br /&gt;
聪明的人可能会继续问，那种子中的规则从哪里来的呢？答案是自然进化来的，如果把树木理解为指令的生成结果，那么自然选择就是发生在规则层面的事情。也就是说自然选择不是简单的对树木进行直接选择，而是对种子中所蕴含的规则进行选择的。那么，在自然界，规则又是如何决定树木的生长的呢？答案是物理规律！正是自然界中的物理规律完成了从植物种子中解码指导植物生成的过程。&lt;br /&gt;
&lt;br /&gt;
进一步，生命体也是这样，基因记载了指令，也就是生成动物特征的规则，物理规律决定了基因生成生命个体的过程。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:课程推荐.png|400px|thumb|right|[https://swarma.org/?p=13364 分形的世界]]]&lt;br /&gt;
&lt;br /&gt;
===集智视频推荐===&lt;br /&gt;
===[https://campus.swarma.org/course/728 系统科学概论]===&lt;br /&gt;
本课程将从科学发展的基本趋势出发，介绍系统科学的思想、方法和部分研究内容，包括自组织现象、动力学与混沌、分形结构、复杂网络、复杂适应性系统等，同时展示复杂性研究在社会经济系统与生命系统中的应用实例。&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://campus.swarma.org/course/760 分形的世界]===&lt;br /&gt;
本课程中，主要介绍了分形现象、分形维数、利用分形规律的计算方法以及混沌。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
本中文词条由[[用户:不是海绵宝宝|不是海绵宝宝]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
[[分类: 旧网站]] [[分类: 旧网站-虚拟世界]] [[分类: 模拟程序]] [[分类: 分形]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45514</id>
		<title>Floy模拟模型</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45514"/>
		<updated>2025-07-11T03:20:30Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, floy&lt;br /&gt;
|description=人工生命, floy&lt;br /&gt;
}}&lt;br /&gt;
==人工生命Floy模拟程序==&lt;br /&gt;
根据Floy模拟模型制作的javascript程序（下载：[https://wiki.swarma.org/applets/floy/floy_simulition.zip floy_simulition.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/floy/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 750px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Floy模拟模型==&lt;br /&gt;
*名 称：人工生命&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[File:Floy.zip|链接=https://wiki.swarma.org/index.php/Special:FilePath/Floy.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
生命是什么？我们能不能造出生命来？看看上面的程序。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
你看到了什么？一群苍蝇在飞舞？这是简简单单的动画么？这些家伙是“活”的么？我可以告诉你，这群飞舞的动物叫Floy，它既不是苍蝇也不是蝌蚪，而是人工生命！这就是一段简简单单的程序，而且代码的长度才有200多行！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
单击Properties按钮，你可以改变这群Floy的属性，首先我们为了从简单开始把Floy的个数更改为1个看看，点击OK返回以后再按一下Continue按钮，一只Floy在围绕着中心转，也许你会说，这没什么，不就是一个运动的点么？如果更改Floy的个数为2个，那么这两只Floy就会互相追逐着在屏幕上飞行，注意两只Floy的行为就会产生混沌模式了，也就是它们的运动方式几乎是完全不确定的。逐渐增加到15只以上你就会看到一大群生物在那里乱飞了，这很像我们现实世界中的苍蝇行为。点击Strangers按钮，你会看到一只红色的Floy从屏幕的左上角飞进来，注意，它的到来可不寻常，它是一个外来的入侵者！本来相安无事的绿色Floy因为它的到来而变得行为异常起来，它们会突然转过头来进攻红色的入侵者，而红色的Floy会赶忙逃跑。继续点击Strangers按钮，就会有不断的入侵者加入进来，同时原有的Floy群体在减少。你会看到有两群苍蝇在那里追逐。绿色的Floy是本地居民，它会进攻入侵者最后将它杀死。如果幸运，你甚至会看到绿色的Floy们会使用诡计，它们先若无其事的在一起飞即使身边就有一只红色的入侵者，但是突然之间，它会转过头来进攻红色的，让它来不及逃跑。点击Default按钮可以恢复原状。&lt;br /&gt;
&lt;br /&gt;
===模型的规则===&lt;br /&gt;
为什么这一群小点在这么简单的程序之下会有这样复杂的行为？它们是怎么实现的？注意，虽然这也是编程，但我们并不是按照传统的方法对所有Floy的集体行为在每一种可能的情况都编程，而是给每一个个体Floy制定简单的规则，这样Floy集体的复杂行为就会自然而然的涌现出来了！那么个体Floy的规则是什么呢？它是遵循下面的规律：&lt;br /&gt;
&lt;br /&gt;
*首先找到和自己最近的几只（邻居数）的Floy作为自己的邻居；&lt;br /&gt;
*对于每个邻居如果它是自己的同类那么然后分别计算与这些邻居之间的距离；&lt;br /&gt;
**如果太近（距离小于碰撞距离）就朝向远离这个邻居的方向加速飞翔；&lt;br /&gt;
**如果较远（距离大于碰撞距离）就朝向靠近这个邻居的方向加速飞翔；&lt;br /&gt;
*如果邻居是自己的异类；&lt;br /&gt;
**如果这只Floy是绿色的则以非常快的加速度向对方进攻；&lt;br /&gt;
**如果这只Floy是红色的陌生者则当小于碰撞距离的时候以非常快的加速度逃离，并且自己的能量减小；当距离不是很大时，停止加速。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
总体来说，Floy的规则就是选择自己的加速度，并且这种选择仅仅跟自己的邻居有关，也就是说规则都是局部的。而这个程序的关键是要体现整体行为的涌现，也就是说虽然微观上每个Floy个体的规则都是简单的局部的，但是在集体涌现出来的现象却是复杂的并且是不可预测的。人工生命的精髓就是：其实生命现象本身不过是由微观的简单相互作用规律涌现出来的集体复杂行为。&lt;br /&gt;
&lt;br /&gt;
===模型的参数===&lt;br /&gt;
进一步，你可以探索更改参数对这群Floy的影响。你可以点击Behavior按钮，Floy的个性会改变，有温顺的也有疯狂的。它们的行为完全是由几个简单参数制约的，再次点击Properties按钮，那里面的参数制约了每个Floy个体的行为自然也就制约了Floy整体的涌现规律。其中各个参数的意义：加速度就是指每只苍蝇进行加速靠近或者远离的最小加速度值；中心吸引度是为了让Floy能够围绕屏幕中心旋转而让它们的加速度都有一个指向中心的分量；碰撞距离定义多少像素距离是叫做碰撞，从而Floy们选择远离还是靠近；最大速度是为了Floy们的行为不至于太疯狂也就是速度固定一个上限；反弹速度是当Floy撞击墙壁的时候反弹回来的速度；间隔时间是控制整个程序快慢的参数；初始速度是每只苍蝇在开始的初速度；自由重组邻居的概率：为了让Floy们的行为中有一定的随机不确定性，它们会以自由重组邻居的概率重新随机的选择自己的邻居（正常情况下是选择距离最小的若干Floy作为自己的邻居），如果这个概率指定为0那么Floy的行为就没那么有趣了；邻居数目定义了每只Floy可以有多少邻居。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下来我们能干什么？也许你觉得这个简单程序太没趣了，应该把它改为三维的动画。没问题，这个要求还算容易满足。你只要点击这里就能看到三维的Floy。但是因为Java本身的限制，动画不如用Maya之类的三维软件作的好看，但是这个程序却反映了规律的本质，有兴趣的朋友完全可以把这个动画用Maya作一遍，这样你可以给每个Floy赋予贴图裁质，那样也许更有趣。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;br /&gt;
&lt;br /&gt;
==三维的Floy鸟群模拟模型==&lt;br /&gt;
*名 称：3d的Floy&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[媒体文件:Floy3d.zip|Floy3d.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
如果二维的Floy还看得不够过瘾，那么请看三维Floy程序，这里，每个Floy遵循的规则和前面叙述的基本Floy的规则一样，其中每只Floy都有两个邻居。&lt;br /&gt;
&lt;br /&gt;
根据3D Floy模拟模型制作的javascript程序（下载：[https://wiki.swarma.org/applets/floy3d/3d_floy_simulition.zip 3d_floy_simulition.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/floy3d/floys_3d_simulation.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 750px; height: 880px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够[https://wiki.swarma.org/index.php/Efloy 进化的Floy]。&lt;br /&gt;
&lt;br /&gt;
==相关wiki==&lt;br /&gt;
*[[人工生命]]&lt;br /&gt;
*[[生命游戏]]&lt;br /&gt;
*[[Boid模型]]&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
[[File:复杂.jpg|200px|thumb|right|《复杂》封面|链接=https://wiki.swarma.org/index.php/%E6%96%87%E4%BB%B6:%E5%A4%8D%E6%9D%82.jpg]]&lt;br /&gt;
*[https://vdisk.weibo.com/s/BTLfj870SYIar 《复杂》 梅拉妮·米歇尔]&lt;br /&gt;
蚂蚁在组成群体时为何会表现出如此的精密性和具有目的性？数以亿计的神经元是如何产生出像意识这样极度复杂的事物？是什么在引导免疫系统、互联网、全球经济和人类基因组等自组织结构？这些都是复杂系统科学尝试回答的迷人而令人费解的问题的一部分。理解复杂系统需要有全新的方法，需要超过传统的科学还原论，并重新划定学科的疆域。借助于圣塔菲研究所的工作经历和交叉学科方法，复杂系统的前沿科学家米歇尔在《复杂》一书中，以清晰的思路介绍了复杂系统的研究，横跨生物、技术和社会学等领域，并探寻复杂系统的普遍规律。与此同时，她还探讨了复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系。&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*[https://zhuanlan.zhihu.com/p/97717680 超越简单规则——用图神经网络对复杂系统进行自动建模]&lt;br /&gt;
::近期，由北京师范大学张江团队发表的文章《A general deep learning framework for network reconstruction and dynamics learning》在期刊Applied Network Science上刊登，这篇文章提出了一种基于深度学习的数据驱动模型，可以从节点的时间演化数据中重构出网络结构，并且学习到系统的动力学。本文是第一作者张章对该文章内容的解读。&lt;br /&gt;
===课程推荐===&lt;br /&gt;
*[https://campus.swarma.org/course/1095 NetLogo多主体建模入门]&lt;br /&gt;
::本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型，以及如何利用NetLogo去实现。从生命游戏到人工鸟群，从模拟经济系统到病毒沿网络的传播，通过循序渐进的案例，该课程带你逐步走入NetLogo多主体建模的神奇世界。&lt;br /&gt;
*[https://campus.swarma.org/course/596 生物中的多主体模型]&lt;br /&gt;
::本课程将视线转移到生物学领域，展现计算机模拟在生物学中的应用。认识自然现象，我们可以从物理、数学、生物、天文、化学等众多角度去解读，那么怎样将众多的知识综合起来转化为可以用计算机模拟的语言哪？本节课将通过一个模型案例来帮助我们打开思路，更好的去描述和模拟生物现象。&lt;br /&gt;
----本中文词条由[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:Jake Jake]、[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E6%80%9D%E6%97%A0%E6%B6%AF%E5%92%BF%E5%91%80%E5%92%BF%E5%91%80 思无涯咿呀咿呀]用户参与编译，[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E4%B9%90%E5%A4%9A%E5%A4%9A 乐多多]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45512</id>
		<title>Efloy</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45512"/>
		<updated>2025-07-11T02:48:47Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;名 称：进化的人工生命&lt;br /&gt;
&lt;br /&gt;
进化的人工生命（EFloy）的javascript模拟程序（下载：[https://wiki.swarma.org/applets/efloy/efloy.zip efloy.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/efloy/efloys_evolution.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 900px; height: 900px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
上面的程序是在基本的Floy程序的基础上加入了进化机制的版本：首先点击“突变洗牌”（Scramble）按钮这样可以使得我们当前的种群多样化，你会看到每只Floy都有了不一样的颜色，并且它们的行为特征都不尽相同。然后点击“开始进化”（Start Evolution）按钮进化就开始了。注意，一只入侵者飞了进来，只有当入侵者被击毙的时候才开始下一代，这样一代一代的重复下去。你所要的就是静静的观察与等待，也许一些意想不到的事情就在你眼前发生了。&lt;br /&gt;
&lt;br /&gt;
点击“显示规则”（Show Rules）和“显示帮助”（Show Help）按钮你会看到这个程序的使用说明。在这里有必要对每只苍蝇的简单规则再次重复一遍。每只苍蝇只有两条规则，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*与同类交互的规则：&lt;br /&gt;
**找到你周围的同类尽量去靠近它们，但也不能靠的太近；&lt;br /&gt;
*与异类的规则：&lt;br /&gt;
**如果在自己的疆土上则发现了一只入侵者就尾随它并在适当的时机进攻；&lt;br /&gt;
**如果不在自己的疆土上则如果有本地的居民追逐你就赶快逃跑。&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
每一代中的每只Floy都不太一样，它们都有自己的个性，而这些个性都体现在它们的行为上，也就是它们的最大速度、反弹速度、加速度、中心的吸引力、碰撞距离等等属性的不同，如果我们将这些特性编码就能得到每只Floy的染色体，然后再对整个一代的Floy中进行适应度的排序，挑选出适应度比较高的Floy作为父母进行繁殖也就是让它们的染色体进行交叉来得到下一代，这就完成了一次自然选择，也就是一代的进化。下面我们有必要对适应度进行说明，适应度是能量值和安全度的加权平均值。打击入侵者和增加移动速度会增加能量值；而与自己同类尽量保持靠近会增加安全度。&lt;br /&gt;
&lt;br /&gt;
在这个程序中，进化是在三个不同层次中进行的，最低的一层是在我们称为基因型的层次进行。基因型就是一个字符串的染色体，物种的基因都编码在染色体之中了。并且每一个染色体字符串的位都表示Floy的一个特征。这些编码在我们解码之前没有任何意义。&lt;br /&gt;
&lt;br /&gt;
中间的一层被称为表现型，在这个层次中Floy的染色体被直接解码形成了这个Floy的行为特征。举例来说，在Floy染色体的一个位上定义了它的加速度的值，我们在屏幕上看到的这个Floy移动的快慢就是受这个基因影响的。&lt;br /&gt;
&lt;br /&gt;
第三个层次是个体的适应度。个体的适应度是依赖于它的基因的，但这种依赖关系不是简单直接的，事实上染色体并没有适应度的基因。当个体的能量值和安全度都很大的时候它的适应度才会大，而这导致了一个矛盾。因为如果一个Floy要想获得更大的能量值它就必须在它的兄弟们进攻入侵者之前就先行动进攻，但是这样做它就会远离自己的同类从而降低它的安全度。&lt;br /&gt;
&lt;br /&gt;
因此我们会得到下面的这样一个链条：自然选择是对适应度进行的，而适应度是依赖于表现型的，而表现型则是被基因型决定的，而遗传的操作（变异、交叉）是在基因型上操作的。因此整个进化的过程就是这样一层一层涌现出来的。&lt;br /&gt;
&lt;br /&gt;
=一次观察记录=&lt;br /&gt;
&lt;br /&gt;
开始一个新代，每个个体都有自己的个性，它们都有不同的颜色，而且行为也都不太一样，当入侵者飞进来的时候有的主动进攻，有的逃之夭夭。进化开始了，过程还不算慢。等了十几分钟后，一些个体已经逐渐被淘汰了，最后只剩下了灰色和绿色的两种个体。其中灰色个体的特征是主动进攻型，而绿色的个体是喜欢团队合作集体进攻的类型。经过慢慢的进化，绿色的Floy越来越多，灰色的越来越少最后只剩下一只了，但是它会采取主动的有效进攻。突然，绿色的Floy居然会使用诡计了，它们一大堆抱成一团缓慢的移动，但是它们跟随着那只灰色Floy，并且只有当灰色的Floy进攻的时候它们才一起进攻，否则不会单独行动，这样它们可以使自己的安全度和能量值同时提高。最后，灰色的Floy被淘汰掉了，仅仅剩下了那一大群绿色的。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45510</id>
		<title>混沌边缘</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45510"/>
		<updated>2025-07-11T02:40:52Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自我组织,混沌理论&lt;br /&gt;
|description=自我组织，混沌理论&lt;br /&gt;
}}&lt;br /&gt;
混沌边缘（Edge of chaos）是有序和无序之间的过渡空间，这种空间被假设存在于各种各样的系统中。混沌边缘是一个有界的不稳定区域，不断地发生着有序和无序之间的动态相互作用&amp;lt;ref&amp;gt;{{cite web|last1=Complexity Labs|title=Edge of Chaos|url=http://complexitylabs.io/edge-of-chaos/.|website=Complexity Labs|accessdate=August 24, 2016}}&amp;lt;/ref&amp;gt;。一个能出现复杂现象的系统往往具有很大的自由度数目，由于非线性的存在，导致在高维相空间中存在一个有很多大于零的Lyapunov特征指数的奇怪吸引子。在这样的奇怪吸引子中存在数目巨大的有序成分和各种各样反映为物理空间有结构、时间上为混沌的成分，这些成分在通常意义下为不稳定。一旦受到某种刺激，按照混沌控制思想及其尚不知原因的原理，很快地、自适应地选择目标并达到目标，这样就导致了各种复杂现象的产生.由于这些成分构成奇怪吸引子中的一个稠集，因而对于目标响应是非常敏感的，这就导致某种不可预测性存在。&lt;br /&gt;
&lt;br /&gt;
尽管混沌边缘的概念十分抽象且不直观，但它确实在生态学&amp;lt;ref&amp;gt;{{cite journal|last1=Ranjit Kumar Upadhyay|title=Dynamics of an ecological model living on the edge of chaos|journal=Applied Mathematics and Computation|date=2009|volume= 210| issue = 2|pages=455–464|doi=10.1016/j.amc.2009.01.006}}&amp;lt;/ref&amp;gt;、商业管理&amp;lt;ref&amp;gt;{{cite web|last1=Deragon|first1=Jay|title=Managing On The Edge Of Chaos|url=http://www.relationship-economy.com/2012/08/managing-on-the-edge-of-chaos/|website=Relationship Economy}}&amp;lt;/ref&amp;gt;、心理学&amp;lt;ref&amp;gt;{{cite book|last1=Lawler|first1=E.|last2=Thye|first2=S.|last3=Yoon|first3=J.|title=Order on the Edge of Chaos Social Psychology and the Problem of Social Order|date=2015|publisher=Cambridge University Press|isbn=9781107433977}}&amp;lt;/ref&amp;gt; 、政治科学、社会科学等领域具有诸多应用。物理学家发现几乎所有具有反馈的系统都会适应混沌边缘。&amp;lt;ref&amp;gt;{{cite journal|last1=Wotherspoon|first1=T.|last2=et.|first2=al.|title=Adaptation to the edge of chaos with random-wavelet feedback|journal=J. Phys. Chem. A|date=2009|doi=10.1021/jp804420g|bibcode=2009JPCA..113...19W|volume=113|issue=1|pages=19–22|pmid=19072712}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 历史 ==&lt;br /&gt;
&lt;br /&gt;
'''混沌边缘'''一词是由数学家'''Doyne Farmer'''提出，用于描述计算机科学家[[克里斯托弗·朗顿 Christopher Langton]]发现的过渡现象。混沌边缘最初是指变量λ的区间，在该区间内观察[[元胞自动机]]（CA）的行为发生变化。随着λ变化，元胞自动机的行为发生了相变。兰顿发现了一个有利于产生具有通用计算能力的元胞自动机的小区域。大约在同一时间，物理学家'''詹姆士·克劳奇菲尔德 James P. Crutchfield'''和其他人开始使用混沌边缘（onset of chaos）来描述这一大致相同的概念。&lt;br /&gt;
&lt;br /&gt;
一般在科学领域，混沌边缘一词用于形容某些物理、生物、经济、社会系统在或有序或完全随机或混沌的状态间运行，其中复杂性是最大化的。但是[[梅勒妮·米歇尔 Melanie Mitchell]]等人对此概念的普遍性及意义提出了质疑。工商界也借用了这个词，不过时常使用的并不恰当，常在远超出该词原有含义范围的情况下使用。&lt;br /&gt;
&lt;br /&gt;
'''斯图尔特·考夫曼 Stuart Kauffman'''研究了进化系统的数学模型，其中进化速率在混沌边缘附近达到最大。&lt;br /&gt;
&lt;br /&gt;
== 适应 ==&lt;br /&gt;
&lt;br /&gt;
适应对所有生物和系统都起着至关重要的作用。为了更好地适应当前环境，&amp;lt;ref&amp;gt;{{cite book|last1=Strogatz|first1=Steven|title=Nonlinear dynamics and Chaos|date=1994|publisher=Westview Press}}&amp;lt;/ref&amp;gt; 它们都在不断改变其内在属性。自适应最重要的工具是许多自然系统所固有的自调整参数。具有自调整参数的系统具有避免混沌的显著特征。这种现象称为“混沌边缘的适应性”。&lt;br /&gt;
&lt;br /&gt;
混沌边缘的适应性，是指许多复杂的自适应系统似乎直观地朝着混沌与秩序之间的边界发展。物理学已经表明，混沌边缘是控制系统的最佳设置，同时&amp;lt;ref&amp;gt;{{cite journal|last1=Pierre|first1=D.|last2=et.|first2=al.|title=A theory for adaptation and competition applied to logistic map dynamics|journal=Physica D|date=1994|volume=75|issue=1–3|pages=343–360|bibcode=1994PhyD...75..343P|doi=10.1016/0167-2789(94)90292-5}}&amp;lt;/ref&amp;gt;它也是一个可选设置，可以影响物理系统执行基本功能的计算能力。&amp;lt;ref&amp;gt;{{cite journal|last1=Langton|first1=C.A.|title=Computation at the edge of chaos|journal=Physica D|date=1990|volume=42|issue=1–3|pages=12|doi=10.1016/0167-2789(90)90064-v|bibcode=1990PhyD...42...12L|url=https://zenodo.org/record/1258375}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由于适应在许多自然系统中的重要性，因此，混沌边缘的适应性在许多科学研究中占据重要地位。物理学家证明，对混沌秩序边缘的状态的适应发生在具有细胞自动机规则&amp;lt;ref&amp;gt;{{cite journal|last1=Packard|first1=N.H.|title=Adaptation toward the edge of chaos|journal=Dynamic Patterns in Complex Systems|date=1988|pages=293–301}}&amp;lt;/ref&amp;gt;的种群中，这些规则自动优化了遗传算法的性能。雪崩模型和地震模型中的自组织临界性就是很好的说明。&amp;lt;ref&amp;gt;{{cite journal|last1=Bak|first1=P.|last2=Tang|first2=C.|last3=Wiesenfeld|first3=K.|title=Self-organized criticality|journal=Phys Rev A|date=1988|volume=38|issue=1|pages=364–374|doi=10.1103/PhysRevA.38.364|bibcode=1988PhRvA..38..364B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最简单的混沌动力学模型是逻辑斯蒂映射。自调整的逻辑映射动力学表现出对混沌边缘的适应性。&amp;lt;ref&amp;gt;{{cite journal|last1=Melby|first1=P.|last2=et.|first2=al.|title=Adaptation to the edge of chaos in the self-adjusting logistic map.|journal=Phys. Rev. Lett.|date=2000|doi=10.1103/PhysRevLett.84.5991|arxiv=nlin/0007006|bibcode=2000PhRvL..84.5991M|volume=84|issue=26|pages=5991–5993|pmid=10991106}}&amp;lt;/ref&amp;gt;理论分析可以预测在系统演化边界附近的窄参数区域位置。&amp;lt;ref&amp;gt;{{cite journal|last1=Bayam|first1=M.|last2=et.|first2=al.|title=Conserved quantities and adaptation to the edge of chaos|journal=Physical Review E|date=2006|volume=73|issue=5|pages=056210|doi=10.1103/PhysRevE.73.056210|bibcode=2006PhRvE..73e6210B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 程序实现 ==&lt;br /&gt;
Chirstopher Langton 专门开发了一个可操作的网页，显示一维细胞自动机随时间演变的图像，通过调节按钮可以观测到不同秩序、混沌及混沌边缘的状态。&lt;br /&gt;
&lt;br /&gt;
*程序名称：混沌的边缘&lt;br /&gt;
*程序作者：Chirstopher Langton&lt;br /&gt;
*程序地址：[https://math.hws.edu/eck/js/edge-of-chaos/CA.html 1D Cellular Automata and the Edge Of Chaos 的可操作界面展示] &lt;br /&gt;
*本地下载：[https://wiki.swarma.org/applets/edgeofchaos/1D_Cellular_Automata.zip 1D_Cellular_Automata.zip]&lt;br /&gt;
&amp;lt;!--[[文件:混沌与秩序的边缘.png|居中]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/edgeofchaos/CA.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1300px; height: 620px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 相关解说 ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
运行上面的程序，观察&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的不同，细胞自动机产生的动态行为如何变化。拖动中间的滑块可以更改&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的数值。右边New按钮可以在当前的&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;下随机产生新的规则，底下的几个选择框分别更改状态个数、邻居模板个数（注意这个数字包括该细胞自己，比如&amp;lt;math&amp;gt;N=5&amp;lt;/math&amp;gt;，那么左边两个细胞，右边两个细胞，再加上中间的细胞，所以邻居半径是2）;Isotropic表示规则是不区分左右对称的方格状态的Anisotropic则是区分的，因此Anisotropic产生的编码比较长，下面的Random Start表示从一个随机的状态开始，Random Clump表示从一个随机的小块开始演化。One Dot Start表示从一个点的初始状态开始演化。下面的文本框里面显示的是当前规则的编码。下面将具体说明其中的原理。&lt;br /&gt;
&lt;br /&gt;
为了更好的看清楚细胞自动机的动态行为，我们选用4个状态{0,1,2,3}，邻居半径为2（一共4个邻居）的一维细胞自动机来讨论，因为这种细胞自动机包含了所有的四种类别。&lt;br /&gt;
&lt;br /&gt;
我们知道，在给定了状态集&amp;lt;math&amp;gt;{0,1,2,3}&amp;lt;/math&amp;gt;，邻居半径2的一维情况下，细胞自动机的规则集决定了它们的不同。每一个细胞自动机的规则集都可以看成是一张大的转换表，形如：&lt;br /&gt;
&lt;br /&gt;
其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在&amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;时刻的状态。表中一共有45=1024项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;nq&amp;lt;/math&amp;gt;。那么我们可以定义参数：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|输入||01203||03120||12231||......&lt;br /&gt;
|-&lt;br /&gt;
|输出||0||1||2||......&lt;br /&gt;
|}其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在t+1时刻的状态。表中一共有&amp;lt;math&amp;gt;4^5=1024&amp;lt;/math&amp;gt;项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;n_q&amp;lt;/math&amp;gt;。那么我们可以定义参数：&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\lambda = (4^5-n_q)/4^5&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;这个参数反映了一组规则中转换成非&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态的比例。显然，根据给定的λ我们可以得到很多的规则表，因此我们可以随机的在这些规则表中选择一个。比如令&amp;lt;math&amp;gt;λ=0.5&amp;lt;/math&amp;gt;，那么我们可以随机的生成一个规则组转换表，表的输出部分0状态占据了一半的比例，其他的位置由1,2,3这几个数随机的填充。&lt;br /&gt;
&lt;br /&gt;
下面看看根据参数λ的取值不同，细胞自动机的动态行为如何变化。请运行上面的程序，让&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;在&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;之间变化。&lt;br /&gt;
*当&amp;lt;math&amp;gt;λ=0~0.1&amp;lt;/math&amp;gt;，所有的细胞被吸引到一种固定的状态，这相当于我们上一节叙述的第一类细胞自动机；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;附近，系统在一些固定的状态之间周期的循环，这相当于第二类细胞自动机，&amp;lt;math&amp;gt;λ=0.3&amp;lt;/math&amp;gt;的细胞自动机比&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;的在开始的时候具有更复杂的结构；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于大约&amp;lt;math&amp;gt;0.3&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;0.6&amp;lt;/math&amp;gt;之间的时候，会出现相当复杂的结构。这些结构既不属于固定的周期或者固定值，也不属于完全的随机，因此这些细胞自动机属于第四类即“复杂型”。并且，随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的增长，复杂结构的维持时间也会变得越来越大；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;gt;=0.6&amp;lt;/math&amp;gt;的时候，复杂的结构消失，系统将被吸引于一种完全随机的混沌状态。&lt;br /&gt;
由于在实验中，规则是根据λ随机产生的，因此我们在这里说明的动态行为随λ的变化性质仅仅是一种大致的分类。&lt;br /&gt;
&lt;br /&gt;
根据这些试验，我们不难得出，随着λ的增大，细胞自动机展现出来的结构将逐渐变得复杂，当&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于一个中间值的时候动态行为会达到最大的复杂性，然后随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的进一步增大复杂结构就逐渐被随机结构所取代。&lt;br /&gt;
&lt;br /&gt;
根据λ的连续变化能够得到四种细胞自动机之间的过渡转化图景&amp;lt;center&amp;gt;'''I-&amp;gt;II-&amp;gt;IV-&amp;gt;III，即：固定点-&amp;gt;周期-&amp;gt;复杂-&amp;gt;混沌'''&amp;lt;/center&amp;gt;因此我们说，复杂的结构诞生于混沌的边缘。混沌的边缘是什么东西？它是一种处于凝固的周期状态与活跃的混沌之间的一种过渡过程，或者我们称其为“相变过程”。所谓的“相变”就是指系统从量变到质变的飞跃。就像煮开水，当温度达到100度左右的时候，水会突然沸腾，这种状态就是相变，因为从此水由液态变成了气态。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
细胞自动机系统的连续变化过程就好像水的固、液以及固态到液态之间的的变化过程。如下：&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;gt;I&amp;amp;II-&amp;gt;IV-&amp;gt;III&lt;br /&gt;
&lt;br /&gt;
固体-&amp;gt;相变-&amp;gt;液体&lt;br /&gt;
&amp;lt;/center&amp;gt;I和II两种状态可以被看作是固态，就像冰一样凝固在一起非常有秩序但同时也没有活性。细胞自动机的第III类型就象是液态的水：完全的流动、随机，没有一个时刻能停留下来，然而由于这类系统过于松散，它也不可能产生有价值的结构。第IV类细胞自动机就刚好存在于从固态的冰到液态的水转变的瞬息之间这么一个狭小的空间里。在这里，复杂的结构形成了神奇的王国，你会不断地看到若干水分子结合成有趣的结构与秩序，但同时这些结构和秩序永远不会被冻结，它们会偶尔被破坏，但新的结构马上又会生成。这样的状态被“人工生命”之父郎顿称为混沌与秩序的边缘。科学家们已经对固体、液体的性质研究的比较清楚了，然而对于固体到液体转变这样一种相变的过程则仍然没有认识足够清楚，原因就在于这样的状态具有太多复杂的结构，我们很难预言它的具体性质。第IV类细胞自动机也是这样，下一时刻细胞自动机会是怎样的情况？我们除了按照它的“物理规律”运行它外别无它法，因为复杂的细胞自动机的行为不能预言。&lt;br /&gt;
&lt;br /&gt;
我们可以把混沌边缘的概念推广，也就是把秩序、周期这些动态的情况看作是一种凝固的吸引力，它保证了系统能够固定于某一种结构；而另一方面，随机、混沌则形成了另一种张力，它使得系统趋于不稳定，但同时为系统提供了创新的动力。那么仅仅当这两种力处于一种恰到好处的平衡态的时候，也就是系统处于混沌的边缘条件下，该系统才会更加有活力，并且演变得越来越复杂。&lt;br /&gt;
&lt;br /&gt;
生命从何处来？智能如何产生？人们为什么会创造有组织的同时又具有创新性的社会结构？答案是这些复杂的系统、复杂的结构来自于混沌的边缘。只有当生命所处的环境既不太“热”，即没有太大的动荡产生完全随机的混沌状态，同时又不能太“冷”，以至于所有活动都过于死板，这样才能孕育真正的生命。因此地球上的生命正是诞生于混沌的边缘这条狭窄的夹缝中。再考虑一个人的发展。如果一个人每天都在做同样的事情，从不尝试新鲜的生活，那么这个人所处的环境就过于死板最后将陷于一种机械循环的状态（第I、II类细胞自动机）。反过来，如果这个人过于涣散，总在尝试不同的新鲜事情，从来不会停下来静静的思考和沉淀，那么这个人就会过于灵活而也会一事无成。一个人只有处在“混沌边缘”的状态才能既产生学习、进化的动力，又会静下心来让所学的东西凝固成有价值的知识，从而创造辉煌的成果。再考虑一个国家，闭关锁国肯定不能发展，系统将会变成一潭死水，反过来过于开放则根本不会形成这个国家这个民族的凝聚力也就失去了它们的个性，所以社会也要不停地把自己推向混沌边缘的状态才能不断的发展下去。&lt;br /&gt;
&lt;br /&gt;
系统为什么总要处于“混沌边缘”的状态呢？比如生命吧，静止于某种固定的状态不是挺好的么？为了适应多变的环境，生命必须不断的进化而变得复杂，而要想变得复杂就必须让自己处于混沌边缘的状态。按照达尔文进化论的观点，不适应环境的生命体就会被大自然淘汰了，并不是每个生命体都有意识的要让自己越来越复杂，而是因为过于简单的生命不能适应环境了，于是它们被淘汰掉了，所以剩下来的仅有那些相对复杂的生命体。科学家曾用一批细胞自动机当作生命体在一个虚拟的自然环境中不断的进化，结果发现，仅有那些不断的趋于混沌边缘的细胞自动机留下来，而其他的细胞自动机逐渐被淘汰出局了。&lt;br /&gt;
&lt;br /&gt;
对于细胞自动机的分类以及混沌边缘的概念不仅仅适用于一维细胞自动机，对于二维甚至多维的细胞自动机仍然适用。显然我们熟悉的“生命游戏”也正是处于一种“混沌边缘”的状态。经计算，“生命游戏”对应的&amp;lt;math&amp;gt;λ=0.25&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 进一步阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Self-organized_criticality 自组织的临界 ]&lt;br /&gt;
&lt;br /&gt;
== 参考资料 ==&lt;br /&gt;
&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal|author=Christopher G. Langton|title=Computation at the edge of chaos|journal=Physica D|volume=42|pages=12|year=1990|url=http://www.romanpoet.org/223/langton.edgeofchaos.pdf|doi=10.1016/0167-2789(90)90064-V|bibcode=1990PhyD...42...12L}}&lt;br /&gt;
&lt;br /&gt;
*{{cite book|author=J. P. Crutchfield and K. Young|chapter=Computation at the Onset of Chaos|title=Entropy, Complexity, and the Physics of Information|editor=W. Zurek|series=SFI Studies in the Sciences of Complexity, VIII|publisher=Addison-Wesley|location=Reading, Massachusetts|year=1990|pages=223–269|chapter-url=http://csc.ucdavis.edu/~cmg/papers/CompOnset.pdf}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal | last1 = Mitchell | first1 = Melanie | last2 = Hraber | first2 = Peter T. | last3 = Crutchfield | first3 = James P. | year = 1993 | title = Revisiting the edge of chaos: Evolving cellular automata to perform computations | url = http://web.cecs.pdx.edu/~mm/rev-edge.pdf | journal = Complex Systems | volume = 7 | issue = | pages = 89–130 }}&lt;br /&gt;
&lt;br /&gt;
* Melanie Mitchell, James P. Crutchfield and Peter T. Hraber. ''[http://web.cecs.pdx.edu/~mm/dyn-comp-edge.pdf Dynamics, Computation, and the &amp;quot;Edge of Chaos&amp;quot;: A Re-Examination]''&lt;br /&gt;
&lt;br /&gt;
*''Origins of Order: Self-Organization and Selection in Evolution'' by Stuart Kauffman&lt;br /&gt;
&lt;br /&gt;
* {{Cite journal|last1=Mora |first1=Thierry |last2=Bialek |first2=William |year= 2010|title=Are biological systems poised at criticality? |journal=Journal of Statistical Physics |volume=144 |issue=2 |pages=268–302 |arxiv= 1012.2242|doi=10.1007/s10955-011-0229-4 |bibcode=2011JSP...144..268M }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
&lt;br /&gt;
* [http://bactra.org/notebooks/edge-of-chaos.html &amp;quot;混沌边缘&amp;quot;] –对这个想法盛行的批评.&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:Last1.png|400px|thumb|right|[https://swarma.org/?p=13364 用神经学习模型计算海量实际网络中的节点中心性度量 | 论文速递1篇|集智俱乐部]]]&lt;br /&gt;
&lt;br /&gt;
===集智视频推荐===&lt;br /&gt;
====[https://campus.swarma.org/course/1119 混沌的边缘]====&lt;br /&gt;
本课程中，将讲解如何有意识地设计或生长出具备自组织能力的复杂系统。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/697 非线性动力学与混沌]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/1113 从混沌开始]====&lt;br /&gt;
本课程中，将带领大家认识隐藏在简单方程中的混沌现象。&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===集智文章推荐===&lt;br /&gt;
====[https://swarma.org/?p=9058 元胞自动机与「混沌边缘」傅渥成的 Live]====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
本中文词条由[[用户:沐晨|沐晨]] 参与编译，[[用户:不是海绵宝宝|不是海绵宝宝]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
[[分类: 自我组织]] [[分类: 混沌理论]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45508</id>
		<title>Floy模拟模型</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45508"/>
		<updated>2025-07-11T02:36:38Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, floy&lt;br /&gt;
|description=人工生命, floy&lt;br /&gt;
}}&lt;br /&gt;
==人工生命Floy模拟程序==&lt;br /&gt;
根据Floy模拟模型制作的javascript程序（下载：[https://wiki.swarma.org/applets/floy/floy_simulition.zip floy_simulition.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/floys_life_simulation/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 750px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Floy模拟模型==&lt;br /&gt;
*名 称：人工生命&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[File:Floy.zip|链接=https://wiki.swarma.org/index.php/Special:FilePath/Floy.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
生命是什么？我们能不能造出生命来？看看上面的程序。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
你看到了什么？一群苍蝇在飞舞？这是简简单单的动画么？这些家伙是“活”的么？我可以告诉你，这群飞舞的动物叫Floy，它既不是苍蝇也不是蝌蚪，而是人工生命！这就是一段简简单单的程序，而且代码的长度才有200多行！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
单击Properties按钮，你可以改变这群Floy的属性，首先我们为了从简单开始把Floy的个数更改为1个看看，点击OK返回以后再按一下Continue按钮，一只Floy在围绕着中心转，也许你会说，这没什么，不就是一个运动的点么？如果更改Floy的个数为2个，那么这两只Floy就会互相追逐着在屏幕上飞行，注意两只Floy的行为就会产生混沌模式了，也就是它们的运动方式几乎是完全不确定的。逐渐增加到15只以上你就会看到一大群生物在那里乱飞了，这很像我们现实世界中的苍蝇行为。点击Strangers按钮，你会看到一只红色的Floy从屏幕的左上角飞进来，注意，它的到来可不寻常，它是一个外来的入侵者！本来相安无事的绿色Floy因为它的到来而变得行为异常起来，它们会突然转过头来进攻红色的入侵者，而红色的Floy会赶忙逃跑。继续点击Strangers按钮，就会有不断的入侵者加入进来，同时原有的Floy群体在减少。你会看到有两群苍蝇在那里追逐。绿色的Floy是本地居民，它会进攻入侵者最后将它杀死。如果幸运，你甚至会看到绿色的Floy们会使用诡计，它们先若无其事的在一起飞即使身边就有一只红色的入侵者，但是突然之间，它会转过头来进攻红色的，让它来不及逃跑。点击Default按钮可以恢复原状。&lt;br /&gt;
&lt;br /&gt;
===模型的规则===&lt;br /&gt;
为什么这一群小点在这么简单的程序之下会有这样复杂的行为？它们是怎么实现的？注意，虽然这也是编程，但我们并不是按照传统的方法对所有Floy的集体行为在每一种可能的情况都编程，而是给每一个个体Floy制定简单的规则，这样Floy集体的复杂行为就会自然而然的涌现出来了！那么个体Floy的规则是什么呢？它是遵循下面的规律：&lt;br /&gt;
&lt;br /&gt;
*首先找到和自己最近的几只（邻居数）的Floy作为自己的邻居；&lt;br /&gt;
*对于每个邻居如果它是自己的同类那么然后分别计算与这些邻居之间的距离；&lt;br /&gt;
**如果太近（距离小于碰撞距离）就朝向远离这个邻居的方向加速飞翔；&lt;br /&gt;
**如果较远（距离大于碰撞距离）就朝向靠近这个邻居的方向加速飞翔；&lt;br /&gt;
*如果邻居是自己的异类；&lt;br /&gt;
**如果这只Floy是绿色的则以非常快的加速度向对方进攻；&lt;br /&gt;
**如果这只Floy是红色的陌生者则当小于碰撞距离的时候以非常快的加速度逃离，并且自己的能量减小；当距离不是很大时，停止加速。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
总体来说，Floy的规则就是选择自己的加速度，并且这种选择仅仅跟自己的邻居有关，也就是说规则都是局部的。而这个程序的关键是要体现整体行为的涌现，也就是说虽然微观上每个Floy个体的规则都是简单的局部的，但是在集体涌现出来的现象却是复杂的并且是不可预测的。人工生命的精髓就是：其实生命现象本身不过是由微观的简单相互作用规律涌现出来的集体复杂行为。&lt;br /&gt;
&lt;br /&gt;
===模型的参数===&lt;br /&gt;
进一步，你可以探索更改参数对这群Floy的影响。你可以点击Behavior按钮，Floy的个性会改变，有温顺的也有疯狂的。它们的行为完全是由几个简单参数制约的，再次点击Properties按钮，那里面的参数制约了每个Floy个体的行为自然也就制约了Floy整体的涌现规律。其中各个参数的意义：加速度就是指每只苍蝇进行加速靠近或者远离的最小加速度值；中心吸引度是为了让Floy能够围绕屏幕中心旋转而让它们的加速度都有一个指向中心的分量；碰撞距离定义多少像素距离是叫做碰撞，从而Floy们选择远离还是靠近；最大速度是为了Floy们的行为不至于太疯狂也就是速度固定一个上限；反弹速度是当Floy撞击墙壁的时候反弹回来的速度；间隔时间是控制整个程序快慢的参数；初始速度是每只苍蝇在开始的初速度；自由重组邻居的概率：为了让Floy们的行为中有一定的随机不确定性，它们会以自由重组邻居的概率重新随机的选择自己的邻居（正常情况下是选择距离最小的若干Floy作为自己的邻居），如果这个概率指定为0那么Floy的行为就没那么有趣了；邻居数目定义了每只Floy可以有多少邻居。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下来我们能干什么？也许你觉得这个简单程序太没趣了，应该把它改为三维的动画。没问题，这个要求还算容易满足。你只要点击这里就能看到三维的Floy。但是因为Java本身的限制，动画不如用Maya之类的三维软件作的好看，但是这个程序却反映了规律的本质，有兴趣的朋友完全可以把这个动画用Maya作一遍，这样你可以给每个Floy赋予贴图裁质，那样也许更有趣。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;br /&gt;
&lt;br /&gt;
==三维的Floy鸟群模拟模型==&lt;br /&gt;
*名 称：3d的Floy&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[媒体文件:Floy3d.zip|Floy3d.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
如果二维的Floy还看得不够过瘾，那么请看三维Floy程序，这里，每个Floy遵循的规则和前面叙述的基本Floy的规则一样，其中每只Floy都有两个邻居。也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
==相关wiki==&lt;br /&gt;
*[[人工生命]]&lt;br /&gt;
*[[生命游戏]]&lt;br /&gt;
*[[Boid模型]]&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
[[File:复杂.jpg|200px|thumb|right|《复杂》封面|链接=https://wiki.swarma.org/index.php/%E6%96%87%E4%BB%B6:%E5%A4%8D%E6%9D%82.jpg]]&lt;br /&gt;
*[https://vdisk.weibo.com/s/BTLfj870SYIar 《复杂》 梅拉妮·米歇尔]&lt;br /&gt;
蚂蚁在组成群体时为何会表现出如此的精密性和具有目的性？数以亿计的神经元是如何产生出像意识这样极度复杂的事物？是什么在引导免疫系统、互联网、全球经济和人类基因组等自组织结构？这些都是复杂系统科学尝试回答的迷人而令人费解的问题的一部分。理解复杂系统需要有全新的方法，需要超过传统的科学还原论，并重新划定学科的疆域。借助于圣塔菲研究所的工作经历和交叉学科方法，复杂系统的前沿科学家米歇尔在《复杂》一书中，以清晰的思路介绍了复杂系统的研究，横跨生物、技术和社会学等领域，并探寻复杂系统的普遍规律。与此同时，她还探讨了复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系。&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*[https://zhuanlan.zhihu.com/p/97717680 超越简单规则——用图神经网络对复杂系统进行自动建模]&lt;br /&gt;
::近期，由北京师范大学张江团队发表的文章《A general deep learning framework for network reconstruction and dynamics learning》在期刊Applied Network Science上刊登，这篇文章提出了一种基于深度学习的数据驱动模型，可以从节点的时间演化数据中重构出网络结构，并且学习到系统的动力学。本文是第一作者张章对该文章内容的解读。&lt;br /&gt;
===课程推荐===&lt;br /&gt;
*[https://campus.swarma.org/course/1095 NetLogo多主体建模入门]&lt;br /&gt;
::本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型，以及如何利用NetLogo去实现。从生命游戏到人工鸟群，从模拟经济系统到病毒沿网络的传播，通过循序渐进的案例，该课程带你逐步走入NetLogo多主体建模的神奇世界。&lt;br /&gt;
*[https://campus.swarma.org/course/596 生物中的多主体模型]&lt;br /&gt;
::本课程将视线转移到生物学领域，展现计算机模拟在生物学中的应用。认识自然现象，我们可以从物理、数学、生物、天文、化学等众多角度去解读，那么怎样将众多的知识综合起来转化为可以用计算机模拟的语言哪？本节课将通过一个模型案例来帮助我们打开思路，更好的去描述和模拟生物现象。&lt;br /&gt;
----本中文词条由[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:Jake Jake]、[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E6%80%9D%E6%97%A0%E6%B6%AF%E5%92%BF%E5%91%80%E5%92%BF%E5%91%80 思无涯咿呀咿呀]用户参与编译，[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E4%B9%90%E5%A4%9A%E5%A4%9A 乐多多]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45507</id>
		<title>Floy模拟模型</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45507"/>
		<updated>2025-07-11T02:35:14Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, floy&lt;br /&gt;
|description=人工生命, floy&lt;br /&gt;
}}&lt;br /&gt;
==人工生命Floy模拟程序==&lt;br /&gt;
根据Floy模拟模型制作的javascript程序（下载：[https://wiki.swarma.org//applets/floy/floy_simulition.zip floy_simulition.zip]）：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/floys_life_simulation/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 750px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Floy模拟模型==&lt;br /&gt;
*名 称：人工生命&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[File:Floy.zip|链接=https://wiki.swarma.org/index.php/Special:FilePath/Floy.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
生命是什么？我们能不能造出生命来？看看上面的程序。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
你看到了什么？一群苍蝇在飞舞？这是简简单单的动画么？这些家伙是“活”的么？我可以告诉你，这群飞舞的动物叫Floy，它既不是苍蝇也不是蝌蚪，而是人工生命！这就是一段简简单单的程序，而且代码的长度才有200多行！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
单击Properties按钮，你可以改变这群Floy的属性，首先我们为了从简单开始把Floy的个数更改为1个看看，点击OK返回以后再按一下Continue按钮，一只Floy在围绕着中心转，也许你会说，这没什么，不就是一个运动的点么？如果更改Floy的个数为2个，那么这两只Floy就会互相追逐着在屏幕上飞行，注意两只Floy的行为就会产生混沌模式了，也就是它们的运动方式几乎是完全不确定的。逐渐增加到15只以上你就会看到一大群生物在那里乱飞了，这很像我们现实世界中的苍蝇行为。点击Strangers按钮，你会看到一只红色的Floy从屏幕的左上角飞进来，注意，它的到来可不寻常，它是一个外来的入侵者！本来相安无事的绿色Floy因为它的到来而变得行为异常起来，它们会突然转过头来进攻红色的入侵者，而红色的Floy会赶忙逃跑。继续点击Strangers按钮，就会有不断的入侵者加入进来，同时原有的Floy群体在减少。你会看到有两群苍蝇在那里追逐。绿色的Floy是本地居民，它会进攻入侵者最后将它杀死。如果幸运，你甚至会看到绿色的Floy们会使用诡计，它们先若无其事的在一起飞即使身边就有一只红色的入侵者，但是突然之间，它会转过头来进攻红色的，让它来不及逃跑。点击Default按钮可以恢复原状。&lt;br /&gt;
&lt;br /&gt;
===模型的规则===&lt;br /&gt;
为什么这一群小点在这么简单的程序之下会有这样复杂的行为？它们是怎么实现的？注意，虽然这也是编程，但我们并不是按照传统的方法对所有Floy的集体行为在每一种可能的情况都编程，而是给每一个个体Floy制定简单的规则，这样Floy集体的复杂行为就会自然而然的涌现出来了！那么个体Floy的规则是什么呢？它是遵循下面的规律：&lt;br /&gt;
&lt;br /&gt;
*首先找到和自己最近的几只（邻居数）的Floy作为自己的邻居；&lt;br /&gt;
*对于每个邻居如果它是自己的同类那么然后分别计算与这些邻居之间的距离；&lt;br /&gt;
**如果太近（距离小于碰撞距离）就朝向远离这个邻居的方向加速飞翔；&lt;br /&gt;
**如果较远（距离大于碰撞距离）就朝向靠近这个邻居的方向加速飞翔；&lt;br /&gt;
*如果邻居是自己的异类；&lt;br /&gt;
**如果这只Floy是绿色的则以非常快的加速度向对方进攻；&lt;br /&gt;
**如果这只Floy是红色的陌生者则当小于碰撞距离的时候以非常快的加速度逃离，并且自己的能量减小；当距离不是很大时，停止加速。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
总体来说，Floy的规则就是选择自己的加速度，并且这种选择仅仅跟自己的邻居有关，也就是说规则都是局部的。而这个程序的关键是要体现整体行为的涌现，也就是说虽然微观上每个Floy个体的规则都是简单的局部的，但是在集体涌现出来的现象却是复杂的并且是不可预测的。人工生命的精髓就是：其实生命现象本身不过是由微观的简单相互作用规律涌现出来的集体复杂行为。&lt;br /&gt;
&lt;br /&gt;
===模型的参数===&lt;br /&gt;
进一步，你可以探索更改参数对这群Floy的影响。你可以点击Behavior按钮，Floy的个性会改变，有温顺的也有疯狂的。它们的行为完全是由几个简单参数制约的，再次点击Properties按钮，那里面的参数制约了每个Floy个体的行为自然也就制约了Floy整体的涌现规律。其中各个参数的意义：加速度就是指每只苍蝇进行加速靠近或者远离的最小加速度值；中心吸引度是为了让Floy能够围绕屏幕中心旋转而让它们的加速度都有一个指向中心的分量；碰撞距离定义多少像素距离是叫做碰撞，从而Floy们选择远离还是靠近；最大速度是为了Floy们的行为不至于太疯狂也就是速度固定一个上限；反弹速度是当Floy撞击墙壁的时候反弹回来的速度；间隔时间是控制整个程序快慢的参数；初始速度是每只苍蝇在开始的初速度；自由重组邻居的概率：为了让Floy们的行为中有一定的随机不确定性，它们会以自由重组邻居的概率重新随机的选择自己的邻居（正常情况下是选择距离最小的若干Floy作为自己的邻居），如果这个概率指定为0那么Floy的行为就没那么有趣了；邻居数目定义了每只Floy可以有多少邻居。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下来我们能干什么？也许你觉得这个简单程序太没趣了，应该把它改为三维的动画。没问题，这个要求还算容易满足。你只要点击这里就能看到三维的Floy。但是因为Java本身的限制，动画不如用Maya之类的三维软件作的好看，但是这个程序却反映了规律的本质，有兴趣的朋友完全可以把这个动画用Maya作一遍，这样你可以给每个Floy赋予贴图裁质，那样也许更有趣。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;br /&gt;
&lt;br /&gt;
==三维的Floy鸟群模拟模型==&lt;br /&gt;
*名 称：3d的Floy&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[媒体文件:Floy3d.zip|Floy3d.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
如果二维的Floy还看得不够过瘾，那么请看三维Floy程序，这里，每个Floy遵循的规则和前面叙述的基本Floy的规则一样，其中每只Floy都有两个邻居。也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
==相关wiki==&lt;br /&gt;
*[[人工生命]]&lt;br /&gt;
*[[生命游戏]]&lt;br /&gt;
*[[Boid模型]]&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
[[File:复杂.jpg|200px|thumb|right|《复杂》封面|链接=https://wiki.swarma.org/index.php/%E6%96%87%E4%BB%B6:%E5%A4%8D%E6%9D%82.jpg]]&lt;br /&gt;
*[https://vdisk.weibo.com/s/BTLfj870SYIar 《复杂》 梅拉妮·米歇尔]&lt;br /&gt;
蚂蚁在组成群体时为何会表现出如此的精密性和具有目的性？数以亿计的神经元是如何产生出像意识这样极度复杂的事物？是什么在引导免疫系统、互联网、全球经济和人类基因组等自组织结构？这些都是复杂系统科学尝试回答的迷人而令人费解的问题的一部分。理解复杂系统需要有全新的方法，需要超过传统的科学还原论，并重新划定学科的疆域。借助于圣塔菲研究所的工作经历和交叉学科方法，复杂系统的前沿科学家米歇尔在《复杂》一书中，以清晰的思路介绍了复杂系统的研究，横跨生物、技术和社会学等领域，并探寻复杂系统的普遍规律。与此同时，她还探讨了复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系。&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*[https://zhuanlan.zhihu.com/p/97717680 超越简单规则——用图神经网络对复杂系统进行自动建模]&lt;br /&gt;
::近期，由北京师范大学张江团队发表的文章《A general deep learning framework for network reconstruction and dynamics learning》在期刊Applied Network Science上刊登，这篇文章提出了一种基于深度学习的数据驱动模型，可以从节点的时间演化数据中重构出网络结构，并且学习到系统的动力学。本文是第一作者张章对该文章内容的解读。&lt;br /&gt;
===课程推荐===&lt;br /&gt;
*[https://campus.swarma.org/course/1095 NetLogo多主体建模入门]&lt;br /&gt;
::本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型，以及如何利用NetLogo去实现。从生命游戏到人工鸟群，从模拟经济系统到病毒沿网络的传播，通过循序渐进的案例，该课程带你逐步走入NetLogo多主体建模的神奇世界。&lt;br /&gt;
*[https://campus.swarma.org/course/596 生物中的多主体模型]&lt;br /&gt;
::本课程将视线转移到生物学领域，展现计算机模拟在生物学中的应用。认识自然现象，我们可以从物理、数学、生物、天文、化学等众多角度去解读，那么怎样将众多的知识综合起来转化为可以用计算机模拟的语言哪？本节课将通过一个模型案例来帮助我们打开思路，更好的去描述和模拟生物现象。&lt;br /&gt;
----本中文词条由[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:Jake Jake]、[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E6%80%9D%E6%97%A0%E6%B6%AF%E5%92%BF%E5%91%80%E5%92%BF%E5%91%80 思无涯咿呀咿呀]用户参与编译，[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E4%B9%90%E5%A4%9A%E5%A4%9A 乐多多]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45500</id>
		<title>混沌边缘</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45500"/>
		<updated>2025-07-10T16:01:39Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自我组织,混沌理论&lt;br /&gt;
|description=自我组织，混沌理论&lt;br /&gt;
}}&lt;br /&gt;
混沌边缘（Edge of chaos）是有序和无序之间的过渡空间，这种空间被假设存在于各种各样的系统中。混沌边缘是一个有界的不稳定区域，不断地发生着有序和无序之间的动态相互作用&amp;lt;ref&amp;gt;{{cite web|last1=Complexity Labs|title=Edge of Chaos|url=http://complexitylabs.io/edge-of-chaos/.|website=Complexity Labs|accessdate=August 24, 2016}}&amp;lt;/ref&amp;gt;。一个能出现复杂现象的系统往往具有很大的自由度数目，由于非线性的存在，导致在高维相空间中存在一个有很多大于零的Lyapunov特征指数的奇怪吸引子。在这样的奇怪吸引子中存在数目巨大的有序成分和各种各样反映为物理空间有结构、时间上为混沌的成分，这些成分在通常意义下为不稳定。一旦受到某种刺激，按照混沌控制思想及其尚不知原因的原理，很快地、自适应地选择目标并达到目标，这样就导致了各种复杂现象的产生.由于这些成分构成奇怪吸引子中的一个稠集，因而对于目标响应是非常敏感的，这就导致某种不可预测性存在。&lt;br /&gt;
&lt;br /&gt;
尽管混沌边缘的概念十分抽象且不直观，但它确实在生态学&amp;lt;ref&amp;gt;{{cite journal|last1=Ranjit Kumar Upadhyay|title=Dynamics of an ecological model living on the edge of chaos|journal=Applied Mathematics and Computation|date=2009|volume= 210| issue = 2|pages=455–464|doi=10.1016/j.amc.2009.01.006}}&amp;lt;/ref&amp;gt;、商业管理&amp;lt;ref&amp;gt;{{cite web|last1=Deragon|first1=Jay|title=Managing On The Edge Of Chaos|url=http://www.relationship-economy.com/2012/08/managing-on-the-edge-of-chaos/|website=Relationship Economy}}&amp;lt;/ref&amp;gt;、心理学&amp;lt;ref&amp;gt;{{cite book|last1=Lawler|first1=E.|last2=Thye|first2=S.|last3=Yoon|first3=J.|title=Order on the Edge of Chaos Social Psychology and the Problem of Social Order|date=2015|publisher=Cambridge University Press|isbn=9781107433977}}&amp;lt;/ref&amp;gt; 、政治科学、社会科学等领域具有诸多应用。物理学家发现几乎所有具有反馈的系统都会适应混沌边缘。&amp;lt;ref&amp;gt;{{cite journal|last1=Wotherspoon|first1=T.|last2=et.|first2=al.|title=Adaptation to the edge of chaos with random-wavelet feedback|journal=J. Phys. Chem. A|date=2009|doi=10.1021/jp804420g|bibcode=2009JPCA..113...19W|volume=113|issue=1|pages=19–22|pmid=19072712}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 历史 ==&lt;br /&gt;
&lt;br /&gt;
'''混沌边缘'''一词是由数学家'''Doyne Farmer'''提出，用于描述计算机科学家[[克里斯托弗·朗顿 Christopher Langton]]发现的过渡现象。混沌边缘最初是指变量λ的区间，在该区间内观察[[元胞自动机]]（CA）的行为发生变化。随着λ变化，元胞自动机的行为发生了相变。兰顿发现了一个有利于产生具有通用计算能力的元胞自动机的小区域。大约在同一时间，物理学家'''詹姆士·克劳奇菲尔德 James P. Crutchfield'''和其他人开始使用混沌边缘（onset of chaos）来描述这一大致相同的概念。&lt;br /&gt;
&lt;br /&gt;
一般在科学领域，混沌边缘一词用于形容某些物理、生物、经济、社会系统在或有序或完全随机或混沌的状态间运行，其中复杂性是最大化的。但是[[梅勒妮·米歇尔 Melanie Mitchell]]等人对此概念的普遍性及意义提出了质疑。工商界也借用了这个词，不过时常使用的并不恰当，常在远超出该词原有含义范围的情况下使用。&lt;br /&gt;
&lt;br /&gt;
'''斯图尔特·考夫曼 Stuart Kauffman'''研究了进化系统的数学模型，其中进化速率在混沌边缘附近达到最大。&lt;br /&gt;
&lt;br /&gt;
== 适应 ==&lt;br /&gt;
&lt;br /&gt;
适应对所有生物和系统都起着至关重要的作用。为了更好地适应当前环境，&amp;lt;ref&amp;gt;{{cite book|last1=Strogatz|first1=Steven|title=Nonlinear dynamics and Chaos|date=1994|publisher=Westview Press}}&amp;lt;/ref&amp;gt; 它们都在不断改变其内在属性。自适应最重要的工具是许多自然系统所固有的自调整参数。具有自调整参数的系统具有避免混沌的显著特征。这种现象称为“混沌边缘的适应性”。&lt;br /&gt;
&lt;br /&gt;
混沌边缘的适应性，是指许多复杂的自适应系统似乎直观地朝着混沌与秩序之间的边界发展。物理学已经表明，混沌边缘是控制系统的最佳设置，同时&amp;lt;ref&amp;gt;{{cite journal|last1=Pierre|first1=D.|last2=et.|first2=al.|title=A theory for adaptation and competition applied to logistic map dynamics|journal=Physica D|date=1994|volume=75|issue=1–3|pages=343–360|bibcode=1994PhyD...75..343P|doi=10.1016/0167-2789(94)90292-5}}&amp;lt;/ref&amp;gt;它也是一个可选设置，可以影响物理系统执行基本功能的计算能力。&amp;lt;ref&amp;gt;{{cite journal|last1=Langton|first1=C.A.|title=Computation at the edge of chaos|journal=Physica D|date=1990|volume=42|issue=1–3|pages=12|doi=10.1016/0167-2789(90)90064-v|bibcode=1990PhyD...42...12L|url=https://zenodo.org/record/1258375}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由于适应在许多自然系统中的重要性，因此，混沌边缘的适应性在许多科学研究中占据重要地位。物理学家证明，对混沌秩序边缘的状态的适应发生在具有细胞自动机规则&amp;lt;ref&amp;gt;{{cite journal|last1=Packard|first1=N.H.|title=Adaptation toward the edge of chaos|journal=Dynamic Patterns in Complex Systems|date=1988|pages=293–301}}&amp;lt;/ref&amp;gt;的种群中，这些规则自动优化了遗传算法的性能。雪崩模型和地震模型中的自组织临界性就是很好的说明。&amp;lt;ref&amp;gt;{{cite journal|last1=Bak|first1=P.|last2=Tang|first2=C.|last3=Wiesenfeld|first3=K.|title=Self-organized criticality|journal=Phys Rev A|date=1988|volume=38|issue=1|pages=364–374|doi=10.1103/PhysRevA.38.364|bibcode=1988PhRvA..38..364B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最简单的混沌动力学模型是逻辑斯蒂映射。自调整的逻辑映射动力学表现出对混沌边缘的适应性。&amp;lt;ref&amp;gt;{{cite journal|last1=Melby|first1=P.|last2=et.|first2=al.|title=Adaptation to the edge of chaos in the self-adjusting logistic map.|journal=Phys. Rev. Lett.|date=2000|doi=10.1103/PhysRevLett.84.5991|arxiv=nlin/0007006|bibcode=2000PhRvL..84.5991M|volume=84|issue=26|pages=5991–5993|pmid=10991106}}&amp;lt;/ref&amp;gt;理论分析可以预测在系统演化边界附近的窄参数区域位置。&amp;lt;ref&amp;gt;{{cite journal|last1=Bayam|first1=M.|last2=et.|first2=al.|title=Conserved quantities and adaptation to the edge of chaos|journal=Physical Review E|date=2006|volume=73|issue=5|pages=056210|doi=10.1103/PhysRevE.73.056210|bibcode=2006PhRvE..73e6210B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 程序实现 ==&lt;br /&gt;
Chirstopher Langton 专门开发了一个可操作的网页，显示一维细胞自动机随时间演变的图像，通过调节按钮可以观测到不同秩序、混沌及混沌边缘的状态。&lt;br /&gt;
&lt;br /&gt;
*程序名称：混沌的边缘&lt;br /&gt;
*程序作者：Chirstopher Langton&lt;br /&gt;
*程序地址：[https://math.hws.edu/eck/js/edge-of-chaos/CA.html 1D Cellular Automata and the Edge Of Chaos 的可操作界面展示]&lt;br /&gt;
&amp;lt;!--[[文件:混沌与秩序的边缘.png|居中]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/edgeofchaos/CA.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1300px; height: 620px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 相关解说 ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
运行上面的程序，观察&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的不同，细胞自动机产生的动态行为如何变化。拖动中间的滑块可以更改&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的数值。右边New按钮可以在当前的&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;下随机产生新的规则，底下的几个选择框分别更改状态个数、邻居模板个数（注意这个数字包括该细胞自己，比如&amp;lt;math&amp;gt;N=5&amp;lt;/math&amp;gt;，那么左边两个细胞，右边两个细胞，再加上中间的细胞，所以邻居半径是2）;Isotropic表示规则是不区分左右对称的方格状态的Anisotropic则是区分的，因此Anisotropic产生的编码比较长，下面的Random Start表示从一个随机的状态开始，Random Clump表示从一个随机的小块开始演化。One Dot Start表示从一个点的初始状态开始演化。下面的文本框里面显示的是当前规则的编码。下面将具体说明其中的原理。&lt;br /&gt;
&lt;br /&gt;
为了更好的看清楚细胞自动机的动态行为，我们选用4个状态{0,1,2,3}，邻居半径为2（一共4个邻居）的一维细胞自动机来讨论，因为这种细胞自动机包含了所有的四种类别。&lt;br /&gt;
&lt;br /&gt;
我们知道，在给定了状态集&amp;lt;math&amp;gt;{0,1,2,3}&amp;lt;/math&amp;gt;，邻居半径2的一维情况下，细胞自动机的规则集决定了它们的不同。每一个细胞自动机的规则集都可以看成是一张大的转换表，形如：&lt;br /&gt;
&lt;br /&gt;
其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在&amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;时刻的状态。表中一共有45=1024项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;nq&amp;lt;/math&amp;gt;。那么我们可以定义参数：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|输入||01203||03120||12231||......&lt;br /&gt;
|-&lt;br /&gt;
|输出||0||1||2||......&lt;br /&gt;
|}其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在t+1时刻的状态。表中一共有&amp;lt;math&amp;gt;4^5=1024&amp;lt;/math&amp;gt;项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;n_q&amp;lt;/math&amp;gt;。那么我们可以定义参数：&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\lambda = (4^5-n_q)/4^5&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;这个参数反映了一组规则中转换成非&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态的比例。显然，根据给定的λ我们可以得到很多的规则表，因此我们可以随机的在这些规则表中选择一个。比如令&amp;lt;math&amp;gt;λ=0.5&amp;lt;/math&amp;gt;，那么我们可以随机的生成一个规则组转换表，表的输出部分0状态占据了一半的比例，其他的位置由1,2,3这几个数随机的填充。&lt;br /&gt;
&lt;br /&gt;
下面看看根据参数λ的取值不同，细胞自动机的动态行为如何变化。请运行上面的程序，让&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;在&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;之间变化。&lt;br /&gt;
*当&amp;lt;math&amp;gt;λ=0~0.1&amp;lt;/math&amp;gt;，所有的细胞被吸引到一种固定的状态，这相当于我们上一节叙述的第一类细胞自动机；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;附近，系统在一些固定的状态之间周期的循环，这相当于第二类细胞自动机，&amp;lt;math&amp;gt;λ=0.3&amp;lt;/math&amp;gt;的细胞自动机比&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;的在开始的时候具有更复杂的结构；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于大约&amp;lt;math&amp;gt;0.3&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;0.6&amp;lt;/math&amp;gt;之间的时候，会出现相当复杂的结构。这些结构既不属于固定的周期或者固定值，也不属于完全的随机，因此这些细胞自动机属于第四类即“复杂型”。并且，随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的增长，复杂结构的维持时间也会变得越来越大；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;gt;=0.6&amp;lt;/math&amp;gt;的时候，复杂的结构消失，系统将被吸引于一种完全随机的混沌状态。&lt;br /&gt;
由于在实验中，规则是根据λ随机产生的，因此我们在这里说明的动态行为随λ的变化性质仅仅是一种大致的分类。&lt;br /&gt;
&lt;br /&gt;
根据这些试验，我们不难得出，随着λ的增大，细胞自动机展现出来的结构将逐渐变得复杂，当&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于一个中间值的时候动态行为会达到最大的复杂性，然后随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的进一步增大复杂结构就逐渐被随机结构所取代。&lt;br /&gt;
&lt;br /&gt;
根据λ的连续变化能够得到四种细胞自动机之间的过渡转化图景&amp;lt;center&amp;gt;'''I-&amp;gt;II-&amp;gt;IV-&amp;gt;III，即：固定点-&amp;gt;周期-&amp;gt;复杂-&amp;gt;混沌'''&amp;lt;/center&amp;gt;因此我们说，复杂的结构诞生于混沌的边缘。混沌的边缘是什么东西？它是一种处于凝固的周期状态与活跃的混沌之间的一种过渡过程，或者我们称其为“相变过程”。所谓的“相变”就是指系统从量变到质变的飞跃。就像煮开水，当温度达到100度左右的时候，水会突然沸腾，这种状态就是相变，因为从此水由液态变成了气态。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
细胞自动机系统的连续变化过程就好像水的固、液以及固态到液态之间的的变化过程。如下：&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;gt;I&amp;amp;II-&amp;gt;IV-&amp;gt;III&lt;br /&gt;
&lt;br /&gt;
固体-&amp;gt;相变-&amp;gt;液体&lt;br /&gt;
&amp;lt;/center&amp;gt;I和II两种状态可以被看作是固态，就像冰一样凝固在一起非常有秩序但同时也没有活性。细胞自动机的第III类型就象是液态的水：完全的流动、随机，没有一个时刻能停留下来，然而由于这类系统过于松散，它也不可能产生有价值的结构。第IV类细胞自动机就刚好存在于从固态的冰到液态的水转变的瞬息之间这么一个狭小的空间里。在这里，复杂的结构形成了神奇的王国，你会不断地看到若干水分子结合成有趣的结构与秩序，但同时这些结构和秩序永远不会被冻结，它们会偶尔被破坏，但新的结构马上又会生成。这样的状态被“人工生命”之父郎顿称为混沌与秩序的边缘。科学家们已经对固体、液体的性质研究的比较清楚了，然而对于固体到液体转变这样一种相变的过程则仍然没有认识足够清楚，原因就在于这样的状态具有太多复杂的结构，我们很难预言它的具体性质。第IV类细胞自动机也是这样，下一时刻细胞自动机会是怎样的情况？我们除了按照它的“物理规律”运行它外别无它法，因为复杂的细胞自动机的行为不能预言。&lt;br /&gt;
&lt;br /&gt;
我们可以把混沌边缘的概念推广，也就是把秩序、周期这些动态的情况看作是一种凝固的吸引力，它保证了系统能够固定于某一种结构；而另一方面，随机、混沌则形成了另一种张力，它使得系统趋于不稳定，但同时为系统提供了创新的动力。那么仅仅当这两种力处于一种恰到好处的平衡态的时候，也就是系统处于混沌的边缘条件下，该系统才会更加有活力，并且演变得越来越复杂。&lt;br /&gt;
&lt;br /&gt;
生命从何处来？智能如何产生？人们为什么会创造有组织的同时又具有创新性的社会结构？答案是这些复杂的系统、复杂的结构来自于混沌的边缘。只有当生命所处的环境既不太“热”，即没有太大的动荡产生完全随机的混沌状态，同时又不能太“冷”，以至于所有活动都过于死板，这样才能孕育真正的生命。因此地球上的生命正是诞生于混沌的边缘这条狭窄的夹缝中。再考虑一个人的发展。如果一个人每天都在做同样的事情，从不尝试新鲜的生活，那么这个人所处的环境就过于死板最后将陷于一种机械循环的状态（第I、II类细胞自动机）。反过来，如果这个人过于涣散，总在尝试不同的新鲜事情，从来不会停下来静静的思考和沉淀，那么这个人就会过于灵活而也会一事无成。一个人只有处在“混沌边缘”的状态才能既产生学习、进化的动力，又会静下心来让所学的东西凝固成有价值的知识，从而创造辉煌的成果。再考虑一个国家，闭关锁国肯定不能发展，系统将会变成一潭死水，反过来过于开放则根本不会形成这个国家这个民族的凝聚力也就失去了它们的个性，所以社会也要不停地把自己推向混沌边缘的状态才能不断的发展下去。&lt;br /&gt;
&lt;br /&gt;
系统为什么总要处于“混沌边缘”的状态呢？比如生命吧，静止于某种固定的状态不是挺好的么？为了适应多变的环境，生命必须不断的进化而变得复杂，而要想变得复杂就必须让自己处于混沌边缘的状态。按照达尔文进化论的观点，不适应环境的生命体就会被大自然淘汰了，并不是每个生命体都有意识的要让自己越来越复杂，而是因为过于简单的生命不能适应环境了，于是它们被淘汰掉了，所以剩下来的仅有那些相对复杂的生命体。科学家曾用一批细胞自动机当作生命体在一个虚拟的自然环境中不断的进化，结果发现，仅有那些不断的趋于混沌边缘的细胞自动机留下来，而其他的细胞自动机逐渐被淘汰出局了。&lt;br /&gt;
&lt;br /&gt;
对于细胞自动机的分类以及混沌边缘的概念不仅仅适用于一维细胞自动机，对于二维甚至多维的细胞自动机仍然适用。显然我们熟悉的“生命游戏”也正是处于一种“混沌边缘”的状态。经计算，“生命游戏”对应的&amp;lt;math&amp;gt;λ=0.25&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 进一步阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Self-organized_criticality 自组织的临界 ]&lt;br /&gt;
&lt;br /&gt;
== 参考资料 ==&lt;br /&gt;
&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal|author=Christopher G. Langton|title=Computation at the edge of chaos|journal=Physica D|volume=42|pages=12|year=1990|url=http://www.romanpoet.org/223/langton.edgeofchaos.pdf|doi=10.1016/0167-2789(90)90064-V|bibcode=1990PhyD...42...12L}}&lt;br /&gt;
&lt;br /&gt;
*{{cite book|author=J. P. Crutchfield and K. Young|chapter=Computation at the Onset of Chaos|title=Entropy, Complexity, and the Physics of Information|editor=W. Zurek|series=SFI Studies in the Sciences of Complexity, VIII|publisher=Addison-Wesley|location=Reading, Massachusetts|year=1990|pages=223–269|chapter-url=http://csc.ucdavis.edu/~cmg/papers/CompOnset.pdf}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal | last1 = Mitchell | first1 = Melanie | last2 = Hraber | first2 = Peter T. | last3 = Crutchfield | first3 = James P. | year = 1993 | title = Revisiting the edge of chaos: Evolving cellular automata to perform computations | url = http://web.cecs.pdx.edu/~mm/rev-edge.pdf | journal = Complex Systems | volume = 7 | issue = | pages = 89–130 }}&lt;br /&gt;
&lt;br /&gt;
* Melanie Mitchell, James P. Crutchfield and Peter T. Hraber. ''[http://web.cecs.pdx.edu/~mm/dyn-comp-edge.pdf Dynamics, Computation, and the &amp;quot;Edge of Chaos&amp;quot;: A Re-Examination]''&lt;br /&gt;
&lt;br /&gt;
*''Origins of Order: Self-Organization and Selection in Evolution'' by Stuart Kauffman&lt;br /&gt;
&lt;br /&gt;
* {{Cite journal|last1=Mora |first1=Thierry |last2=Bialek |first2=William |year= 2010|title=Are biological systems poised at criticality? |journal=Journal of Statistical Physics |volume=144 |issue=2 |pages=268–302 |arxiv= 1012.2242|doi=10.1007/s10955-011-0229-4 |bibcode=2011JSP...144..268M }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
&lt;br /&gt;
* [http://bactra.org/notebooks/edge-of-chaos.html &amp;quot;混沌边缘&amp;quot;] –对这个想法盛行的批评.&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:Last1.png|400px|thumb|right|[https://swarma.org/?p=13364 用神经学习模型计算海量实际网络中的节点中心性度量 | 论文速递1篇|集智俱乐部]]]&lt;br /&gt;
&lt;br /&gt;
===集智视频推荐===&lt;br /&gt;
====[https://campus.swarma.org/course/1119 混沌的边缘]====&lt;br /&gt;
本课程中，将讲解如何有意识地设计或生长出具备自组织能力的复杂系统。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/697 非线性动力学与混沌]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/1113 从混沌开始]====&lt;br /&gt;
本课程中，将带领大家认识隐藏在简单方程中的混沌现象。&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===集智文章推荐===&lt;br /&gt;
====[https://swarma.org/?p=9058 元胞自动机与「混沌边缘」傅渥成的 Live]====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
本中文词条由[[用户:沐晨|沐晨]] 参与编译，[[用户:不是海绵宝宝|不是海绵宝宝]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
[[分类: 自我组织]] [[分类: 混沌理论]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45499</id>
		<title>混沌边缘</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%B7%B7%E6%B2%8C%E8%BE%B9%E7%BC%98&amp;diff=45499"/>
		<updated>2025-07-10T15:59:57Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自我组织,混沌理论&lt;br /&gt;
|description=自我组织，混沌理论&lt;br /&gt;
}}&lt;br /&gt;
混沌边缘（Edge of chaos）是有序和无序之间的过渡空间，这种空间被假设存在于各种各样的系统中。混沌边缘是一个有界的不稳定区域，不断地发生着有序和无序之间的动态相互作用&amp;lt;ref&amp;gt;{{cite web|last1=Complexity Labs|title=Edge of Chaos|url=http://complexitylabs.io/edge-of-chaos/.|website=Complexity Labs|accessdate=August 24, 2016}}&amp;lt;/ref&amp;gt;。一个能出现复杂现象的系统往往具有很大的自由度数目，由于非线性的存在，导致在高维相空间中存在一个有很多大于零的Lyapunov特征指数的奇怪吸引子。在这样的奇怪吸引子中存在数目巨大的有序成分和各种各样反映为物理空间有结构、时间上为混沌的成分，这些成分在通常意义下为不稳定。一旦受到某种刺激，按照混沌控制思想及其尚不知原因的原理，很快地、自适应地选择目标并达到目标，这样就导致了各种复杂现象的产生.由于这些成分构成奇怪吸引子中的一个稠集，因而对于目标响应是非常敏感的，这就导致某种不可预测性存在。&lt;br /&gt;
&lt;br /&gt;
尽管混沌边缘的概念十分抽象且不直观，但它确实在生态学&amp;lt;ref&amp;gt;{{cite journal|last1=Ranjit Kumar Upadhyay|title=Dynamics of an ecological model living on the edge of chaos|journal=Applied Mathematics and Computation|date=2009|volume= 210| issue = 2|pages=455–464|doi=10.1016/j.amc.2009.01.006}}&amp;lt;/ref&amp;gt;、商业管理&amp;lt;ref&amp;gt;{{cite web|last1=Deragon|first1=Jay|title=Managing On The Edge Of Chaos|url=http://www.relationship-economy.com/2012/08/managing-on-the-edge-of-chaos/|website=Relationship Economy}}&amp;lt;/ref&amp;gt;、心理学&amp;lt;ref&amp;gt;{{cite book|last1=Lawler|first1=E.|last2=Thye|first2=S.|last3=Yoon|first3=J.|title=Order on the Edge of Chaos Social Psychology and the Problem of Social Order|date=2015|publisher=Cambridge University Press|isbn=9781107433977}}&amp;lt;/ref&amp;gt; 、政治科学、社会科学等领域具有诸多应用。物理学家发现几乎所有具有反馈的系统都会适应混沌边缘。&amp;lt;ref&amp;gt;{{cite journal|last1=Wotherspoon|first1=T.|last2=et.|first2=al.|title=Adaptation to the edge of chaos with random-wavelet feedback|journal=J. Phys. Chem. A|date=2009|doi=10.1021/jp804420g|bibcode=2009JPCA..113...19W|volume=113|issue=1|pages=19–22|pmid=19072712}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 历史 ==&lt;br /&gt;
&lt;br /&gt;
'''混沌边缘'''一词是由数学家'''Doyne Farmer'''提出，用于描述计算机科学家[[克里斯托弗·朗顿 Christopher Langton]]发现的过渡现象。混沌边缘最初是指变量λ的区间，在该区间内观察[[元胞自动机]]（CA）的行为发生变化。随着λ变化，元胞自动机的行为发生了相变。兰顿发现了一个有利于产生具有通用计算能力的元胞自动机的小区域。大约在同一时间，物理学家'''詹姆士·克劳奇菲尔德 James P. Crutchfield'''和其他人开始使用混沌边缘（onset of chaos）来描述这一大致相同的概念。&lt;br /&gt;
&lt;br /&gt;
一般在科学领域，混沌边缘一词用于形容某些物理、生物、经济、社会系统在或有序或完全随机或混沌的状态间运行，其中复杂性是最大化的。但是[[梅勒妮·米歇尔 Melanie Mitchell]]等人对此概念的普遍性及意义提出了质疑。工商界也借用了这个词，不过时常使用的并不恰当，常在远超出该词原有含义范围的情况下使用。&lt;br /&gt;
&lt;br /&gt;
'''斯图尔特·考夫曼 Stuart Kauffman'''研究了进化系统的数学模型，其中进化速率在混沌边缘附近达到最大。&lt;br /&gt;
&lt;br /&gt;
== 适应 ==&lt;br /&gt;
&lt;br /&gt;
适应对所有生物和系统都起着至关重要的作用。为了更好地适应当前环境，&amp;lt;ref&amp;gt;{{cite book|last1=Strogatz|first1=Steven|title=Nonlinear dynamics and Chaos|date=1994|publisher=Westview Press}}&amp;lt;/ref&amp;gt; 它们都在不断改变其内在属性。自适应最重要的工具是许多自然系统所固有的自调整参数。具有自调整参数的系统具有避免混沌的显著特征。这种现象称为“混沌边缘的适应性”。&lt;br /&gt;
&lt;br /&gt;
混沌边缘的适应性，是指许多复杂的自适应系统似乎直观地朝着混沌与秩序之间的边界发展。物理学已经表明，混沌边缘是控制系统的最佳设置，同时&amp;lt;ref&amp;gt;{{cite journal|last1=Pierre|first1=D.|last2=et.|first2=al.|title=A theory for adaptation and competition applied to logistic map dynamics|journal=Physica D|date=1994|volume=75|issue=1–3|pages=343–360|bibcode=1994PhyD...75..343P|doi=10.1016/0167-2789(94)90292-5}}&amp;lt;/ref&amp;gt;它也是一个可选设置，可以影响物理系统执行基本功能的计算能力。&amp;lt;ref&amp;gt;{{cite journal|last1=Langton|first1=C.A.|title=Computation at the edge of chaos|journal=Physica D|date=1990|volume=42|issue=1–3|pages=12|doi=10.1016/0167-2789(90)90064-v|bibcode=1990PhyD...42...12L|url=https://zenodo.org/record/1258375}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由于适应在许多自然系统中的重要性，因此，混沌边缘的适应性在许多科学研究中占据重要地位。物理学家证明，对混沌秩序边缘的状态的适应发生在具有细胞自动机规则&amp;lt;ref&amp;gt;{{cite journal|last1=Packard|first1=N.H.|title=Adaptation toward the edge of chaos|journal=Dynamic Patterns in Complex Systems|date=1988|pages=293–301}}&amp;lt;/ref&amp;gt;的种群中，这些规则自动优化了遗传算法的性能。雪崩模型和地震模型中的自组织临界性就是很好的说明。&amp;lt;ref&amp;gt;{{cite journal|last1=Bak|first1=P.|last2=Tang|first2=C.|last3=Wiesenfeld|first3=K.|title=Self-organized criticality|journal=Phys Rev A|date=1988|volume=38|issue=1|pages=364–374|doi=10.1103/PhysRevA.38.364|bibcode=1988PhRvA..38..364B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最简单的混沌动力学模型是逻辑斯蒂映射。自调整的逻辑映射动力学表现出对混沌边缘的适应性。&amp;lt;ref&amp;gt;{{cite journal|last1=Melby|first1=P.|last2=et.|first2=al.|title=Adaptation to the edge of chaos in the self-adjusting logistic map.|journal=Phys. Rev. Lett.|date=2000|doi=10.1103/PhysRevLett.84.5991|arxiv=nlin/0007006|bibcode=2000PhRvL..84.5991M|volume=84|issue=26|pages=5991–5993|pmid=10991106}}&amp;lt;/ref&amp;gt;理论分析可以预测在系统演化边界附近的窄参数区域位置。&amp;lt;ref&amp;gt;{{cite journal|last1=Bayam|first1=M.|last2=et.|first2=al.|title=Conserved quantities and adaptation to the edge of chaos|journal=Physical Review E|date=2006|volume=73|issue=5|pages=056210|doi=10.1103/PhysRevE.73.056210|bibcode=2006PhRvE..73e6210B}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 程序实现 ==&lt;br /&gt;
Chirstopher Langton 专门开发了一个可操作的网页，显示一维细胞自动机随时间演变的图像，通过调节按钮可以观测到不同秩序、混沌及混沌边缘的状态。&lt;br /&gt;
&lt;br /&gt;
*程序名称：混沌的边缘&lt;br /&gt;
*程序作者：Chirstopher Langton&lt;br /&gt;
*程序地址：[https://math.hws.edu/eck/js/edge-of-chaos/CA.html 1D Cellular Automata and the Edge Of Chaos 的可操作界面展示]&lt;br /&gt;
[[文件:混沌与秩序的边缘.png|居中]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/edgeofchaos/CA.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1300px; height: 620px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 相关解说 ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
运行上面的程序，观察&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的不同，细胞自动机产生的动态行为如何变化。拖动中间的滑块可以更改&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的数值。右边New按钮可以在当前的&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;下随机产生新的规则，底下的几个选择框分别更改状态个数、邻居模板个数（注意这个数字包括该细胞自己，比如&amp;lt;math&amp;gt;N=5&amp;lt;/math&amp;gt;，那么左边两个细胞，右边两个细胞，再加上中间的细胞，所以邻居半径是2）;Isotropic表示规则是不区分左右对称的方格状态的Anisotropic则是区分的，因此Anisotropic产生的编码比较长，下面的Random Start表示从一个随机的状态开始，Random Clump表示从一个随机的小块开始演化。One Dot Start表示从一个点的初始状态开始演化。下面的文本框里面显示的是当前规则的编码。下面将具体说明其中的原理。&lt;br /&gt;
&lt;br /&gt;
为了更好的看清楚细胞自动机的动态行为，我们选用4个状态{0,1,2,3}，邻居半径为2（一共4个邻居）的一维细胞自动机来讨论，因为这种细胞自动机包含了所有的四种类别。&lt;br /&gt;
&lt;br /&gt;
我们知道，在给定了状态集&amp;lt;math&amp;gt;{0,1,2,3}&amp;lt;/math&amp;gt;，邻居半径2的一维情况下，细胞自动机的规则集决定了它们的不同。每一个细胞自动机的规则集都可以看成是一张大的转换表，形如：&lt;br /&gt;
&lt;br /&gt;
其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在&amp;lt;math&amp;gt;t+1&amp;lt;/math&amp;gt;时刻的状态。表中一共有45=1024项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;nq&amp;lt;/math&amp;gt;。那么我们可以定义参数：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|输入||01203||03120||12231||......&lt;br /&gt;
|-&lt;br /&gt;
|输出||0||1||2||......&lt;br /&gt;
|}其中每个输入的5位数字串中，中间的一个表示当前细胞的t时刻的状态，两边的数字都是它的邻居状态，而输出则对应当前细胞在t+1时刻的状态。表中一共有&amp;lt;math&amp;gt;4^5=1024&amp;lt;/math&amp;gt;项，这其中有些输出项为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态，有些不为&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;，我们把所有输出项为0的个数记为&amp;lt;math&amp;gt;n_q&amp;lt;/math&amp;gt;。那么我们可以定义参数：&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\lambda = (4^5-n_q)/4^5&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;这个参数反映了一组规则中转换成非&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;状态的比例。显然，根据给定的λ我们可以得到很多的规则表，因此我们可以随机的在这些规则表中选择一个。比如令&amp;lt;math&amp;gt;λ=0.5&amp;lt;/math&amp;gt;，那么我们可以随机的生成一个规则组转换表，表的输出部分0状态占据了一半的比例，其他的位置由1,2,3这几个数随机的填充。&lt;br /&gt;
&lt;br /&gt;
下面看看根据参数λ的取值不同，细胞自动机的动态行为如何变化。请运行上面的程序，让&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;在&amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;之间变化。&lt;br /&gt;
*当&amp;lt;math&amp;gt;λ=0~0.1&amp;lt;/math&amp;gt;，所有的细胞被吸引到一种固定的状态，这相当于我们上一节叙述的第一类细胞自动机；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;附近，系统在一些固定的状态之间周期的循环，这相当于第二类细胞自动机，&amp;lt;math&amp;gt;λ=0.3&amp;lt;/math&amp;gt;的细胞自动机比&amp;lt;math&amp;gt;λ=0.2&amp;lt;/math&amp;gt;的在开始的时候具有更复杂的结构；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于大约&amp;lt;math&amp;gt;0.3&amp;lt;/math&amp;gt;到&amp;lt;math&amp;gt;0.6&amp;lt;/math&amp;gt;之间的时候，会出现相当复杂的结构。这些结构既不属于固定的周期或者固定值，也不属于完全的随机，因此这些细胞自动机属于第四类即“复杂型”。并且，随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的增长，复杂结构的维持时间也会变得越来越大；&lt;br /&gt;
*&amp;lt;math&amp;gt;λ&amp;gt;=0.6&amp;lt;/math&amp;gt;的时候，复杂的结构消失，系统将被吸引于一种完全随机的混沌状态。&lt;br /&gt;
由于在实验中，规则是根据λ随机产生的，因此我们在这里说明的动态行为随λ的变化性质仅仅是一种大致的分类。&lt;br /&gt;
&lt;br /&gt;
根据这些试验，我们不难得出，随着λ的增大，细胞自动机展现出来的结构将逐渐变得复杂，当&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;介于一个中间值的时候动态行为会达到最大的复杂性，然后随着&amp;lt;math&amp;gt;λ&amp;lt;/math&amp;gt;的进一步增大复杂结构就逐渐被随机结构所取代。&lt;br /&gt;
&lt;br /&gt;
根据λ的连续变化能够得到四种细胞自动机之间的过渡转化图景&amp;lt;center&amp;gt;'''I-&amp;gt;II-&amp;gt;IV-&amp;gt;III，即：固定点-&amp;gt;周期-&amp;gt;复杂-&amp;gt;混沌'''&amp;lt;/center&amp;gt;因此我们说，复杂的结构诞生于混沌的边缘。混沌的边缘是什么东西？它是一种处于凝固的周期状态与活跃的混沌之间的一种过渡过程，或者我们称其为“相变过程”。所谓的“相变”就是指系统从量变到质变的飞跃。就像煮开水，当温度达到100度左右的时候，水会突然沸腾，这种状态就是相变，因为从此水由液态变成了气态。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
细胞自动机系统的连续变化过程就好像水的固、液以及固态到液态之间的的变化过程。如下：&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;gt;I&amp;amp;II-&amp;gt;IV-&amp;gt;III&lt;br /&gt;
&lt;br /&gt;
固体-&amp;gt;相变-&amp;gt;液体&lt;br /&gt;
&amp;lt;/center&amp;gt;I和II两种状态可以被看作是固态，就像冰一样凝固在一起非常有秩序但同时也没有活性。细胞自动机的第III类型就象是液态的水：完全的流动、随机，没有一个时刻能停留下来，然而由于这类系统过于松散，它也不可能产生有价值的结构。第IV类细胞自动机就刚好存在于从固态的冰到液态的水转变的瞬息之间这么一个狭小的空间里。在这里，复杂的结构形成了神奇的王国，你会不断地看到若干水分子结合成有趣的结构与秩序，但同时这些结构和秩序永远不会被冻结，它们会偶尔被破坏，但新的结构马上又会生成。这样的状态被“人工生命”之父郎顿称为混沌与秩序的边缘。科学家们已经对固体、液体的性质研究的比较清楚了，然而对于固体到液体转变这样一种相变的过程则仍然没有认识足够清楚，原因就在于这样的状态具有太多复杂的结构，我们很难预言它的具体性质。第IV类细胞自动机也是这样，下一时刻细胞自动机会是怎样的情况？我们除了按照它的“物理规律”运行它外别无它法，因为复杂的细胞自动机的行为不能预言。&lt;br /&gt;
&lt;br /&gt;
我们可以把混沌边缘的概念推广，也就是把秩序、周期这些动态的情况看作是一种凝固的吸引力，它保证了系统能够固定于某一种结构；而另一方面，随机、混沌则形成了另一种张力，它使得系统趋于不稳定，但同时为系统提供了创新的动力。那么仅仅当这两种力处于一种恰到好处的平衡态的时候，也就是系统处于混沌的边缘条件下，该系统才会更加有活力，并且演变得越来越复杂。&lt;br /&gt;
&lt;br /&gt;
生命从何处来？智能如何产生？人们为什么会创造有组织的同时又具有创新性的社会结构？答案是这些复杂的系统、复杂的结构来自于混沌的边缘。只有当生命所处的环境既不太“热”，即没有太大的动荡产生完全随机的混沌状态，同时又不能太“冷”，以至于所有活动都过于死板，这样才能孕育真正的生命。因此地球上的生命正是诞生于混沌的边缘这条狭窄的夹缝中。再考虑一个人的发展。如果一个人每天都在做同样的事情，从不尝试新鲜的生活，那么这个人所处的环境就过于死板最后将陷于一种机械循环的状态（第I、II类细胞自动机）。反过来，如果这个人过于涣散，总在尝试不同的新鲜事情，从来不会停下来静静的思考和沉淀，那么这个人就会过于灵活而也会一事无成。一个人只有处在“混沌边缘”的状态才能既产生学习、进化的动力，又会静下心来让所学的东西凝固成有价值的知识，从而创造辉煌的成果。再考虑一个国家，闭关锁国肯定不能发展，系统将会变成一潭死水，反过来过于开放则根本不会形成这个国家这个民族的凝聚力也就失去了它们的个性，所以社会也要不停地把自己推向混沌边缘的状态才能不断的发展下去。&lt;br /&gt;
&lt;br /&gt;
系统为什么总要处于“混沌边缘”的状态呢？比如生命吧，静止于某种固定的状态不是挺好的么？为了适应多变的环境，生命必须不断的进化而变得复杂，而要想变得复杂就必须让自己处于混沌边缘的状态。按照达尔文进化论的观点，不适应环境的生命体就会被大自然淘汰了，并不是每个生命体都有意识的要让自己越来越复杂，而是因为过于简单的生命不能适应环境了，于是它们被淘汰掉了，所以剩下来的仅有那些相对复杂的生命体。科学家曾用一批细胞自动机当作生命体在一个虚拟的自然环境中不断的进化，结果发现，仅有那些不断的趋于混沌边缘的细胞自动机留下来，而其他的细胞自动机逐渐被淘汰出局了。&lt;br /&gt;
&lt;br /&gt;
对于细胞自动机的分类以及混沌边缘的概念不仅仅适用于一维细胞自动机，对于二维甚至多维的细胞自动机仍然适用。显然我们熟悉的“生命游戏”也正是处于一种“混沌边缘”的状态。经计算，“生命游戏”对应的&amp;lt;math&amp;gt;λ=0.25&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 进一步阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Self-organized_criticality 自组织的临界 ]&lt;br /&gt;
&lt;br /&gt;
== 参考资料 ==&lt;br /&gt;
&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal|author=Christopher G. Langton|title=Computation at the edge of chaos|journal=Physica D|volume=42|pages=12|year=1990|url=http://www.romanpoet.org/223/langton.edgeofchaos.pdf|doi=10.1016/0167-2789(90)90064-V|bibcode=1990PhyD...42...12L}}&lt;br /&gt;
&lt;br /&gt;
*{{cite book|author=J. P. Crutchfield and K. Young|chapter=Computation at the Onset of Chaos|title=Entropy, Complexity, and the Physics of Information|editor=W. Zurek|series=SFI Studies in the Sciences of Complexity, VIII|publisher=Addison-Wesley|location=Reading, Massachusetts|year=1990|pages=223–269|chapter-url=http://csc.ucdavis.edu/~cmg/papers/CompOnset.pdf}}&lt;br /&gt;
&lt;br /&gt;
*{{cite journal | last1 = Mitchell | first1 = Melanie | last2 = Hraber | first2 = Peter T. | last3 = Crutchfield | first3 = James P. | year = 1993 | title = Revisiting the edge of chaos: Evolving cellular automata to perform computations | url = http://web.cecs.pdx.edu/~mm/rev-edge.pdf | journal = Complex Systems | volume = 7 | issue = | pages = 89–130 }}&lt;br /&gt;
&lt;br /&gt;
* Melanie Mitchell, James P. Crutchfield and Peter T. Hraber. ''[http://web.cecs.pdx.edu/~mm/dyn-comp-edge.pdf Dynamics, Computation, and the &amp;quot;Edge of Chaos&amp;quot;: A Re-Examination]''&lt;br /&gt;
&lt;br /&gt;
*''Origins of Order: Self-Organization and Selection in Evolution'' by Stuart Kauffman&lt;br /&gt;
&lt;br /&gt;
* {{Cite journal|last1=Mora |first1=Thierry |last2=Bialek |first2=William |year= 2010|title=Are biological systems poised at criticality? |journal=Journal of Statistical Physics |volume=144 |issue=2 |pages=268–302 |arxiv= 1012.2242|doi=10.1007/s10955-011-0229-4 |bibcode=2011JSP...144..268M }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
&lt;br /&gt;
* [http://bactra.org/notebooks/edge-of-chaos.html &amp;quot;混沌边缘&amp;quot;] –对这个想法盛行的批评.&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:Last1.png|400px|thumb|right|[https://swarma.org/?p=13364 用神经学习模型计算海量实际网络中的节点中心性度量 | 论文速递1篇|集智俱乐部]]]&lt;br /&gt;
&lt;br /&gt;
===集智视频推荐===&lt;br /&gt;
====[https://campus.swarma.org/course/1119 混沌的边缘]====&lt;br /&gt;
本课程中，将讲解如何有意识地设计或生长出具备自组织能力的复杂系统。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/697 非线性动力学与混沌]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/1113 从混沌开始]====&lt;br /&gt;
本课程中，将带领大家认识隐藏在简单方程中的混沌现象。&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===集智文章推荐===&lt;br /&gt;
====[https://swarma.org/?p=9058 元胞自动机与「混沌边缘」傅渥成的 Live]====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
本中文词条由[[用户:沐晨|沐晨]] 参与编译，[[用户:不是海绵宝宝|不是海绵宝宝]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
[[分类: 自我组织]] [[分类: 混沌理论]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E5%85%83%E8%83%9E%E8%87%AA%E5%8A%A8%E6%9C%BA&amp;diff=45497</id>
		<title>元胞自动机</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E5%85%83%E8%83%9E%E8%87%AA%E5%8A%A8%E6%9C%BA&amp;diff=45497"/>
		<updated>2025-07-10T08:14:49Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{#seo:&lt;br /&gt;
|keywords=元胞自动机,Cellular Automata,多主体仿真&lt;br /&gt;
|description=元胞自动机,复杂系统&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''元胞自动机 （cellular automata）'''（CA） ，中文也译作细胞自动机、点格自动机、分子自动机或单元自动机，是一种时间、空间、状态都离散，空间相互作用和时间因果关系为局部的网格动力学模型，具有模拟复杂系统时空演化过程的能力。由冯·诺依曼创始，经数学家[[约翰·何顿·康威 John Horton Conway]]、物理学家[[斯蒂芬·沃尔夫勒姆 Stephen Wolfram]]等人的贡献后迅速发展。'''元胞自动机'''广泛应用于'''计算机科学'''、物理学、[[复杂系统 Complex Systems]]，理论生物学和微观结构模型等领域。元胞自动机同时也被称为元胞空间，棋盘自动机 tessellation automata，同质结构，元胞结构，棋盘结构和迭代数组。&amp;lt;ref name=&amp;quot;Wolfram&amp;quot;&amp;gt;Wolfram, Stephen (1983) [https://pattern.swarma.org/paper?id=72996efc-6f19-11ea-a943-0242ac1a0005 &amp;quot;Statistical Mechanics of Cellular Automata&amp;quot;].Reviews of Modern Physics.55.(601--644)&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[File:CA3D.gif|400px|right|thumb|基于元胞自动机的三维展示]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;元胞自动机由规则的元胞网格组成，散布在规则格网 Lattice Grid 中的每一元胞 Cell 取有限的离散状态，遵循同样的作用规则，依据确定的局部规则作同步更新。&lt;br /&gt;
&lt;br /&gt;
首先每个单元格都处于有限状态中的一种，例如打开状态和关闭状态（与耦合映象晶格 coupled map lattice 相反）。网格可以是任意有限维数。对于每个单元格，都有一组定义为其邻域的单元格。 每个单元格都将被定义一种状态来作为初始状态（时间t = 0）。根据一些固定的规则（通常是一种数学函数）&amp;lt;ref name=&amp;quot; Toffoli&amp;quot;&amp;gt;Tommaso; Margolus Norman, Toffoli (1987) [https://pattern.swarma.org/paper?id=af01ed74-6f19-11ea-b9a1-0242ac1a0005 &amp;quot;Cellular Automata Machines: A New Environment for Modeling&amp;quot;].27.&amp;lt;/ref&amp;gt;，产生新的状态（t增加1个单位）。单元格当前状态及其附近单元格的状态共同决定了该单元格的新状态。一般而言，更新单元格状态的规则对于每个单元格都是相同的，不随时间变化，适用于整个网格。&amp;lt;ref&amp;gt;Schiff, Joel L (2011) [https://pattern.swarma.org/paper?id=37fb6b22-6f1b-11ea-bbca-0242ac1a0005 &amp;quot;Cellular Automata: A Discrete View of the World&amp;quot;].(40)&amp;lt;/ref&amp;gt;然而也有例外，例如[https://en.wikipedia.org/wiki/Stochastic_cellular_automaton 随机元胞自动机]和[https://en.wikipedia.org/wiki/Asynchronous_cellular_automaton 异步元胞自动机]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;20世纪40年代，这个概念最初是由当时在[https://en.wikipedia.org/wiki/Los_Alamos_National_Laboratory 洛斯阿拉莫斯国家实验室] Los Alamos National Laboratory 工作的[https://en.wikipedia.org/wiki/Stanislaw_Ulam 斯坦尼斯瓦夫•乌拉姆] Stanislaw Ulam 和[[约翰·冯·诺依曼 John von Neumann]]发现的。尽管20世纪50年代到60年代一直有学者在研究这个问题，但直到20世纪70年代，随着[[康威的生命游戏 Conway's Game of Life]]的问世（一个二维的元胞自动机），这个问题才引起学术界的关注。20世纪80年代，史蒂芬·沃尔夫勒姆 Stephen 沃尔弗拉姆对一维元胞自动机进行了系统的研究，他称其为[https://en.wikipedia.org/wiki/Elementary_cellular_automaton 初等元胞自动机]。他的研究助理马修·库克 Matthew Cook 指出，这些规则是'''图灵完备 Turing-complete'''的。沃尔弗拉姆在2002年发表了《[[一种新科学 a New Kind of Science]]》这一著作，文中指出元胞自动机已在许多科学领域得到应用，包括计算机处理器和密码学。&lt;br /&gt;
&lt;br /&gt;
==概述==&lt;br /&gt;
[[File:摩尔邻域.png|150px|thumb|红色单元格是蓝色单元格的摩尔邻域]]&lt;br /&gt;
[[File:冯诺依曼邻域.png|150px|thumb|红色单元格是蓝色单元格的冯·诺依曼邻域。扩展的邻域也包括粉色单元格]]&lt;br /&gt;
&amp;lt;br&amp;gt;模拟二维元胞自动机的一种方法是用一张无限大的方格纸，加上一套元胞规则来构成。每个正方形被称为“单元格” ，每个单元格有两种可能的状态，黑色和白色。 单元格的邻域是指周围的单元格。 最常见的两种邻域类型有[https://en.wikipedia.org/wiki/Von_Neumann_neighborhood 冯诺依曼邻域] von Neumann neighborhood 和[https://en.wikipedia.org/wiki/Moore_neighborhood 摩尔邻域] Moore neighborhood。前者由4个正交相邻的单元格组成。 后者包括冯诺依曼领域和斜对角相邻的4个单元格。&amp;lt;ref name=&amp;quot;Kier&amp;quot;&amp;gt;Kier, Lemont B.; Seybold, Paul G.; Cheng, Chao-Kun (2005). Modeling Chemical Systems using Cellular Automata. Springer. ISBN 9781402036576.&amp;lt;/ref&amp;gt;对于每个单元格及其摩尔邻域，有512(2&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;)种可能的自动机模式。 对于每一种模式，规则表将确定在下一个时间段中中心单元格是黑色还是白色。[[康威的生命游戏 Conway's Game of Life]]就是这种模式的一个流行版本。 另一种常见的邻域类型是扩展的冯诺依曼邻域，它包括每个正交方向上最近的2个单元格，总共8个单元格。&amp;lt;ref name = &amp;quot; Kier &amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;这种规则的一般方程是 k&amp;lt;sup&amp;gt;k&amp;lt;sup&amp;gt;s&amp;lt;/sup&amp;gt;&amp;lt;/sup&amp;gt;，其中 k 是一个单元格可能状态的数目，s 是用来确定单元格下一个状态的相邻单元格的数目(包括要计算的单元格本身)。&amp;lt;ref&amp;gt;Bialynicki-Birula, Iwo; Bialynicka-Birula, Iwona (2004). Modeling Reality: How Computers Mirror Life. Oxford University Press. ISBN 978-0198531005.&lt;br /&gt;
 &amp;lt;/ref&amp;gt;&lt;br /&gt;
因此，在二维的摩尔邻域中，可能出现的自动机模式共有2&amp;lt;sup&amp;gt;2&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;&amp;lt;/sup&amp;gt;个，即1.34*10&amp;lt;sup&amp;gt;154&amp;lt;/sup&amp;gt;个。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;通常假设整个网格中除了有限数量的单元格处于不同状态之外，其他的每个单元格具有相同的初始状态。这些状态值的分配被称为配置 configuration。&amp;lt;ref name=&amp;quot;Schiff&amp;quot;&amp;gt;Schiff, Joel L. (2011). Cellular Automata: A Discrete View of the World. Wiley &amp;amp; Sons, Inc. p. 40. ISBN 9781118030639. &amp;lt;/ref&amp;gt;更笼统地说，人们有时假设整个网格从一开始时就具有周期性模式，只有有限数量的单元格违反了这个模式。这种假设在一维元胞自动机中很常见。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;元胞自动机通常是在有限网格上模拟的，而不是在无限网格上。在二维空间中，整个网格将是一个矩形而不是一个无限平面。有限网格最大的问题就是如何处理边缘的单元格。处理它们的方式将影响网格中所有单元格的值，一种方法是允许这些单元格中的值保持不变；另一种方法是为这些单元格定义不同的邻域。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;虽然可以认为边缘单元格的邻域较少，但是必须为其定义新规则。这些单元格通常以环形排列处理: 当一个单元格无上邻域时，将该单元格相应位置的网格底部单元格作为上邻域，当一个单元格无左邻域时，将该单元格相应位置的网格右侧单元格作为右邻域（这实质上模拟了无限周期的拼接，在偏微分方程领域有时被称为周期边界条件)。这可以想象为用胶带把矩形的左右边缘粘在一起形成一个管状，然后把管的顶部和底部边缘粘在一起形成一个圆环(甜甜圈形状)。其他维度的网格也是这样处理的。这种方法不仅解决了邻域的边界问题，而且易于通过使用模块化计算功能编程。例如，在一维元胞自动机中，单元格 x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;t&amp;lt;/sup&amp;gt; 的邻居是{ x&amp;lt;sub&amp;gt;i-1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;t-1&amp;lt;/sup&amp;gt;，x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;t-1&amp;lt;/sup&amp;gt;，x&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;t-1&amp;lt;/sup&amp;gt;} ，其中 t 是时间步长(纵轴)，i 是一代中的索引(横轴)。&lt;br /&gt;
&amp;lt;br&amp;gt;[[File:圆环.png|150px|thumb|center|圆环:甜甜圈形状]]&lt;br /&gt;
&lt;br /&gt;
==研究历史==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;20世纪40年代，乌拉姆在洛斯阿拉莫斯国家实验室工作时，以简单的晶格网络为模型，研究了晶体的生长。&amp;lt;ref name=&amp;quot;Pickover&amp;quot;&amp;gt;Pickover, Clifford A. (2009). The Math Book: From Pythagoras to the 57th Dimension, 250 Milestones in the History of Mathematics. Sterling Publishing Company, Inc. p. 406. ISBN 978-1402757969.&amp;lt;/ref&amp;gt;与此同时，乌拉姆在洛斯阿拉莫斯的同事[[约翰·冯·诺依曼 John von Neumann]]正在研究自复制系统的问题。他最初的设计是基于“一个机器制造另一个机器”的概念。这种设计被称为运动学模型。&amp;lt;ref name = &amp;quot; von Neumann &amp;quot; &amp;gt;John von Neumann, &amp;quot;The general and logical theory of automata,&amp;quot; in L.A. Jeffress, ed., Cerebral Mechanisms in Behavior – The Hixon Symposium, John Wiley &amp;amp; Sons, New York, 1951, pp. 1–31.&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot; Kemeny &amp;quot; &amp;gt;Kemeny, John G. (1955). &amp;quot;Man viewed as a machine&amp;quot;. Sci. Am. 192 (4): 58–67. Bibcode:1955SciAm.192d..58K. doi:10.1038/scientificamerican0455-58.; Sci. Am. 1955; 192:6 (errata)&amp;lt;/ref&amp;gt;冯·诺依曼在开发这一设计时，逐渐意识到制造一个自我复制的机器人非常困难，并且需要花费巨大成本为机器人提供“一大堆零件”来制造复制品。冯·诺依曼在1948年的[https://en.wikipedia.org/wiki/Lloyd_A._Jeffress#The_Hixon_Symposium 希克森研讨会  Hixon Symposium]上写了一篇题为《The general and logical theory of automata》的论文。&amp;lt;ref name=&amp;quot; Schiff&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;乌拉姆建议使用离散系统来创建自我复制的还原论模型。&amp;lt;ref name=&amp;quot; Schiff&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Ilachinski&amp;quot;&amp;gt;Ilachinski, Andrew (2001). Cellular Automata: A Discrete Universe. World Scientific. ISBN 9789812381835.&amp;lt;/ref&amp;gt;尼尔斯·阿尔·巴里切利对这些人工生命模型进行了许多早期的探索。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;乌拉姆和冯·诺依曼在20世纪50年代后期创造了一种计算流体运动的方法。该方法的驱动概念是将流体视为一组离散单元格，根据其相邻单元格的行为计算其运动。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt; 因此诞生了第一个元胞自动机系统。 与乌拉姆的晶格网络一样，冯·诺依曼的[[元胞自动机 Cellular Automata]]是二维的，其自复制器通过算法实现。这样的设计使得一个通用复制和构造器在具有很小邻域的元胞自动机内工作(只有那些接触的单元格是邻域；对于冯·诺依曼的元胞自动机而言，只有正交的单元格是邻域)，其中，每个单元格有29个状态。&amp;lt;ref name=&amp;quot;Wolfram2&amp;quot;&amp;gt;Wolfram, Stephen (2002). A New Kind of Science. Wolfram Media. ISBN 978-1579550080.&amp;lt;/ref&amp;gt;冯·诺依曼通过设计一个20万个元胞的结构，证明了在特定的模式下，单元格可以在给定的网格中无止境地自我复制。这种设计被称为棋盘模型，也被称为冯·诺依曼通用构造器。&amp;lt;ref name = &amp;quot; von Neumann2 &amp;quot; &amp;gt;von Neumann, John; Burks, Arthur W. (1966). Theory of Self-Reproducing Automata. University of Illinois Press.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:John von Neumann ID badge.png|200px|thumb|left|冯·诺依曼在实验室的身份证照片]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;同样在20世纪40年代，诺伯特·维纳和阿图罗·罗森布鲁斯开发了一种具有元胞自动机特征的可激发介质模型。&amp;lt;ref name = &amp;quot; Wiener &amp;quot; &amp;gt;Wiener, N.; Rosenblueth, A. (1946). &amp;quot;The mathematical formulation of the problem of conduction of impulses in a network of connected excitable elements, specifically in cardiac muscle&amp;quot;. Arch. Inst. Cardiol. México. 16: 205.&amp;lt;/ref&amp;gt;它用于心脏系统脉冲传导的数学描述。 然而该模型并不属于元胞自动机，因为信号传播的介质是连续的，波前是曲线。&amp;lt;ref name = &amp;quot; Wiener &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot; Letichevskii &amp;quot; &amp;gt;Letichevskii, A. A.; Reshodko, L. V. (1974). &amp;quot;N. Wiener's theory of the activity of excitable media&amp;quot;. Cybernetics. 8 (5): 856–864. doi:10.1007/bf01068458.&amp;lt;/ref&amp;gt;1978年，J.m. Greenberg和S. P. Hastings发展并研究出了一个真正的种可激发介质的元胞自动机。维纳和罗森布鲁斯的原始著作中包含了许多见解，在现代关于心律失常和兴奋系统的研究出版物中仍经常被引用。&amp;lt;ref name = &amp;quot; Davidenko &amp;quot; &amp;gt;Davidenko, J. M.; Pertsov, A. V.; Salomonsz, R.; Baxter, W.; Jalife, J. (1992). &amp;quot;Stationary and drifting spiral waves of excitation in isolated cardiac muscle&amp;quot;. Nature. 355 (6358): 349–351. Bibcode:1992Natur.355..349D. doi:10.1038/355349a0. PMID 1731248.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;到20世纪50年代末，人们已经注意到，元胞自动机可视为并行计算机，特别是在20世纪60年代，一系列形式越来越详细和技术性的定理（通常类似于图灵机的定理）被证明具有形式化的计算能力。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;20世纪60年代，人们将元胞自动机作为'''动力系统'''的一种特殊类型进行了研究，首次建立了其与符号动力学中的数学领域的联系。1969年， Gustav Arnold Hedlund根据这一观点&amp;lt;ref name = &amp;quot; Hedlund &amp;quot; &amp;gt;Hedlund, G. A. (1969). &amp;quot;Endomorphisms and automorphisms of the shift dynamical system&amp;quot;. Math. Systems Theory. 3 (4): 320–3751. doi:10.1007/BF01691062.&amp;lt;/ref&amp;gt;在论文中汇编了许多结果，至今该论文仍被认为是元胞自动机数学研究的开创性论文。最基本的结果是在Curtis-Hedlund-Lyndon 定理中将元胞自动机的全局规则集描述为移位空间的连续自同态集。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;1969年，德国计算机先驱康拉德·楚泽 Konrad Zuse出版了《Calculating Space》，提出宇宙的物理定律本质上是离散的，整个宇宙是在一个元胞自动机的确定性计算的输出。 '''楚泽理论 Zuse theory'''成为数字物理学研究领域的基础。&amp;lt;ref name=&amp;quot; Schiff&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;也是在1969年，计算机科学家埃尔维·雷·史密斯 Alvy Ray Smith完成了斯坦福大学关于元胞自动机理论的博士论文。许多论文都出自这篇论文: 他展示了各种形状邻域的等价性，如何把摩尔邻域归结为冯诺依曼邻域，或者如何把任何邻域归结为冯诺依曼邻域。&amp;lt;ref name = &amp;quot;Smith2&amp;quot; &amp;gt;{{Cite journal |title=Cellular Automata Complexity Trade-Offs |author=Smith, Alvy Ray |url= http://alvyray.com/Papers/CA/TradeOff.pdf }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
他证明了二维元胞自动机具有计算通用性，通过引入一维元胞自动机，表明即使在简单的邻域内二维元胞自动机同样具有计算通用性，也是如此。&amp;lt;ref name = &amp;quot;Smith3&amp;quot; &amp;gt;{{Cite journal |title=Simple Computation-Universal Cellular Spaces |author=Smith, Alvy Ray |&lt;br /&gt;
url= http://alvyray.com/Papers/CA/UniversalCA_1D.pdf }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
他展示了如何将复杂的冯诺依曼结构普遍性证明(以及由此产生的自复制机器)纳入到一维元胞自动机计算普遍性的结果中。&amp;lt;ref name = &amp;quot;Smith4&amp;quot; &amp;gt;{{Cite journal |title=Simple Nontrivial Self-Reproducing Machines |author=Smith, Alvy Ray |url= http://alvyray.com/Papers/CA/alife2_optimized.pdf }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
作为冯·诺依曼关于元胞自动机书的德文版介绍，他撰写了一份该领域的调查报告，其中引用了几十篇参考文献，这些文献是多个国家的多个作者在过去十年左右时间的研究成果，常常被现代元胞自动机研究者所忽视。&amp;lt;ref name = &amp;quot;Smith5&amp;quot; &amp;gt;{{Cite journal |title=Introduction to and Survey of Cellular Automata or Polyautomata Theory|author=Smith, Alvy Ray |url= http://alvyray.com/Papers/CA/PolyCA76.pdf }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;在20世纪70年代，一种名为[[康威的生命游戏 Conway's Game of Life]]的两态、二维元胞自动机广为人知，尤其是在早期的计算机界。该元胞自动机是[[约翰·何顿·康威 John Horton Conway]]发明的，马丁·加德纳 Martin Gardner在《Scientific American》的一篇文章中推广&amp;lt;ref name=&amp;quot; Gardner &amp;quot;&amp;gt;&lt;br /&gt;
{{Cite journal&lt;br /&gt;
|last= Gardner&lt;br /&gt;
|first= Martin &lt;br /&gt;
|date=1970&lt;br /&gt;
|title=&amp;quot;Mathematical Games: The fantastic combinations of John Conway's new solitaire game &amp;quot;life&amp;quot;&lt;br /&gt;
|journal= Scientific American&lt;br /&gt;
|volume=223&lt;br /&gt;
|issue=223&lt;br /&gt;
|pages=601–644&lt;br /&gt;
|url=http://www.ibiblio.org/lifepatterns/october1970.html }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
，其规则如下:&lt;br /&gt;
#任何单元格的邻域单元格状态为活的少于两个，那么该单元格的状态就为死，这可能是由于人口不足造成的。&lt;br /&gt;
#任何单元格具有两个或三个状态为活的邻域单元格，那么该单元格状态为活。&lt;br /&gt;
#任何单元格具有超过三个状态为活的邻域单元格，那么该单元格状态为死，这可能是由于人口过剩造成的&lt;br /&gt;
#任何状态为死的单元格的邻域若正好有三个状态为活的单元格，那么在下一时间段中，该单元格状态会变为活，就像繁殖一样。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;尽管简单，该系统实现了令人印象深刻的多样性行为，在表观随机性和顺序之间波动。 生命游戏最明显的特征之一就是“滑翔机”的频繁出现，滑翔机的排列实质上是使自己在网格上移动。也可以安排自动机使滑翔机相互作用来执行计算。经过大量的努力，已经证明生命游戏可以模仿通用图灵机。&amp;lt;ref name = &amp;quot;Paul&amp;quot; &amp;gt;{{Cite journal|author1=Paul Chapman | journal=Life universal computer|date=2002|title=&amp;quot;Life Universal Computer&amp;quot;|url= http://www.igblan.free-online.co.uk/igblan/ca/}} &amp;lt;/ref&amp;gt;&lt;br /&gt;
在20世纪70年代初期，它主要被看做一个娱乐性游戏，除了研究生命游戏的特殊性和一些相关规则外，很少有人进行后续的研究工作。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;[[斯蒂芬·沃尔夫勒姆 Stephen Wolfram]]在考虑了自然界中如何形成违反[https://en.wikipedia.org/wiki/Second_law_of_thermodynamics 热力学第二定律]的复杂模式后，于1981年中开始独立从事元胞自动机的研究。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;他的研究源于对[https://en.wikipedia.org/wiki/Neural_network 神经网络]等建模系统的兴趣。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;1983年6月，他在[https://en.wikipedia.org/wiki/Reviews_of_Modern_Physics 《Reviews of Modern Physics》]上发表了他的第一篇论文，研究了[https://en.wikipedia.org/wiki/Elementary_cellular_automaton 初等元胞自动机](特别是[https://en.wikipedia.org/wiki/Rule_30 第30条规则])。&amp;lt;ref name=&amp;quot; Wolfram&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;这些简单规则行为的意想不到的复杂性使得沃尔弗拉姆怀疑自然界的复杂性可能是由于类似的机制造成的。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;然而，他的研究使他认识到元胞自动机在模拟神经网络方面的效果很差。此外，沃尔弗拉姆还阐述了内在随机性和计算不可约性的概念，&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;并提出[https://en.wikipedia.org/wiki/Rule_110 第110条规则]，这条规则可能是通用的——在20世纪90年代，沃尔弗拉姆的研究助手[https://en.wikipedia.org/wiki/Matthew_Cook 马修·库克 Matthew Cook]证明了这一事实。&amp;lt;ref name=&amp;quot; Mitchell, &amp;quot;&amp;gt; Mitchell, Melanie (4 October 2002). &amp;quot;Is the Universe a Universal Computer?&amp;quot;. Science. 298 (5591): 65–68. doi:10.1126/science.1075073.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2002年，沃尔弗拉姆发表了一篇1280页的文章《[[一种新科学 a New Kind of Science]]》 其中详细论述了关于元胞自动机的发现不是孤立的事实，而是相互依靠的，并且对所有科学学科都有重要意义。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;尽管书中的内容很混乱&amp;lt;ref name = &amp;quot; Johnson &amp;quot; &amp;gt;{{ Cite journal|&lt;br /&gt;
title=&amp;quot;'A New Kind of Science': You Know That Space-Time Thing? Never Mind&lt;br /&gt;
|author1= Johnson, George | journal=The New York Times|date=2002|&lt;br /&gt;
url=https://www.nytimes.com/2002/06/09/books/review/09JOHNSOT.html}} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name = &amp;quot; Economist &amp;quot; &amp;gt;{{ Cite journal|title= The Science of Everything|journal= The Economist|date=2002|url=http://www.economist.com/printedition/displayStory.cfm?Story_ID=1154164}} &amp;lt;/ref&amp;gt;，但它描述了一些基于元胞自动机的具体物理模型，它也提供了基于性质不同而形成的抽象系统模型。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt; 然而有一个缺点就是：该书并未对基于元胞自动机的物理学基本理论进行论证。&lt;br /&gt;
&lt;br /&gt;
==分类==&lt;br /&gt;
沃尔弗拉姆在[https://en.wikipedia.org/wiki/A_New_Kind_of_Science 《[[一种新科学 a New Kind of Science]]》]和20世纪80年代中期的几篇论文中，将元胞自动机和其他几种简单的计算模型根据其行为进行分为四个类别:&lt;br /&gt;
&lt;br /&gt;
::(1)平稳型：自任何初始状态开始,经过一定时间运行后，元胞空间趋于一个空间平稳的构形，这里空间平稳即指每一个元胞处于固定状态。不随时间变化而变化。&lt;br /&gt;
&lt;br /&gt;
::(2)周期型：经过一定时间运行后，元胞空间趋于一系列简单的固定结构 Stable Paterns 或周期结构 Perlodical Patterns。由于这些结构可看作是一种滤波器 Filter，故可应用到图像处理的研究中。&lt;br /&gt;
&lt;br /&gt;
::(3)混沌型：自任何初始状态开始，经过一定时间运行后，元胞自动机表现出混沌的非周期行为，所生成的结构的统计特征不再变化，通常表现为分形分维特征。&lt;br /&gt;
&lt;br /&gt;
::(4)复杂型：出现复杂的局部结构，或者说是局部的混沌，其中有些会不断地传播。从另一角度，元胞自动机可视为动力系统，因而可将初试点、轨道、不动点、周期轨和终极轨等一系列概念用到元胞自动机的研究中。&lt;br /&gt;
&lt;br /&gt;
从另一角度，元胞自动机可视为动力系统，因而可将'''初始点、轨道、不动点、周期轨和终极轨'''等一系列概念用到元胞自动机的研究中，上述分类，又可以分别描述为：&lt;br /&gt;
&lt;br /&gt;
(1)均匀状态，即点态吸引子，或称不动点；&lt;br /&gt;
&lt;br /&gt;
(2)简单的周期结构，即周期性吸引子，或称周期轨；&lt;br /&gt;
&lt;br /&gt;
(3)混沌的非周期性模式，即混沌吸引子；&lt;br /&gt;
&lt;br /&gt;
(4)这第四类行为可以与生命系统等复杂系统中的自组织现象相比拟，但在连续系统中没有相对应的模式。&lt;br /&gt;
&lt;br /&gt;
但从研究元胞自动机的角度讲，最具研究价值的具有第四类行为的元胞自动机，因为这类元胞自动机被认为具有'''突现计算 Emergent Computation'''功能，研究表明，可以用作广义计算机 Universal Computer 以仿真任意复杂的计算过程。另外，此类元胞自动机在发展过程中还表现出很强的'''不可逆 Irreversibility '''特征，而且，这种元胞自动机在若干有限循环后，有可能会 &amp;quot;死&amp;quot;掉，即所有元胞的状态变为零。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;这是早期关于元胞自动机研究倾向于识别特定规则的模式类型，而沃尔弗拉姆的分类是首次尝试对规则本身进行分类。按照复杂程度的顺序，类别如下:&lt;br /&gt;
&amp;lt;br&amp;gt;第1类: 几乎所有初始模式都迅速演变为稳定的均匀状态。初始模式中的任何随机性都会消失。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;第2类: 几乎所有初始模式都迅速演变为稳定或振荡的结构。初始模式中的某些随机性可能会被滤除，但仍然存在。初始模式的局部更改倾向于保持局部性质。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;第3类:几乎所有初始模式都以伪随机或混乱的方式演变。任何出现的稳定结构都会被周围的噪音迅速破坏。初始模式的局部更改趋向于无限期扩散。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;第4类: 几乎所有的初始模式都演变成以复杂而有趣的方式相互作用的结构，形成了可以长期存在的局部结构。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;第2类的稳定或振荡结构可能是最终的结果，即使初始模式相对简单，但达到这种状态可能需要很多步。初始模式的局部变化可能会无限扩散。沃尔弗拉姆推测存在很多第四类元胞自动机，即使不是全部，规则110和[[康威的生命游戏 Conway's Game of Life]]已经证明了这一点。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;这些定义本质上是定性的，有一定解释空间。根据沃尔弗拉姆的说法：“...几乎所有的通用分类方案都是一种定义对应一个类别。 元胞自动机的分类也是如此: 偶尔会有一些规则来展示出一个类的某些特征和另一个类的某些特征。”&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;沃尔弗拉姆的分类是已根据经验与元胞自动机输出压缩长度的聚类相匹配而得出的。&amp;lt;ref name = &amp;quot; Zenil&amp;quot; &amp;gt;{{ Cite journal|title=Compression-based investigation of the dynamical properties of cellular automata and other systems|author1= Zenil, Hector  | journal=Complex Systems|date=2010|volume=19|issue=1|url=http://www.complex-systems.com/pdf/19-1-1.pdf}} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;受沃尔弗拉姆分类法的启发，人们已多次尝试将元胞自动机以严格的形式分类。 例如，Culik 和 Yu 提出了三个具有明确定义的类(没有一种对应自动机的第四类)，这些类有时被称为 Culik-Yu 类; 这些类之间的关系已被证明是[https://en.wikipedia.org/wiki/Undecidable_problem 难以确定的]。&amp;lt;ref name=&amp;quot;G. Cattaneo&amp;quot;&amp;gt;  G. Cattaneo; E. Formenti; L. Margara (1998). &amp;quot;Topological chaos and CA&amp;quot;. In M. Delorme; J. Mazoyer (eds.). Cellular automata: a parallel model. Springer. p. 239. ISBN 978-0-7923-5493-2.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book&lt;br /&gt;
|author= Burton H. Voorhees &lt;br /&gt;
|title=Computational analysis of one-dimensional cellular automata.&lt;br /&gt;
|publisher= World Scientific&lt;br /&gt;
|isbn: 978-981-02-2221-5&lt;br /&gt;
|pages=8&lt;br /&gt;
|year=1996}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Max&amp;quot;&amp;gt; Max Garzon (1995). Models of massive parallelism: analysis of cellular automata and neural networks. Springer. p. 149. ISBN 978-3-540-56149-1.&amp;lt;/ref&amp;gt; 沃尔弗拉姆的第2类可以划分为稳定(不动点)和具有振荡(周期)规则的两个子类。&amp;lt;ref name = &amp;quot; Wentian &amp;quot; &amp;gt;{{ Cite journal|title=The structure of the elementary cellular automata rule space|author1=  Li, Wentian|author2= Packard, Norman  | journal=Complex Systems|date=1990|volume=4| pages= 281–297|url=http://www.complex-systems.com/pdf/04-3-3.pdf}} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;划分4类动力系统的想法最初来自诺贝尔化学奖获得者[https://en.wikipedia.org/wiki/Ilya_Prigogine 伊利亚·普里高津 Ilya Prigogine]，他确定了热力学系统可划分为四类: (1)热力学平衡系统，(2)空间 / 时间均匀系统，(3)混沌系统，(4)具有耗散结构的复杂远离平衡系统。&amp;lt;ref name = &amp;quot;Nicolis&amp;quot;&amp;gt;{{Cite journal|title= Dissipative Structures, Catastrophes, and Pattern Formation: A Bifurcation Analysis |author1= Nicolis |journal= PNAS |date=1974|volume=71|issue=7|pages=2748-2751|url= http://www.complex-systems.com/pdf/04-3-3.pdf }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 可逆的 ===&lt;br /&gt;
'''主条目：[https://en.wikipedia.org/wiki/Reversible_cellular_automaton 可逆元胞自动机]'''&lt;br /&gt;
&amp;lt;br&amp;gt;如果对于元胞自动机的每个当前结构，恰好有一个过去的结构([https://en.wikipedia.org/wiki/Image_(mathematics)#Inverse_image 原像])，则元胞自动机是可逆的。&amp;lt;ref name=&amp;quot;Gutowitz&amp;quot;&amp;gt;  Gutowitz, Howard, ed. (1991). Cellular Automata: Theory and Experiment. MIT Press. ISBN 9780262570862.&amp;lt;/ref&amp;gt;如果我们把元胞自动机看作是从结构映射到结构的函数，那么可逆性就意味着这个函数是[https://en.wikipedia.org/wiki/Bijection 双射]的。&amp;lt;ref name=&amp;quot;  Gutowitz &amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;如果元胞自动机是可逆的，那么其时间逆转行为也可以被描述为元胞自动机; 这个事实是[https://en.wikipedia.org/wiki/Curtis%E2%80%93Hedlund%E2%80%93Lyndon_theorem Curtis-Hedlund-Lyndon定理]的结果，该定理是元胞自动机的拓扑特征。&amp;lt;ref name=&amp;quot; Richardson &amp;quot;&amp;gt; Richardson, D. (1972). &amp;quot;Tessellations with local transformations&amp;quot;. J. Computer System Sci. 6 (5): 373–388. doi:10.1016/S0022-0000(72)80009-6.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Margenstern&amp;quot;&amp;gt; Margenstern, Maurice (2007). Cellular Automata in Hyperbolic Spaces – Tome I, Volume 1. Archives contemporaines. p. 134. ISBN 978-2-84703-033-4.&amp;lt;/ref&amp;gt;对于不是每个结构都有预映像的元胞自动机，这些没有预映像的结构称为[https://en.wikipedia.org/wiki/Garden_of_Eden_(cellular_automaton) 初始]模式。&amp;lt;ref name = &amp;quot; Schiff &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;对于一维元胞自动机，已知有一些可以确定规则是否可逆的算法。&amp;lt;ref name=&amp;quot; Amoroso &amp;quot;&amp;gt; Amoroso, Serafino; Patt, Yale N. (1972). &amp;quot;Decision Procedures for Surjectivity and Injectivity of Parallel Maps for Tessellation Structures&amp;quot;. J. Comput. Syst. Sci. 6 (5): 448–464. doi:10.1016/s0022-0000(72)80013-8.&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot; Sutner &amp;quot; &amp;gt;{{Cite journal |title= De Bruijn Graphs and Linear Cellular Automata |author1= Sutner, Klaus |journal= Complex Systems |date=1991|volume=5|pages= 19-30| url=http://wpmedia.wolfram.com/uploads/sites/13/2018/02/05-1-3.pdf}} &amp;lt;/ref&amp;gt;&lt;br /&gt;
然而，对于二维及更高维元胞自动机，其可逆性是无法判定的；换言之，没有一种以自动机规则作为输入，并保证正确地判断自动机是否可逆的算法。此定理由[https://en.wikipedia.org/wiki/Jarkko_Kari 贾科·卡里 Jarkko Kari]完成其证明，该证明与[https://en.wikipedia.org/wiki/Wang_tile 王浩平铺]的拼贴问题有关。&amp;lt;ref name=&amp;quot; Kari &amp;quot;&amp;gt;  Kari, Jarkko (1990). &amp;quot;Reversibility of 2D cellular automata is undecidable&amp;quot;. Physica D. 45 (1–3): 379–385. Bibcode:1990PhyD...45..379K. doi:10.1016/0167-2789(90)90195-U.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;由于可逆的元胞自动机遵循[https://en.wikipedia.org/wiki/Thermodynamics 热力学]原理，因此可用于模拟诸如气体和流体动力学等物理现象。这种元胞自动机具有专门构造的可逆规则。[https://en.wikipedia.org/wiki/Tommaso_Toffoli 托玛索·托佛利 Tommaso Toffoli]，[https://en.wikipedia.org/wiki/Norman_Margolus 诺曼·马戈卢斯 Norman Margolus]等人已经研究过这样的系统。有几种技术可以用来准确地构造具有已知的可逆元胞自动机。 常见的有[https://en.wikipedia.org/wiki/Second-order_cellular_automaton 二阶元胞自动机]和[https://en.wikipedia.org/wiki/Block_cellular_automaton 分区元胞自动机]，两者都是以某种方式修改元胞自动机的定义。虽然这种自动机并不严格满足上面给出的定义，但是它们可以由拥有足够大的邻域和状态数的传统元胞自动机来模拟，因此它们可以被认为是常规元胞自动机的子集。它们还证明了每一个可逆的元胞自动机都可以被一个分区元胞自动机模拟。&amp;lt;ref name=&amp;quot; Kari2 &amp;quot;&amp;gt;  Kari, Jarkko (1999). &amp;quot;On the circuit depth of structurally reversible cellular automata&amp;quot;. Fundamenta Informaticae. 38: 93–107.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot; Durand-Lose &amp;quot;&amp;gt;Durand-Lose, Jérôme (2001). &amp;quot;Representing reversible cellular automata with reversible block cellular automata&amp;quot;. Discrete Mathematics and Theoretical Computer Science. AA: 145–154. Archived from the original on 15 May 2011.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 完全的 ===&lt;br /&gt;
一类特殊的元胞自动机是'''完全元胞自动机'''。完全元胞自动机中每个单元格的状态由一个数字表示(通常是从有限集合中提取的整数值)，t时刻的单元格取值仅取决于 t-1时刻邻近单元格取值的和(可能包括该单元格)。&amp;lt;ref name = &amp;quot;Wolfram2&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;如果 t 时刻的单元格状态取决于 t-1时刻的单元格状态和其邻近单元格状态的总和，那么称其为外部完全元胞自动机。&amp;lt;ref name = &amp;quot; Ilachinski &amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;[[ 康威的生命游戏 Conway's Game of Life ]]就是一个外部完全元胞自动机的例子，其单元格取值为0和1; 外部完全元胞自动机的元胞自动机具有与生命相同的摩尔邻域结构，有时被称为仿生元胞自动机。&amp;lt;ref name=&amp;quot; Barral &amp;quot;&amp;gt;The phrase &amp;quot;life-like cellular automaton&amp;quot; dates back at least to Barral, Chaté &amp;amp; Manneville (1992), who used it in a broader sense to refer to outer totalistic automata, not necessarily of two dimensions. The more specific meaning given here was used e.g. in several chapters of Adamatzky (2010). See: Barral, Bernard; Chaté, Hugues; Manneville, Paul (1992). &amp;quot;Collective behaviors in a family of high-dimensional cellular automata&amp;quot;. Physics Letters A. 163 (4): 279–285. Bibcode:1992PhLA..163..279B. doi:10.1016/0375-9601(92)91013-H.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 相关的自动机 ===&lt;br /&gt;
关于元胞自动机的概念有很多种概括。&lt;br /&gt;
[[File:Oscillator.gif|200px|right|thumb|基于六边形单元而不是正方形的元胞自动机]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;一种方法是不使用矩形(立方体等)网格。例如，一个平面以[https://en.wikipedia.org/wiki/Hexagonal_tiling 规则六边形作为单元格平铺]。在许多情况下，产生的细胞自动机相当于具有特殊设计的邻域和规则的矩形网格。另一种方法是网格本身形状不规则，如[https://en.wikipedia.org/wiki/Penrose_tiles 彭罗斯平铺]。&amp;lt;ref name = &amp;quot; Jacob &amp;quot; &amp;gt;{{ Cite journal|title= First gliders navigate ever-changing Penrose universe |author1= Jacob Aron |journal= New Scientist.|url=https://www.newscientist.com/article/dn22134-first-gliders-navigate-everchanging-penrose-universe.html }} &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;同样，具有一定概率触发规则的元胞自动机称为[https://en.wikipedia.org/wiki/Probabilistic_cellular_automata 随机元胞自动机]。对于不同模式下的时间t，概率规则将给出中心单元格在时间t+1时转换为各种可能状态的概率。有时规则很简单，例如：“采取《[[康威的生命游戏 Conway's Game of Life]]》规则，但是在每个时间点上，每个单元格都有0.001％的概率会转变为相反的颜色。”&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;邻域或规则可能会随时间或空间的变化而变化。 例如，初始单元格的新状态可以由水平相邻的单元格确定，但对于下一代，将使用垂直单元格来确定其状态。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;在元胞自动机中，一个单元格的新状态不受其他单元格的新状态影响。这也是可以改变的，例如，一个2×2的单元格块可以由它自己和邻近的单元格决定。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''[https://en.wikipedia.org/wiki/Continuous_automaton 连续自动机]'''像完全元胞自动机一样，但是规则和状态不是离散的（例如，使用状态{0,1,2}的表），而是使用连续函数，并且状态变为连续（通常为[0,1]中的值）。单个位置的状态是有限个实数。某些元胞自动机可以通过这种方式产生液体扩散。&lt;br /&gt;
&lt;br /&gt;
[[File:Striangle.jpeg|200px|right|thumb|组合自动机产生Sierpiński三角]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''[https://en.wikipedia.org/wiki/Continuous_spatial_automaton 连续空间自动机]'''具有连续的位置和时间。单个位置的状态是有限个实数。状态根据微分方程式改变。一个重要的例子是[https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion 反应-扩散]纹理，这是[https://en.wikipedia.org/wiki/Alan_Turing 艾伦·图灵 Alan Turing]提出的用于解释化学反应如何在[https://en.wikipedia.org/wiki/Zebra 斑马]和豹子身上形成条纹的微分方程。&amp;lt;ref name=&amp;quot; Jacob Aron &amp;quot;&amp;gt;JMurray, J. &amp;quot;Mathematical Biology II&amp;quot;. Springer.&amp;lt;/ref&amp;gt;当通过元胞自动机对其近似化时，它们通常会产生相似的模式。MacLennan&amp;lt;ref name=&amp;quot; MacLennan &amp;quot;&amp;gt;http://web.eecs.utk.edu/~bmaclenn/contin-comp.html&amp;lt;/ref&amp;gt;认为连续的空间自动机是一种计算模型。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;有连续空间自动机的已知示例表现出类似于[[康威的生命游戏 Conway's Game of Life]]中的滑翔机的传播现象。&amp;lt;ref name=&amp;quot; Pivato &amp;quot;&amp;gt;Pivato, M: &amp;quot;RealLife: The continuum limit of Larger than Life cellular automata&amp;quot;, Theoretical Computer Science, 372 (1), March 2007, pp. 46–68&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''图形再生自动机'''是基于[https://en.wikipedia.org/wiki/Graph_rewriting 图形再生]系统的元胞自动机的扩展。&amp;lt;ref name=&amp;quot; Tomita &amp;quot;&amp;gt;{{cite journal &lt;br /&gt;
|title= Graph-rewriting automata as a natural extension of cellular automata|author1=Tomita, Kohji|author2=Haruhisa Kurokawa| author3= Satoshi Murata|journal= Adaptive Networks |volume= Springer|pages= 291-309 &lt;br /&gt;
|year=2009 |url= https://link.springer.com/chapter/10.1007/978-3-642-01284-6_14}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''组合自动机'''通过检查奇数/偶数索引对是否等于置换X来实现其功能。如果成立，则返回规则字符串的X（例如：“ 120012101”）。 这些元胞自动机与[https://en.wikibooks.org/wiki/Cellular_Automata/Neighborhood#Brickwall_neighborhood 砖墙邻居 Brickwall_neighborhood ]一起工作。 这些元胞自动机类型也像逻辑门 Logic gate一样起作用。 例如，当初始状态是单个居中单元格时，组合中的XOR 门的等效项将产生Sierpiński三角。&lt;br /&gt;
&lt;br /&gt;
==初等元胞自动机==&lt;br /&gt;
[[File:Example.GIF|200px|thumb|upright=3|3维动画演示一维元胞自动机产生下一代的规则|right]]&lt;br /&gt;
初等元胞自动机 Elementary Cellular Automata（ECA）的基本要素如下空间：&lt;br /&gt;
*一维直线上等间距的点。可为某区间上的整数点的集合。&lt;br /&gt;
*状态集：S={s1,s2} 即只有两种不同的状态。这两种不同的状态可将其分别编码为0 与 1；若用图形表示，则可对应“黑”与“白” 或者其他两种不同的颜色。&lt;br /&gt;
*邻居：取邻居半径r=1，即每个元胞最多只有“左邻右舍”两个邻居。&lt;br /&gt;
*演化规则：任意设定， 最多2^8=256种不同的设定方式。&lt;br /&gt;
&lt;br /&gt;
元胞以相邻的8个元胞为邻居。即Moore邻居；一个元胞的生死由其在该时刻本身的生死状态和周围八个邻居的状态所决定。&lt;br /&gt;
&lt;br /&gt;
最简单的元胞自动机是一维的，每个单元格具有两种状态，并且单元格的邻域定义为在其任一侧的相邻单元格。一个单元格及其两个相邻单元格形成一个3个单元格的邻域，因此邻域有2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;  = 8个可能的模式。规则包括为每种模式确定单元格在下一代中是1还是0。然后有2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; = 256个可能的规则。	&amp;lt;ref name=&amp;quot;Bialynicki&amp;quot;&amp;gt;Bialynicki-Birula, Iwo; Bialynicka-Birula, Iwona (2004). Modeling Reality: How Computers Mirror Life. Oxford University Press. ISBN 978-0198531005.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;这256个元胞自动机通常由其[https://en.wikipedia.org/wiki/Wolfram_code Wolfram代码]来引用，[https://en.wikipedia.org/wiki/Wolfram_code Wolfram代码]是沃尔弗拉姆发明的标准命名规则，为每个规则赋予从0到255的数字。许多论文分析并比较了这256个元胞自动机。元胞自动机[https://en.wikipedia.org/wiki/Rule_30 第30条]和[https://en.wikipedia.org/wiki/Rule_110 第110条]规则非常有趣。下面的图像展示了由0包围的1(在每个图像的顶部)组成的初始结构的演变记录。每一行单元格表示自动机历史中的一代，其中t=0表示顶行。白色单元格表示0，黑色单元格表示1。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''第30条元胞自动机规则'''&lt;br /&gt;
[[File:CA_rule30s.png|200px|right|thumb|规则30]]&lt;br /&gt;
[[File:表格30.png|400px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;第30条元胞自动机规则表现出了第3类行为，这意味着即使是简单的输入模式（如所示）也会导致混乱的，看似随机的演变。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''第110条元胞自动机规则'''&lt;br /&gt;
[[File:CA_rule110s.png|200px|right|thumb|规则110]]&lt;br /&gt;
[[File:表格110.png|400px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;像《[[康威的生命游戏 Conway's Game of Life]]》一样，第110条元胞自动机规则表现出沃尔弗拉姆所称的第4类行为：它既不是完全随机的，也不是完全周期重复的。局部结构以各种看起来复杂的方式出现并相互作用。 马修·库克 Matthew Cook在1994年作为沃尔弗拉姆的研究助手在《[[一种新科学 a New Kind of Science]]》的发展过程中证明了其中一些结构足够丰富以支持[https://en.wikipedia.org/wiki/Universal_Turing_machine 图灵机的普遍性 Universal_Turing_machine ]。这个结果很有趣，因为第110条元胞自动机规则是一个非常简单的一维系统，难以进行工程设计以执行特定行为。因此，该结果为沃尔弗拉姆的观点提供了重要的支持，即4类系统天生就具有普遍性。1998年，库克在[[圣塔菲研究所 Santa Fe Institute]]召开了有关元胞自动机的会议，但该证明被沃尔弗拉姆阻止在会议上提出，因为沃尔弗拉姆不想在《[[一种新科学 a New Kind of Science]]》出版之前公开证明。&amp;lt;ref name=&amp;quot; Giles &amp;quot;&amp;gt;Giles, Jim (2002). &amp;quot;What Kind of Science is This?&amp;quot;. Nature. 417 (6886): 216–218. Bibcode:2002Natur.417..216G. doi:10.1038/417216a. PMID 12015565.&amp;lt;/ref&amp;gt;因此,2004年，在库克提出该证明十年后，终于在沃尔弗拉姆的[[复杂系统 Complex Systems]]杂志（第15卷，第1期）上发表。第110条元胞自动机规则是一些最小型通用图灵机的基础。&amp;lt;ref name=&amp;quot;Weinberg &amp;quot;&amp;gt;{{cite journal &lt;br /&gt;
|title=Is the Universe a Computer?&lt;br /&gt;
|author1=Weinberg, Steven&lt;br /&gt;
|journal= The New York Review of Books |url=http://www.nybooks.com/articles/archives/2002/oct/24/is-the-universe-a-computer/?pagination=false}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==规则空间==&lt;br /&gt;
初等元胞自动机规则由8位字符串指定，所有初等元胞自动机规则都可以视为定义在位于8维单元[https://en.wikipedia.org/wiki/Hypercube 超立方体]的[https://en.wikipedia.org/wiki/Vertex_(geometry) 顶点]上。这个单元超立方体是元胞自动机规则空间。对于下一个近邻元胞自动机，规则由2&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; = 32位字符串指定，并且元胞自动机规则空间为32维单位超立方体。两个规则之间的距离可以通过沿着超立方体的[https://en.wikipedia.org/wiki/Edge_(geometry) 边缘]从一个顶点（代表第一条规则）和另一个顶点（代表另一条规则）移动所需的步数来定义。该距离也称为[https://en.wikipedia.org/wiki/Hamming_distance 汉明距离]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;元胞自动机规则空间让我们产生了以下问题：具有相似动态行为的规则是否彼此“接近”。在二维平面上以图形方式绘制高维超立方体仍然是一项艰巨的任务，超立方体中规则的粗定位器是基本规则的8位字符串中的bit-1(或次近邻规则的32位字符串)。在规则空间的这些切片中，在不同的沃尔弗拉姆类中绘制规则表明，第1类规则具有较少的bit-1，因此位于空间的一个区域中；而第3类规则具有比例更高的bit-1(50%)。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;对于较大的元胞自动机规则空间，第4类规则是第1类和第3类规则的过渡。&amp;lt;ref name=&amp;quot; Wentian2 &amp;quot;&amp;gt;Wentian Li; Norman Packard; Chris G Langton (1990). &amp;quot;Transition phenomena in cellular automata rule space&amp;quot;. Physica D. 45 (1–3): 77–94. Bibcode:1990PhyD...45...77L. CiteSeerX 10.1.1.15.2786. doi:10.1016/0167-2789(90)90175-O.&amp;lt;/ref&amp;gt;这一观察结果是[https://en.wikipedia.org/wiki/Edge_of_chaos 混乱边缘]这一阶段的基础，让人联想到[https://en.wikipedia.org/wiki/Thermodynamics 热力学]中的[https://en.wikipedia.org/wiki/Phase_transition 相变 Phase transition ]。&lt;br /&gt;
&lt;br /&gt;
==生物学==&lt;br /&gt;
&lt;br /&gt;
元胞自动机可以模拟某些生物学发生过程。&lt;br /&gt;
[[File:贝壳.jpeg|200px|thumb|upright=3|贝壳的螺旋图案|right]]&lt;br /&gt;
&amp;lt;br&amp;gt;一些[https://en.wikipedia.org/wiki/Seashell 贝壳]的图案（如[https://en.wikipedia.org/wiki/Cone_snail Conus]和[https://en.wikipedia.org/wiki/Cymbiola Cymbiola]属的[https://en.wikipedia.org/wiki/Seashell 贝壳]）是通过自然元胞自动机生成的。这些[https://en.wikipedia.org/wiki/Pigment 色素]细胞沿着贝壳的边缘分布在一条狭窄的带子上。每个细胞遵循一个自然的数学规则,根据其邻近的色素细胞的激活和抑制活性分泌色素。&amp;lt;ref name=&amp;quot; Peak &amp;quot;&amp;gt;{{cite journal &lt;br /&gt;
|title=The Geometry and Pigmentation of Seashells |author= Coombs, Stephen |year=2009 |url=http://www.maths.nott.ac.uk/personal/sc/pdfs/Seashells09.pdf}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
当贝壳生长缓慢时，细胞带会在贝壳上留下彩色图案。例如，分布广泛的[https://en.wikipedia.org/wiki/Conus_textile Conus textile]的图案类似于沃尔弗拉姆[https://en.wikipedia.org/wiki/Rule_30 第30条元胞自动机规则]。&amp;lt;ref name=&amp;quot; Peak &amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;植物通过元胞自动机机制调节气体的摄入和损失。叶子上的每个[https://en.wikipedia.org/wiki/Stoma 气孔]都充当元胞。&amp;lt;ref name=&amp;quot; Peak2 &amp;quot;&amp;gt;{{cite journal &lt;br /&gt;
|title=Evidence for complex, collective dynamics and emergent, distributed computation in plants &lt;br /&gt;
|author1= Peak, West&lt;br /&gt;
|author2=  Messinger, Mott &lt;br /&gt;
|journal= Proceedings of the National Academy of Sciences &lt;br /&gt;
|volume=101&lt;br /&gt;
|issue=4&lt;br /&gt;
|pages=918–922&lt;br /&gt;
|year=2004 &lt;br /&gt;
|url=http://www.pnas.org/cgi/content/abstract/101/4/918}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;此外还有可以用两种状态的二维元胞自动机模拟[https://en.wikipedia.org/wiki/Cephalopod 头足类动物]皮肤上的移动波型，每种状态都对应于扩展或缩回的[https://en.wikipedia.org/wiki/Chromatophore 色素细胞]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;更有趣的是，人们发明了阈值自动机来模拟[https://en.wikipedia.org/wiki/Neuron 神经元]的诸如识别和学习之类的复杂行为。&amp;lt;ref name = &amp;quot;Ilachinski&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;还有研究发现，[https://en.wikipedia.org/wiki/Fibroblast 成纤维细胞]与元胞自动机具有相似之处，因为每个成纤维细胞仅与其相邻细胞相互作用。&amp;lt;ref name=&amp;quot;Yves Bouligand&amp;quot;&amp;gt; Yves Bouligand (1986). Disordered Systems and Biological Organization. pp. 374–375.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==化学类型==&lt;br /&gt;
[[File:The_Belousov-Zhabotinsky_Reaction.gif|100px|thumb|right|B-Z反应]]&lt;br /&gt;
[https://en.wikipedia.org/wiki/Belousov%E2%80%93Zhabotinsky_reaction Belousov-Zhabotinsky 反应](B-Z反应)是一个时空化学振荡器，可以用元胞自动机模拟。20世纪50年代，[https://en.wikipedia.org/wiki/Anatol_Zhabotinsky 阿纳托尔·马尔科维奇·扎博丁斯基 Anatol Markovich Zhabotinsky]（扩展了[https://en.wikipedia.org/wiki/Boris_Pavlovich_Belousov 鲍里斯·帕夫洛维奇·别洛乌索夫 Boris Pavlovich Belousov]的工作）发现，当一层薄薄的均匀的[https://en.wikipedia.org/wiki/Malonic_acid 丙二酸]、酸化溴酸盐和铈盐混合在一起并且不受干扰时，就形成了迷人的几何图案，如同同心圆和螺旋在介质中传播。此结果发表在1988年8月[https://en.wikipedia.org/wiki/Scientific_American Scientific American]杂志的“Computer Recreations”部分中，&amp;lt;ref name=&amp;quot; Dewdney&amp;quot;&amp;gt;  A. K. Dewdney, The hodgepodge machine makes waves, Scientific American, p. 104, August 1988.&amp;lt;/ref&amp;gt;此外[https://en.wikipedia.org/wiki/Alexander_Dewdney 亚历山大·基瓦丁·杜德尼 Alexander Keewatin Dewdney]讨论了由德国比勒菲尔德大学的 Martin Gerhardt 和 Heike Schuster 开发的元胞自动机。&amp;lt;ref name=&amp;quot; Gerhardt &amp;quot;&amp;gt; Gerhardt, M.; Schuster, H. (1989). &amp;quot;A cellular automaton describing the formation of spatially ordered structures in chemical systems&amp;quot;. Physica D. 36 (3): 209–221. Bibcode:1989PhyD...36..209G. doi:10.1016/0167-2789(89)90081-x.&amp;lt;/ref&amp;gt;该自动机产生的波型类似于Belousov-Zhabotinsky反应中的波型。&lt;br /&gt;
&lt;br /&gt;
==应用程序==&lt;br /&gt;
=== '''电脑处理器''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;元胞自动机处理器是元胞自动机概念的物理实现，可以在计算机上处理信息。处理单元以相同单元的规则网格排列。网格通常是二维正方形或三维的正方体拼贴或平铺。其他拼贴也是可能的，但尚未使用。单元状态仅通过与相邻单元的交互来确定，不存在直接与更远的单元进行通信。&amp;lt;ref name=&amp;quot; Muhtaroglu &amp;quot;&amp;gt;  Muhtaroglu, Ali (August 1996). &amp;quot;4.1 Cellular Automaton Processor (CAP)&amp;quot;. Cellular Automaton Processor Based Systems for Genetic Sequence Comparison/Database Searching. Cornell University. pp. 62–74.&amp;lt;/ref&amp;gt; 其中一个这样的元胞自动机处理器阵列配置就是[https://en.wikipedia.org/wiki/Systolic_array 脉冲阵列]。元胞相互作用可以通过电荷，磁性，振动（[https://en.wikipedia.org/wiki/Phonon 声子]（在量子尺度上)），或其他任何物理方式。因此任何单元之间不需要电线。这与当今大多数计算机（[https://en.wikipedia.org/wiki/Von_Neumann_architecture von Neumann设计]）中使用的处理器截然不同，后者被划分为若干部分，这些部分可以通过线路与远距离的部分进行通信。&lt;br /&gt;
&lt;br /&gt;
=== '''密码学''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;最初建议使用第30条元胞自动机规则作为可能密码学的[https://en.wikipedia.org/wiki/Block_cipher 分组密码]。二维元胞自动机可用于构建[https://en.wikipedia.org/wiki/Pseudorandom_number_generator 伪随机数生成器]。&amp;lt;ref name=&amp;quot; Tomassini &amp;quot;&amp;gt; Tomassini, M.; Sipper, M.; Perrenoud, M. (2000). &amp;quot;On the generation of high-quality random numbers by two-dimensional cellular automata&amp;quot;. IEEE Transactions on Computers. 49 (10): 1146–1151. doi:10.1109/12.888056.&amp;lt;/ref&amp;gt;&lt;br /&gt;
元胞自动机已被提出用于[https://en.wikipedia.org/wiki/Public-key_cryptography 公钥加密]。[https://en.wikipedia.org/wiki/One-way_function 单向函数]是一个有限元胞自动机的演化，其逆向元素很难找到。根据规则，任何人都可以轻易计算未来状态，但是很难计算历史状态。&lt;br /&gt;
&lt;br /&gt;
=== '''纠错编码''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;Sen Gupta和P. Pal Chaudhuri在一篇论文中将元胞自动机应用于设计[https://en.wikipedia.org/wiki/ECC_memory 纠错码]。这篇论文定义了一种使用元胞自动机构建单比特纠错和双比特错误检测（SEC-DED）码的新方案，并发布了一种用于该码的快速硬件解码器。&amp;lt;ref name=&amp;quot; Chowdhury &amp;quot;&amp;gt;Chowdhury, D. Roy; Basu, S.; Gupta, I. Sen; Chaudhuri, P. Pal (June 1994). &amp;quot;Design of CAECC - cellular automata based error correcting code&amp;quot;. IEEE Transactions on Computers. 43 (6): 759–764. doi:10.1109/12.286310.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==建模物理现实==&lt;br /&gt;
[[File:菱形十二面体.jpeg|400px|缩略图|右|菱形十二面体是一个卡塔兰立体，有12个面、24条边和14个顶点，其中12面为12个全等的个菱形，且具有180度旋转对称性和点对称性，因此是一个环带多面体，其对偶多面体为截半立方体]]&lt;br /&gt;
正如安德鲁·伊拉钦斯基 Andrew Ilachinski 在'''元胞自动机'''中指出的那样，许多学者提出了宇宙是否是元胞自动机的问题。&amp;lt;ref name = &amp;quot;Ilachinski&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;Ilachinski认为，这个问题的重要性可以通过一个简单观察以便更好地理解。观察描述如下：思考元胞自动机第110条规则的演变过程：如果它是某种“外来物理学”，那么对观察到的模式的合理描述是什么？&amp;lt;ref name = &amp;quot;Ilachinski&amp;quot; &amp;gt;&amp;lt;/ref&amp;gt;如果观察者不知道图像是如何产生的，那么这个观察者最终可能会推测一些类似粒子的物体的运动。事实上，物理学家[https://en.wikipedia.org/wiki/James_P._Crutchfield 詹姆斯·克鲁奇菲尔德 James P. Crutchfield]为其构建了一套严格的数学理论，证明了元胞自动机中‘’‘粒子’‘’在统计学上出现。&amp;lt;ref name = &amp;quot; Crutchfield &amp;quot; &amp;gt;{{ Cite journal|title=The Calculi of Emergence: Computation, Dynamics, and Induction|author1=J. P. Crutchfield,|journal=Physica.D|date=1994|url=http://csc.ucdavis.edu/~cmg/papers/CalcEmerg.pdf}} &amp;lt;/ref&amp;gt;然后，随着争论的进行，有人可能会怀疑，在我们现有理解水平中，以[https://en.wikipedia.org/wiki/Particle_physics 粒子物理]对象描述是合理的世界，在其基础的阶段是否可能是一个元胞自动机？这个基础阶段存在信息缺失问题，或者对于随机顺序出现的基础数据的理解不完全问题。这些可能与元胞自动机矛盾。&lt;br /&gt;
&amp;lt;br&amp;gt;虽然还未发展出符合此思路的完整理论，但有趣的是，这一假设的提出使学者们对如何在一个离散的框架内理解我们的世界产生了有趣且丰富的猜测。人工智能的先驱[https://en.wikipedia.org/wiki/Marvin_Minsky 马文·明斯基 Marvin Minsky]研究了如何理解粒子与二维元胞自动机网格的相互作用。&amp;lt;ref name=&amp;quot; Minsky &amp;quot;&amp;gt; Minsky, M. (1982). &amp;quot;Cellular Vacuum&amp;quot;. International Journal of Theoretical Physics. 21 (537–551): 1982. Bibcode:1982IJTP...21..537M. doi:10.1007/bf02650183.&amp;lt;/ref&amp;gt;最早的工作计算机Z3的发明者Konrad Zuse开发了一个不规则组织的网格，以解决粒子信息含量的问题。&amp;lt;ref name=&amp;quot; Zuse &amp;quot;&amp;gt; K. Zuse, &amp;quot;The Computing Universe&amp;quot;, Int. Jour. of Theo. Phy. 21, 589–600, 1982.&amp;lt;/ref&amp;gt;最近，[https://en.wikipedia.org/wiki/Edward_Fredkin 爱德华·弗雷德金Edward Fredkin]揭示了他所说的“有限自然假说”，即“最终，物理学的每一个量，包括空间和时间，都将是离散的和有限的。”这一思想。&amp;lt;ref name=&amp;quot; Fredkin &amp;quot;&amp;gt; E. Fredkin, &amp;quot;Digital mechanics: an informational process based on reversible universal cellular automata&amp;quot;, Physica D 45, 254–270, 1990&amp;lt;/ref&amp;gt;弗雷德金和[[斯蒂芬·沃尔夫勒姆 Stephen Wolfram]]是基于元胞自动机的物理学的有力支持者。2016年，[https://en.wikipedia.org/wiki/Gerard_%27t_Hooft 杰拉德·霍夫特 Gerard't Hooft]出版了一本书，详细介绍了利用细胞自动机重建[https://en.wikipedia.org/wiki/Quantum_mechanics 量子力学]的想法。&amp;lt;ref name=&amp;quot; Gerard &amp;quot;&amp;gt;Gerard 't Hooft, 2016, The Cellular Automaton Interpretation of Quantum Mechanics, Springer International Publishing, DOI 10.1007/978-3-319-41285-6, Open access-[1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;近年来，非标准计算方面的文献也提出了其他建议。 沃尔弗拉姆的《[[一种新科学 a New Kind of Science]]》将元胞自动机视为理解包括物理在内的各种学科的关键。[https://en.wikipedia.org/wiki/ILabs Ilabs]创始人 Gabriele Rossi 与 Francesco Berto 和 Jacopo tagliabue 共同开发的参考模型数学，以一种新的“菱形十二面体”格子和独特规则为基础，展现了一个原始的二维/三维宇宙。这种模式满足普遍性（相当于图灵机）和完全可逆性（一个能满足人们想轻松地保存各种数量而又不丢失任何信息的迫切要求），并且将其套用到一阶理论中，从而对宇宙演化进行定量、定性描述。&amp;lt;ref name=&amp;quot; Berto &amp;quot;&amp;gt;F. Berto, G. Rossi, J. Tagliabue, The Mathematics of the Models of Reference, College Publications, 2010&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==元胞自动机举例==&lt;br /&gt;
&lt;br /&gt;
===生命游戏===&lt;br /&gt;
&lt;br /&gt;
[[康威的生命游戏 Conway's Game of Life]]是英国数学家[[约翰·何顿·康威 John Horton Conway]]在1970年发明的元胞自动机。它最初于1970年10月由马丁·加德纳 Martin Gardner（1914年11月21日－2010年5月22日）发表在《科学美国人》杂志中的“数学游戏”专栏，该游戏从此名声大噪。&lt;br /&gt;
[[File:Gospers_glider_gun1.gif|400px|thumb|“滑翔机”：它会不断的产生一个有一个“滑翔者”，“滑翔者”：每4个回合它会延右下方移动一格，虽然细胞早就不是原来的细胞，但它能保持原来额形状]]&lt;br /&gt;
&lt;br /&gt;
生命游戏是一种二维的元胞自动机，每个元胞都有黑白两种不同的状态，每个元胞都有周围八个方格作为邻居。生命游戏的规则如下：&lt;br /&gt;
&lt;br /&gt;
# 当前细胞为存活状态时，当周围的存活细胞低于2个时（不包含2个），该细胞变成死亡状态。（模拟生命数量稀少）&lt;br /&gt;
# 当前细胞为存活状态时，当周围有2个或3个存活细胞时，该细胞保持原样。&lt;br /&gt;
# 当前细胞为存活状态时，当周围有超过3个存活细胞时，该细胞变成死亡状态。（模拟生命数量过多）&lt;br /&gt;
# 当前细胞为死亡状态时，当周围有3个存活细胞时，该细胞变成存活状态。（模拟繁殖）&lt;br /&gt;
&lt;br /&gt;
当所有的元胞都按照这个规则检查它的邻居，并运行起来后，我们可以得到非常复杂的动态过程。&lt;br /&gt;
&lt;br /&gt;
另外，生命游戏中还会诞生出一种被称为“滑翔机”的局部结构，它的动态运行情况如右图所示：&lt;br /&gt;
&lt;br /&gt;
“滑翔机”可以作为一种局部传递信息的结构。可以利用“滑翔机”搭建更加复杂的动态结构。&lt;br /&gt;
&lt;br /&gt;
===一维基础元胞自动机===&lt;br /&gt;
====最简一维元胞自动机====&lt;br /&gt;
最简单的元胞自动机就是一维的元胞自动机。每个元胞都有黑、白两种颜色。邻居是一个半径为1的区域，每个元胞都有左右两个邻居。这样每一个方格单元和它的邻居可以表示如下：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
 &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; bordercolor=&amp;quot;#999999&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt; &lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#666666&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#000000&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot; bgcolor=&amp;quot;#666666&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td width=&amp;quot;25&amp;quot; height=&amp;quot;25&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
由于每个元胞有两个状态{0,1}，这样，当前元胞加上左右两个邻居一共就有8种状态：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:8种状态.png|屏幕快照 2015-12-11 23.34.46.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
他们表示的状态分别是：000，001，010，011，100，101，110，111，其中0表示白色，1表示黑色。&lt;br /&gt;
====规则与编号====&lt;br /&gt;
下面考虑规则，假设当前考虑的细胞为&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;，他在t时刻的状态为&amp;lt;math&amp;gt;s_{i,t}&amp;lt;/math&amp;gt;，而它的两个邻居状态为&amp;lt;math&amp;gt;s_{i-1,t}&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;s_{i+11,t}&amp;lt;/math&amp;gt;,则&amp;lt;math&amp;gt;c_i&amp;lt;/math&amp;gt;，,在下一时刻的状态为&amp;lt;math&amp;gt;s_{i,t+1}&amp;lt;/math&amp;gt;,则转换规则用函数表示为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;s_{i,t+1}=f(s_{i-1,t},s_{i,t},s_{i+1,t})&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;s_{i,t}&amp;lt;/math&amp;gt;∈{0,1}，对于任意的i和t。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
由于元胞自动机的规则就是根据每个元胞和它的邻居的当前状态转移到下一个时刻该元胞的状态。无论规则是什么样的黑箱，它的输入就是上面列出的8种组合之一，因为表示的是每个元胞下一时刻的状态，而状态只可能有0、1两种，则规则的输出要么是0，要么是1。这样，任何一个规则都是一个或者一组转换，比如下图表示的就是一条规则：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则1.png|屏幕快照 2015-12-11 23.36.07.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
另外，若有一个规则是：“如果输入的三个元胞中黑色方格只有1个，那么下一时刻当前元胞就是黑色”可以表示成下面的图：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则2.png|屏幕快照 2015-12-11 23.36.54.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
下面我们再把目光转到规则集上。由于每一条规则都是一个状态或一组状态的转换，那么把输入的8种可能情况转换到当前元胞的下一状态。我们可以用一个转换表表示一组规则集，例如：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则3.png|屏幕快照 2015-12-11 23.37.37.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
这个规则集也可以用下面的一组数字表示为：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则集1.png|屏幕快照 2015-12-12 00.36.36.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
那么这组规则就对应着编码：10100011，也就是把八个位置上的方格进行一个排列。我们可以把输出部分的二进制编码转换成十进制数的形式：163，这就是该细胞自动机的编码。当状态数增多，半径增大的时候，这种编码方式就不实用了，我们需要用另一种方式来编码。考虑下面这样的规则若有一个规则是：“如果输入的三个方格中黑色方格只有1个，那么下一时刻当前方格就是黑色；如果有两个黑色方格，则下时刻是白色，如果有三个方格，则下时刻是黑色，如果有4个方格，那么下一时刻是白色”可以表示成下面的函数表：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=1&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=1&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=0&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=1&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=3&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;s_{i,t+1}=0&amp;lt;/math&amp;gt;, 如果&amp;lt;math&amp;gt;s_{i-1,t}+s_{i,t}+s_{i+1,t}=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
其中&amp;lt;math&amp;gt;s_{i,t}\in\{0,1\}&amp;lt;/math&amp;gt;, 对于任意的i和t&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这种情况下，输入就仅仅有4种情况，因此可以得到下面的表：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|输入||0||1||2||3&lt;br /&gt;
|-&lt;br /&gt;
|输出||0||1||0||1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同样的道理，我们可以对它进行编码为：0101，表示为十进制就是5。显然，这种编码方式比前一种短，但是这种编码方法不能反映所有的细胞自动机。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
每一组规则集也可以表示成类似于上面的图和表，例如下面的另外一组规则&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:规则集2.png|屏幕快照 2015-12-12 00.36.43.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
由于邻居加上当前元胞一共8种状态，每一个状态对应两种可能转换规则，所以规则一共就有&amp;lt;math&amp;gt;2^8=256&amp;lt;/math&amp;gt;种，我们可以为每一个规则编码，然后对其进行穷举。&lt;br /&gt;
&lt;br /&gt;
====动态行为====&lt;br /&gt;
下面我们来考察这256中元胞自动机所具备的可能动态行为。对于一维的情况，我们假设所有的元胞都分布在一条直线上，并且直线的长度为300，也就是说有300个元胞在这条直线上，那么一条断续的横线就是当前所有细胞状态的一种分布。这些方格随着时间变化，就形成了不同的横线。我们把这些随着时间变化的线纵向拼在一起形成了一个网格区域。其中纵轴表示时间的流逝（往下为正），横轴为“元胞自动机在对应时刻的状态，就能得到一幅图像：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:元胞自动机图像.png|屏幕快照 2015-12-12 00.42.38.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
这个元胞的每一行都是某一个时刻元胞自动机的状态。因而从上到下数第1、2、3、4、5、6行可以分别表示第1、2、3、4、5、6时间步的元胞自动机状态。因此这里的一个平面的图案就是元胞自动机在时间上的发展动态。下面我们分别挑选几种典型的动态情况示于下图（下方的数字是元胞自动机的编码）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:动态情况1.png|屏幕快照 2015-12-12 00.42.44.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:动态情况2.png|屏幕快照 2015-12-12 00.44.21.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:184号.jpg|CA 00：184号&lt;br /&gt;
&lt;br /&gt;
File:250号.jpg|CA 01：250号&lt;br /&gt;
&lt;br /&gt;
File:254号.jpg|CA 02：254号&lt;br /&gt;
&lt;br /&gt;
File:300号.jpg|CA 03：300号&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
经过对比分析，我们把细胞自动机归为四种类别，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*固定值型：细胞自动机经过若干步运算便停留在一个固定的状态；&lt;br /&gt;
*周期型：细胞自动机在几种状态之间周期循环；&lt;br /&gt;
*混沌型：细胞自动机处于一种完全无序随机的状态，几乎找不到任何规律；&lt;br /&gt;
*复杂型：细胞自动机在运行的过程中可能产生复杂的结构，这种结构既不是完全的随机混乱，又没有固定的周期和状态。&lt;br /&gt;
&lt;br /&gt;
==== 这是一维基础元胞自动机的模拟程序：==== &lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/onedimCA/cellular_automata_viz.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 900px; height: 640px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NaSch模型 ===&lt;br /&gt;
&lt;br /&gt;
1992年，德国学者 Nagel 和 Schreckenberg 在第184号元胞自动机规则的基础上提出了一维交通流CA模型，即，NS 模型（或NaSch模型）。&amp;lt;ref&amp;gt;Nagel, K., &amp;amp; Schreckenberg, M. (1992). A cellular automaton model for freeway traffic Kai Nagel, Michael Schreckenberg. Journal de physique I, 2(12), 2221-2229.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:NS模型.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
184规则模拟交通流（1表示有车，0表示无车，并且每辆车只在其前面具有开放空间时（前面一个格子为 0）才向前移动。这里前方定义为格子的右向）。&lt;br /&gt;
&lt;br /&gt;
在其演化的每个步骤中，184规则自动机同时对所有细胞使用以下规则生成下一个阵列中的每个细胞，以确定每个细胞的新状态：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:Swarma10-1547211614.jpeg|400px]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
NaSch 模型是一个交通流模型，每辆车的状态都由它的速度和位置所表示，其状态按照以下演化规则并行更新。&lt;br /&gt;
&lt;br /&gt;
NS模型的规则如下：&lt;br /&gt;
&lt;br /&gt;
*加速过程：&amp;lt;math&amp;gt;{v_n \rightarrow min(v_n+1, v_{max})}&amp;lt;/math&amp;gt;，如果车辆的速度低于最大速度，且前方有空余的空间，那么在下一个时刻，速度会增加1。&lt;br /&gt;
&lt;br /&gt;
*减速过程：&amp;lt;math&amp;gt;{v_n \rightarrow min(v_n, d_n)}&amp;lt;/math&amp;gt;，如果车辆发现前方在某一确定距离内有其他车辆，并且这个距离要小于它的速度，那么车辆的速度会减少。&lt;br /&gt;
&lt;br /&gt;
*随机慢化：以概率&amp;lt;math&amp;gt;{p}&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;{v_n \rightarrow max(v_n-1, 0)}&amp;lt;/math&amp;gt;，由各种不确定因素，会导致车辆的速度减1，速度不低于零。&lt;br /&gt;
&lt;br /&gt;
*位置更新：&amp;lt;math&amp;gt;{x_n \rightarrow x_n+v_n }&amp;lt;/math&amp;gt;，车辆按照预定的方式前进。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NaSch模型的效果展示''':&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:90%;height:400px;align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:44%;float:left&amp;quot;&amp;gt;&lt;br /&gt;
[[File:交通流模型.jpg|400px|thumb|纵轴是时间轴，横轴是在某一时刻的路况情况。发现随着时间的推移，原本没有堵塞情况的路况会自动出现堵塞，并且拥堵情况会在道路上传递|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:40%;float:left;margin-left:6%&amp;quot;&amp;gt;&lt;br /&gt;
[[File:nasch.jpg|600px|thumb|用NaSch模型模拟得到的车辆运动时空图（车辆从左往右移动，从上到下为时间演化方向）|center]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 推荐文献 ==&lt;br /&gt;
# von Neumann, John; Burks, Arthur W. (1966). [https://www.amazon.com/Theory-Reproducing-Automata-Arthur-Neumann/dp/0252727339 Theory of Self-Reproducing Automata]. University of Illinois Press.&lt;br /&gt;
# Gardner, Martin (1970). [http://web.stanford.edu/class/sts145/Library/life.pdf &amp;quot;Mathematical Games: The fantastic combinations of John Conway's new solitaire game &amp;quot;life&amp;quot;&amp;quot;]. Scientific American (223): 120–123.&lt;br /&gt;
# Wolfram, Stephen (1983). [https://arxiv.org/pdf/1311.2319.pdf &amp;quot;Statistical Mechanics of Cellular Automata&amp;quot;]. Reviews of Modern Physics. 55 (3): 601–644.&lt;br /&gt;
# Gutowitz, Howard, ed. (1991). [https://www.amazon.com/Cellular-Automata-Experiment-Special-Physica/dp/0262570866 Cellular Automata: Theory and Experiment]. MIT Press. &lt;br /&gt;
# Ilachinski, Andrew (2001). [https://www.amazon.com/Cellular-Automata-Discrete-Andrew-Ilachinski/dp/981238183X Cellular automata: a discrete universe]. World Scientific. pp. 44–45.&lt;br /&gt;
# Wolfram, Stephen (2002). [https://www.wolframscience.com/ A New Kind of Science]. Wolfram Media. ISBN 978-1579550080.&lt;br /&gt;
&lt;br /&gt;
== 相关词条 ==&lt;br /&gt;
在集智百科上，跟元胞自动机主题相关的词条：&lt;br /&gt;
&lt;br /&gt;
*[[方格宇宙]]，这是张江老师分享的从另一个角度，解析元胞自动机，一探方格宇宙的奥秘。&lt;br /&gt;
&lt;br /&gt;
*[[自我复制的元胞自动机]]，该词条介绍了一个可以自我复制的元胞自动机Java程序。&lt;br /&gt;
&lt;br /&gt;
*[[康威的生命游戏 Conway's Game of Life]]是最典型的元胞自动机，在这个词条内有详细的介绍，且有代码演示。（待补充）&lt;br /&gt;
&lt;br /&gt;
*[[Python的元胞自动机模拟]]该词条里面有元胞自动机的python代码演示，由计算士整理。&lt;br /&gt;
&lt;br /&gt;
*[[朗顿的蚂蚁]]也是元胞自动机的一个例子，由克里斯托弗·朗顿 Christopher Langton，在该词条内有详细的介绍和对应的代码演示。&lt;br /&gt;
&lt;br /&gt;
==相关链接==&lt;br /&gt;
[https://www.zhihu.com/question/21929655 知乎：简单明了的讲解一下元胞自动机及其应用？]&lt;br /&gt;
&lt;br /&gt;
[https://zhuanlan.zhihu.com/p/39529057 知乎：3-单车道元胞自动机的NaSch模型]&lt;br /&gt;
&lt;br /&gt;
== 编者推荐 ==&lt;br /&gt;
针对元胞自动机的情况，整理一些国内的资源，推荐给大家：&lt;br /&gt;
[[file:雪花.jpg|right|200px|thumb|基于元胞自动机的雪花模型]]&lt;br /&gt;
* 集智俱乐部整理过关于[https://swarma.org/?p=18576 什么是元胞自动机？]。&lt;br /&gt;
&lt;br /&gt;
* 北京师范大学张江老师为北师大新入学的新生，设计的一门上手编程，亲手设计元胞自动机的教程[https://campus.swarma.org/play/coursedetail?id=429 《NetLogo多主体建模》]，非常简洁易懂，容易上手，可以非常容易的就自己实现一个元胞自动机。关于元胞自动机的原理性介绍，可以看张江老师的公开课：[https://campus.swarma.org/play/coursedetail?id=10520 认识元胞自动机]。&lt;br /&gt;
&lt;br /&gt;
* PANS有一篇论文，用元胞自动机揭示交通瘫痪成因，[https://pattern.swarma.org/paper?id=97638f88-5afb-11ea-a3e3-0242ac1a0005 Macroscopic dynamics and the collapse of urban traffic],研究者依照城市的道路，使用了二维、最大速度为 3 的NaSch 模型进行建模，模拟分析交通堵塞情况。集智俱乐部对该文章进行了解读：[https://pattern.swarma.org/paper?id=97638f88-5afb-11ea-a3e3-0242ac1a0005  元胞自动机揭示交通瘫痪成因：车多路窄惹的祸]&lt;br /&gt;
&lt;br /&gt;
* [http://swarmagents.cn.13442.m8849.cn/complex/models/ca/ca1.htm 元胞自动机基础理论教程]&lt;br /&gt;
&lt;br /&gt;
* 清华大学龙瀛老师在城市建模概论中专门有一个是分享[https://www.beijingcitylab.com/app/download/11973537699/%E5%9F%8E%E5%B8%82%E6%A8%A1%E5%9E%8B%E6%A6%82%E8%AE%BA+%E7%AC%AC%E4%B8%83%E8%AE%B2+%E5%85%83%E8%83%9E%E8%87%AA%E5%8A%A8%E6%9C%BA%E6%A8%A1%E5%9E%8B%EF%BC%88%E7%9F%A2%E9%87%8F%EF%BC%89.pdf?t=1523974526  元胞自动机建模]的内容。&lt;br /&gt;
&lt;br /&gt;
* [https://zhuanlan.zhihu.com/p/113204715 元胞自动机的实例分析和matlab实战 ]&lt;br /&gt;
&lt;br /&gt;
* [http://blog.sciencenet.cn/blog-420554-669473.html 雪花里的数学：四，元胞自动机模型 ]&lt;br /&gt;
&lt;br /&gt;
::加州大学戴维斯分校的杨可·格拉夫纳教授 (Janko Gravner) 和威斯康星大学麦迪逊分校的大卫·格里夫耶斯教授 (David Griffeath) 提出的基于元胞自动机的雪花模型]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:费米子|费米子]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
[[category:元胞自动机]]&lt;br /&gt;
[[category:复杂系统]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45471</id>
		<title>蚁迹寻踪</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45471"/>
		<updated>2025-07-08T03:09:13Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
|description=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
}}&lt;br /&gt;
* 名 称：蚁迹寻踪&lt;br /&gt;
* 作 者：[[Jake]]&lt;br /&gt;
* 源代码：[[Media:Antcolony.zip|Antcolony.zip]]&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony.gif|right|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
首先您要保证你的浏览器支持java applet，然后能够正确加载这个程序。在此前提下，按开始按钮，蚂蚁们开始从窝里出动了，寻找食物；他们会顺着地形爬满整个画面，直到找到食物再返回。&lt;br /&gt;
&lt;br /&gt;
其中，浅蓝色的点表示食物，黄色的点表示窝，雾状的点表示蚂蚁留下的信息素，红色的点表示障碍物，白色的动点就是蚂蚁了。&lt;br /&gt;
&lt;br /&gt;
按设置按钮你可以更改一些环境变量，也可以更改单个蚂蚁的属性。在设置参数窗口中显示了整个蚂蚁群中找到的从它的窝到食物的最短路径。&lt;br /&gt;
&lt;br /&gt;
使用环境参数设置和个体蚂蚁的设置可以让你观察到这些参数是怎样影响蚂蚁的行为的。其中信息素的大小和消散的快慢直接决定了蚂蚁找到食物的快慢。（具体见后面的参数说明）&lt;br /&gt;
&lt;br /&gt;
编辑地图让你能够随心所欲的更改蚂蚁的环境，你会看到，无论你怎样精心巧妙的设计地图，小蚂蚁最终都能找到食物！我们为你准备了一个地图库，可以自动调出不同的地图。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/antcolony/ant_colony_simulation-10.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 835px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=预期的结果=&lt;br /&gt;
&lt;br /&gt;
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后，它会向环境释放一种信息素，吸引其他的蚂蚁过来，这样越来越多的蚂蚁会找到食物！有些蚂蚁并没有象其它蚂蚁一样总重复同样的路，他们会另辟蹊径，如果令开辟的道路比原来的其他道路更短，那么，渐渐，更多的蚂蚁被吸引到这条较短的路上来。最后，经过一段时间运行，可能会出现一条最短的路径被大多数蚂蚁重复着。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=原理=&lt;br /&gt;
&lt;br /&gt;
为什么小小的蚂蚁能够找到食物？他们具有智能么？设想，如果我们要为蚂蚁设计一个人工智能的程序，那么这个程序要多么复杂呢？首先，你要让蚂蚁能够避开障碍物，就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物，其次，要让蚂蚁找到食物，就需要让他们遍历空间上的所有点；再次，如果要让蚂蚁找到最短的路径，那么需要计算所有可能的路径并且比较它们的大小，而且更重要的是，你要小心翼翼的编程，因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序！太复杂了，恐怕没人能够完成这样繁琐冗余的程序。&lt;br /&gt;
&lt;br /&gt;
然而，事实并没有你想得那么复杂，上面这个程序每个蚂蚁的核心程序编码不过100多行！为什么这么简单的程序会让蚂蚁干这样复杂的事情？答案是：简单规则的涌现。事实上，每只蚂蚁并不是像我们想象的需要知道整个世界的信息，他们其实只关心很小范围内的眼前信息，而且根据这些局部信息利用几条简单的规则进行决策，这样，在蚁群这个集体里，复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律！那么，这些简单规则是什么呢？下面详细说明：&lt;br /&gt;
#范围：蚂蚁观察到的范围是一个方格世界，蚂蚁有一个参数为速度半径VR（一般是3），那么它能观察到的范围就是VR*VR个方格世界，并且能移动的距离也在这个范围之内。&lt;br /&gt;
#环境：蚂蚁所在的环境是一个虚拟的世界，其中有障碍物，有别的蚂蚁，还有信息素，信息素有两种，一种是找到食物的蚂蚁洒下的食物信息素，一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。&lt;br /&gt;
#觅食规则：在每只蚂蚁能感知的范围内寻找是否有食物，如果有就直接过去。否则看是否有信息素，并且比较在能感知的范围内哪一点的信息素最多，这样，它就朝信息素多的地方走，并且每只蚂蚁多会以小概率犯错误，从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样，只不过它对窝的信息素做出反应，而对食物信息素没反应。&lt;br /&gt;
#移动规则： 每只蚂蚁都朝向信息素最多的方向移，并且，当周围没有信息素指引的时候，蚂蚁会按照自己原来运动的方向惯性的运动下去，并且，在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈，它会记住最近刚走过了哪些点，如果发现要走的下一点已经在最近走过了，它就会尽量避开。&lt;br /&gt;
#避障规则：如果蚂蚁要移动的方向有障碍物挡住，它会随机的选择另一个方向，并且有信息素指引的话，它会按照觅食的规则行为。&lt;br /&gt;
#播撒信息素规则：每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多，并随着它走远的距离，播撒的信息素越来越少。根据这几条规则，蚂蚁之间并没有直接的关系，但是每只蚂蚁都和环境发生交互，而通过信息素这个纽带，实际上把各个蚂蚁之间关联起来了。比如，当一只蚂蚁找到了食物，它并没有直接告诉其它蚂蚁这儿有食物，而是向环境播撒信息素，当其它的蚂蚁经过它附近的时候，就会感觉到信息素的存在，进而根据信息素的指引找到了食物。&lt;br /&gt;
&lt;br /&gt;
=问题=&lt;br /&gt;
说了这么多，蚂蚁究竟是怎么找到食物的呢？&lt;br /&gt;
在没有蚂蚁找到食物的时候，环境没有有用的信息素，那么蚂蚁为什么会相对有效的找到食物呢？这要归功于蚂蚁的移动规则，尤其是在没有信息素时候的移动规则。首先，它要能尽量保持某种惯性，这样使得蚂蚁尽量向前方移动（开始，这个前方是随机固定的一个方向），而不是原地无谓的打转或者震动；其次，蚂蚁要有一定的随机性，虽然有了固定的方向，但它也不能像粒子一样直线运动下去，而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性，尽量保持原来的方向，但又有新的试探，尤其当碰到障碍物的时候它会立即改变方向，这可以看成一种选择的过程，也就是环境的障碍物让蚂蚁的某个方向正确，而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。&lt;br /&gt;
当然，在有一只蚂蚁找到了食物的时候，其他蚂蚁会沿着信息素很快找到食物的。&lt;br /&gt;
&lt;br /&gt;
蚂蚁如何找到最短路径的？这一是要归功于信息素，另外要归功于环境，具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多，因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物，开始的时候，走这两条路的蚂蚁数量同样多（或者较长的路上蚂蚁多，这也无关紧要）。当蚂蚁沿着一条路到达终点以后会马上返回来，这样，短的路蚂蚁来回一次的时间就短，这也意味着重复的频率就快，因而在单位时间里走过的蚂蚁数目就多，洒下的信息素自然也会多，自然会有更多的蚂蚁被吸引过来，从而洒下更多的信息素……；而长的路正相反，因此，越来越多地蚂蚁聚集到较短的路径上来，最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题，实际上蚂蚁逐渐接近全局最短路的，为什么呢？这源于蚂蚁会犯错误，也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径，这可以理解为一种创新，这种创新如果能缩短路途，那么根据刚才叙述的原理，更多的蚂蚁会被吸引过来。&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony2.gif|center|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
上图说明了这个过程，从a出发到e有两条路，左边的较长，右边的较短，在这两个图中，开始的时候（左图）蚂蚁选择两条路的机会是均等的，当时间流逝以后（右图所示），更多的蚂蚁聚集到右边的较短的路上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申=&lt;br /&gt;
跟着蚂蚁的踪迹，你找到了什么？通过上面的原理叙述和实际操作，我们不难发现蚂蚁之所以具有智能行为，完全归功于它的简单行为规则，而这些规则综合起来具有下面两个方面的特点：&lt;br /&gt;
#多样性&lt;br /&gt;
#正反馈&lt;br /&gt;
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环，正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力，而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见，而多样性是打破权威体现的创造性，正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。&lt;br /&gt;
&lt;br /&gt;
引申来讲，大自然的进化，社会的进步、人类的创新实际上都离不开这两样东西，多样性保证了系统的创新能力，正反馈保证了优良特性能够得到强化，两者要恰到好处的结合。如果多样性过剩，也就是系统过于活跃，这相当于蚂蚁会过多的随机运动，它就会陷入混沌状态；而相反，多样性不够，正反馈机制过强，那么系统就好比一潭死水。这在蚁群中来讲就表现为，蚂蚁的行为过于僵硬，当环境变化了，蚂蚁群仍然不能适当的调整。&lt;br /&gt;
&lt;br /&gt;
既然复杂性、智能行为是根据底层规则涌现的，既然底层规则具有多样性和正反馈特点，那么也许你会问这些规则是哪里来的？多样性和正反馈又是哪里来的？我本人的意见：规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢？为什么在你眼前呈现的世界是如此栩栩如生呢？答案在于环境造就了这一切，之所以你看到栩栩如生的世界，是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了，被环境淘汰了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=参数说明=&lt;br /&gt;
最大信息素：蚂蚁在一开始拥有的信息素总量，越大表示程序在较长一段时间能够存在信息素。食物释放信息素的半径：在食物点和窝点附近都会释放相应的信息素以便蚂蚁能更快的找到它们。这个半径越大，则越容易被蚂蚁找到。信息素消减的速度：随着时间的流逝，已经存在于世界上的信息素会消减，这个数值越大，那么消减的越快。&lt;br /&gt;
&lt;br /&gt;
在设置蚂蚁个体属性的时候，选择特定的蚂蚁编号，可以对这只蚂蚁的属性进行修改。错误概率表示这个蚂蚁不往信息素最大的区域走的概率，越大则表示这个蚂蚁越有创新性。速度半径表示蚂蚁一次能走的最大长度，也表示这个蚂蚁的感知范围。记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标，这个值避免了蚂蚁在本地打转，停滞不前。而这个值越大那么整个系统运行速度就慢，越小则蚂蚁越容易原地转圈。按钮（应用于所有蚂蚁）：是把当前更改的所有蚂蚁的个体属性应用到所有的蚂蚁身上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45470</id>
		<title>蚁迹寻踪</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45470"/>
		<updated>2025-07-08T00:10:35Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
|description=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
}}&lt;br /&gt;
* 名 称：蚁迹寻踪&lt;br /&gt;
* 作 者：[[Jake]]&lt;br /&gt;
* 源代码：[[Media:Antcolony.zip|Antcolony.zip]]&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony.gif|right|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
首先您要保证你的浏览器支持java applet，然后能够正确加载这个程序。在此前提下，按开始按钮，蚂蚁们开始从窝里出动了，寻找食物；他们会顺着地形爬满整个画面，直到找到食物再返回。&lt;br /&gt;
&lt;br /&gt;
其中，浅蓝色的点表示食物，黄色的点表示窝，雾状的点表示蚂蚁留下的信息素，红色的点表示障碍物，白色的动点就是蚂蚁了。&lt;br /&gt;
&lt;br /&gt;
按设置按钮你可以更改一些环境变量，也可以更改单个蚂蚁的属性。在设置参数窗口中显示了整个蚂蚁群中找到的从它的窝到食物的最短路径。&lt;br /&gt;
&lt;br /&gt;
使用环境参数设置和个体蚂蚁的设置可以让你观察到这些参数是怎样影响蚂蚁的行为的。其中信息素的大小和消散的快慢直接决定了蚂蚁找到食物的快慢。（具体见后面的参数说明）&lt;br /&gt;
&lt;br /&gt;
编辑地图让你能够随心所欲的更改蚂蚁的环境，你会看到，无论你怎样精心巧妙的设计地图，小蚂蚁最终都能找到食物！我们为你准备了一个地图库，可以自动调出不同的地图。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/antcolony/ant_colony_simulation-9.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 835px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=预期的结果=&lt;br /&gt;
&lt;br /&gt;
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后，它会向环境释放一种信息素，吸引其他的蚂蚁过来，这样越来越多的蚂蚁会找到食物！有些蚂蚁并没有象其它蚂蚁一样总重复同样的路，他们会另辟蹊径，如果令开辟的道路比原来的其他道路更短，那么，渐渐，更多的蚂蚁被吸引到这条较短的路上来。最后，经过一段时间运行，可能会出现一条最短的路径被大多数蚂蚁重复着。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=原理=&lt;br /&gt;
&lt;br /&gt;
为什么小小的蚂蚁能够找到食物？他们具有智能么？设想，如果我们要为蚂蚁设计一个人工智能的程序，那么这个程序要多么复杂呢？首先，你要让蚂蚁能够避开障碍物，就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物，其次，要让蚂蚁找到食物，就需要让他们遍历空间上的所有点；再次，如果要让蚂蚁找到最短的路径，那么需要计算所有可能的路径并且比较它们的大小，而且更重要的是，你要小心翼翼的编程，因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序！太复杂了，恐怕没人能够完成这样繁琐冗余的程序。&lt;br /&gt;
&lt;br /&gt;
然而，事实并没有你想得那么复杂，上面这个程序每个蚂蚁的核心程序编码不过100多行！为什么这么简单的程序会让蚂蚁干这样复杂的事情？答案是：简单规则的涌现。事实上，每只蚂蚁并不是像我们想象的需要知道整个世界的信息，他们其实只关心很小范围内的眼前信息，而且根据这些局部信息利用几条简单的规则进行决策，这样，在蚁群这个集体里，复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律！那么，这些简单规则是什么呢？下面详细说明：&lt;br /&gt;
#范围：蚂蚁观察到的范围是一个方格世界，蚂蚁有一个参数为速度半径VR（一般是3），那么它能观察到的范围就是VR*VR个方格世界，并且能移动的距离也在这个范围之内。&lt;br /&gt;
#环境：蚂蚁所在的环境是一个虚拟的世界，其中有障碍物，有别的蚂蚁，还有信息素，信息素有两种，一种是找到食物的蚂蚁洒下的食物信息素，一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。&lt;br /&gt;
#觅食规则：在每只蚂蚁能感知的范围内寻找是否有食物，如果有就直接过去。否则看是否有信息素，并且比较在能感知的范围内哪一点的信息素最多，这样，它就朝信息素多的地方走，并且每只蚂蚁多会以小概率犯错误，从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样，只不过它对窝的信息素做出反应，而对食物信息素没反应。&lt;br /&gt;
#移动规则： 每只蚂蚁都朝向信息素最多的方向移，并且，当周围没有信息素指引的时候，蚂蚁会按照自己原来运动的方向惯性的运动下去，并且，在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈，它会记住最近刚走过了哪些点，如果发现要走的下一点已经在最近走过了，它就会尽量避开。&lt;br /&gt;
#避障规则：如果蚂蚁要移动的方向有障碍物挡住，它会随机的选择另一个方向，并且有信息素指引的话，它会按照觅食的规则行为。&lt;br /&gt;
#播撒信息素规则：每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多，并随着它走远的距离，播撒的信息素越来越少。根据这几条规则，蚂蚁之间并没有直接的关系，但是每只蚂蚁都和环境发生交互，而通过信息素这个纽带，实际上把各个蚂蚁之间关联起来了。比如，当一只蚂蚁找到了食物，它并没有直接告诉其它蚂蚁这儿有食物，而是向环境播撒信息素，当其它的蚂蚁经过它附近的时候，就会感觉到信息素的存在，进而根据信息素的指引找到了食物。&lt;br /&gt;
&lt;br /&gt;
=问题=&lt;br /&gt;
说了这么多，蚂蚁究竟是怎么找到食物的呢？&lt;br /&gt;
在没有蚂蚁找到食物的时候，环境没有有用的信息素，那么蚂蚁为什么会相对有效的找到食物呢？这要归功于蚂蚁的移动规则，尤其是在没有信息素时候的移动规则。首先，它要能尽量保持某种惯性，这样使得蚂蚁尽量向前方移动（开始，这个前方是随机固定的一个方向），而不是原地无谓的打转或者震动；其次，蚂蚁要有一定的随机性，虽然有了固定的方向，但它也不能像粒子一样直线运动下去，而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性，尽量保持原来的方向，但又有新的试探，尤其当碰到障碍物的时候它会立即改变方向，这可以看成一种选择的过程，也就是环境的障碍物让蚂蚁的某个方向正确，而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。&lt;br /&gt;
当然，在有一只蚂蚁找到了食物的时候，其他蚂蚁会沿着信息素很快找到食物的。&lt;br /&gt;
&lt;br /&gt;
蚂蚁如何找到最短路径的？这一是要归功于信息素，另外要归功于环境，具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多，因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物，开始的时候，走这两条路的蚂蚁数量同样多（或者较长的路上蚂蚁多，这也无关紧要）。当蚂蚁沿着一条路到达终点以后会马上返回来，这样，短的路蚂蚁来回一次的时间就短，这也意味着重复的频率就快，因而在单位时间里走过的蚂蚁数目就多，洒下的信息素自然也会多，自然会有更多的蚂蚁被吸引过来，从而洒下更多的信息素……；而长的路正相反，因此，越来越多地蚂蚁聚集到较短的路径上来，最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题，实际上蚂蚁逐渐接近全局最短路的，为什么呢？这源于蚂蚁会犯错误，也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径，这可以理解为一种创新，这种创新如果能缩短路途，那么根据刚才叙述的原理，更多的蚂蚁会被吸引过来。&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony2.gif|center|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
上图说明了这个过程，从a出发到e有两条路，左边的较长，右边的较短，在这两个图中，开始的时候（左图）蚂蚁选择两条路的机会是均等的，当时间流逝以后（右图所示），更多的蚂蚁聚集到右边的较短的路上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申=&lt;br /&gt;
跟着蚂蚁的踪迹，你找到了什么？通过上面的原理叙述和实际操作，我们不难发现蚂蚁之所以具有智能行为，完全归功于它的简单行为规则，而这些规则综合起来具有下面两个方面的特点：&lt;br /&gt;
#多样性&lt;br /&gt;
#正反馈&lt;br /&gt;
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环，正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力，而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见，而多样性是打破权威体现的创造性，正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。&lt;br /&gt;
&lt;br /&gt;
引申来讲，大自然的进化，社会的进步、人类的创新实际上都离不开这两样东西，多样性保证了系统的创新能力，正反馈保证了优良特性能够得到强化，两者要恰到好处的结合。如果多样性过剩，也就是系统过于活跃，这相当于蚂蚁会过多的随机运动，它就会陷入混沌状态；而相反，多样性不够，正反馈机制过强，那么系统就好比一潭死水。这在蚁群中来讲就表现为，蚂蚁的行为过于僵硬，当环境变化了，蚂蚁群仍然不能适当的调整。&lt;br /&gt;
&lt;br /&gt;
既然复杂性、智能行为是根据底层规则涌现的，既然底层规则具有多样性和正反馈特点，那么也许你会问这些规则是哪里来的？多样性和正反馈又是哪里来的？我本人的意见：规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢？为什么在你眼前呈现的世界是如此栩栩如生呢？答案在于环境造就了这一切，之所以你看到栩栩如生的世界，是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了，被环境淘汰了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=参数说明=&lt;br /&gt;
最大信息素：蚂蚁在一开始拥有的信息素总量，越大表示程序在较长一段时间能够存在信息素。食物释放信息素的半径：在食物点和窝点附近都会释放相应的信息素以便蚂蚁能更快的找到它们。这个半径越大，则越容易被蚂蚁找到。信息素消减的速度：随着时间的流逝，已经存在于世界上的信息素会消减，这个数值越大，那么消减的越快。&lt;br /&gt;
&lt;br /&gt;
在设置蚂蚁个体属性的时候，选择特定的蚂蚁编号，可以对这只蚂蚁的属性进行修改。错误概率表示这个蚂蚁不往信息素最大的区域走的概率，越大则表示这个蚂蚁越有创新性。速度半径表示蚂蚁一次能走的最大长度，也表示这个蚂蚁的感知范围。记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标，这个值避免了蚂蚁在本地打转，停滞不前。而这个值越大那么整个系统运行速度就慢，越小则蚂蚁越容易原地转圈。按钮（应用于所有蚂蚁）：是把当前更改的所有蚂蚁的个体属性应用到所有的蚂蚁身上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Couzin_model&amp;diff=45387</id>
		<title>Couzin model</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Couzin_model&amp;diff=45387"/>
		<updated>2025-07-06T02:55:57Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2002年，Iain D. Couzin等人在《理论生物学》杂志上发表文章[2]，提出了一个能够统一模拟不同动物群体行为的模型，后人将这个模型就称为“Couzin model”。这个模型的关键，就是通过三个参数，分别刻画了分离、对齐和避免碰撞这三条简单规则的作用范围，从而通过改变这三个参数就能得到从昆虫到鸟群的不同聚集行为。同时，考津模型将所有的智能体都放到了三维空间中，这大大提高了涌现行为的复杂性。&lt;br /&gt;
&lt;br /&gt;
=模型设定=&lt;br /&gt;
[[文件:Couzin_interaction_ball.png|替代=Couzin模型的三种相互作用的范围|无|缩略图|458x458像素|Couzin模型的三种相互作用的范围]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
如上图所示，这是一个智能体在三维空间中的三种不同相互作用力的区间范围，其中智能体位于中心坐标原点的地方，它的飞行方向为v。从近到远，这三个不同的区域分别是分离作用、对齐作用和聚集作用发挥作用的区域。也就是说，其它智能体对当前智能体的作用就体现为三种不同的作用力。其中，落入图中深灰色的最小球体中的智能体会给当前的个体施加导致分离的排斥之力；落入较浅一些灰色的第二个球体，并在分离之球之外的智能体们会对当前个体施加对齐之力，即大家的飞行速度会趋于一致；最后，落入最浅色最外侧的环形区域的个体会对当前的个体施加聚集之力，即吸引当前个体飞向它们的重心位置。需要注意的是，每个个体沿着飞行方向有一个视野角度范围，如图5.4中阴影部分所示，只有落入该区域之内的个体才会对当前个体有影响。&lt;br /&gt;
&lt;br /&gt;
于是，每个周期，当前智能体就会根据周围邻居的情况而计算出分离、对齐和聚集之力，并根据矢量运算法则将这三种力合成为一个统一的合力，这个合力就会牵引着当前个体改变它的飞行方向。同时，和FLOY模型一样，每个智能体在每个周期还会以小概率“犯错”，即它的飞行方向并不受合力影响，而是随机产生一个角度偏差。这一“犯错”行为同样可以为模拟智能体添加“活力”。最后，将所有的智能体合在一起，就会涌现出各式各样的集体飞行行为。&lt;br /&gt;
&lt;br /&gt;
=运行结果=&lt;br /&gt;
有趣的是，你在保持考津模型的基本作用规则不变的条件下，仅仅改变这三种不同区域的大小范围，就能得到从昆虫到鸟群再到鱼群的不同集体行为。&lt;br /&gt;
&lt;br /&gt;
[[文件:A6e3d222c888bd177d408605c970f58d.png|Couzin模型的四种不同飞行模式|替代=Couzin模型的四种不同飞行模式|边框|600x600像素]]&lt;br /&gt;
&lt;br /&gt;
Couzin模型的四种不同飞行模式&lt;br /&gt;
&lt;br /&gt;
=模拟演示=&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/couzin3d/couzin_swarm_simulator.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 600px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[TODO] 探索上面四种模式的设置参数&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==昆虫聚集==&lt;br /&gt;
当对齐作用区域很小甚至萎缩为零，而仅仅保留聚集和分离作用区域的正常大小的时候，大量智能体的集体行为就会表现得像一群昆虫一样在空中混乱地飞舞，它们时而聚集，时而分散，如图（A）所示。&lt;br /&gt;
&lt;br /&gt;
==鱼群旋转==&lt;br /&gt;
当对齐作用区域稍微增大但仍然不是很大，而聚集区域很大，分离区域保持正常大小的时候，大量智能体聚集在一起就开始不停地旋转，形成了一个三维空间中的巨大旋涡。如图（B）所示，这像极了深海中的沙丁鱼群，它们为了抵抗鲨鱼的攻击就会形成这样的集体游动模式。&lt;br /&gt;
&lt;br /&gt;
==鸟群结队飞行==&lt;br /&gt;
当你把对齐区域进一步调大，同时保持较大的聚集区域和正常的分离区域的时候，智能体群体就表现得像是一个鸟群，它们会彼此聚集沿着一个方向平行地飞行，如图（C）所示。&lt;br /&gt;
&lt;br /&gt;
==鸟群的整齐划一==&lt;br /&gt;
最后，当你进一步提高对齐区域，同时保持其它参数不变，那么你就会看到更加整齐划一的平行飞行的鸟群，仿佛就像一组平行的飞机，动作整齐化一，如图（D）所示。&lt;br /&gt;
&lt;br /&gt;
=总结=&lt;br /&gt;
由此可见，考津模型利用一组简单、局部的规则就可以统一地模拟昆虫、鸟群和鱼群。同时，不同集体运动模式的差异则可以用三种不同相互作用规则的大小区域来展现。这样，你只需要改变参数，而不用改变规则，就能得到不同的集体运动模式了。这一模型大大提升了人们对动物集体运动行为的理解。&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45378</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45378"/>
		<updated>2025-07-06T02:32:08Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* Java 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 770px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45377</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45377"/>
		<updated>2025-07-06T02:28:47Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* Java 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
* HTML + JS 源代码：[http://wiki.swarma.net//applets/selfref/selfref_modernized-3.html selfref_modernized-3.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 770px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45335</id>
		<title>迭代函数系统</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45335"/>
		<updated>2025-07-04T02:43:34Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=分形,IFS,有限收缩映射集&lt;br /&gt;
|description=是一种构造分形几何的方法&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Sierpinski_triangle.png|thumb|right|250px|使用IFS创建的Sierpinski三角形（用颜色来说明自相似结构）。]]&lt;br /&gt;
[[File:Chris Ursitti fractal 0000.png|thumb|right|200px| 彩色 IFS 使用Apophysis 软件设计，使用Electric Sheep渲染。]]&lt;br /&gt;
在数学中，'''迭代函数系统 iterated function systems（IFS）'''是一种构造[[分形几何 Fractal]]的方法；产生的分形通常是自相似的。IFS分形与集合论的关系比分形几何更大。&amp;lt;ref name=&amp;quot;picg&amp;quot;&amp;gt;{{cite book |title=Progress in Computer Graphics: Volume 1 |last=Zobrist |first= George Winston |author2=Chaman Sabharwal |year=1992 |publisher=Intellect Books |isbn=9780893916510 |page=135 |url=https://play.google.com/store/books/details?id=Ai6Qo0qoE9EC |accessdate=7 May 2017}}&amp;lt;/ref&amp;gt;它们于1981年被提出。&lt;br /&gt;
&lt;br /&gt;
IFS分形，正如他们被通常称呼一样，可以是任何维度的，但通常在2维空间计算和绘制。分形是由其本身的几个副本的结合体组成，每个副本都由一个函数变换而成（因此称为 &amp;quot;函数系统&amp;quot;）。典型的例子是[[谢尔宾斯基三角形]] Sierpiński triangle。这些函数通常是收缩的，这意味着它们使点更接近，使形状更小。因此，IFS分形的形状是由若干个可能重叠的较小副本组成的，每个副本也是由自己的副本组成的，无穷无尽[[ad infinitum]]。这就是其自相似分形性质的来源。&lt;br /&gt;
&lt;br /&gt;
这是自相似分形的模拟程序：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/java_ifs/ifs_fractal_generator.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 780px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==定义==&lt;br /&gt;
从形式上看，迭代函数系统是一个完整的度量空间上的有限收缩映射集。&amp;lt;ref&amp;gt;Michael Barnsley (1988). ''Fractals Everywhere'', p.82. Academic Press, Inc{{cite book |isbn=9780120790623}}&amp;lt;/ref&amp;gt;符号表示为，&lt;br /&gt;
:&amp;lt;math&amp;gt;\{f_i:X\to X\mid i=1,2,\dots,N\},\ N\in\mathbb{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
如果每个&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都是完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;上的收缩，则是一个迭代函数系统。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==性质==&lt;br /&gt;
[[File:Chaosgame.gif|thumb|right|250px|通过[[chaos game]] (动画) 构建的一个IFS]]&lt;br /&gt;
[[File:Ifs-construction.png|thumb|IFS由两个函数构建。]]&lt;br /&gt;
&lt;br /&gt;
约翰·哈钦森 Hutchinson(1981)表明，对于度量空间&amp;lt;math&amp;gt;&amp;lt;mathbb{R}^n&amp;lt;/math&amp;gt;，或者更一般地说，对于一个完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;，这样的函数系统有一个唯一的非空紧凑(闭合且有界)的固定集S。构造固定集的一种方法是，从初始的非空的闭且有界集合S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;开始，迭代f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;的作用，取S&amp;lt;sub&amp;gt;n+1&amp;lt;/sub&amp;gt;为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;在f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;下的图像的联合；然后取S为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;的联合的闭合。用符号可以表示为，唯一的固定(非空紧凑)集合&amp;lt;math&amp;gt;S&amp;lt;subseteq X&amp;lt;/math&amp;gt;具有如下性质:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S = \overline{\bigcup_{i=1}^N f_i(S)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
集合''S''因此是[[Hutchinson算子]]的固定集。&amp;lt;math&amp;gt;F: 2^X/to 2^X&amp;lt;/math&amp;gt;定义为&amp;lt;math&amp;gt;A/subseteq X&amp;lt;/math&amp;gt;，通过&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(A)=\overline{\bigcup_{i=1}^N f_i(A)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''S''的存在性和唯一性是压缩映像原理的结果，就如&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\lim_{n\to\infty}F^{\circ n}(A)=S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
对于&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;中的任何非空紧集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;。(对于收缩型IFS，即使对于任何非空的闭合有界集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;，也会发生这种收敛。)。任意接近''S''的随机元素可以通过下面描述的 &amp;quot;chaos game &amp;quot;获得。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最近，人们证明了非收缩型的IFS(即由相对于''X''中的任何拓扑等价度量不收缩的映射组成)可以产生吸引子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些都是在投影空间中自然产生的，尽管经典的圆上的无理旋转也可以适应。&amp;lt;ref&amp;gt;M. Barnsley, A. Vince, The Chaos Game on a General Iterated Function System&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
函数的集合&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;能产生是运算下的独异点。如果只有两个这样的函数，那么这个单体可以可视化为一棵二叉树，在树的每一个节点上，我们可以用一个或另一个函数进行合成（''即''取左支或右支）。一般来说，如果有''k个''函数，那么可以将单子可视化为一个完整的[[k-ary树|''k-''ary树]]，也称为[[Cayley tree]]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==构建==&lt;br /&gt;
[[File:Fractal_fern_explained.png|thumb|upright|[[Barnsley's fern]]，一个早期的 IFS]]&lt;br /&gt;
[[File:Menger sponge (IFS).jpg|thumb|200px|[[Menger sponge]]，一个3维的 IFS.]]&lt;br /&gt;
[[File:Coupe d'arbre.png|thumb|IFS &amp;quot;tree&amp;quot; constructed with non-linear function Julia|链接=Special:FilePath/Coupe_d'arbre.png]]&lt;br /&gt;
[[File:HERBO_avecTige.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;140&amp;quot;&amp;gt;&lt;br /&gt;
File:Golden_Square_fractal_6.png|[[Golden ratio|Golden square]] 分形&lt;br /&gt;
File:Half_square_fractal_5.svg.png| 半分形&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有时，每个函数&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都必须是线性变换，或者更一般的仿射变换，因此用矩阵表示。然而，IFS也可以由非线性函数建立，包括[[projective transformation]]和[[Möbius transformation]]。[[Fractal flame]]是一个非线性函数的IFS的例子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
计算IFS分形最常用的算法叫做“混沌游戏 chaos game”。它包括在平面上随机选取一个点，然后反复应用从函数系统中随机选取的一个函数来变换该点，去得到下一个点。另一种算法是生成每一个可能的函数序列，直到给定的最大长度，然后将这些函数序列中的每一个应用于初始点或形状的结果绘制出来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些算法中的每一种都提供了一个全局结构，生成分布在整个分形上的点。如果正在绘制分形的一小块区域，这些点中的许多将落在屏幕边界之外。这使得放大以这种方式绘制的IFS结构不切实际。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
虽然IFS的理论要求每个功能都是收缩的，但实际上实现IFS的软件只要求整个系统平均是收缩的。&amp;lt;ref&amp;gt;{{cite web |last=Draves |first=Scott |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==分割迭代函数系统==&lt;br /&gt;
分割迭代函数系统 partitioned iterated function systems（PIFS），也叫局部迭代函数系统，&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt; 给出了令人惊讶的良好的图像压缩效果，即使是对于那些看起来不具有简单的IFS分形所显示的自相似结构的照片。&amp;lt;ref name=&amp;quot;SIGGRAPH'92&amp;quot;&amp;gt;{{cite conference|url= https://karczmarczuk.users.greyc.fr/matrs/Dess/RADI/Refs/fractal_paper.pdf|last= Fischer|first= Yuval|title= SIGGRAPH'92 course notes - Fractal Image Compression|conference= SIGGRAPH|conference-url= http://www.siggraph.org/|editor= Przemyslaw Prusinkiewicz|publisher= [[ACM SIGGRAPH]]|volume= Fractals - From Folk Art to Hyperreality|date= 1992-08-12}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==逆问题==&lt;br /&gt;
有非常快速的算法可以从一组IFS或PIFS参数生成图像。与存储和传输图像中每个像素的颜色相比，存储描述如何创建图像、将该描述传输到目标设备并在目标设备上重新生成图像的速度更快，所需的存储空间也更小。&amp;lt;ref name=&amp;quot;lacroix&amp;quot;&amp;gt;Bruno Lacroix. [http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/ftp01/MQ36939.pdf &amp;quot;Fractal Image Compression&amp;quot;]. 1998.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
逆问题比较困难：给定一些原始的任意数字图像，如一张数字照片，试图找到一组IFS参数，通过迭代评估后，产生另一幅与原始图像视觉上相似的图像。在1989年，Arnaud Jacquin 提出了一个只用 PIFS 的限制形式的反问题的解，反问题的一般形式仍未解决。&amp;lt;ref&amp;gt;Dietmar Saupe, Raouf Hamzaoui.[https://www.uni-konstanz.de/mmsp/pubsys/publishedFiles/SaHa94.pdf &amp;quot;A Review of the Fractal Image Compression Literature&amp;quot;].&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;kominek&amp;quot;&amp;gt;John Kominek.&lt;br /&gt;
[https://pdfs.semanticscholar.org/d77b/ffac2560c92771d3756c0e29863a44919d6f.pdf &amp;quot;Algorithm for Fast Fractal Image Compression&amp;quot;]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt;并由迈克尔·巴恩斯利的著作《分形无处不在》而流行开来。1992年，斯科特·德拉维斯发明了分形火焰算法。截至1995年，所有分形压缩软件都是基于Jacquin的方法。&amp;lt;ref name=&amp;quot;kominek&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==范例==&lt;br /&gt;
&lt;br /&gt;
该图显示了两个仿射函数在IFS上的构造。这两个函数用它们对双单位正方形的影响来表示（函数将轮廓正方形转化为阴影正方形）。两个函数的组合形成[[Hutchinson算子]]。图中显示了该算子的三次迭代，然后是定点的最终图像，即最终的分形。&lt;br /&gt;
&lt;br /&gt;
IFS可以生成分形的早期例子包括[[Cantor set]]，最早描述于1884年；[[de Rham curve]]，[[Georges de Rham]]在1957年描述的一种自相似曲线。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==进一步阅读==&lt;br /&gt;
{{Portal|Mathematics}}&lt;br /&gt;
*[[Complex-base system#Base .E2.88.921.C2.B1i|Complex-base system]]&lt;br /&gt;
*[[Collage theorem]]&lt;br /&gt;
*[[Infinite compositions of analytic functions]]&lt;br /&gt;
*[[L-system]]&lt;br /&gt;
*[[Fractal compression]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==相关链接==&lt;br /&gt;
*{{cite web |last=Draves |first=Scott |author-link=Scott Draves |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&lt;br /&gt;
*{{cite book |last=Falconer |first=Kenneth |author-link=Kenneth Falconer (mathematician) |title=Fractal geometry: Mathematical foundations and applications |url=https://archive.org/details/fractalgeometrym0000falc/page/113 |url-access=registration |publisher=John Wiley and Sons |year=1990 |isbn=0-471-92287-0 |pages=[https://archive.org/details/fractalgeometrym0000falc/page/113 113–117, 136] }}&lt;br /&gt;
*{{cite journal |last=Barnsley |first=Michael |author-link=Michael Barnsley |author2=Andrew Vince |arxiv=1005.0322 |title=The Chaos Game on a General Iterated Function System |journal=Ergodic Theory Dynam. Systems |volume=31 |year=2011 |issue=4 |pages=1073–1079|bibcode=2010arXiv1005.0322B }}&lt;br /&gt;
*'''For an historical overview, and the generalization :''' {{cite journal |first=Claire|last=David  |  title=fractal properties of Weierstrass-type functions |journal=Proceedings of the International Geometry Center |volume=12 |year=2019 |issue=2 |pages=43–61|url=https://journals.onaft.edu.ua/index.php/geometry/article/view/1485 }}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==编辑推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
====[http://rrd.me/gfyYz  分形对象：形、机遇和维数  Fractals:From,Chance,and Dimension]====&lt;br /&gt;
本书考察和研究出现在自然界中的若干典型分形对象，为我们提供了一个关于分形的内容，意义及方法的扼要介绍。尽管自该书第一版（法文版）问世以来，分形的理论及其应用发展极为迅速，并出现了大量的有关著作，但此书仍不失为分形理论最好的入门书之一&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfzjk  大自然的分形几何 The Fractal Geometry of Nature ]====&lt;br /&gt;
这本书介绍了自然界中各种各样的分形理论，从海岸线、雪花，到河流、星系等自然现象，去阐述分形这一概念。作为多个学科的交叉，分形几何对以往欧氏几何不屑一顾（或说无能为力）的“病态”曲线（如科赫雪花曲线等）的全新解释，是人类认识客观世界不断开拓的必然结果。这说明欧氏几何只是对客观世界的近似反映，而分形几何则深化了这种认识，因此分形几何学是描述各种复杂自然曲线的大自然的几何学。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfz56   市场的（错误）行为：风险、破产与收益的分形观点The Misbehavior of Markets: A Fractal View of Financial Turbulence]====&lt;br /&gt;
《市场的（错误）行为》以分形视角观察金融市场的行为，推翻了作为当代金融分析基础的“随机游走”理论。通过分形模型，市场表现被重新阐释。本书是现代金融理论标准工具和模型的一次革命性重估，书中的观点颠覆了成千上万投资者的既有观念。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===网站资源===&lt;br /&gt;
====[http://www.fxysw.com/forum-12-1.html  分形艺术网]====&lt;br /&gt;
[[File:003522d0gu40lukr822vwu.jpg|400px|right|thumb|分形艺术网作品]]&lt;br /&gt;
分形艺术网是一个展示分形艺术之美，学习交流分形艺术创作的平台，其中包含了很多分形艺术作品及分形资源推荐。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===视频资源===&lt;br /&gt;
====[http://www.ted.com/talks/benoit_mandelbrot_fractals_the_art_of_roughness.html  TED分享视频：伯努·瓦曼德布洛特: 分形和粗糙的艺术 Benoit Mandelbrot: Fractals and the Art of Roughness ]====&lt;br /&gt;
Benoit Mandelbrot的研究使世界对分形有了更深刻的理解，分形是研究粗糙的广泛而有力的工具，在自然界和人类的作品中都是如此。该视频概述了分形的研究，以及它们为许多领域带来的颠覆性见解。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://www.bilibili.com/video/av13766486/?p=2  寻找隐藏的维 Hunting the Hidden Dimension]====&lt;br /&gt;
什么是电影特效，股票市场，和心脏病的共同点？它们连接了一个革命性的新的数学分支，改变了我们看世界，开辟了广阔的新领域，以科学的分析和理解。数学家们开发不规则碎片形是从单纯的好奇心到接触几乎每一个分科的理解，包括我们宇宙的命运。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===课程推荐===&lt;br /&gt;
[[File:分形课程.png|400px|thumb|upright=3|[https://campus.swarma.org/play/coursedetail?id=10419  系统科学简史与现代复杂系统科学,本课程主要探讨了现代复杂系统科学的研究主题，同时也介绍了系统科学的历史，生命游戏与分形结构等知识点]|right]]&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10621  分形与奇异吸引子的几何学]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。主讲人为Steven Strogatz。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10698  分形的世界]====&lt;br /&gt;
在此堂课程，主要介绍了关于分形的思想与脉络，分形现象、分形维数、利用分形规律的计算方法以及混沌。主讲人为北京师范大学系统学院狄增如教授。狄增如教授主要从事复杂网络和经济（金融）物理学等方面的研究，是国内最早从事经济物理学研究的学者之一。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===集智百科文章===&lt;br /&gt;
*[https://mp.weixin.qq.com/s/XpdpBfeMgN43HC7BXAbdIQ  与树共舞：分形舞蹈可视化]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/WIoTavOE1c98USA1cGoPmw?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552553&amp;amp;enterid=1584552553  城市为何遵循规模法则？分形几何揭开幂律成因]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/AGt-C281sPBa25fXAWhoJA?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552710&amp;amp;enterid=1584552710  混沌、分形理论及其在信息科学中的应用 | IWCFTA2018]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:Eatcosmos2|Eatcosmos2]]编译，[[用户:Inch|Inch]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[分类:Iterated function system fractals 迭代函数系统分形]]&lt;br /&gt;
[[分类:1981 introductions]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45334</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45334"/>
		<updated>2025-07-04T02:03:14Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 800px; height: 770px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45333</id>
		<title>蚁迹寻踪</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45333"/>
		<updated>2025-07-03T14:16:17Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
|description=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
}}&lt;br /&gt;
* 名 称：蚁迹寻踪&lt;br /&gt;
* 作 者：[[Jake]]&lt;br /&gt;
* 源代码：[[Media:Antcolony.zip|Antcolony.zip]]&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony.gif|right|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
首先您要保证你的浏览器支持java applet，然后能够正确加载这个程序。在此前提下，按开始按钮，蚂蚁们开始从窝里出动了，寻找食物；他们会顺着地形爬满整个画面，直到找到食物再返回。&lt;br /&gt;
&lt;br /&gt;
其中，浅蓝色的点表示食物，黄色的点表示窝，雾状的点表示蚂蚁留下的信息素，红色的点表示障碍物，白色的动点就是蚂蚁了。&lt;br /&gt;
&lt;br /&gt;
按设置按钮你可以更改一些环境变量，也可以更改单个蚂蚁的属性。在设置参数窗口中显示了整个蚂蚁群中找到的从它的窝到食物的最短路径。&lt;br /&gt;
&lt;br /&gt;
使用环境参数设置和个体蚂蚁的设置可以让你观察到这些参数是怎样影响蚂蚁的行为的。其中信息素的大小和消散的快慢直接决定了蚂蚁找到食物的快慢。（具体见后面的参数说明）&lt;br /&gt;
&lt;br /&gt;
编辑地图让你能够随心所欲的更改蚂蚁的环境，你会看到，无论你怎样精心巧妙的设计地图，小蚂蚁最终都能找到食物！我们为你准备了一个地图库，可以自动调出不同的地图。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/antcolony/ant_colony_simulation-8.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 835px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=预期的结果=&lt;br /&gt;
&lt;br /&gt;
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后，它会向环境释放一种信息素，吸引其他的蚂蚁过来，这样越来越多的蚂蚁会找到食物！有些蚂蚁并没有象其它蚂蚁一样总重复同样的路，他们会另辟蹊径，如果令开辟的道路比原来的其他道路更短，那么，渐渐，更多的蚂蚁被吸引到这条较短的路上来。最后，经过一段时间运行，可能会出现一条最短的路径被大多数蚂蚁重复着。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=原理=&lt;br /&gt;
&lt;br /&gt;
为什么小小的蚂蚁能够找到食物？他们具有智能么？设想，如果我们要为蚂蚁设计一个人工智能的程序，那么这个程序要多么复杂呢？首先，你要让蚂蚁能够避开障碍物，就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物，其次，要让蚂蚁找到食物，就需要让他们遍历空间上的所有点；再次，如果要让蚂蚁找到最短的路径，那么需要计算所有可能的路径并且比较它们的大小，而且更重要的是，你要小心翼翼的编程，因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序！太复杂了，恐怕没人能够完成这样繁琐冗余的程序。&lt;br /&gt;
&lt;br /&gt;
然而，事实并没有你想得那么复杂，上面这个程序每个蚂蚁的核心程序编码不过100多行！为什么这么简单的程序会让蚂蚁干这样复杂的事情？答案是：简单规则的涌现。事实上，每只蚂蚁并不是像我们想象的需要知道整个世界的信息，他们其实只关心很小范围内的眼前信息，而且根据这些局部信息利用几条简单的规则进行决策，这样，在蚁群这个集体里，复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律！那么，这些简单规则是什么呢？下面详细说明：&lt;br /&gt;
#范围：蚂蚁观察到的范围是一个方格世界，蚂蚁有一个参数为速度半径VR（一般是3），那么它能观察到的范围就是VR*VR个方格世界，并且能移动的距离也在这个范围之内。&lt;br /&gt;
#环境：蚂蚁所在的环境是一个虚拟的世界，其中有障碍物，有别的蚂蚁，还有信息素，信息素有两种，一种是找到食物的蚂蚁洒下的食物信息素，一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。&lt;br /&gt;
#觅食规则：在每只蚂蚁能感知的范围内寻找是否有食物，如果有就直接过去。否则看是否有信息素，并且比较在能感知的范围内哪一点的信息素最多，这样，它就朝信息素多的地方走，并且每只蚂蚁多会以小概率犯错误，从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样，只不过它对窝的信息素做出反应，而对食物信息素没反应。&lt;br /&gt;
#移动规则： 每只蚂蚁都朝向信息素最多的方向移，并且，当周围没有信息素指引的时候，蚂蚁会按照自己原来运动的方向惯性的运动下去，并且，在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈，它会记住最近刚走过了哪些点，如果发现要走的下一点已经在最近走过了，它就会尽量避开。&lt;br /&gt;
#避障规则：如果蚂蚁要移动的方向有障碍物挡住，它会随机的选择另一个方向，并且有信息素指引的话，它会按照觅食的规则行为。&lt;br /&gt;
#播撒信息素规则：每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多，并随着它走远的距离，播撒的信息素越来越少。根据这几条规则，蚂蚁之间并没有直接的关系，但是每只蚂蚁都和环境发生交互，而通过信息素这个纽带，实际上把各个蚂蚁之间关联起来了。比如，当一只蚂蚁找到了食物，它并没有直接告诉其它蚂蚁这儿有食物，而是向环境播撒信息素，当其它的蚂蚁经过它附近的时候，就会感觉到信息素的存在，进而根据信息素的指引找到了食物。&lt;br /&gt;
&lt;br /&gt;
=问题=&lt;br /&gt;
说了这么多，蚂蚁究竟是怎么找到食物的呢？&lt;br /&gt;
在没有蚂蚁找到食物的时候，环境没有有用的信息素，那么蚂蚁为什么会相对有效的找到食物呢？这要归功于蚂蚁的移动规则，尤其是在没有信息素时候的移动规则。首先，它要能尽量保持某种惯性，这样使得蚂蚁尽量向前方移动（开始，这个前方是随机固定的一个方向），而不是原地无谓的打转或者震动；其次，蚂蚁要有一定的随机性，虽然有了固定的方向，但它也不能像粒子一样直线运动下去，而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性，尽量保持原来的方向，但又有新的试探，尤其当碰到障碍物的时候它会立即改变方向，这可以看成一种选择的过程，也就是环境的障碍物让蚂蚁的某个方向正确，而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。&lt;br /&gt;
当然，在有一只蚂蚁找到了食物的时候，其他蚂蚁会沿着信息素很快找到食物的。&lt;br /&gt;
&lt;br /&gt;
蚂蚁如何找到最短路径的？这一是要归功于信息素，另外要归功于环境，具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多，因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物，开始的时候，走这两条路的蚂蚁数量同样多（或者较长的路上蚂蚁多，这也无关紧要）。当蚂蚁沿着一条路到达终点以后会马上返回来，这样，短的路蚂蚁来回一次的时间就短，这也意味着重复的频率就快，因而在单位时间里走过的蚂蚁数目就多，洒下的信息素自然也会多，自然会有更多的蚂蚁被吸引过来，从而洒下更多的信息素……；而长的路正相反，因此，越来越多地蚂蚁聚集到较短的路径上来，最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题，实际上蚂蚁逐渐接近全局最短路的，为什么呢？这源于蚂蚁会犯错误，也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径，这可以理解为一种创新，这种创新如果能缩短路途，那么根据刚才叙述的原理，更多的蚂蚁会被吸引过来。&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony2.gif|center|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
上图说明了这个过程，从a出发到e有两条路，左边的较长，右边的较短，在这两个图中，开始的时候（左图）蚂蚁选择两条路的机会是均等的，当时间流逝以后（右图所示），更多的蚂蚁聚集到右边的较短的路上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申=&lt;br /&gt;
跟着蚂蚁的踪迹，你找到了什么？通过上面的原理叙述和实际操作，我们不难发现蚂蚁之所以具有智能行为，完全归功于它的简单行为规则，而这些规则综合起来具有下面两个方面的特点：&lt;br /&gt;
#多样性&lt;br /&gt;
#正反馈&lt;br /&gt;
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环，正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力，而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见，而多样性是打破权威体现的创造性，正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。&lt;br /&gt;
&lt;br /&gt;
引申来讲，大自然的进化，社会的进步、人类的创新实际上都离不开这两样东西，多样性保证了系统的创新能力，正反馈保证了优良特性能够得到强化，两者要恰到好处的结合。如果多样性过剩，也就是系统过于活跃，这相当于蚂蚁会过多的随机运动，它就会陷入混沌状态；而相反，多样性不够，正反馈机制过强，那么系统就好比一潭死水。这在蚁群中来讲就表现为，蚂蚁的行为过于僵硬，当环境变化了，蚂蚁群仍然不能适当的调整。&lt;br /&gt;
&lt;br /&gt;
既然复杂性、智能行为是根据底层规则涌现的，既然底层规则具有多样性和正反馈特点，那么也许你会问这些规则是哪里来的？多样性和正反馈又是哪里来的？我本人的意见：规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢？为什么在你眼前呈现的世界是如此栩栩如生呢？答案在于环境造就了这一切，之所以你看到栩栩如生的世界，是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了，被环境淘汰了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=参数说明=&lt;br /&gt;
最大信息素：蚂蚁在一开始拥有的信息素总量，越大表示程序在较长一段时间能够存在信息素。食物释放信息素的半径：在食物点和窝点附近都会释放相应的信息素以便蚂蚁能更快的找到它们。这个半径越大，则越容易被蚂蚁找到。信息素消减的速度：随着时间的流逝，已经存在于世界上的信息素会消减，这个数值越大，那么消减的越快。&lt;br /&gt;
&lt;br /&gt;
在设置蚂蚁个体属性的时候，选择特定的蚂蚁编号，可以对这只蚂蚁的属性进行修改。错误概率表示这个蚂蚁不往信息素最大的区域走的概率，越大则表示这个蚂蚁越有创新性。速度半径表示蚂蚁一次能走的最大长度，也表示这个蚂蚁的感知范围。记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标，这个值避免了蚂蚁在本地打转，停滞不前。而这个值越大那么整个系统运行速度就慢，越小则蚂蚁越容易原地转圈。按钮（应用于所有蚂蚁）：是把当前更改的所有蚂蚁的个体属性应用到所有的蚂蚁身上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45321</id>
		<title>Efloy</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45321"/>
		<updated>2025-07-02T07:34:53Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;名 称：进化的人工生命&lt;br /&gt;
&lt;br /&gt;
作 者：&lt;br /&gt;
&lt;br /&gt;
源代码：[[媒体文件:Efloy.zip|efloy.zip]]&lt;br /&gt;
&lt;br /&gt;
本程序是根据 efloy 模拟模型的java程序制作，并进行了汉化和web实现。&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/efloy/efloys_evolution.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 900px; height: 900px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
上面的程序是在基本的Floy程序的基础上加入了进化机制的版本：首先点击“突变洗牌”（Scramble）按钮这样可以使得我们当前的种群多样化，你会看到每只Floy都有了不一样的颜色，并且它们的行为特征都不尽相同。然后点击“开始进化”（Start Evolution）按钮进化就开始了。注意，一只入侵者飞了进来，只有当入侵者被击毙的时候才开始下一代，这样一代一代的重复下去。你所要的就是静静的观察与等待，也许一些意想不到的事情就在你眼前发生了。&lt;br /&gt;
&lt;br /&gt;
点击“显示规则”（Show Rules）和“显示帮助”（Show Help）按钮你会看到这个程序的使用说明。在这里有必要对每只苍蝇的简单规则再次重复一遍。每只苍蝇只有两条规则，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*与同类交互的规则：&lt;br /&gt;
**找到你周围的同类尽量去靠近它们，但也不能靠的太近；&lt;br /&gt;
*与异类的规则：&lt;br /&gt;
**如果在自己的疆土上则发现了一只入侵者就尾随它并在适当的时机进攻；&lt;br /&gt;
**如果不在自己的疆土上则如果有本地的居民追逐你就赶快逃跑。&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
每一代中的每只Floy都不太一样，它们都有自己的个性，而这些个性都体现在它们的行为上，也就是它们的最大速度、反弹速度、加速度、中心的吸引力、碰撞距离等等属性的不同，如果我们将这些特性编码就能得到每只Floy的染色体，然后再对整个一代的Floy中进行适应度的排序，挑选出适应度比较高的Floy作为父母进行繁殖也就是让它们的染色体进行交叉来得到下一代，这就完成了一次自然选择，也就是一代的进化。下面我们有必要对适应度进行说明，适应度是能量值和安全度的加权平均值。打击入侵者和增加移动速度会增加能量值；而与自己同类尽量保持靠近会增加安全度。&lt;br /&gt;
&lt;br /&gt;
在这个程序中，进化是在三个不同层次中进行的，最低的一层是在我们称为基因型的层次进行。基因型就是一个字符串的染色体，物种的基因都编码在染色体之中了。并且每一个染色体字符串的位都表示Floy的一个特征。这些编码在我们解码之前没有任何意义。&lt;br /&gt;
&lt;br /&gt;
中间的一层被称为表现型，在这个层次中Floy的染色体被直接解码形成了这个Floy的行为特征。举例来说，在Floy染色体的一个位上定义了它的加速度的值，我们在屏幕上看到的这个Floy移动的快慢就是受这个基因影响的。&lt;br /&gt;
&lt;br /&gt;
第三个层次是个体的适应度。个体的适应度是依赖于它的基因的，但这种依赖关系不是简单直接的，事实上染色体并没有适应度的基因。当个体的能量值和安全度都很大的时候它的适应度才会大，而这导致了一个矛盾。因为如果一个Floy要想获得更大的能量值它就必须在它的兄弟们进攻入侵者之前就先行动进攻，但是这样做它就会远离自己的同类从而降低它的安全度。&lt;br /&gt;
&lt;br /&gt;
因此我们会得到下面的这样一个链条：自然选择是对适应度进行的，而适应度是依赖于表现型的，而表现型则是被基因型决定的，而遗传的操作（变异、交叉）是在基因型上操作的。因此整个进化的过程就是这样一层一层涌现出来的。&lt;br /&gt;
&lt;br /&gt;
=一次观察记录=&lt;br /&gt;
&lt;br /&gt;
开始一个新代，每个个体都有自己的个性，它们都有不同的颜色，而且行为也都不太一样，当入侵者飞进来的时候有的主动进攻，有的逃之夭夭。进化开始了，过程还不算慢。等了十几分钟后，一些个体已经逐渐被淘汰了，最后只剩下了灰色和绿色的两种个体。其中灰色个体的特征是主动进攻型，而绿色的个体是喜欢团队合作集体进攻的类型。经过慢慢的进化，绿色的Floy越来越多，灰色的越来越少最后只剩下一只了，但是它会采取主动的有效进攻。突然，绿色的Floy居然会使用诡计了，它们一大堆抱成一团缓慢的移动，但是它们跟随着那只灰色Floy，并且只有当灰色的Floy进攻的时候它们才一起进攻，否则不会单独行动，这样它们可以使自己的安全度和能量值同时提高。最后，灰色的Floy被淘汰掉了，仅仅剩下了那一大群绿色的。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45320</id>
		<title>Efloy</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Efloy&amp;diff=45320"/>
		<updated>2025-07-02T07:22:00Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;名 称：进化的人工生命&lt;br /&gt;
&lt;br /&gt;
作 者：&lt;br /&gt;
&lt;br /&gt;
源代码：[[媒体文件:Efloy.zip|efloy.zip]]&lt;br /&gt;
&lt;br /&gt;
本程序是根据 efloy 模拟模型的java程序制作，并进行了汉化和web实现。&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/efloy/efloys_evolution.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 900px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
上面的程序是在基本的Floy程序的基础上加入了进化机制的版本：首先点击Scramble按钮这样可以使得我们当前的种群多样化，你会看到每只Floy都有了不一样的颜色，并且它们的行为特征都不尽相同。然后点击Start Evolution按钮进化就开始了。注意，一只入侵者飞了进来，只有当入侵者被击毙的时候才开始下一代，这样一代一代的重复下去。你所要的就是静静的观察与等待，也许一些意想不到的事情就在你眼前发生了。&lt;br /&gt;
&lt;br /&gt;
点击Show Rules和Show Help按钮你会看到这个程序的使用说明。在这里有必要对每只苍蝇的简单规则再次重复一遍。每只苍蝇只有两条规则，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*与同类交互的规则：&lt;br /&gt;
**找到你周围的同类尽量去靠近它们，但也不能靠的太近；&lt;br /&gt;
*与异类的规则：&lt;br /&gt;
**如果在自己的疆土上则发现了一只入侵者就尾随它并在适当的时机进攻；&lt;br /&gt;
**如果不在自己的疆土上则如果有本地的居民追逐你就赶快逃跑。&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
每一代中的每只Floy都不太一样，它们都有自己的个性，而这些个性都体现在它们的行为上，也就是它们的最大速度、反弹速度、加速度、中心的吸引力、碰撞距离等等属性的不同，如果我们将这些特性编码就能得到每只Floy的染色体，然后再对整个一代的Floy中进行适应度的排序，挑选出适应度比较高的Floy作为父母进行繁殖也就是让它们的染色体进行交叉来得到下一代，这就完成了一次自然选择，也就是一代的进化。下面我们有必要对适应度进行说明，适应度是能量值和安全度的加权平均值。打击入侵者和增加移动速度会增加能量值；而与自己同类尽量保持靠近会增加安全度。&lt;br /&gt;
&lt;br /&gt;
在这个程序中，进化是在三个不同层次中进行的，最低的一层是在我们称为基因型的层次进行。基因型就是一个字符串的染色体，物种的基因都编码在染色体之中了。并且每一个染色体字符串的位都表示Floy的一个特征。这些编码在我们解码之前没有任何意义。&lt;br /&gt;
&lt;br /&gt;
中间的一层被称为表现型，在这个层次中Floy的染色体被直接解码形成了这个Floy的行为特征。举例来说，在Floy染色体的一个位上定义了它的加速度的值，我们在屏幕上看到的这个Floy移动的快慢就是受这个基因影响的。&lt;br /&gt;
&lt;br /&gt;
第三个层次是个体的适应度。个体的适应度是依赖于它的基因的，但这种依赖关系不是简单直接的，事实上染色体并没有适应度的基因。当个体的能量值和安全度都很大的时候它的适应度才会大，而这导致了一个矛盾。因为如果一个Floy要想获得更大的能量值它就必须在它的兄弟们进攻入侵者之前就先行动进攻，但是这样做它就会远离自己的同类从而降低它的安全度。&lt;br /&gt;
&lt;br /&gt;
因此我们会得到下面的这样一个链条：自然选择是对适应度进行的，而适应度是依赖于表现型的，而表现型则是被基因型决定的，而遗传的操作（变异、交叉）是在基因型上操作的。因此整个进化的过程就是这样一层一层涌现出来的。&lt;br /&gt;
&lt;br /&gt;
=一次观察记录=&lt;br /&gt;
&lt;br /&gt;
开始一个新代，每个个体都有自己的个性，它们都有不同的颜色，而且行为也都不太一样，当入侵者飞进来的时候有的主动进攻，有的逃之夭夭。进化开始了，过程还不算慢。等了十几分钟后，一些个体已经逐渐被淘汰了，最后只剩下了灰色和绿色的两种个体。其中灰色个体的特征是主动进攻型，而绿色的个体是喜欢团队合作集体进攻的类型。经过慢慢的进化，绿色的Floy越来越多，灰色的越来越少最后只剩下一只了，但是它会采取主动的有效进攻。突然，绿色的Floy居然会使用诡计了，它们一大堆抱成一团缓慢的移动，但是它们跟随着那只灰色Floy，并且只有当灰色的Floy进攻的时候它们才一起进攻，否则不会单独行动，这样它们可以使自己的安全度和能量值同时提高。最后，灰色的Floy被淘汰掉了，仅仅剩下了那一大群绿色的。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45317</id>
		<title>竞争与合作——动态博弈模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E7%AB%9E%E4%BA%89%E4%B8%8E%E5%90%88%E4%BD%9C%E2%80%94%E2%80%94%E5%8A%A8%E6%80%81%E5%8D%9A%E5%BC%88%E6%A8%A1%E6%8B%9F&amp;diff=45317"/>
		<updated>2025-06-30T08:09:20Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
|description=人工生命, 人工社会,囚徒困境博弈&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=程序简介=&lt;br /&gt;
* 名    称： 竞争与合作——动态博弈模拟&lt;br /&gt;
* 作    者： 盛昭瀚－Mathematica版本，[[Jake]]－Java版本&lt;br /&gt;
* 源程序下载： pdcelluar.zip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/pdcelluar/pd_cellular_automaton.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 700px; height: 1000px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序说明=&lt;br /&gt;
    &lt;br /&gt;
这是一个多个企业参与的竞争环境。每个格子（蓝色的或红色的）都是一个企业，它们在随机的游走着，并会与其它的格子相遇，当与其它的企业相遇的时候，他们就进行囚徒困境博弈，其中蓝色的格子表示采用合作的策略，红色的格子表示采用背叛的策略。根据博弈的规则，每个企业都会有一个盈利数表示收益。所有的企业都向学习它的邻居中盈利最多的企业的策略。你会看到，在这样的环境中，竞争或者合作会自发的演化。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=操作说明=&lt;br /&gt;
&lt;br /&gt;
* 点击开始按钮，模拟程序开始运行。格子会随机的游走，并不断向他们的环境学习。&lt;br /&gt;
* 点击“单步运行”表示每次只进行一步，这方便我们的观察。&lt;br /&gt;
* 选择不同的显示方法可以从不同的角度观察企业的运动，其中策略是观察整个合作与不合作策略的分布，id是跟踪每个企业，移动方向观察每个企业下一步将移动向何方。 &lt;br /&gt;
* 点击“设置”按钮可以更改一些程序的属性。点击“查看”可以观察系统总的时间-状态图，你会看到使用不同策略的企业在时间上的分布。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=设置参数的说明=&lt;br /&gt;
    &lt;br /&gt;
* 世界的尺寸：程序中一共有多少方格，方格数越大运行越慢；&lt;br /&gt;
* 企业的总比例：企业数占总的方格数的比例；&lt;br /&gt;
* 合作者的比例：在企业中，初始时刻合作者占的比例；&lt;br /&gt;
* 邻居类型：在两种邻居类型中选择一种，两种类型示意图如下：其中黑色的表示当前的方格，黄色的表示他的邻居。&lt;br /&gt;
[[File:图1.jpg|800px]]&lt;br /&gt;
* 刷新间隔：每次刷新世界演化几步。比如刷新间隔为2，则每走两步才刷新视图一次。&lt;br /&gt;
* 博弈规则：确定当合作者与不合作者相遇的时候不合作者能够得到的收益数（&amp;gt;1）。&lt;br /&gt;
&lt;br /&gt;
=规则说明=&lt;br /&gt;
    &lt;br /&gt;
个体：每个企业可以用一个三元组表示(s,m,d)。其中s为企业当前使用的规则，s只能取1（表示合作），2（表示不合作）两种状态。m表示与该企业的所有邻居分别进行囚徒困境博弈以后的总盈利。d表示随机选择的移动方向（在vonNerman类型中有上、下、左、右4个方向，Moore类型有上、下、左、右、左上、左下、右上、右下8个方向）。程序中黑色的区域表示空区域，没有被企业占领。如果某个企业已经占领了一个方格，则其它企业不能介入。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=博弈规则： 每个企业都跟它的邻居进行囚徒困境博弈=&lt;br /&gt;
&lt;br /&gt;
囚徒困境博弈，博弈的矩阵如下表所示：&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| (企业1，企业2) || 合作 || 不合作&lt;br /&gt;
|-&lt;br /&gt;
| 合作 || 1,1 || 0,p&lt;br /&gt;
|-&lt;br /&gt;
| 不合作 || p,0 || 0,0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
这个矩阵为简化了的囚徒困境博弈的形式。即，如果两个企业都采取合作的策略，那么它们各得1单位收益，如果一方合作另一方不合作， 那么合作的一方吃亏得益为0，不合作的一方占便宜，得益为p（&amp;gt;1）；双方都不合作那么都不收益。    &lt;br /&gt;
&lt;br /&gt;
学习规则：每个企业在每次循环中都跟它周围的邻居中这次循环的收益最多的企业学习，把它的策略拷贝过来作为自己的。即如果四个邻居中收益最高的是背叛，那么这个企业下一个循环也选择背叛策略，如果收益最高的是合作，那么下一时刻，该企业也采取合作策略。&lt;br /&gt;
&lt;br /&gt;
移动规则：每个企业在每次循环的时候都随机的选择一个方向，如果这个方向指向的方格为空，并且没有其他企业指向这个方格，那么下一时刻它就移动到那个格子中，否则它原地不动。&lt;br /&gt;
&lt;br /&gt;
规则的运行：系统采用离散时间运行，每个周期内，所有的企业先按照自己的s取值也就是策略跟每个邻居都进行博弈确定它的收入m；然后每个企业开始在4个邻居中寻找最大的m对应的企业，学习它的策略作为下一周期的策略s'；然后企业根据移动规则向它的临近方格移动。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=集体涌现行为=&lt;br /&gt;
    &lt;br /&gt;
根据多次系统运行规律观察，得到的几条规律如下：&lt;br /&gt;
# 系统最后的演化结果是依赖于初始分布的；&lt;br /&gt;
# 企业的总比例越大，合作者越容易存活，不合作者将趋于灭亡。相反，企业的比例越小，合作者越容易转变成不合作者；&lt;br /&gt;
# 相同的企业往往集中在某几个特定的区域；&lt;br /&gt;
# 系统演化的结果是对博弈规则敏感的，如果m数值设置的越大，则合作者越不容易占上风；&lt;br /&gt;
# 每个企业的邻居数越多，则合作策略越容易占上风；&lt;br /&gt;
# 不同的参数设置会导致不同的结果，一种情况是最后全是竞争的企业，一种情况是全是合作的企业，还有可能合作与竞争长时间共存，并且演化规则特别复杂。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=对这现实经济环境中的指导意义=&lt;br /&gt;
# 只有企业和企业之间建立起比较完善的交互体系的时候，合作的可能性才会增强。&lt;br /&gt;
# 同类之间连成一片可以抵御外来者的进攻。&lt;br /&gt;
# 囚徒困境博弈是一种竞争关系的博弈，企业和企业之间本质的关系是竞争的，但是合作却能在一定的条件下自发的演化出来。因此，竞争中的合作是一种多个个体相互学习适应过程中得到的。&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;br /&gt;
[[category:博弈模型]]&lt;br /&gt;
[[category:旧词条迁移]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E5%BA%B7%E5%A8%81%E7%9A%84%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F_Conway%27s_Game_of_Life&amp;diff=45316</id>
		<title>康威的生命游戏 Conway's Game of Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E5%BA%B7%E5%A8%81%E7%9A%84%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F_Conway%27s_Game_of_Life&amp;diff=45316"/>
		<updated>2025-06-30T08:03:37Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=元胞自动机,人工生命, 复杂&lt;br /&gt;
|description=元胞自动机, 人工生命,复杂&lt;br /&gt;
}}&lt;br /&gt;
[[File:Lggun.gif|400px|right|thumb|康威生命游戏中的一种可持续繁殖模式：“高斯帕 Bill Gosper 机枪”不断制造“滑翔机”]]&lt;br /&gt;
[[File:Conways game of life breeder.png|400px|right|thumb|一个河豚型繁殖者（红色）的截图，它在滑行后留下滑翔机枪（绿色），从而创建了滑翔机（蓝色）（动画）]]&lt;br /&gt;
'''康威生命游戏 （Conway's Game of Life）'''，又称'''康威生命棋'''，是英国数学家[[约翰·何顿·康威 John Horton Conway]]在1970年发明的[[元胞自动机]]。&amp;lt;ref&amp;gt;{{cite journal | url=https://web.stanford.edu/class/sts145/Library/life.pdf | title=Mathematical Games - The Fantastic Combinations of John Conway's New Solitaire Game 'Life' | first=Martin | last=Gardner  | issue=223 | journal=Scientific American | date=October 1970 | pages=120–123| doi=10.1038/scientificamerican1070-120 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
该游戏是[https://en.wikipedia.org/wiki/Zero-player_game 零玩家游戏]，这意味着它的发展由其初始状态决定，不需要进一步的输入。通过创建初始配置并观察其演变，它可以与生命游戏互动。它是具有[[图灵完备性]]的，可以模拟[https://en.wikipedia.org/wiki/Von_Neumann_universal_constructor 通用构造器]或任何其他图灵机。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==规则==&lt;br /&gt;
我们所说的生命游戏是一个无限的，二维正方形的栅格单元网格，每一个单元格有2种状态可能性：活或死的（或者黑和白）。每个单元格都与其八个相邻的单元交互，这八个单元格是水平、垂直或对角线相邻的单元格。在每个时间步上，都会发生以下转换：&lt;br /&gt;
&lt;br /&gt;
# 当前细胞为存活状态时，当周围的存活细胞低于2个时（不包含2个），该细胞变成死亡状态。（模拟生命数量稀少）&lt;br /&gt;
# 当前细胞为存活状态时，当周围有2个或3个存活细胞时，该细胞保持原样。&lt;br /&gt;
# 当前细胞为存活状态时，当周围有超过3个存活细胞时，该细胞变成死亡状态。（模拟生命数量过多）&lt;br /&gt;
# 当前细胞为死亡状态时，当周围有3个存活细胞时，该细胞变成存活状态。（模拟繁殖）&lt;br /&gt;
&lt;br /&gt;
这些将自动机的行为与现实生活进行比较的规则可以归纳为以下内容：&lt;br /&gt;
# 任何有两个或三个邻居的活细胞都可以存活。&lt;br /&gt;
# 具有三个活动邻居的任何死细胞都将成为活细胞。&lt;br /&gt;
# 所有其他活细胞将在下一代死亡。同样，所有其他死细胞仍保持死亡状态。&lt;br /&gt;
可以把最初的细胞结构定义为种子，当所有在种子中的细胞同时被以上规则处理后，可以得到第一代细胞图。按规则继续处理当前的细胞图，可以得到下一代的细胞图，周而复始。&lt;br /&gt;
&lt;br /&gt;
==起源==&lt;br /&gt;
1940年末，[https://en.wikipedia.org/wiki/John_von_Neumann 约翰·冯·诺依曼 John von Neumann]将生命定义为可以自我复制且可模拟图灵机的存在。冯·诺依曼考虑使用随机漂浮在液体或气体中的电磁成分来模拟生命。&amp;lt;ref&amp;gt;{{cite book|last=Wolfram|first=Stephen|title=A New Kind of Science|publisher=Wolfram Media, Inc.|year=2002|page=[https://archive.org/details/newkindofscience00wolf/page/1179 1179]|isbn=978-1-57955-008-0|url=https://archive.org/details/newkindofscience00wolf/page/1179}}&amp;lt;/ref&amp;gt;然而受当时技术所限，他的方案并未成为现实。后来，[https://en.wikipedia.org/wiki/Stanislaw_Ulam 乌兰姆 Stanislaw Ulam]发明了元胞自动机，旨在模拟冯·诺依曼的理论电磁构造。乌兰姆在他的几篇论文中讨论了用计算器在二维晶格中模拟元胞自动机。与此同时，[[约翰·冯·诺依曼 John von Neumann]]也在尝试构建乌兰姆的元胞自动机。虽然进展顺利，但他同时忙于其他项目，有一些细节未完成。他构造的机器很复杂，因为加入了一些他自己的工程设计。随着时间推移，有其他研究人员提供了更简单的构造，并发表在论文和书籍中。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
受数学逻辑问题以及乌兰姆等学者在模拟游戏方面工作的启发，约翰·康威 John Conway于1968年开始使用各种不同的2D元胞自动机规则进行实验。&amp;lt;ref&amp;gt;{{cite book|last=Wolfram|first=Stephen|title=A New Kind of Science|publisher=Wolfram Media, Inc.|year=2002|page=[https://archive.org/details/newkindofscience00wolf/page/877 877]|isbn=978-1-57955-008-0|url=https://archive.org/details/newkindofscience00wolf/page/877}}&amp;lt;/ref&amp;gt;Conway的最初目标是定义一种有趣且不可预测的元胞自动机。因此，他希望一些运行实例可以能持续很长时间后终止，而另一些运行实例则在不出现循环的情况下永久运行下去。这是一个巨大的挑战。也是多年以来一个悬而未决的问题。后来元胞自动机专家们终于证明Conway的生命游戏满足Von Neumann提出的两个基本要求。在Conway之前，生命游戏以证明为导向，而Conway以构造简单的生命游戏模型为导向，并没有先验地证明自动机可以持续存活。&lt;br /&gt;
&lt;br /&gt;
经过大量实验后，Conway仔细选择了自己的规则，使得符合以下条件：&lt;br /&gt;
# 不应出现爆炸性增长。&lt;br /&gt;
# 应该存在小的初始模式，这些模式会导致混沌，不可预测的结果。&lt;br /&gt;
# 冯·诺依曼通用构造机（universal constructor）应该有潜力。&lt;br /&gt;
# 在遵守上述约束的同时，规则应尽可能简单。&amp;lt;ref&amp;gt;Conway, private communication to the 'Life list', 14 April 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
自从发明以来，Conway的生命游戏就吸引了很多人，因为它可以使初始模式以令人惊讶的方式进行演变。生命游戏是系统涌现和自组织的一个例子。计算机科学，物理学，生物学，生物化学，经济学，数学，哲学和生成科学等各个领域的学者都可从这种“通过执行简单规则即可产生复杂模式”的方式汲取营养。生命游戏也可以用作教学分析，用于展现一些反直觉的观念，即设计和组织可以在没有设计师的情况下自发出现。例如，认知科学家丹尼尔·丹内特 Daniel Dennett广泛使用了Conway生命游戏中的 “宇宙” ，来说明复杂的哲学构造（如意识和自由意志）可能从相对简单的确定性物理定律集演化而来，而这些简单的物理定律可以控制我们的宇宙。&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first=D. C.|date=1991|title=Consciousness Explained|location=Boston|publisher=Back Bay Books|isbn=978-0-316-18066-5|url-access=registration|url=https://archive.org/details/consciousnessexp00denn}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first= D. C. |date=1995|title=Darwin's Dangerous Idea: Evolution and the Meanings of Life|url=https://archive.org/details/darwinsdangerous0000denn|url-access=registration|location=New York|publisher= Simon &amp;amp; Schuster |isbn= 978-0-684-82471-0}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book|last=Dennett|first= D. C. |date=2003 |title=Freedom Evolves |location=New York |publisher=Penguin Books |isbn =978-0-14-200384-8}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conway的生命游戏之所以受欢迎，是因为它的问世刚好赶上新一代的廉价计算机进入市场的时机。生命游戏可以在这些机器上运行数小时。对一些来说，生命游戏仅仅是编程挑战：一种有趣的方式来占用CPU使用率，反正不用也会浪费。对另一些人来说，生命戏则具有哲学内涵。当前的发展已经达到在生命游戏的范畴内创建计算机系统的理论仿真的程度。&amp;lt;ref&amp;gt;{{cite web|url=http://rendell-attic.org/gol/tm.htm|title=A Turing Machine in Conway's Game of Life|author=Paul Rendell|date=January 12, 2005|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/index.php?title=Spartan_universal_computer-constructor|title=Spartan universal computer-constructor|author=Adam P. Goucher|publisher=LifeWiki|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==模式示例==&lt;br /&gt;
在生命游戏中会出现许多不同类型的模式，可根据行为特点对这些模式进行分类。常见的模式类型包括：&lt;br /&gt;
&lt;br /&gt;
1.静态，从一代到下一代都不会改变；&lt;br /&gt;
&lt;br /&gt;
2.振荡态，经过有限的迭代后返回其初始状态；&lt;br /&gt;
&lt;br /&gt;
3.太空船态，可在网格中进行自我变换。&lt;br /&gt;
&lt;br /&gt;
4.穿梭机态，蜂王可以在两个静态块之间往复移动。&lt;br /&gt;
&lt;br /&gt;
5.滑翔机枪，它由两个块稳定的蜂王穿梭机组成，可以向外发射滑翔机。&lt;br /&gt;
&lt;br /&gt;
6.图灵机，它是一种能够进行图灵完备计算的模式，可以执行任意计算。它由 Paul Rendell 创建，于 2000 年 4 月 2 日完工。这个特殊的图灵机是无限的，因为它需要无限长的磁带来执行任意计算。一个周期需要 11040 代。&lt;br /&gt;
&lt;br /&gt;
7.生命游戏里的细胞，细胞是生命游戏平面的子集（通常是矩形或正方形），它与固定数量的不同图案一起平铺在平面上，每个平铺都采用其中一种图案，因此它可以模拟元胞自动机本身。第一个细胞由 David Bell 于 1996 年建造。它采用标准的滑翔机逻辑来确定是否应该存在滑翔机。这两种状态的区别在于一个滑翔机。2004 年，Jared James Prince修改了David Bell的生命单元，以支持生命宇宙的两层（因此是多层），创造了“深细胞”。深细胞的周期为 7680。''A0'' 的开/关状态每 7680 代（从第 0 代开始）出现一次，由左上象限的 6 艘长船之间是否存在滑翔机来表示（下面以绿色圈出）。''B0'' 的状态以相同的方式表示，但偏移 3840 轮。这个版本的模式设置为 ''A0'' 最初开启，''B0'' 处于启动前开启状态（由左下象限垂直腔室中的 3 个方块表示，下方以红色圈出），因此 ''B0'' 将在 3840 代后正式开启。要启动 ''A0'' OFF，需要删除滑翔机。要启动 ''B0'' OFF，需要删除 3 个方块。&lt;br /&gt;
&lt;br /&gt;
生命游戏最早的比较有趣的模式是在不使用计算机的情况下就被发现的。最简单的静态和振荡态是在使用方格纸、黑板和物理游戏板记录一些运行实例时发现的。在早期研究中，Conway发现“R-pentomino”在次数较少的迭代中无法稳定。实际上，它需要1103次迭代才能稳定下来，到那时它已拥有116个种群，并已产生了6个移动的“滑翔机”。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/index.php?title=R-pentomino|title=R-pentomino|publisher=LifeWiki|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;这是有史以来发现的第一批“太空船”模式。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/ref/lexicon/lex_g.htm#glider|author=Stephen A. Silver|title=Glider|publisher=The Life Lexicon|accessdate=March 4, 2019}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下面显示了上述六种模式类型的常见&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/soup/census.asp?rule=B3/S23&amp;amp;sl=1&amp;amp;os=1&amp;amp;ss=1|archiveurl=https://web.archive.org/web/20090910010855/http://conwaylife.com/soup/census.asp?rule=B3%2FS23&amp;amp;sl=1&amp;amp;os=1&amp;amp;ss=1|archivedate=2009-09-10|title=Census Results in Conway's Game of Life|publisher=The Online Life-Like CA Soup Search|accessdate=July 12, 2009|url-status=dead}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://wwwhomes.uni-bielefeld.de/achim/moving.html|title=Spontaneous appeared Spaceships out of Random Dust|publisher=Achim Flammenkamp (1995-12-09)|accessdate=July 10, 2012}}&amp;lt;/ref&amp;gt;示例（因为它们经常从随机的细胞初始配置中出现），活细胞显示为黑色，死细胞显示为白色。周期指的是模式返回初始配置之前必须迭代的周期数。&lt;br /&gt;
&lt;br /&gt;
===静态示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Game_of_life_block_with_border.svg.png|方块&lt;br /&gt;
File:Game_of_life_loaf.svg.png|面包&lt;br /&gt;
File:Game_of_life_beehive.svg.png|蜂巢&lt;br /&gt;
File:lg4.png|大船&lt;br /&gt;
File:lg5.png|小船&lt;br /&gt;
File:lg6.png|花&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg7.png|池塘&lt;br /&gt;
File:lg9.png|航空母舰&lt;br /&gt;
File:lg10.png|独木舟&lt;br /&gt;
File:lg11.png|芒果&lt;br /&gt;
File:lg12.png|鸭子&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===震荡态示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg13.gif|信号灯（周期=2轮）&lt;br /&gt;
File:lg14.gif|蟾蜍（周期=2轮）&lt;br /&gt;
File:lg152.gif|红绿灯（周期=2轮）&lt;br /&gt;
File:lg16.gif|烽火（周期=2轮）&lt;br /&gt;
File:lg17.gif|脉冲星（周期=3轮）&lt;br /&gt;
File:lg18.gif|慨影（周期=15轮）&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===太空船示例===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:lg19.gif|滑翔机（4轮）&lt;br /&gt;
File:Animated_Hwss.gif|太空船（4轮）&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 穿梭机示例 ===&lt;br /&gt;
&amp;lt;gallery class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:穿梭;块“在同一侧”.gif|穿梭;块“在同一侧”&lt;br /&gt;
文件:穿梭机;块“在不同的侧面”.gif|穿梭机;块“在不同的侧面”&lt;br /&gt;
文件:蜂王环穿梭机.gif|蜂王环穿梭机&lt;br /&gt;
文件:火花穿梭机.gif|火花穿梭机&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 滑翔机枪示例 ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;120&amp;quot; heights=&amp;quot;120&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:销毁式滑翔机枪.gif|销毁式滑翔机枪&lt;br /&gt;
文件:Gosper滑翔机枪.gif| Gosper滑翔机枪 &lt;br /&gt;
文件:Gosper滑翔机双枪.gif| Gosper滑翔机双枪 &lt;br /&gt;
文件:Simkin滑翔机枪.gif| Simkin滑翔机枪 &lt;br /&gt;
文件:Simkin滑翔机枪（单侧）.gif| Simkin滑翔机枪（单侧） &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 图灵机示例 ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:元胞图灵机.gif|这个图灵机是无限的，因为它需要无限长的磁带来执行任意计算。一个周期需要 11040 代。&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 生命游戏里的细胞示例 ===&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
文件:细胞.png|绿色圆圈处有无滑翔机决定了细胞是“死的”还是“活的”。&lt;br /&gt;
文件:深细胞.png|绿色圆圈中滑翔机的存在与否决定了 ''A0'' 中的这个单元格是“死的”还是“活的”。红色圆圈中圈出的三个方块的存在与否决定了 ''B0'' 中的这个单元格是 “死的” 还是 “活的”。&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==不可判定性==&lt;br /&gt;
生命游戏中的许多模式最终成为静止态、振荡态和太空船态的组合; 其他模式可以被称为混沌。 一个模式可能会在很长一段时间内保持混乱，直到它最终稳定为这样一个组合。生命是无法判定的，这意味着给定一个初始模式和一个后来的模式，没有算法能够判断后来的模式是否会出现。 这是不确定问题的必然结果: 从一个最初的输入开始，在给定参数的情况下，模型是会一直运行下去还是结束运行。&amp;lt;ref&amp;gt;Elwyn R. Berlekamp, John H. Conway, and Richard K. Guy, Winning Ways for your Mathematical Plays. Academic Press, 1982&amp;lt;/ref&amp;gt;事实上，由于生命游戏包含一个相当于通用图灵机的模式，这个决策算法，如果它存在的话，可以用来解决停机问题，方法是将初始模式作为对应于一个通用图灵机加上一个输入的模式，将后面的模式作为对应于一个通用图灵机的停机状态的模式。 同时，一些模式永远保持着混乱的状态。 如果不是这样的话，你可以按顺序进行游戏，直到一个非混乱的模式出现，然后计算是否会出现一个后来的模式。&lt;br /&gt;
&lt;br /&gt;
==自我复制==&lt;br /&gt;
2010年5月18日，安德鲁·约翰·韦德 Andrew John Wade宣布了一个自我构建的模式，被称为“双子座” ，在摧毁母体的同时创建一个自我复制品。&amp;lt;ref&amp;gt;{{cite web|url=http://conwaylife.com/forums/viewtopic.php?f=2&amp;amp;t=399&amp;amp;p=2327#p2327 |title=Universal Constructor Based Spaceship |publisher=Conwaylife.com |accessdate=2012-06-24}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://conwaylife.com/wiki/index.php?title=Gemini |title=Gemini – LifeWiki |publisher=Conwaylife.com |accessdate=2012-06-24}}&amp;lt;/ref&amp;gt; 这种模式经过3400万代的复制，使用由滑翔机制成的指令带在两个由查普曼-格林结构臂构成的稳定结构之间来回摆动。 这些，反过来，会创建新的副本的模式，并销毁以前的副本。 双子座也是太空船态，是生命游戏中建造的第一艘倾斜的太空船，它既不是正交的也不是纯对角的。&amp;lt;ref&amp;gt;Aron, Jacob (16 June 2010). &amp;quot;First replicating creature spawned in life simulator&amp;quot; [https://www.newscientist.com/article/mg20627653.800-first-replicating-creature-spawned-in-life-simulator.html]. New Scientist. Retrieved 12 October 2013.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;&amp;quot;Gemini – LifeWiki&amp;quot; [http://www.conwaylife.com/wiki/Types_of_spaceships#Knightship].Conwaylife.com. Retrieved 2013-10-16.&amp;lt;/ref&amp;gt;2015年12月，斜对角线版的双子座建成了。 &amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/wiki/Demonoid|title=Demonoid|publisher=LifeWiki|access-date=18 June 2016}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
2013年11月23日，Dave Greene 在 Conway 的《生命游戏》中制造了第一个复制因子，这个复制因子可以创建一个完整的自我拷贝，包括指令带。&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=2&amp;amp;t=1006&amp;amp;p=9917#p9901|title=Geminoid Challenge|publisher=Conwaylife.com|accessdate=2015-06-25}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
2018年10月，Adam p. Goucher 完成了0E0P metacell 的建造工作，这是一个可以存储自我复制的 metacell。 这与之前的元细胞不同，比如 Brice Due 的 OTCA metapixel，它只能理附近已经构建好的副本。&amp;lt;ref&amp;gt;{{Citation|last=Passe-Science|title=Automate Cellulaire - Passe-science #27|date=2019-05-29|url=https://www.youtube.com/watch?v=CfRSVPhzN5M|access-date=2019-06-25}}&amp;lt;/ref&amp;gt;  0E0P 元细胞的工作原理是使用构造臂来创建模拟编程规则的副本。 对 Conway’ s Life 或其他 Moore 邻居规则的实际模拟是通过使用具有更多状态的冯诺依曼邻域来模拟一个等价规则来完成的。&amp;lt;ref&amp;gt;{{Cite web|url=https://cp4space.wordpress.com/2018/11/12/fully-self-directed-replication/|title=Fully self-directed replication|last=apgoucher|date=2018-11-12|website=Complex Projective 4-Space|language=en|access-date=2019-06-25}}&amp;lt;/ref&amp;gt;0E0P 是“ Zero Encoded by Zero Population”的缩写，这意味着0E0P 元胞不是处于“关闭”状态，而是在细胞进入“关闭”状态时自行移动，留下空白空间。&amp;lt;ref&amp;gt;{{Cite web|url=http://www.conwaylife.com/wiki/0E0P|title=0E0P metacell - LifeWiki|website=www.conwaylife.com|access-date=2019-06-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==迭代==&lt;br /&gt;
从网格上最随机的细胞初始模式中，观察者会发现人口随着时代的推移而不断变化。 从简单规则中产生的模式可以被认为是数学美的一种形式。 没有初始对称性的孤立的小亚模式趋向于对称。 一旦这种情况发生，对称性可能会增加丰富性，但它不会丢失，除非附近的子模式接近到足以干扰它。 在极少数情况下，社会最终会消亡，所有的活细胞都会消失，尽管这种情况可能不会发生很多代。 大多数最初的模式最终会结束，产生稳定的数字或模式，永远在两个或两个以上的状态之间振荡; &amp;lt;ref&amp;gt;{{cite web|url=http://www.geocities.com/conwaylife/|author=Andrzej Okrasinski|title=Game of Life Object Statistics|accessdate=July 12, 2009|archiveurl=https://web.archive.org/web/20090727010353/http://geocities.com/conwaylife/ |archivedate=2009-07-27}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web|url=http://www.conwaylife.com/soup/|archiveurl=https://web.archive.org/web/20090910010849/http://conwaylife.com/soup/ |archivedate=2009-09-10|author=Nathaniel Johnston|title=The Online Life-Like CA Soup Search|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;许多还产生一架或多架滑翔机或太空飞船，它们可以无限期地远离最初的位置。 由于基于最近邻的规则，没有任何信息能够以大于每单位时间一个单元的速率通过网格，所以这个速度被称为光的细胞自动机速度，并用 c 表示。&lt;br /&gt;
&lt;br /&gt;
==算法==&lt;br /&gt;
[[file:Oscillator.gif|right|400px|thumb|来自2-D六角形生命游戏的48步振荡器以及2步振荡器和4步振荡器的样本（规则H：B2 / S34）]]&lt;br /&gt;
在具有未知前景的早期模式，如 R-pentomino，使世界各地的计算机程序员编写程序来跟踪生命模式的演变。 大多数早期的算法是相似的: 它们将生命模式表示为计算机内存中的二维数组。 通常使用两个数组: 一个用于保存当前生成，另一个用于计算其后续数组。 通常0和1分别代表死细胞和活细胞。 嵌套的 for 循环依次考虑当前数组的每个元素，计算每个单元格的活动邻居，以决定后续数组的相应元素是0还是1。对于下一次迭代，数组交换角色，以便上一次迭代中的后继数组成为下一次迭代中的当前数组。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
对这个基本方案进行各种小的改进是可能的，并且有许多方法可以节省不必要的计算。 如果一个单元格在上一个时间步骤中没有发生更改，而且其邻居也没有发生更改，则保证该单元格在当前时间步骤中也不发生更改。 因此，跟踪哪些区域处于活动状态的程序可以通过不更新非活动区域来节省时间。&amp;lt;ref&amp;gt;{{cite web|url=http://www.ibiblio.org/lifepatterns/lifeapplet.html|title=About my Conway's Game of Life Applet|author=Alan Hensel|accessdate=July 12, 2009}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
为了避免计数循环中的决定和分支，规则可以以自我为中心的方法从内域对其邻域的重新设定，科学观察者的观点: 如果一个给定邻域的所有九个场之和为3，下一代的内域状态将是生存; 如果全场和为4，内域保持其当前状态; 其他的和，则内域状态是死亡。&lt;br /&gt;
&lt;br /&gt;
如果希望节省内存，可以将存储量减少到一个数组加两个行缓冲区。 一个行缓冲区用于计算一行的继承状态，然后第二个行缓冲区用于计算下一行的继承状态。 然后将第一个缓冲区写入其行，并释放以保存第三行的继承者状态。 如果使用环形数组，则需要第三个缓冲区，以便保存数组中第一行的原始状态，直到计算最后一行。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
原则上，生命域是无限的，但计算机的内存是有限的。 当活动区域侵入阵列的边界时，这就会导致问题。 程序员使用了几种策略来解决这些问题。 最简单的策略是简单地假设阵列外的每个单元格都已死亡。 这是很容易编程，但会导致不准确的结果，使得活动区跨越边界。 一个更复杂的技巧是考虑将场的左右边缘结合在一起，以及顶部和底部边缘，生成一个环形阵列。 其结果是，跨越场边缘的活动区域在相反的边缘重新出现。还可以使用动态存储分配技术，创建越来越大的数组来保存生长模式。 有时对有限域上的生命进行明确的研究; 有些实现，例如 Golly，支持在标准无限域、一维无限域或有限域中进行选择，并可选择柱面、环面或[https://en.wikipedia.org/wiki/M%C3%B6bius_strip Möbius strip]。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
或者，程序员可以放弃用二维数组表示 Life 字段的概念，而使用不同的数据结构，例如用坐标对表示活细胞的向量。 这种方法允许模式在场中不受阻碍地移动，只要人口不超过活动坐标阵列的大小。 缺点是计算生存的邻居变成了散列表查找或搜索操作，降低了模拟速度。 使用更复杂的数据结构，这个问题也可以基本上得到解决。&lt;br /&gt;
&lt;br /&gt;
对于在非常长的时间深度探索大型模式，像 Hashlife 这样的复杂算法可能是有用的。 还有一种方法，也适用于其他细胞自动机，用任意的异步更新来实现生命游戏，同时仍然完全模仿同步游戏的行为。&amp;lt;ref&amp;gt;{{cite conference|title=Self-Reproduction in Asynchronous Cellular Automata |first=Chrystopher L. |last=Nehaniv |date=15–18 July 2002 |conference=2002 NASA/DoD Conference on Evolvable Hardware |conference-url=http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=8000 |publisher=IEEE Computer Society Press |location=Alexandria, Virginia, USA |pages=201–209 |isbn=0-7695-1718-8 |doi=10.1109/EH.2002.1029886 }}&amp;lt;/ref&amp;gt; 在 Rosetta Code 中可以找到用各种编程语言(包括 c、 c + + 、 Java 和 Python)实现基本生命游戏场景的源代码示例。&amp;lt;ref&amp;gt;{{cite web|url=http://rosettacode.org/wiki/Conway%27s_Game_of_Life|title=Conway's Game of Life}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==代码实现==&lt;br /&gt;
===Netlogo代码实现===&lt;br /&gt;
代码整体分为两部分，'''setup'''和'''go'''部分。其中setup进行环境的初始化，go进行持续运行。[[媒体文件:Life game.zip|Netlogo源代码]] &lt;br /&gt;
====setup部分====&lt;br /&gt;
setup的核心代码如下：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
patches-own[living]&lt;br /&gt;
&lt;br /&gt;
to setup&lt;br /&gt;
   clear-all&lt;br /&gt;
   reset-ticks&lt;br /&gt;
   ask patches[       &lt;br /&gt;
    if random-float 1 &amp;lt; 0.5 [    #以0.5的概率设置白格，黑白格比例为1:1,可以在实际中将0.5改为其他值，来模拟不同黑白格比例&lt;br /&gt;
      set pcolor white&lt;br /&gt;
    ]&lt;br /&gt;
    set living 0&lt;br /&gt;
  ]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
to go&lt;br /&gt;
  ask patches[&lt;br /&gt;
    set living count neighbors with [pcolor = black]&lt;br /&gt;
  ]&lt;br /&gt;
  ask patches[&lt;br /&gt;
    ifelse pcolor =  black[&lt;br /&gt;
      if living &amp;gt; 3 or living &amp;lt; 2[&lt;br /&gt;
        set pcolor white&lt;br /&gt;
      ]&lt;br /&gt;
    ][&lt;br /&gt;
      if living = 3[&lt;br /&gt;
        set pcolor black&lt;br /&gt;
      ]&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
  tick&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
运行效果如下所示：&lt;br /&gt;
[[File:code1.png|400px|thumb|setup运行初始状态|center]]&lt;br /&gt;
====go部分====&lt;br /&gt;
go按钮在创建之时就设定了持续执行，因此程序会一直进行下去。在每一轮中，程序都会遍历每个格，来判断每个格周围的存活数量。如果黑格周围存活数不等于3，其将死亡，表现为由黑格转为白格。若一个白格周围存活数正好是3，会变为黑色，即为存活状态。在棋盘上所有格子均判断完一轮后，由于设定了持续执行，程序会再次进行遍历，不断循环下去。随着迭代次数的增加，整个环境也会趋于较稳定状态。go部分的核心代码如下：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
  ask patches[&lt;br /&gt;
    ifelse pcolor =  black[&lt;br /&gt;
      if living &amp;gt; 3 or living &amp;lt; 2[&lt;br /&gt;
        set pcolor white&lt;br /&gt;
      ]&lt;br /&gt;
    ][&lt;br /&gt;
      if living = 3[&lt;br /&gt;
        set pcolor black&lt;br /&gt;
      ]&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
运行结果：&lt;br /&gt;
[[File:lgss.gif|400px|thumb|运行过程|center]]&lt;br /&gt;
===Python代码实现===&lt;br /&gt;
以下代码在安装相应的库后复制粘贴便可运行。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
class GameOfLife(object):&lt;br /&gt;
  def __init__(self, cells_shape):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Parameters&lt;br /&gt;
    ----------&lt;br /&gt;
    cells_shape : 一个元组，表示画布的大小。&lt;br /&gt;
    Examples&lt;br /&gt;
    --------&lt;br /&gt;
    建立一个高20，宽30的画布&lt;br /&gt;
    game = GameOfLife((20, 30))    &lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # 矩阵的四周不参与运算&lt;br /&gt;
    self.cells = np.zeros(cells_shape)&lt;br /&gt;
    real_width = cells_shape[0] - 2&lt;br /&gt;
    real_height = cells_shape[1] - 2   &lt;br /&gt;
    self.cells[1:-1, 1:-1] = np.random.randint(2, size=(real_width, real_height))&lt;br /&gt;
    self.timer = 0&lt;br /&gt;
    self.mask = np.ones(9)&lt;br /&gt;
    self.mask[4] = 0  &lt;br /&gt;
  def update_state(self):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;更新一次状态&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    buf = np.zeros(self.cells.shape)&lt;br /&gt;
    cells = self.cells&lt;br /&gt;
    for i in range(1, cells.shape[0] - 1):&lt;br /&gt;
      for j in range(1, cells.shape[0] - 1):&lt;br /&gt;
        # 计算该细胞周围的存活细胞数&lt;br /&gt;
        neighbor = cells[i-1:i+2, j-1:j+2].reshape((-1, ))&lt;br /&gt;
        neighbor_num = np.convolve(self.mask, neighbor, 'valid')[0]&lt;br /&gt;
        if neighbor_num == 3:&lt;br /&gt;
          buf[i, j] = 1&lt;br /&gt;
        elif neighbor_num == 2:&lt;br /&gt;
          buf[i, j] = cells[i, j]&lt;br /&gt;
        else:&lt;br /&gt;
          buf[i, j] = 0&lt;br /&gt;
    self.cells = buf&lt;br /&gt;
    self.timer += 1  &lt;br /&gt;
  def plot_state(self):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;画出当前的状态&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    plt.title('Iter :{}'.format(self.timer))&lt;br /&gt;
    plt.imshow(self.cells)&lt;br /&gt;
    plt.show()&lt;br /&gt;
  def update_and_plot(self, n_iter):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;更新状态并画图&lt;br /&gt;
    Parameters&lt;br /&gt;
    ----------&lt;br /&gt;
    n_iter : 更新的轮数&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    plt.ion()&lt;br /&gt;
    for _ in range(n_iter):&lt;br /&gt;
      plt.title('Iter :{}'.format(self.timer))&lt;br /&gt;
      plt.imshow(self.cells)&lt;br /&gt;
      self.update_state()&lt;br /&gt;
      plt.pause(0.2)&lt;br /&gt;
    plt.ioff()&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  game = GameOfLife(cells_shape=(60, 60))&lt;br /&gt;
  game.update_and_plot(200)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
运行效果：&lt;br /&gt;
[[File:lgpy.gif|thumb|400px|Python运行结果|center]]&lt;br /&gt;
'''总结'''：相比较Netlogo与Python实现，可以看出，python实现首先需要构建运行环境，再实现功能，最终实现的功能也并没有NetLogo丰富，建议从NetLogo实现开始。&lt;br /&gt;
&lt;br /&gt;
===Javascript代码实现的模拟程序===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/java_cellular/game_of_life.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 550px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==音乐==&lt;br /&gt;
各种音乐创作技术都会使用康威的生命游戏。&amp;lt;ref&amp;gt; Burraston, Dave; Edmonds, Ernest; Livingstone, Dan; Miranda, Eduardo Reck (2004). &amp;quot;CellularAutomata in MIDI based Computer usic&amp;quot; [http://quod.lib.umich.edu/i/icmc/bbp2372.2004.047?view=image]. Proceedings of the 2004 International Computer Music Conference.CiteSeerX 10.1.1.6.3882 httpps://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.3882].hdl:10453/1425 [https://hdl.handle.net/10453%2F1425].&amp;lt;/ref&amp;gt;特别是在 [https://en.wikipedia.org/wiki/MIDI MIDI]旋律中，有各种各样的程序可以从生命游戏中产生的模式中发出声音。&amp;lt;ref&amp;gt; &amp;quot;glitchDS – Cellular Automaton Sequencer For The Nintendo DS&amp;quot; [http://www.synthtopia.com/content/2008/05/29/glitchds-cellular-automaton-sequencer-for-the-nintendo-ds/].Synthtopia.com. 2008-05-29. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt; &amp;quot;Game Of Life Music Sequencer&amp;quot; [http://www.synthtopia.com/content/2009/04/29/game-of-life-music-sequencer/]. Synthtopia.com. 2009-04-29. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;&amp;quot;Game Of Life Music Sequencer For iOS, Runxt Life&amp;quot; [http://www.synthtopia.com/content/2011/01/12/game-of-life-music-sequencer-for-ios-runxt-life/]. Synthtopia.com. 2011-01-12. Retrieved 2012-06-24.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 游戏试玩 ==&lt;br /&gt;
下面是康威生命游戏的玩法演示。您可以选择不同的初始模式，点击开始按钮▷来观察元胞的演化过程，点击'更新为初始状态'按钮来重置游戏，选择Empty模式可以自定义游戏的初始状态。&lt;br /&gt;
此游戏的源代码来自github：https://github.com/rowett/lifeviewer&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/lifeviewer/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 980px; height: 730px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Aliquot_sequence|Aliquot sequence 真因子数列]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Artificial_life 人工生命]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Glory_Season Glory Season 荣耀之季]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Langton%27s_ant 朗顿蚂蚁]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Poietic_Generator 电子发生器]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system 反应扩散系统]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
&lt;br /&gt;
====[https://pattern.swarma.org/path?id=11 人工生命入门路径]====&lt;br /&gt;
[[File:706dc47a9fa44219bbc25f3d4332d23f.png|600px|right|thumb|[https://campus.swarma.org/course/594 探索元胞自动机]]]&lt;br /&gt;
该文章整理自Lana Sinapayen为人工智能研究者们提供的一份人工生命入门指南，主要介绍了人工生命的研究目标、简史以及与人工智能之间的关系。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://conwaylife.com/ 生命游戏]====&lt;br /&gt;
该网站是一个在线的生命游戏网站，可实际体验生命游戏过程。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===相关课程===&lt;br /&gt;
[[File:swarma2-1551174608.gif|400px|right|thumb|[https://swarma.org/?p=14794 算法描绘的“人造生命”，运动流畅自然，如同显微镜下的实景]]]&lt;br /&gt;
====[https://campus.swarma.org/course/1098 用“生命游戏”认识Patch]====&lt;br /&gt;
该课程利用NetLogo搭建出“生命游戏”这个虚拟宇宙。并在该过程中了解NetLogo中的Patch（即方格）对象，以及if，ifelse，随机数发生器random-float等最基本的语法。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/594 课程视频：探索元胞自动机]====&lt;br /&gt;
该课程可以帮助初学者将更加深入地探索元胞自动机的其它方面，并进行有趣的现实创造，比如元胞自动机创造的音乐。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/593 课程视频：认识元胞自动机]====&lt;br /&gt;
该课程带领初学者将进入到元胞自动机的学习中，并运用Netlogo完成计算机模拟。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
===集智相关文章===&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=14794 算法描绘的“人造生命”，运动流畅自然，如同显微镜下的实景]====&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:11795|11795]]用户参与编译，[[用户:Ilseyao1980|Ilseyao1980]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:模拟程序]]&lt;br /&gt;
[[category:元胞自动机]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45315</id>
		<title>迭代函数系统</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%BF%AD%E4%BB%A3%E5%87%BD%E6%95%B0%E7%B3%BB%E7%BB%9F&amp;diff=45315"/>
		<updated>2025-06-30T07:57:43Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=分形,IFS,有限收缩映射集&lt;br /&gt;
|description=是一种构造分形几何的方法&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Sierpinski_triangle.png|thumb|right|250px|使用IFS创建的Sierpinski三角形（用颜色来说明自相似结构）。]]&lt;br /&gt;
[[File:Chris Ursitti fractal 0000.png|thumb|right|200px| 彩色 IFS 使用Apophysis 软件设计，使用Electric Sheep渲染。]]&lt;br /&gt;
在数学中，'''迭代函数系统 iterated function systems（IFS）'''是一种构造[[分形几何 Fractal]]的方法；产生的分形通常是自相似的。IFS分形与集合论的关系比分形几何更大。&amp;lt;ref name=&amp;quot;picg&amp;quot;&amp;gt;{{cite book |title=Progress in Computer Graphics: Volume 1 |last=Zobrist |first= George Winston |author2=Chaman Sabharwal |year=1992 |publisher=Intellect Books |isbn=9780893916510 |page=135 |url=https://play.google.com/store/books/details?id=Ai6Qo0qoE9EC |accessdate=7 May 2017}}&amp;lt;/ref&amp;gt;它们于1981年被提出。&lt;br /&gt;
&lt;br /&gt;
IFS分形，正如他们被通常称呼一样，可以是任何维度的，但通常在2维空间计算和绘制。分形是由其本身的几个副本的结合体组成，每个副本都由一个函数变换而成（因此称为 &amp;quot;函数系统&amp;quot;）。典型的例子是[[谢尔宾斯基三角形]] Sierpiński triangle。这些函数通常是收缩的，这意味着它们使点更接近，使形状更小。因此，IFS分形的形状是由若干个可能重叠的较小副本组成的，每个副本也是由自己的副本组成的，无穷无尽[[ad infinitum]]。这就是其自相似分形性质的来源。&lt;br /&gt;
&lt;br /&gt;
这是自相似分形的模拟程序：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/java_ifs/ifs_fractal_generator.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 850px; height: 850px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==定义==&lt;br /&gt;
从形式上看，迭代函数系统是一个完整的度量空间上的有限收缩映射集。&amp;lt;ref&amp;gt;Michael Barnsley (1988). ''Fractals Everywhere'', p.82. Academic Press, Inc{{cite book |isbn=9780120790623}}&amp;lt;/ref&amp;gt;符号表示为，&lt;br /&gt;
:&amp;lt;math&amp;gt;\{f_i:X\to X\mid i=1,2,\dots,N\},\ N\in\mathbb{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
如果每个&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都是完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;上的收缩，则是一个迭代函数系统。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==性质==&lt;br /&gt;
[[File:Chaosgame.gif|thumb|right|250px|通过[[chaos game]] (动画) 构建的一个IFS]]&lt;br /&gt;
[[File:Ifs-construction.png|thumb|IFS由两个函数构建。]]&lt;br /&gt;
&lt;br /&gt;
约翰·哈钦森 Hutchinson(1981)表明，对于度量空间&amp;lt;math&amp;gt;&amp;lt;mathbb{R}^n&amp;lt;/math&amp;gt;，或者更一般地说，对于一个完整的度量空间&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;，这样的函数系统有一个唯一的非空紧凑(闭合且有界)的固定集S。构造固定集的一种方法是，从初始的非空的闭且有界集合S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;开始，迭代f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;的作用，取S&amp;lt;sub&amp;gt;n+1&amp;lt;/sub&amp;gt;为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;在f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;下的图像的联合；然后取S为S&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;的联合的闭合。用符号可以表示为，唯一的固定(非空紧凑)集合&amp;lt;math&amp;gt;S&amp;lt;subseteq X&amp;lt;/math&amp;gt;具有如下性质:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S = \overline{\bigcup_{i=1}^N f_i(S)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
集合''S''因此是[[Hutchinson算子]]的固定集。&amp;lt;math&amp;gt;F: 2^X/to 2^X&amp;lt;/math&amp;gt;定义为&amp;lt;math&amp;gt;A/subseteq X&amp;lt;/math&amp;gt;，通过&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(A)=\overline{\bigcup_{i=1}^N f_i(A)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''S''的存在性和唯一性是压缩映像原理的结果，就如&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\lim_{n\to\infty}F^{\circ n}(A)=S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
对于&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;中的任何非空紧集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;。(对于收缩型IFS，即使对于任何非空的闭合有界集&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;，也会发生这种收敛。)。任意接近''S''的随机元素可以通过下面描述的 &amp;quot;chaos game &amp;quot;获得。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最近，人们证明了非收缩型的IFS(即由相对于''X''中的任何拓扑等价度量不收缩的映射组成)可以产生吸引子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些都是在投影空间中自然产生的，尽管经典的圆上的无理旋转也可以适应。&amp;lt;ref&amp;gt;M. Barnsley, A. Vince, The Chaos Game on a General Iterated Function System&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
函数的集合&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;能产生是运算下的独异点。如果只有两个这样的函数，那么这个单体可以可视化为一棵二叉树，在树的每一个节点上，我们可以用一个或另一个函数进行合成（''即''取左支或右支）。一般来说，如果有''k个''函数，那么可以将单子可视化为一个完整的[[k-ary树|''k-''ary树]]，也称为[[Cayley tree]]。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==构建==&lt;br /&gt;
[[File:Fractal_fern_explained.png|thumb|upright|[[Barnsley's fern]]，一个早期的 IFS]]&lt;br /&gt;
[[File:Menger sponge (IFS).jpg|thumb|200px|[[Menger sponge]]，一个3维的 IFS.]]&lt;br /&gt;
[[File:Coupe d'arbre.png|thumb|IFS &amp;quot;tree&amp;quot; constructed with non-linear function Julia|链接=Special:FilePath/Coupe_d'arbre.png]]&lt;br /&gt;
[[File:HERBO_avecTige.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;140&amp;quot;&amp;gt;&lt;br /&gt;
File:Golden_Square_fractal_6.png|[[Golden ratio|Golden square]] 分形&lt;br /&gt;
File:Half_square_fractal_5.svg.png| 半分形&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有时，每个函数&amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;都必须是线性变换，或者更一般的仿射变换，因此用矩阵表示。然而，IFS也可以由非线性函数建立，包括[[projective transformation]]和[[Möbius transformation]]。[[Fractal flame]]是一个非线性函数的IFS的例子。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
计算IFS分形最常用的算法叫做“混沌游戏 chaos game”。它包括在平面上随机选取一个点，然后反复应用从函数系统中随机选取的一个函数来变换该点，去得到下一个点。另一种算法是生成每一个可能的函数序列，直到给定的最大长度，然后将这些函数序列中的每一个应用于初始点或形状的结果绘制出来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这些算法中的每一种都提供了一个全局结构，生成分布在整个分形上的点。如果正在绘制分形的一小块区域，这些点中的许多将落在屏幕边界之外。这使得放大以这种方式绘制的IFS结构不切实际。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
虽然IFS的理论要求每个功能都是收缩的，但实际上实现IFS的软件只要求整个系统平均是收缩的。&amp;lt;ref&amp;gt;{{cite web |last=Draves |first=Scott |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==分割迭代函数系统==&lt;br /&gt;
分割迭代函数系统 partitioned iterated function systems（PIFS），也叫局部迭代函数系统，&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt; 给出了令人惊讶的良好的图像压缩效果，即使是对于那些看起来不具有简单的IFS分形所显示的自相似结构的照片。&amp;lt;ref name=&amp;quot;SIGGRAPH'92&amp;quot;&amp;gt;{{cite conference|url= https://karczmarczuk.users.greyc.fr/matrs/Dess/RADI/Refs/fractal_paper.pdf|last= Fischer|first= Yuval|title= SIGGRAPH'92 course notes - Fractal Image Compression|conference= SIGGRAPH|conference-url= http://www.siggraph.org/|editor= Przemyslaw Prusinkiewicz|publisher= [[ACM SIGGRAPH]]|volume= Fractals - From Folk Art to Hyperreality|date= 1992-08-12}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==逆问题==&lt;br /&gt;
有非常快速的算法可以从一组IFS或PIFS参数生成图像。与存储和传输图像中每个像素的颜色相比，存储描述如何创建图像、将该描述传输到目标设备并在目标设备上重新生成图像的速度更快，所需的存储空间也更小。&amp;lt;ref name=&amp;quot;lacroix&amp;quot;&amp;gt;Bruno Lacroix. [http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/ftp01/MQ36939.pdf &amp;quot;Fractal Image Compression&amp;quot;]. 1998.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
逆问题比较困难：给定一些原始的任意数字图像，如一张数字照片，试图找到一组IFS参数，通过迭代评估后，产生另一幅与原始图像视觉上相似的图像。在1989年，Arnaud Jacquin 提出了一个只用 PIFS 的限制形式的反问题的解，反问题的一般形式仍未解决。&amp;lt;ref&amp;gt;Dietmar Saupe, Raouf Hamzaoui.[https://www.uni-konstanz.de/mmsp/pubsys/publishedFiles/SaHa94.pdf &amp;quot;A Review of the Fractal Image Compression Literature&amp;quot;].&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;kominek&amp;quot;&amp;gt;John Kominek.&lt;br /&gt;
[https://pdfs.semanticscholar.org/d77b/ffac2560c92771d3756c0e29863a44919d6f.pdf &amp;quot;Algorithm for Fast Fractal Image Compression&amp;quot;]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;lacroix&amp;quot;/&amp;gt;并由迈克尔·巴恩斯利的著作《分形无处不在》而流行开来。1992年，斯科特·德拉维斯发明了分形火焰算法。截至1995年，所有分形压缩软件都是基于Jacquin的方法。&amp;lt;ref name=&amp;quot;kominek&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==范例==&lt;br /&gt;
&lt;br /&gt;
该图显示了两个仿射函数在IFS上的构造。这两个函数用它们对双单位正方形的影响来表示（函数将轮廓正方形转化为阴影正方形）。两个函数的组合形成[[Hutchinson算子]]。图中显示了该算子的三次迭代，然后是定点的最终图像，即最终的分形。&lt;br /&gt;
&lt;br /&gt;
IFS可以生成分形的早期例子包括[[Cantor set]]，最早描述于1884年；[[de Rham curve]]，[[Georges de Rham]]在1957年描述的一种自相似曲线。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==进一步阅读==&lt;br /&gt;
{{Portal|Mathematics}}&lt;br /&gt;
*[[Complex-base system#Base .E2.88.921.C2.B1i|Complex-base system]]&lt;br /&gt;
*[[Collage theorem]]&lt;br /&gt;
*[[Infinite compositions of analytic functions]]&lt;br /&gt;
*[[L-system]]&lt;br /&gt;
*[[Fractal compression]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==相关链接==&lt;br /&gt;
*{{cite web |last=Draves |first=Scott |author-link=Scott Draves |author2=Erik Reckase |date=July 2007 |url=http://flam3.com/flame.pdf |title=The Fractal Flame Algorithm |format=pdf |accessdate=2008-07-17 |archive-url=https://web.archive.org/web/20080509073421/http://flam3.com/flame.pdf |archive-date=2008-05-09 |url-status=dead }}&lt;br /&gt;
*{{cite book |last=Falconer |first=Kenneth |author-link=Kenneth Falconer (mathematician) |title=Fractal geometry: Mathematical foundations and applications |url=https://archive.org/details/fractalgeometrym0000falc/page/113 |url-access=registration |publisher=John Wiley and Sons |year=1990 |isbn=0-471-92287-0 |pages=[https://archive.org/details/fractalgeometrym0000falc/page/113 113–117, 136] }}&lt;br /&gt;
*{{cite journal |last=Barnsley |first=Michael |author-link=Michael Barnsley |author2=Andrew Vince |arxiv=1005.0322 |title=The Chaos Game on a General Iterated Function System |journal=Ergodic Theory Dynam. Systems |volume=31 |year=2011 |issue=4 |pages=1073–1079|bibcode=2010arXiv1005.0322B }}&lt;br /&gt;
*'''For an historical overview, and the generalization :''' {{cite journal |first=Claire|last=David  |  title=fractal properties of Weierstrass-type functions |journal=Proceedings of the International Geometry Center |volume=12 |year=2019 |issue=2 |pages=43–61|url=https://journals.onaft.edu.ua/index.php/geometry/article/view/1485 }}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==编辑推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
====[http://rrd.me/gfyYz  分形对象：形、机遇和维数  Fractals:From,Chance,and Dimension]====&lt;br /&gt;
本书考察和研究出现在自然界中的若干典型分形对象，为我们提供了一个关于分形的内容，意义及方法的扼要介绍。尽管自该书第一版（法文版）问世以来，分形的理论及其应用发展极为迅速，并出现了大量的有关著作，但此书仍不失为分形理论最好的入门书之一&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfzjk  大自然的分形几何 The Fractal Geometry of Nature ]====&lt;br /&gt;
这本书介绍了自然界中各种各样的分形理论，从海岸线、雪花，到河流、星系等自然现象，去阐述分形这一概念。作为多个学科的交叉，分形几何对以往欧氏几何不屑一顾（或说无能为力）的“病态”曲线（如科赫雪花曲线等）的全新解释，是人类认识客观世界不断开拓的必然结果。这说明欧氏几何只是对客观世界的近似反映，而分形几何则深化了这种认识，因此分形几何学是描述各种复杂自然曲线的大自然的几何学。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[http://rrd.me/gfz56   市场的（错误）行为：风险、破产与收益的分形观点The Misbehavior of Markets: A Fractal View of Financial Turbulence]====&lt;br /&gt;
《市场的（错误）行为》以分形视角观察金融市场的行为，推翻了作为当代金融分析基础的“随机游走”理论。通过分形模型，市场表现被重新阐释。本书是现代金融理论标准工具和模型的一次革命性重估，书中的观点颠覆了成千上万投资者的既有观念。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===网站资源===&lt;br /&gt;
====[http://www.fxysw.com/forum-12-1.html  分形艺术网]====&lt;br /&gt;
[[File:003522d0gu40lukr822vwu.jpg|400px|right|thumb|分形艺术网作品]]&lt;br /&gt;
分形艺术网是一个展示分形艺术之美，学习交流分形艺术创作的平台，其中包含了很多分形艺术作品及分形资源推荐。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===视频资源===&lt;br /&gt;
====[http://www.ted.com/talks/benoit_mandelbrot_fractals_the_art_of_roughness.html  TED分享视频：伯努·瓦曼德布洛特: 分形和粗糙的艺术 Benoit Mandelbrot: Fractals and the Art of Roughness ]====&lt;br /&gt;
Benoit Mandelbrot的研究使世界对分形有了更深刻的理解，分形是研究粗糙的广泛而有力的工具，在自然界和人类的作品中都是如此。该视频概述了分形的研究，以及它们为许多领域带来的颠覆性见解。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://www.bilibili.com/video/av13766486/?p=2  寻找隐藏的维 Hunting the Hidden Dimension]====&lt;br /&gt;
什么是电影特效，股票市场，和心脏病的共同点？它们连接了一个革命性的新的数学分支，改变了我们看世界，开辟了广阔的新领域，以科学的分析和理解。数学家们开发不规则碎片形是从单纯的好奇心到接触几乎每一个分科的理解，包括我们宇宙的命运。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===课程推荐===&lt;br /&gt;
[[File:分形课程.png|400px|thumb|upright=3|[https://campus.swarma.org/play/coursedetail?id=10419  系统科学简史与现代复杂系统科学,本课程主要探讨了现代复杂系统科学的研究主题，同时也介绍了系统科学的历史，生命游戏与分形结构等知识点]|right]]&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10621  分形与奇异吸引子的几何学]====&lt;br /&gt;
本课程对非线性动力学和混沌进行了详细的讲解，强调分析方法、具体实例和几何直觉。主讲人为Steven Strogatz。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/play/coursedetail?id=10698  分形的世界]====&lt;br /&gt;
在此堂课程，主要介绍了关于分形的思想与脉络，分形现象、分形维数、利用分形规律的计算方法以及混沌。主讲人为北京师范大学系统学院狄增如教授。狄增如教授主要从事复杂网络和经济（金融）物理学等方面的研究，是国内最早从事经济物理学研究的学者之一。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===集智百科文章===&lt;br /&gt;
*[https://mp.weixin.qq.com/s/XpdpBfeMgN43HC7BXAbdIQ  与树共舞：分形舞蹈可视化]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/WIoTavOE1c98USA1cGoPmw?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552553&amp;amp;enterid=1584552553  城市为何遵循规模法则？分形几何揭开幂律成因]&lt;br /&gt;
*[https://mp.weixin.qq.com/s/AGt-C281sPBa25fXAWhoJA?from=singlemessage&amp;amp;scene=1&amp;amp;subscene=10000&amp;amp;clicktime=1584552710&amp;amp;enterid=1584552710  混沌、分形理论及其在信息科学中的应用 | IWCFTA2018]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:Eatcosmos2|Eatcosmos2]]编译，[[用户:Inch|Inch]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[分类:Iterated function system fractals 迭代函数系统分形]]&lt;br /&gt;
[[分类:1981 introductions]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%BF%9B%E5%8C%96%E7%9A%84%E4%BA%BA%E5%B7%A5%E7%94%9F%E5%91%BD&amp;diff=45314</id>
		<title>进化的人工生命</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%BF%9B%E5%8C%96%E7%9A%84%E4%BA%BA%E5%B7%A5%E7%94%9F%E5%91%BD&amp;diff=45314"/>
		<updated>2025-06-30T07:46:12Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;名 称：进化的人工生命&lt;br /&gt;
&lt;br /&gt;
作 者：&lt;br /&gt;
&lt;br /&gt;
源代码：[[Media:efloy.zip|efloy.zip]]&lt;br /&gt;
&lt;br /&gt;
本程序是根据 efloy 模拟模型的java程序制作，并进行了汉化和web实现。&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/efloy/efloys_simulator.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1200px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
上面的程序是在基本的Floy程序的基础上加入了进化机制的版本：首先点击Scramble按钮这样可以使得我们当前的种群多样化，你会看到每只Floy都有了不一样的颜色，并且它们的行为特征都不尽相同。然后点击Start Evolution按钮进化就开始了。注意，一只入侵者飞了进来，只有当入侵者被击毙的时候才开始下一代，这样一代一代的重复下去。你所要的就是静静的观察与等待，也许一些意想不到的事情就在你眼前发生了。&lt;br /&gt;
&lt;br /&gt;
点击Show Rules和Show Help按钮你会看到这个程序的使用说明。在这里有必要对每只苍蝇的简单规则再次重复一遍。每只苍蝇只有两条规则，它们分别是：&lt;br /&gt;
&lt;br /&gt;
*与同类交互的规则：&lt;br /&gt;
**找到你周围的同类尽量去靠近它们，但也不能靠的太近；&lt;br /&gt;
*与异类的规则：&lt;br /&gt;
**如果在自己的疆土上则发现了一只入侵者就尾随它并在适当的时机进攻；&lt;br /&gt;
**如果不在自己的疆土上则如果有本地的居民追逐你就赶快逃跑。&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
每一代中的每只Floy都不太一样，它们都有自己的个性，而这些个性都体现在它们的行为上，也就是它们的最大速度、反弹速度、加速度、中心的吸引力、碰撞距离等等属性的不同，如果我们将这些特性编码就能得到每只Floy的染色体，然后再对整个一代的Floy中进行适应度的排序，挑选出适应度比较高的Floy作为父母进行繁殖也就是让它们的染色体进行交叉来得到下一代，这就完成了一次自然选择，也就是一代的进化。下面我们有必要对适应度进行说明，适应度是能量值和安全度的加权平均值。打击入侵者和增加移动速度会增加能量值；而与自己同类尽量保持靠近会增加安全度。&lt;br /&gt;
&lt;br /&gt;
在这个程序中，进化是在三个不同层次中进行的，最低的一层是在我们称为基因型的层次进行。基因型就是一个字符串的染色体，物种的基因都编码在染色体之中了。并且每一个染色体字符串的位都表示Floy的一个特征。这些编码在我们解码之前没有任何意义。&lt;br /&gt;
&lt;br /&gt;
中间的一层被称为表现型，在这个层次中Floy的染色体被直接解码形成了这个Floy的行为特征。举例来说，在Floy染色体的一个位上定义了它的加速度的值，我们在屏幕上看到的这个Floy移动的快慢就是受这个基因影响的。&lt;br /&gt;
&lt;br /&gt;
第三个层次是个体的适应度。个体的适应度是依赖于它的基因的，但这种依赖关系不是简单直接的，事实上染色体并没有适应度的基因。当个体的能量值和安全度都很大的时候它的适应度才会大，而这导致了一个矛盾。因为如果一个Floy要想获得更大的能量值它就必须在它的兄弟们进攻入侵者之前就先行动进攻，但是这样做它就会远离自己的同类从而降低它的安全度。&lt;br /&gt;
&lt;br /&gt;
因此我们会得到下面的这样一个链条：自然选择是对适应度进行的，而适应度是依赖于表现型的，而表现型则是被基因型决定的，而遗传的操作（变异、交叉）是在基因型上操作的。因此整个进化的过程就是这样一层一层涌现出来的。&lt;br /&gt;
&lt;br /&gt;
=一次观察记录=&lt;br /&gt;
&lt;br /&gt;
开始一个新代，每个个体都有自己的个性，它们都有不同的颜色，而且行为也都不太一样，当入侵者飞进来的时候有的主动进攻，有的逃之夭夭。进化开始了，过程还不算慢。等了十几分钟后，一些个体已经逐渐被淘汰了，最后只剩下了灰色和绿色的两种个体。其中灰色个体的特征是主动进攻型，而绿色的个体是喜欢团队合作集体进攻的类型。经过慢慢的进化，绿色的Floy越来越多，灰色的越来越少最后只剩下一只了，但是它会采取主动的有效进攻。突然，绿色的Floy居然会使用诡计了，它们一大堆抱成一团缓慢的移动，但是它们跟随着那只灰色Floy，并且只有当灰色的Floy进攻的时候它们才一起进攻，否则不会单独行动，这样它们可以使自己的安全度和能量值同时提高。最后，灰色的Floy被淘汰掉了，仅仅剩下了那一大群绿色的。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45313</id>
		<title>Floy模拟模型</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=Floy%E6%A8%A1%E6%8B%9F%E6%A8%A1%E5%9E%8B&amp;diff=45313"/>
		<updated>2025-06-30T07:40:39Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命, floy&lt;br /&gt;
|description=人工生命, floy&lt;br /&gt;
}}&lt;br /&gt;
==人工生命Floy模拟程序==&lt;br /&gt;
本程序是根据Floy模拟模型的java程序制作，并进行了汉化和web实现。&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/floys_life_simulation/index.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 750px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Floy模拟模型==&lt;br /&gt;
*名 称：人工生命&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[File:Floy.zip|链接=https://wiki.swarma.org/index.php/Special:FilePath/Floy.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
生命是什么？我们能不能造出生命来？看看上面的程序。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
你看到了什么？一群苍蝇在飞舞？这是简简单单的动画么？这些家伙是“活”的么？我可以告诉你，这群飞舞的动物叫Floy，它既不是苍蝇也不是蝌蚪，而是人工生命！这就是一段简简单单的程序，而且代码的长度才有200多行！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
单击Properties按钮，你可以改变这群Floy的属性，首先我们为了从简单开始把Floy的个数更改为1个看看，点击OK返回以后再按一下Continue按钮，一只Floy在围绕着中心转，也许你会说，这没什么，不就是一个运动的点么？如果更改Floy的个数为2个，那么这两只Floy就会互相追逐着在屏幕上飞行，注意两只Floy的行为就会产生混沌模式了，也就是它们的运动方式几乎是完全不确定的。逐渐增加到15只以上你就会看到一大群生物在那里乱飞了，这很像我们现实世界中的苍蝇行为。点击Strangers按钮，你会看到一只红色的Floy从屏幕的左上角飞进来，注意，它的到来可不寻常，它是一个外来的入侵者！本来相安无事的绿色Floy因为它的到来而变得行为异常起来，它们会突然转过头来进攻红色的入侵者，而红色的Floy会赶忙逃跑。继续点击Strangers按钮，就会有不断的入侵者加入进来，同时原有的Floy群体在减少。你会看到有两群苍蝇在那里追逐。绿色的Floy是本地居民，它会进攻入侵者最后将它杀死。如果幸运，你甚至会看到绿色的Floy们会使用诡计，它们先若无其事的在一起飞即使身边就有一只红色的入侵者，但是突然之间，它会转过头来进攻红色的，让它来不及逃跑。点击Default按钮可以恢复原状。&lt;br /&gt;
&lt;br /&gt;
===模型的规则===&lt;br /&gt;
为什么这一群小点在这么简单的程序之下会有这样复杂的行为？它们是怎么实现的？注意，虽然这也是编程，但我们并不是按照传统的方法对所有Floy的集体行为在每一种可能的情况都编程，而是给每一个个体Floy制定简单的规则，这样Floy集体的复杂行为就会自然而然的涌现出来了！那么个体Floy的规则是什么呢？它是遵循下面的规律：&lt;br /&gt;
&lt;br /&gt;
*首先找到和自己最近的几只（邻居数）的Floy作为自己的邻居；&lt;br /&gt;
*对于每个邻居如果它是自己的同类那么然后分别计算与这些邻居之间的距离；&lt;br /&gt;
**如果太近（距离小于碰撞距离）就朝向远离这个邻居的方向加速飞翔；&lt;br /&gt;
**如果较远（距离大于碰撞距离）就朝向靠近这个邻居的方向加速飞翔；&lt;br /&gt;
*如果邻居是自己的异类；&lt;br /&gt;
**如果这只Floy是绿色的则以非常快的加速度向对方进攻；&lt;br /&gt;
**如果这只Floy是红色的陌生者则当小于碰撞距离的时候以非常快的加速度逃离，并且自己的能量减小；当距离不是很大时，停止加速。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
总体来说，Floy的规则就是选择自己的加速度，并且这种选择仅仅跟自己的邻居有关，也就是说规则都是局部的。而这个程序的关键是要体现整体行为的涌现，也就是说虽然微观上每个Floy个体的规则都是简单的局部的，但是在集体涌现出来的现象却是复杂的并且是不可预测的。人工生命的精髓就是：其实生命现象本身不过是由微观的简单相互作用规律涌现出来的集体复杂行为。&lt;br /&gt;
&lt;br /&gt;
===模型的参数===&lt;br /&gt;
进一步，你可以探索更改参数对这群Floy的影响。你可以点击Behavior按钮，Floy的个性会改变，有温顺的也有疯狂的。它们的行为完全是由几个简单参数制约的，再次点击Properties按钮，那里面的参数制约了每个Floy个体的行为自然也就制约了Floy整体的涌现规律。其中各个参数的意义：加速度就是指每只苍蝇进行加速靠近或者远离的最小加速度值；中心吸引度是为了让Floy能够围绕屏幕中心旋转而让它们的加速度都有一个指向中心的分量；碰撞距离定义多少像素距离是叫做碰撞，从而Floy们选择远离还是靠近；最大速度是为了Floy们的行为不至于太疯狂也就是速度固定一个上限；反弹速度是当Floy撞击墙壁的时候反弹回来的速度；间隔时间是控制整个程序快慢的参数；初始速度是每只苍蝇在开始的初速度；自由重组邻居的概率：为了让Floy们的行为中有一定的随机不确定性，它们会以自由重组邻居的概率重新随机的选择自己的邻居（正常情况下是选择距离最小的若干Floy作为自己的邻居），如果这个概率指定为0那么Floy的行为就没那么有趣了；邻居数目定义了每只Floy可以有多少邻居。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
接下来我们能干什么？也许你觉得这个简单程序太没趣了，应该把它改为三维的动画。没问题，这个要求还算容易满足。你只要点击这里就能看到三维的Floy。但是因为Java本身的限制，动画不如用Maya之类的三维软件作的好看，但是这个程序却反映了规律的本质，有兴趣的朋友完全可以把这个动画用Maya作一遍，这样你可以给每个Floy赋予贴图裁质，那样也许更有趣。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
[[Category:待润色]]&lt;br /&gt;
&lt;br /&gt;
==三维的Floy鸟群模拟模型==&lt;br /&gt;
*名 称：3d的Floy&lt;br /&gt;
*作 者：Ariel  Dolan&lt;br /&gt;
*源代码：[[媒体文件:Floy3d.zip|Floy3d.zip]]&lt;br /&gt;
===程序说明===&lt;br /&gt;
如果二维的Floy还看得不够过瘾，那么请看三维Floy程序，这里，每个Floy遵循的规则和前面叙述的基本Floy的规则一样，其中每只Floy都有两个邻居。也许三维的Floy仍然不够有趣，我们能不能在想出点疯狂的？进化！首先让每只Floy都拥有自己的个性，然后让Floy能够进行有性繁殖，并且后代Floy能够继承父母的特性，没问题，请看能够进化的Floy。&lt;br /&gt;
&lt;br /&gt;
==相关wiki==&lt;br /&gt;
*[[人工生命]]&lt;br /&gt;
*[[生命游戏]]&lt;br /&gt;
*[[Boid模型]]&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
===书籍推荐===&lt;br /&gt;
[[File:复杂.jpg|200px|thumb|right|《复杂》封面|链接=https://wiki.swarma.org/index.php/%E6%96%87%E4%BB%B6:%E5%A4%8D%E6%9D%82.jpg]]&lt;br /&gt;
*[https://vdisk.weibo.com/s/BTLfj870SYIar 《复杂》 梅拉妮·米歇尔]&lt;br /&gt;
蚂蚁在组成群体时为何会表现出如此的精密性和具有目的性？数以亿计的神经元是如何产生出像意识这样极度复杂的事物？是什么在引导免疫系统、互联网、全球经济和人类基因组等自组织结构？这些都是复杂系统科学尝试回答的迷人而令人费解的问题的一部分。理解复杂系统需要有全新的方法，需要超过传统的科学还原论，并重新划定学科的疆域。借助于圣塔菲研究所的工作经历和交叉学科方法，复杂系统的前沿科学家米歇尔在《复杂》一书中，以清晰的思路介绍了复杂系统的研究，横跨生物、技术和社会学等领域，并探寻复杂系统的普遍规律。与此同时，她还探讨了复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系。&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*[https://zhuanlan.zhihu.com/p/97717680 超越简单规则——用图神经网络对复杂系统进行自动建模]&lt;br /&gt;
::近期，由北京师范大学张江团队发表的文章《A general deep learning framework for network reconstruction and dynamics learning》在期刊Applied Network Science上刊登，这篇文章提出了一种基于深度学习的数据驱动模型，可以从节点的时间演化数据中重构出网络结构，并且学习到系统的动力学。本文是第一作者张章对该文章内容的解读。&lt;br /&gt;
===课程推荐===&lt;br /&gt;
*[https://campus.swarma.org/course/1095 NetLogo多主体建模入门]&lt;br /&gt;
::本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型，以及如何利用NetLogo去实现。从生命游戏到人工鸟群，从模拟经济系统到病毒沿网络的传播，通过循序渐进的案例，该课程带你逐步走入NetLogo多主体建模的神奇世界。&lt;br /&gt;
*[https://campus.swarma.org/course/596 生物中的多主体模型]&lt;br /&gt;
::本课程将视线转移到生物学领域，展现计算机模拟在生物学中的应用。认识自然现象，我们可以从物理、数学、生物、天文、化学等众多角度去解读，那么怎样将众多的知识综合起来转化为可以用计算机模拟的语言哪？本节课将通过一个模型案例来帮助我们打开思路，更好的去描述和模拟生物现象。&lt;br /&gt;
----本中文词条由[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:Jake Jake]、[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E6%80%9D%E6%97%A0%E6%B6%AF%E5%92%BF%E5%91%80%E5%92%BF%E5%91%80 思无涯咿呀咿呀]用户参与编译，[https://wiki.swarma.org/index.php/%E7%94%A8%E6%88%B7:%E4%B9%90%E5%A4%9A%E5%A4%9A 乐多多]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E4%BA%BA%E5%B7%A5%E6%A8%A1%E6%8B%9F%E8%82%A1%E5%B8%82&amp;diff=45312</id>
		<title>人工模拟股市</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E4%BA%BA%E5%B7%A5%E6%A8%A1%E6%8B%9F%E8%82%A1%E5%B8%82&amp;diff=45312"/>
		<updated>2025-06-30T06:30:45Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工社会, 人工股市,遗传算法&lt;br /&gt;
|description=人工社会, 人工股市,遗传算法&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
# 程序名称：人工模拟股市&lt;br /&gt;
# 作者：Santa Fe Instutive(Swarm版)，[[jake]](java版)&lt;br /&gt;
# 源代码：[http://wiki.swarma.net/index.php/File:ASM_swarm.zip ASM_swarm.zip]  [http://wiki.swarma.net/index.php/File:asm_java.zip.zip asm_java.zip]&lt;br /&gt;
&lt;br /&gt;
[[File:14.gif|right|frame|人工模拟股市]]&lt;br /&gt;
&lt;br /&gt;
=程序简介=&lt;br /&gt;
&lt;br /&gt;
人工股市（Artificial Stock Market，简称ASM）是模拟股市运作的一个程序。在这个电脑中的虚拟市场中，若干被称为交易者的人工智能程序(Agent)通过观察它们所在的数字世界中股价和股息的不断变换而做出预测，并且根据这些预测做出购买股票与否以及购买股票数量的决策。反过来，所有的交易者的决策又决定了股票的价格，这样，整个的股票交易市场就构成了一个自我封闭的计算系统。同时，这些交易者都具有学习的能力，可以根据以前预测的成功或者失败对自己的决策进行调整，并且通过一种被称为遗传算法的方法产生创新能力。总之，ASM是一个电脑中不断进化的虚拟股票市场！通过研究ASM，我们可以更好的理解现实世界的行为，并且它提供了一个很好的现实股市的隐喻。&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
点击下排的'''开始'''按钮，则股市开始运作。首先，程序需要对每个Agent和整个世界进行初始化，然后才进入ASM的实际运行阶段，这个时候，你可以点击'''曲线图'''、'''柱状图'''等按钮察看世界运行的情况，得到价格、股息等信息的直观显示。当点击'''结束'''的时候，股市停止运行，这个时候你可以设置一些参数，再次点击'''开始'''可以在新的参数下运行程序。察看规则部分可以让你看到每个Agent的内部规则，并且可以看到它们与真实世界价格、股息、编码的对比情况。点击暂'''停按'''钮后，你还可以'''单步运行股市'''。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/asm_java/artificial_stock_market.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1200px; height: 1630px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=详细说明=&lt;br /&gt;
	&lt;br /&gt;
1.参数说明:&lt;br /&gt;
*遗传算法概率：每隔多长周期执行一次遗传算法。&lt;br /&gt;
*变异率：执行遗传算法的时候，变异操作的概率。&lt;br /&gt;
*交叉率：执行遗传算法的时候交叉操作的概率。&lt;br /&gt;
*Agent的数量：进行股票交易的交易者数量。&lt;br /&gt;
*规则的数量：每个Agent所拥有的预测规则的数量。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.图形说明:&lt;br /&gt;
&lt;br /&gt;
世界的状态显示的是有关整个股市的状况，包括股价、股息等等，风险中性价格即股息/利息的值。Agent的状况则显示了每个Agent的变量的变化趋势。曲线图画出了单一变量与时间的关系，柱状图主要显示了各个变量的Agent之间的对比情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.关于图形操作:&lt;br /&gt;
&lt;br /&gt;
曲线图，可以在一个坐标系下察看两种变量的情况。蓝色表示一个变量，红色表示另一个，可以从下面的选择框选择不同的变量。关于柱状图，可以变换不同的变量察看情况。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4.关于规则察看的操作:&lt;br /&gt;
&lt;br /&gt;
在上面列表中显示了当前的Agent拥有的所有的规则，选择最下方的Agent编号，可以察看不同的Agent的规则，选择中间的察看方式：全部规则还是激活规则则可以分别察看当前Agent的所有规则和被激活的规则。点击列表框中的一个规则，则在下面的文本框中显示了该规则的具体对应的条件部分的编码，和代表的预测意义。世界状态则表示了当前世界股票价格、股息等变量的二进制编码。下面显示的价格和股息都是当前股市的股价和股息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=关于本程序=&lt;br /&gt;
该程序是作者对SFI的ASM2.2版本运用java进行重写和改造。其中有不少对源程序的改动，可能会造成一些运行结果与源程序的不同，也可能存在着一些bug，所以我们提供了该java版本程序的下载以及Swarm源程序的下载&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
关于人工股市的具体原理请看下面的文章：&lt;br /&gt;
&lt;br /&gt;
=人工股市(ASM)介绍= &lt;br /&gt;
&lt;br /&gt;
张江&lt;br /&gt;
&lt;br /&gt;
==经济系统、股票交易系统中的复杂性==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
新古典主义经济学告诉我们，我们赖以生存的经济系统是由若干被称作“经济人”的个体组成的，这些“经济人”具有完全的理性、并且对整个市场的具有完全信息，因此经济学家证明了，市场最终将处于一种均衡的状态，在这种状态下需求量刚好等于供给量，并且在没有外部的干扰条件下，系统将静止不再演变。&lt;br /&gt;
&lt;br /&gt;
然而看看我们身处的经济系统，它并不是理论家们预言的那个样子。首先经济中的个体并不是全知全能且具有完全理性的，当然这些个体也不是完全随机相互作用的一群无规则运动的分子，他们更像是处于完全理性与随机性之间的一种状态。关键是，这些个体是具有学习功能的，他们并不是像一台计算的机器一样总是做出理性的判断和决策，而是通过经济活动的实践逐渐积累经验，通过与其周围有限环境内的其它经济个体的交互中，慢慢的适应，从而进行有限理性的行为。当环境发生变化的时候，他们往往可以调整自己的策略，从而使得自己能够尽量的谋得经济利益。由这样的适应性个体组织成的经济系统是一个复杂的系统，而且这个系统会因为每个个体的不断调整从而永不停息的变化着，似乎现实的经济系统从来不会平衡下来，而是象一个有机的生命体一样始终处于复杂的运动变化当中。&lt;br /&gt;
&lt;br /&gt;
复杂系统的方法[1]致力于用一种全新的观点理解经济系统中的复杂性。在微观上，首先，按照前面的叙述，人们扬弃了完全理性、全知全能的“经济人”的假设取而代之的是能够学习和适应环境的运用归纳法决策的有限理性人。其次，在微观上，人们用“规则”代替计算来给每一个个体进行建模；在宏观上，人们扬弃了简单的还原论思想—即认为研究清楚系统组分的行为就相当于认识了系统的行为思想，把经济系统就看成是由若干相互作用的个体进行复杂交互的复杂系统；在方法论上，人们扬弃了纯粹的数学推理的方法，取而代之的是计算机模拟技术。&lt;br /&gt;
&lt;br /&gt;
股市无非是若干复杂经济系统中的一个特例。传统的股市模型假设股票交易者根据全局的行情进行完全理性的判断，并利用理性的预期进行决策。在这种模型的假设前提下，股市更像一个“死”的物理系统。而现实的股市远不是如此，人们常常用诸如“股市持续低迷”、“狂涨”等等类似描述人类心理现象的语言描述股市，而且还常常出现类似“黑色星期五”这种有关股市心理的现象。由此可见，我们需要用复杂系统的理论来对其进行重新的理解，看看能够得到什么结果。“人工股市”[2](Artificial Stock Market简称ASM)是由圣塔菲研究所（Santa Fe Institute）的W.Brian Arthur和John Holland于1987年提出来的一个模拟股市运作的计算机系统，它用具有学习能力的AI（人工智能）程序代替全知全能的股票交易者，在电脑中重建一个模拟的股票交易环境，看看在这样的计算机世界中能不能得到与现实股市相近的数码股市的拷贝。&lt;br /&gt;
&lt;br /&gt;
在下面的讨论中，第2节概述了人工股市系统的运作机理，第3节详细介绍模型的内部结构，其中包括股市环境、相互作用的作用者模型、学习算法等等细节问题。第4节介绍系统的运行情况与仿真结果，看看这样一种有归纳的作用这形成的股市系统到底有什么神奇之处。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ASM系统模型概述==&lt;br /&gt;
&lt;br /&gt;
===系统结构===&lt;br /&gt;
&lt;br /&gt;
ASM系统主要分成两个大部分，一部分是股票交易者（我们称其为Agent，意为智能代理），另一部分是每个Agent所面临的环境。它主要模拟了单一股票的交易情况（也就是说市场上仅仅有一种股票发行）。&lt;br /&gt;
&lt;br /&gt;
其中Agent模型又是由预测规则、效用函数、财富状态以及参数集合四个部分组成的。预测规则是形如if [condition] then [result]这样的规则，其中[condition]部分都是经过编码后的01序列抽象信息，[result]是当agent采用当前规则所采取的动作。为了模拟现实中的交易者的多样性，每个Agent都有一组不同的规则，而且学习效应是在规则层次体现的。具体说来，就是Agent通过不断的运用规则对股票的价格进行预测从而进行买入或者卖出或者持有的决策，然后根据预测的后果来对他们运用的规则进行评价，从而确定每个规则作用的排序，然后运用一种称为“遗传算法”的方法模拟大自然的优胜劣汰，淘汰掉评价不好的规则，同时产生新的更好的规则。Agent的效用函数表达了每个Agent对股票价格以及股票持有量之间的偏好，给定当前的股票价格、该Agent对未来股价的预期就可以得到Agent对股票持有的需求量。为了设计简便，系统给每个Agent设计了同一类型的效用函数。Agent的财富状态主要包括当前该Agent的股票持有量和现金量。Agent的参数集合定义了Agent在运行过程中的不同行为参数，包括效用函数的具体参数、遗传算法的参数、最大（小）持有股票量等等。&lt;br /&gt;
&lt;br /&gt;
ASM的环境主要包括下列几个部分：股市的状态以及状态的历史信息、一个分析专家、一个随机股息流（可以认为单一股票的股息是由外部不确定信息确定的）、股市的参数集合。 具体说来，股市的状态包括了股票当前的价格、股息、利率、风险中性价格（也就是利率与股息的比值）、股票交易量。状态历史就是股市状态在最近几期内的历史纪录，其中历史的记录长度是事先由用户给定的，系统还会根据当前的股市状态以及状态的历史信息进行编码从而得到一串01编码传递给Agent，Agent根据这些编码可以查找哪条规则的condition部分与其匹配从而激活这条规则进行预测。分析专家的作用是根据市场供求关系确定股票的交易价格等作用。随机股息流就是一个满足正态的独立同分布的随机过程。参数集合定义了股市运作过程中的一些参数，包括历史纪录的长度、正态分布的具体参数等等。&lt;br /&gt;
&lt;br /&gt;
综合起来，我们可以得到下面的三个图分别来说明Agent的结构、股市环境的结构，以及Agent与股市的相互作用结构。&lt;br /&gt;
&lt;br /&gt;
[[File:图片.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===系统运行===&lt;br /&gt;
&lt;br /&gt;
系统的运行是在离散的时间基础上周期性的不断演化的。在每个周期内，Agent要完成决策、学习的运作，环境完成交易并保证股票市场的出清。Agent在进行决策时需要根据股市上的信息不断利用自己的规则对股票的价格进行预测，然后根据这个预测的结果与自己的偏好进行是应该抛出股票还是买进股票或者是持有当前的股票坐吃股息的决策。如果Agent抛出股票，这能够为他在短期内赚取一定量的现金，并且持有现金可以让他在每个周期内赚取现金的利息，但是同时他的股票减少了，因此它损失了股票的股息；如果Agent买进了股票，那么它的现金少了并损失了现金的利息，但同时它能够争取更多的股息；如果Agent不采取任何动作，虽然它能够坐吃股息和利息但是它同时要被征税，征税是根据Agent的总资产即股票价值与现金价值的总和决定的。因此从整体上，每个Agent必须对自己是否买进或者卖出股票做出决策，同时征税保证了每个Agent不能永远停止不动（否则它的财富会被征税征收光）。而因为股息是一个随机过程上下波动，所以每个Agent对股票的需求量和供给量就会随时间变化，通过需求与供给的相互竞争的结果决定了股票的当前价格，而股票的价格又反过来决定了每个Agent的财富拥有量。因此我们看到，我们得到了一个封闭的系统，在这个系统中Agent的决策决定了系统的环境状况，环境的状况同时又影响了每个生存在这个环境中的Agent拥有的财富。&lt;br /&gt;
&lt;br /&gt;
当系统多次循环以后，每个Agent便有机会对自己所采用过的规则进行评价。因为在每一种环境中，Agent都有机会选择很多与当前情况匹配的规则做出决策，而显然这些规则有些能够很好的预测了股票的价格，有些不能够预测，因此这就造成了规则按照评价结果的排序。利用遗传算法对这些规则进行优胜劣汰并创造新的规则就能完成Agent的学习过程。Agent在学习变得越来越聪明的同时也会影响整体股市环境，而上文已经说了股市翻过来会再次影响Agent的行为，这样我们可以看到，人工股市是一个多个Agent共同进化的生态环境。&lt;br /&gt;
&lt;br /&gt;
在系统运行的初始时刻，我们先给每个Agent分配了等量的现金和股票持有量，让他们有一个平等竞争的开始，但随着系统的运行，有些Agent能够对环境的变化做出积极的反应，有些不行，因此贫富差距开始加大，总之整个系统的动态只有在运作系统后才能看出来，运用ASM我们可以观察到很多真实股市中的有趣现象。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ASM的系统结构和算法==&lt;br /&gt;
&lt;br /&gt;
上一节，我们简单的介绍了ASM的结构和运行机理，对人工股市有了一个感性的认识，下面我们要详细的介绍人工股市的内部结构和具体的运行算法。详细介绍主要分环境和个体两部分进行。&lt;br /&gt;
&lt;br /&gt;
===股市环境===&lt;br /&gt;
&lt;br /&gt;
在上一节我们已经大概介绍了股市的环境由股市的状态以及状态的历史信息、分析专家、随机股息流、股市的参数集合这五个部分组成，下面分别进行介绍：&lt;br /&gt;
&lt;br /&gt;
1.股市状态及状态历史编码&lt;br /&gt;
&lt;br /&gt;
在ASM模型中，股市的状态包括下面这些量：当前的仿真周期（用t表示）、t周期内的股票价格（用pt表示）、当前股票的股息（用dt表示）、当前的现金利息率（用r表示，在我们的模型中假设r不随时间变化）。这些状态信息中，只有pt和dt是常常随时间变化的，他们都可以用实数来表示，这样状态的历史就记载了从t-h期到t期的pt和dt的历史信息。所以，状态历史可以用下面的集合表示：&lt;br /&gt;
&lt;br /&gt;
 [[File:(1).png|400px]]   （1）&lt;br /&gt;
&lt;br /&gt;
其中参数h为历史记忆的深度，t-h期以外的状态将被“遗忘”，每进行一个新的周期则历史信息更新一次。&lt;br /&gt;
&lt;br /&gt;
为了能够让Agent使用的规则识别出当前环境的整个运行状态及信息，我们需要对状态历史信息进行编码。在这里我们用一个60位长的二进制串对股市的状态历史编码，其中这个二进制串的一个位就代表股市历史Ht符合一个描述判断。具体说来，我们可以采用一组诸如“股息上升”、“股息在5个周期内的平均值持续上升”、“当前股息大于最近100个周期内的股息平均值”以及“价格在4个周期内一直上升”、“价格*利率与股息的比大于1/2”等等这样的语句来描述股市状态以及历史信息，这样每一个语句就构成了对股市的一个判断，所以我们把一个二进制位对应一个语句。这样，就得到了一个环境编码和与其对应的语句集合：&lt;br /&gt;
&lt;br /&gt;
环境编码： [[File:2.png|100px]]其中[[File:10.png|150px]]           &lt;br /&gt;
&lt;br /&gt;
语句集合： [[File:4.png|100px]]其中[[File:11.png|20px]] 是一个语句，[[File:5.png|100px]]&lt;br /&gt;
&lt;br /&gt;
两个向量有对应关系，如果[[File:6.png|60px]]表示si语句被满足，反之  [[File:7.png|60px]]  为si不满足。系统的环境状态模块部分负责根据当前的股市状态以及状态的历史翻译成不同的语句判断，并形成二进制编码。在实验中，语句一共可以分成10个组分别记录了股息走势、股息均值的走势、当前股息与其均值的大小关系、股息短期均值与长期均值的关系、股息与股息总体均值之间的比例([[File:8.png|60px]])、股票价格*利率/股息（[[File:9.png|40px]]）、股价的走势、股价均值的走势、股价与不同时期均值的关系、股票价格短期均值与长期均值的关系等信息。&lt;br /&gt;
&lt;br /&gt;
2.分析专家&lt;br /&gt;
&lt;br /&gt;
股市分析专家的作用为：在每个仿真周期内，收集所有Agent的股票需求量并按照一定的规则设定股票的价格，使得在这个价格下，股票市场能够得到出清（也就是说让需求量与供给量达到均衡）。&lt;br /&gt;
&lt;br /&gt;
我们假设系统中一共有n个交易者（即Agent），并且发行的单一股票数量为N保持不变，假设交易者Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;在t时刻对股票的持有量需求用X&amp;lt;small&amp;gt;i,t&amp;lt;/small&amp;gt;表示（包括Agent &amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;手中原来就持有的股票数）。这样，因为股票发行的总量不变为N，&lt;br /&gt;
&lt;br /&gt;
则显然有： [[File:(2).png|100px]]  （2）&lt;br /&gt;
&lt;br /&gt;
但是在仿真的任意一个周期里，每个Agent的股票需求量和供给量不会一下子达到平衡，因此分析专家的职能就是负责规定当前股票的交易价格Pt并传递给每个交易者，交易者再根据新的交易价格Pt修改对这个股票价格和股息的预期，从而根据效用函数重新计算需求量。这样如果交易量没达到平衡则在按照上述步骤重新计算，直到平衡为止。如果我们设Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;对价格的预期为E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;)，这表示在t时刻，Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;根据当前的信息I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;（包括股票价格、股息）对t+1期的股价及股息做出预测为E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;+d&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;)，Agent&amp;lt;small&amp;gt;i&amp;lt;/small&amp;gt;的效用函数决定了在给定股价、股价的预期的情况下该Agent对股票的需求量X&amp;lt;sub&amp;gt;i,t&amp;lt;/sub&amp;gt;，简单的表示成：&lt;br /&gt;
&lt;br /&gt;
X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,t=U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(pt, E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(P&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;+D&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;))    （3）&lt;br /&gt;
&lt;br /&gt;
那么分析家解决市场出清的算法可以表示如下：&lt;br /&gt;
&lt;br /&gt;
(1)将当前的P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;传递给每个Agent，并让他们根据X&amp;lt;sub&amp;gt;i,t&amp;lt;/sub&amp;gt;=U&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;, E&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;(p&amp;lt;sub&amp;gt;t+1&amp;lt;/sub&amp;gt;|I&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;))计算股票持有的需求量；&lt;br /&gt;
&lt;br /&gt;
(2)如果市场出清，即，（为事先给定的一个小量），则算法结束返回均衡价格P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;，以及每个Agent的真实股票持有量即x&amp;lt;sub&amp;gt;i,t+1&amp;lt;/sub&amp;gt;；&lt;br /&gt;
&lt;br /&gt;
(3)否则判断是否大于或小于0，根据所有Agent的总和边际效用（）调整股票价格即根据重新计算P&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;，返回第1步。&lt;br /&gt;
&lt;br /&gt;
3.随机股息流&lt;br /&gt;
&lt;br /&gt;
    在ASM模型中，股息被认为是一个由外部确定的随机过程，具体的，我们用下面式子计算股息：&lt;br /&gt;
&lt;br /&gt;
        （4）&lt;br /&gt;
&lt;br /&gt;
    其中表示当期t的股息；表示股息波动的基准线由用户事先确定；可以理解为一种惯性系数，也就是说当期的股息与上期的股息相关的程度，也是由用户事先给定；是一个满足分布即标准正态分布的随机过程。&lt;br /&gt;
&lt;br /&gt;
    根据上面的式子，系统不断计算t时刻的股息流注入系统中。&lt;br /&gt;
   另外，关于参数集合部分就是对各部分参数的付值过程，在此处不进行详细讨论。&lt;br /&gt;
&lt;br /&gt;
===Agent内部结构与算法===&lt;br /&gt;
&lt;br /&gt;
    Agent是股票交易者的模型，是真实世界中的股票交易者的模拟，它们是一些具有学习和创新能力的人工智能程序，每个Agent都由一组规则、效用函数和参数集合构成，这其中若干规则是完成Agent的决策、学习、创新的主要部分，在下面的部分中我们首先简单介绍效用函数，然后详细介绍规则的构成以及学习算法和运作机理等。&lt;br /&gt;
&lt;br /&gt;
3.2.1、'''&amp;lt;big&amp;gt;效用函数&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    文章[2]指出，在ASM模型里面，假设所有的Agent都是风险厌恶的决策者，并且它们具有(CARA)型效用函数，即。如果在t时刻Agenti对股市运行状态在t+1时刻的预期为Ei(pt+1+dt+1)，方差为：，并且假设它是当前股价和股息的线性函数，也就是说：&lt;br /&gt;
&lt;br /&gt;
        （5）&lt;br /&gt;
&lt;br /&gt;
    其中a和b为两个参数，不同的Agent在不同的时刻使用不同的规则的时候，a与b的值都不一样，因此得到的对股价和股息的预期也会不一样。如果该预期满足正态分布，则根据CARA效用函数，我们能计算出Agenti对股票的持有量需求为：&lt;br /&gt;
&lt;br /&gt;
        （6）&lt;br /&gt;
&lt;br /&gt;
    因此，边际需求量为：&lt;br /&gt;
&lt;br /&gt;
            （7）&lt;br /&gt;
&lt;br /&gt;
    有了效用函数，在确定了股价、股息以及对股价与股息的预期情况下就能精确的确定出Agenti对股票的持有量了。&lt;br /&gt;
&lt;br /&gt;
3.2.2、'''&amp;lt;big&amp;gt;规则&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    我们已经反复强调了，Agenti进行决策、学习的核心部分就是它的一组规则。具体来讲，如果Agenti具有m个规则，那么，对任意一条规则rulej来讲，它是形如下面这样的判断语句：&lt;br /&gt;
&lt;br /&gt;
      （8）&lt;br /&gt;
&lt;br /&gt;
    其中conditionj是条件部分，它是一个长度为60（与环境的编码长度一样）的位串：&lt;br /&gt;
&lt;br /&gt;
          其中，#为通配符表示0或者1都可以，(aj,bj)为预期中的系数。因此不同的规则就会给出不同的预测。&lt;br /&gt;
&lt;br /&gt;
    下面举例来进行具体的说明。假设Agenti有3条规则分别是（简化对环境的编码采用7位）：&lt;br /&gt;
&lt;br /&gt;
1：if 01001## then (0.5,0.2)&lt;br /&gt;
&lt;br /&gt;
2：if 0100110 then (0.4,0.8)&lt;br /&gt;
&lt;br /&gt;
3：if 10###110 then (4.3,2)&lt;br /&gt;
&lt;br /&gt;
    那么在运行中，如果在环境的编码为10010110，它刚好与第三条规则的条件部分匹配（注意#代表的是0或者1都可以匹配），那么Agenti就会采用规则3来对股票价格和股息进行预测，也就是利用4.3*(pt+dt)+2来得到t+1时刻的pt+1+dt+1。&lt;br /&gt;
&lt;br /&gt;
    又例如当前环境的编码为0100110的话，可以看出规则1和2都与环境的编码匹配，那么我们就称规则1和规则2处于被激活状态。究竟用1或者2的哪一条规则呢？这需要Agenti对这些激活的规则进行排序，确定出在一个具体的条件下采用哪个规则。我们可以通过给每一条规则赋予一个实数值表示的强度来给激活的规则排序，也就是强度越大规则就会排在前面，反之排在后面。假设规则rulej的强度为，那么强度的计算公式就是：&lt;br /&gt;
&lt;br /&gt;
      （9）&lt;br /&gt;
&lt;br /&gt;
    其中，M是一个预先设定的常数，也是预先设定的系数，s是规则rulej的条件部分中为#的位数，例如上例中的规则1的s=2，规则2的s=0，是规则rulej的预测精度，一般随着系统的运行，通过比较预测与实际的差值来确定该项，具体使用下面的公式跌代：&lt;br /&gt;
&lt;br /&gt;
      （10）&lt;br /&gt;
&lt;br /&gt;
   其中为权重参数，，因此不同的规则得到不同的预测，从而根据实际运行的结果得到真实的来确定每一条规则预测的准确性。&lt;br /&gt;
&lt;br /&gt;
    这样看来，如果在某种情况下有多条规则同时被激活的时候，那些预测准确的、能够得到具体条件的（也就是说s值偏小）的规则能够优先被使用。通过按照强度把激活规则进行排序，Agenti选出一个强度最高的规则来进行预测。当有两个以上的规则强度值相同的时候，则只能在这些规则中随机的选择一个了。这样，在我们上面的例子中，一般情况下规则2的强度大于规则1，所以Agenti选择用规则2来进行预测，从而用公式0.4*(pt+dt)+0.8得出对股价和股息的预测值。&lt;br /&gt;
&lt;br /&gt;
3.3.3、===Agent的学习与创新功能===&lt;br /&gt;
&lt;br /&gt;
    当在时刻t每个Agent的预测都结束了以后，根据第2节的叙述，环境部分中的分析专家就会根据每个Agent的股票需求量定出真实的t+1时刻的股票价格，并且随机过程会确定t+1时刻的股息。这个时候Agenti会根据这些真实的情况进行学习。所谓的学习就是要对m条规则的强度进行更新并且重新确定这m条规则的强度排序。强度更新主要是对规则的预测精度进行的，即按照（10）式进行更新。&lt;br /&gt;
&lt;br /&gt;
    每个Agent还可以通过遗传算法进行创新，也就是通过变异和交叉来产生新的规则并利用选择的机制淘汰旧的规则。下面具体介绍遗传算法的运行机理。&lt;br /&gt;
   首先，根据强度我们可以把m条规则进行排序，从而得到一个序列：&lt;br /&gt;
&lt;br /&gt;
      （11）&lt;br /&gt;
&lt;br /&gt;
    其中排在前面的强度小，排在后面的强度大。然后挑出排在前面的k个规则淘汰掉，并且用k个新规则代替这些规则，这k个新的规则在剩下的m-k个规则基础上运用交叉与变异的操作得到。&lt;br /&gt;
&lt;br /&gt;
    下面以例子说明变异和交叉是如何进行的，假如规则库中有两条规则是rule1: if 01001##011 then (3.5,6.8)和 rule2: if 01#0111#10 then (2,6.5)。&lt;br /&gt;
&lt;br /&gt;
    首先说明变异操作，系统在m-k条不被淘汰的规则中任意选中一条规则进行变异，比如选中的规则就是rule1。针对条件部分，任意选择一位把这位上的编码转换成其它的，比如选择了第3位，那么把0变为#就得到了新规则的条件部分。针对结果部分可以让新规则的(a,b)在允许范围内随机的任意选值。比如a,b都在[-10,10]内取值，那么新的(a,b)就可以是(-5,2.8)，这样从规则1变异出的新规则为if 01#01##011 then (-5,2.8)。上述的变异过程如下示：&lt;br /&gt;
&lt;br /&gt;
if 01001##011 then (3.5,6.8) -&amp;gt; if 01#01##011 then (-5,2.8)&lt;br /&gt;
&lt;br /&gt;
    交叉操作首先需要在不被淘汰的规则选择两个规则作为父母，比如选择到rule1,rule2为父母进行交叉操作。针对条件部分，首先随机的选取一个位作为交叉位置，然后把两个串进行首尾的交换得到新的串，比如我们选择交叉位置为第5位，那么交叉操作如下图所示：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    针对结果部分，我们可以采取加权平均的办法得到新规则的结果。比如新规则的(a,b)可以通过,得到，其中w是权重系数，可以随机的确定。&lt;br /&gt;
&lt;br /&gt;
    无论是交叉还是变异，得到的新规则的精确度都可以根据父母继承得到。Agent通过遗传算法可以得到新的规则并且淘汰旧的规则，这就既保证了创新性（由交叉和变异操作保证），又保证了优胜略汰的机制（由初始的规则排序并淘汰一部分规则保证）。另外，为了保证系统不会因为经常运用遗传算法而变得混乱不堪，所以我们制定了一个参数v表示运行遗传算法的概率，例如如果v=0.001则表示系统每运行1000次仿真周期才进行一次遗传算法的操作。&lt;br /&gt;
&lt;br /&gt;
    至此，我们已经介绍了ASM模型的全部部分，下面看看，从这样的归纳学习系统中，我们到底能得到什么样的涌现结果。&lt;br /&gt;
&lt;br /&gt;
== 编者推荐 ==&lt;br /&gt;
&lt;br /&gt;
=== 集智文章推荐 ===&lt;br /&gt;
&lt;br /&gt;
[[File:13.png|500px|thumb|right|利用深度学习算法来自动构建复杂系统模型的基本流程]]&lt;br /&gt;
====[https://swarma.org/?p=20306 张江：从图网络到因果推断，复杂系统自动建模五部曲]====&lt;br /&gt;
:随着深度学习崛起和图结构数据井喷，从复杂系统角度揭开人工智能黑箱、利用人工智能辅助复杂系统建模都成为可能。集智俱乐部组织了系列闭门读书会，在7月5日的第一场讨论中，张江直播分享了复杂系统建模的深度学习技术综述。&lt;br /&gt;
&lt;br /&gt;
=== 集智课程推荐 ===&lt;br /&gt;
====[https://campus.swarma.org/course/1117    模拟复杂性]====&lt;br /&gt;
:本课程中，将讲解如何借鉴前面各章对复杂之道的理解来设计复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====[https://campus.swarma.org/course/592 群体模拟与Netlogo]====&lt;br /&gt;
:在本节课程中我们将从理论回到现实中学习到实际的本领：关于Netlogo的操作。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:许许|许许]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:模拟程序]]&lt;br /&gt;
[[Category:人工社会]]&lt;br /&gt;
[[Category:复杂系统]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45311</id>
		<title>蚁迹寻踪</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E8%9A%81%E8%BF%B9%E5%AF%BB%E8%B8%AA&amp;diff=45311"/>
		<updated>2025-06-30T06:23:14Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
|description=人工生命,蚁群算法,蚂蚁觅食模拟&lt;br /&gt;
}}&lt;br /&gt;
* 名 称：蚁迹寻踪&lt;br /&gt;
* 作 者：[[Jake]]&lt;br /&gt;
* 源代码：[[Media:Antcolony.zip|Antcolony.zip]]&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony.gif|right|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
=程序运行说明=&lt;br /&gt;
&lt;br /&gt;
首先您要保证你的浏览器支持java applet，然后能够正确加载这个程序。在此前提下，按开始按钮，蚂蚁们开始从窝里出动了，寻找食物；他们会顺着地形爬满整个画面，直到找到食物再返回。&lt;br /&gt;
&lt;br /&gt;
其中，浅蓝色的点表示食物，黄色的点表示窝，雾状的点表示蚂蚁留下的信息素，红色的点表示障碍物，白色的动点就是蚂蚁了。&lt;br /&gt;
&lt;br /&gt;
按设置按钮你可以更改一些环境变量，也可以更改单个蚂蚁的属性。在设置参数窗口中显示了整个蚂蚁群中找到的从它的窝到食物的最短路径。&lt;br /&gt;
&lt;br /&gt;
使用环境参数设置和个体蚂蚁的设置可以让你观察到这些参数是怎样影响蚂蚁的行为的。其中信息素的大小和消散的快慢直接决定了蚂蚁找到食物的快慢。（具体见后面的参数说明）&lt;br /&gt;
&lt;br /&gt;
编辑地图让你能够随心所欲的更改蚂蚁的环境，你会看到，无论你怎样精心巧妙的设计地图，小蚂蚁最终都能找到食物！我们为你准备了一个地图库，可以自动调出不同的地图。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/antcolony/ant_colony_simulation.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 1200px; height: 800px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=预期的结果=&lt;br /&gt;
&lt;br /&gt;
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后，它会向环境释放一种信息素，吸引其他的蚂蚁过来，这样越来越多的蚂蚁会找到食物！有些蚂蚁并没有象其它蚂蚁一样总重复同样的路，他们会另辟蹊径，如果令开辟的道路比原来的其他道路更短，那么，渐渐，更多的蚂蚁被吸引到这条较短的路上来。最后，经过一段时间运行，可能会出现一条最短的路径被大多数蚂蚁重复着。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=原理=&lt;br /&gt;
&lt;br /&gt;
为什么小小的蚂蚁能够找到食物？他们具有智能么？设想，如果我们要为蚂蚁设计一个人工智能的程序，那么这个程序要多么复杂呢？首先，你要让蚂蚁能够避开障碍物，就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物，其次，要让蚂蚁找到食物，就需要让他们遍历空间上的所有点；再次，如果要让蚂蚁找到最短的路径，那么需要计算所有可能的路径并且比较它们的大小，而且更重要的是，你要小心翼翼的编程，因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序！太复杂了，恐怕没人能够完成这样繁琐冗余的程序。&lt;br /&gt;
&lt;br /&gt;
然而，事实并没有你想得那么复杂，上面这个程序每个蚂蚁的核心程序编码不过100多行！为什么这么简单的程序会让蚂蚁干这样复杂的事情？答案是：简单规则的涌现。事实上，每只蚂蚁并不是像我们想象的需要知道整个世界的信息，他们其实只关心很小范围内的眼前信息，而且根据这些局部信息利用几条简单的规则进行决策，这样，在蚁群这个集体里，复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律！那么，这些简单规则是什么呢？下面详细说明：&lt;br /&gt;
#范围：蚂蚁观察到的范围是一个方格世界，蚂蚁有一个参数为速度半径VR（一般是3），那么它能观察到的范围就是VR*VR个方格世界，并且能移动的距离也在这个范围之内。&lt;br /&gt;
#环境：蚂蚁所在的环境是一个虚拟的世界，其中有障碍物，有别的蚂蚁，还有信息素，信息素有两种，一种是找到食物的蚂蚁洒下的食物信息素，一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。&lt;br /&gt;
#觅食规则：在每只蚂蚁能感知的范围内寻找是否有食物，如果有就直接过去。否则看是否有信息素，并且比较在能感知的范围内哪一点的信息素最多，这样，它就朝信息素多的地方走，并且每只蚂蚁多会以小概率犯错误，从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样，只不过它对窝的信息素做出反应，而对食物信息素没反应。&lt;br /&gt;
#移动规则： 每只蚂蚁都朝向信息素最多的方向移，并且，当周围没有信息素指引的时候，蚂蚁会按照自己原来运动的方向惯性的运动下去，并且，在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈，它会记住最近刚走过了哪些点，如果发现要走的下一点已经在最近走过了，它就会尽量避开。&lt;br /&gt;
#避障规则：如果蚂蚁要移动的方向有障碍物挡住，它会随机的选择另一个方向，并且有信息素指引的话，它会按照觅食的规则行为。&lt;br /&gt;
#播撒信息素规则：每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多，并随着它走远的距离，播撒的信息素越来越少。根据这几条规则，蚂蚁之间并没有直接的关系，但是每只蚂蚁都和环境发生交互，而通过信息素这个纽带，实际上把各个蚂蚁之间关联起来了。比如，当一只蚂蚁找到了食物，它并没有直接告诉其它蚂蚁这儿有食物，而是向环境播撒信息素，当其它的蚂蚁经过它附近的时候，就会感觉到信息素的存在，进而根据信息素的指引找到了食物。&lt;br /&gt;
&lt;br /&gt;
=问题=&lt;br /&gt;
说了这么多，蚂蚁究竟是怎么找到食物的呢？&lt;br /&gt;
在没有蚂蚁找到食物的时候，环境没有有用的信息素，那么蚂蚁为什么会相对有效的找到食物呢？这要归功于蚂蚁的移动规则，尤其是在没有信息素时候的移动规则。首先，它要能尽量保持某种惯性，这样使得蚂蚁尽量向前方移动（开始，这个前方是随机固定的一个方向），而不是原地无谓的打转或者震动；其次，蚂蚁要有一定的随机性，虽然有了固定的方向，但它也不能像粒子一样直线运动下去，而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性，尽量保持原来的方向，但又有新的试探，尤其当碰到障碍物的时候它会立即改变方向，这可以看成一种选择的过程，也就是环境的障碍物让蚂蚁的某个方向正确，而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。&lt;br /&gt;
当然，在有一只蚂蚁找到了食物的时候，其他蚂蚁会沿着信息素很快找到食物的。&lt;br /&gt;
&lt;br /&gt;
蚂蚁如何找到最短路径的？这一是要归功于信息素，另外要归功于环境，具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多，因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物，开始的时候，走这两条路的蚂蚁数量同样多（或者较长的路上蚂蚁多，这也无关紧要）。当蚂蚁沿着一条路到达终点以后会马上返回来，这样，短的路蚂蚁来回一次的时间就短，这也意味着重复的频率就快，因而在单位时间里走过的蚂蚁数目就多，洒下的信息素自然也会多，自然会有更多的蚂蚁被吸引过来，从而洒下更多的信息素……；而长的路正相反，因此，越来越多地蚂蚁聚集到较短的路径上来，最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题，实际上蚂蚁逐渐接近全局最短路的，为什么呢？这源于蚂蚁会犯错误，也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径，这可以理解为一种创新，这种创新如果能缩短路途，那么根据刚才叙述的原理，更多的蚂蚁会被吸引过来。&lt;br /&gt;
&lt;br /&gt;
[[File:Antcolony2.gif|center|frame|蚁迹寻踪]]&lt;br /&gt;
&lt;br /&gt;
上图说明了这个过程，从a出发到e有两条路，左边的较长，右边的较短，在这两个图中，开始的时候（左图）蚂蚁选择两条路的机会是均等的，当时间流逝以后（右图所示），更多的蚂蚁聚集到右边的较短的路上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=引申=&lt;br /&gt;
跟着蚂蚁的踪迹，你找到了什么？通过上面的原理叙述和实际操作，我们不难发现蚂蚁之所以具有智能行为，完全归功于它的简单行为规则，而这些规则综合起来具有下面两个方面的特点：&lt;br /&gt;
#多样性&lt;br /&gt;
#正反馈&lt;br /&gt;
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环，正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力，而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见，而多样性是打破权威体现的创造性，正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。&lt;br /&gt;
&lt;br /&gt;
引申来讲，大自然的进化，社会的进步、人类的创新实际上都离不开这两样东西，多样性保证了系统的创新能力，正反馈保证了优良特性能够得到强化，两者要恰到好处的结合。如果多样性过剩，也就是系统过于活跃，这相当于蚂蚁会过多的随机运动，它就会陷入混沌状态；而相反，多样性不够，正反馈机制过强，那么系统就好比一潭死水。这在蚁群中来讲就表现为，蚂蚁的行为过于僵硬，当环境变化了，蚂蚁群仍然不能适当的调整。&lt;br /&gt;
&lt;br /&gt;
既然复杂性、智能行为是根据底层规则涌现的，既然底层规则具有多样性和正反馈特点，那么也许你会问这些规则是哪里来的？多样性和正反馈又是哪里来的？我本人的意见：规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢？为什么在你眼前呈现的世界是如此栩栩如生呢？答案在于环境造就了这一切，之所以你看到栩栩如生的世界，是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了，被环境淘汰了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=参数说明=&lt;br /&gt;
最大信息素：蚂蚁在一开始拥有的信息素总量，越大表示程序在较长一段时间能够存在信息素。食物释放信息素的半径：在食物点和窝点附近都会释放相应的信息素以便蚂蚁能更快的找到它们。这个半径越大，则越容易被蚂蚁找到。信息素消减的速度：随着时间的流逝，已经存在于世界上的信息素会消减，这个数值越大，那么消减的越快。&lt;br /&gt;
&lt;br /&gt;
在设置蚂蚁个体属性的时候，选择特定的蚂蚁编号，可以对这只蚂蚁的属性进行修改。错误概率表示这个蚂蚁不往信息素最大的区域走的概率，越大则表示这个蚂蚁越有创新性。速度半径表示蚂蚁一次能走的最大长度，也表示这个蚂蚁的感知范围。记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标，这个值避免了蚂蚁在本地打转，停滞不前。而这个值越大那么整个系统运行速度就慢，越小则蚂蚁越容易原地转圈。按钮（应用于所有蚂蚁）：是把当前更改的所有蚂蚁的个体属性应用到所有的蚂蚁身上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:旧网站]]&lt;br /&gt;
[[category:旧网站-虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45310</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45310"/>
		<updated>2025-06-30T06:14:30Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 简介 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 1130px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45309</id>
		<title>摄像-屏幕自指模拟</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%91%84%E5%83%8F-%E5%B1%8F%E5%B9%95%E8%87%AA%E6%8C%87%E6%A8%A1%E6%8B%9F&amp;diff=45309"/>
		<updated>2025-06-30T06:12:57Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=自指,摄像机－电视自指系统,分形&lt;br /&gt;
|description=自指程序,摄像机－电视自指系统,分形&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==简介==&lt;br /&gt;
&lt;br /&gt;
摄像机对着电视机照，再把摄得的图像反传给电视会得到什么？答案似乎应该是什么都没有。然而实际的实验却告诉我们，这样的一个自指系统能给我们带来非常丰富的复杂图案！一些奇妙的结构会从电视屏幕中源源不断的飞出来。开始，我发现这一现象是因为看到了《哥德尔、埃舍尔、巴赫——一条永恒的金带》这本书中描写了用摄像机拍摄电视会得到奇妙的图案，于是我就自己动手做起了试验。然而出乎意料的是，当我略微调节电视机的亮度、颜色以及摄像机的焦距等等参数以后，却得到了比书中描述的现象更加丰富的图案。而且运用不同的摄像机转动不同的角度会得到完全不一样的结果。&lt;br /&gt;
&lt;br /&gt;
惊喜之余，我开始认真思考这一现象的本质原因是什么。虽然我不懂得电视机和摄像机的呈像、采集原理，但我相信这个系统无非是一个信息系统，应该能够用计算机模拟出来！也就是说，理论上讲，我们完全有可能在计算机屏幕上再现电视机屏幕里展现的东西。于是，我开始开发计算机模拟程序。经过很长时间的探索，我终于找到了一种能够近似模拟电视机中动态图像的计算机仿真办法。这就是下面的Java仿真程序。&lt;br /&gt;
&lt;br /&gt;
* 源代码：[http://wiki.swarma.net/index.php/File:Selfref.zip Selfref.zip]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/selfref/selfref_modernized-3.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 680px; height: 1130px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==操作==&lt;br /&gt;
===真实摄像机—电视系统的操作===&lt;br /&gt;
&lt;br /&gt;
相信这是一个非常简单的试验：&lt;br /&gt;
#找来一台摄像机和一台电视机。把摄像机的AV输出到电视机的AV端口，调试好，让电视机屏幕中的图像刚好显示摄像机镜头所拍摄的内容；&lt;br /&gt;
#将背景光调暗，把电视机的亮度和对比度尽量调小（但是要保证能够分辨出摄像机拍摄的光），色彩度也尽量调小；&lt;br /&gt;
#以正常焦距把摄像机调整到正对电视机屏幕的位置。这时候，你能看到电视屏幕中心有一个亮的点或者光球。如果你的背景太黑，有可能在电视机屏幕上得不到任何图像，这时候可以用手电筒或者其他灯光照射电视屏幕，这束灯光将会汇聚到电视屏幕中心。屏幕中心好比一个黑洞会吸收所有屏幕上的光；&lt;br /&gt;
#逐渐扩大焦距，保持亮点或者光球在屏幕中心的位置，渐渐的亮点可能会变成一个跳动不堪的混沌的气体，这时应尽量减小摄像机的晃动，继续拉大焦距；&lt;br /&gt;
#复杂的结构会突然出现，为了不让这些结构消失，可以调整摄像机的照射点到屏幕上光比较多的位置，复杂的结构会源源不断的在屏幕中产生就好像是星系的爆发；&lt;br /&gt;
#旋转摄像机的角度会得到旋转的星系。&lt;br /&gt;
&lt;br /&gt;
===Java程序操作===&lt;br /&gt;
&lt;br /&gt;
该Java程序模拟了真实的摄像机——电视机自指系统。打开Java仿真程序，会看到上面部分是一个黑色的屏幕，它模拟了电视机屏幕；下面有一个按钮控制面板，它可以模拟摄像机的旋转、变焦距等操作。你可以直接点击Auto按钮，程序会自动选择参数，复杂的结构在屏幕中心产生并向四周扩散。或者可以手动模仿上面讲的真实摄像机——电视机系统中的操作步骤。点击Start按钮，你将会看到一个白色的光球被吸引到中心点，并在中心形成光的汇聚。那个初始的光球就是手电筒照射电视机屏幕的光。点击Off按钮，相当于把手电筒关闭，初始的光球会消失，然而中心的光不会消失。拉动底下的滑块可以变换摄像机扩大、缩小的变焦比例。右边的文本框显示了当前扩缩的比例。点击&amp;gt;和&amp;lt;按钮相当于顺时针或者逆时针旋转摄像机。你可以不停的变换这些参数，上方屏幕中的图案将会不停的变化，展现出类似真实电视机中的复杂图案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==原理==&lt;br /&gt;
&lt;br /&gt;
本质上讲，摄像机——电视机自指系统就是一个如下图的反馈系统：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.1.gif|center|frame|反馈系统]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从摄像机拍摄的信息传递给电视机，电视机再把这一信息展现出来反馈给摄像机，该过程循环往复，永不停止。如果从电视机——摄像机的语义角度来看，这将是一个不可能的无限过程：电视机中展现的是摄像机中的电视机的图案，在深一层次的电视机屏幕中会展现更深一层次的电视机图案，……，永无停止。而且假设我们认为电视机屏幕中的空间是对真实物理空间的映射，那么计算机屏幕中将会产生一个无穷的空间距离。因为摄像机到电视机屏幕的距离会被复制到电视屏幕中的虚拟世界中，以及电视机中的电视机中的虚拟世界中，……，那么这些无限的距离之和将会创造一个无穷远的空间，如右下所示&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref1.jpg|center|frame|电视机中的无穷远空间，[http://wiki.swarma.net/index.php/File:WEB1.rm.zip 视频下载]]]&lt;br /&gt;
&lt;br /&gt;
然而我们站在这个自指系统之外看，它无非就是一个不断的跌代过程。也就是说摄像机不断的把电视机屏幕上的点再次映射到电视机屏幕上。如果设t时刻电视机屏幕上的一个点是&lt;br /&gt;
&amp;lt;math&amp;gt;P_t&amp;lt;/math&amp;gt;，那么在t+1时刻，这个点就变成了&amp;lt;math&amp;gt;P_{t+1}&amp;lt;/math&amp;gt;，并且我们假设&amp;lt;math&amp;gt;P_{t+1}=f(P_t)&amp;lt;/math&amp;gt;，这个f就是跌代方程，它由摄像机及其电视的呈像原理决定。下面，我们就用计算机仿真的方法找到一个近似的跌代方程f。&lt;br /&gt;
&lt;br /&gt;
考虑在计算机屏幕上模拟这个过程，那么屏幕上的任意一个像素点&amp;lt;math&amp;gt;P^t_i&amp;lt;/math&amp;gt;在t时刻的坐标为&amp;lt;math&amp;gt;(x^t_i, y^t_i)&amp;lt;/math&amp;gt;，那么在t+1时刻，它变成了新的位置&amp;lt;math&amp;gt;P^{t+1}_i&amp;lt;/math&amp;gt;，新的坐标是&amp;lt;math&amp;gt;(x^{t+1}_i, y^{t+1}_i)&amp;lt;/math&amp;gt;，这个变换可以用下面的图表示：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
如果是普通的图形变换，那么两时刻的坐标要满足下面的关系：&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;P^{t+1}_{i} = A\cdot P^{t}_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::其中，&amp;lt;math&amp;gt;P^{t}_{i}=(x^{t}_{i},y^{t}_{i},1),P^{t+1}_{i} = (x^{t+1}_{i},y^{t+1}_{i},1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A = \begin{bmatrix}&lt;br /&gt;
\omega cos\theta  &amp;amp; \omega sin\theta  &amp;amp;  0 \\ &lt;br /&gt;
-\omega sin\theta &amp;amp; \omega cos\theta &amp;amp; 0 \\  &lt;br /&gt;
\alpha  &amp;amp; \beta   &amp;amp;  1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\alpha = -\omega x_{0}cos\theta + \omega y_{0}sin\theta + x_{0},&lt;br /&gt;
\beta  = -\omega x_{0}sin\theta - \omega y_{0}cos\theta + y_{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;是摄像机的缩放比例，&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;是摄像机旋转的角度。&amp;lt;math&amp;gt;x_0, y_0&amp;lt;/math&amp;gt;是摄像机正对屏幕点的坐标。在仿真中，该点一直为屏幕的中心。在上式中，我们用三维的齐次坐标来表示二维点信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
然而，如果仅仅用上面的方程做为对摄像机——电视系统的仿真不能达到模拟的效果，屏幕上的点将会很快的飞出屏幕并消失。为此，我们必须要对这个线性的变换进行修改：&lt;br /&gt;
#当一个像素点转变成新的像素点的时候，旧有的像素点不会立即消失，而是以一定的概率残留。&lt;br /&gt;
#当多个像素点经变换发生碰撞的时候（汇聚到了一个像素的位置）将会产生溢出现象，也就是说，碰撞产生的多余亮度将会往该碰撞点的边缘膨胀。具体膨胀的方向也是随机的给出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们看到，这种经过修改的跌代系统已经不是原始的线性跌代系统了，我们可以把它称作经过干扰的跌代系统。一般的混沌与分形理论仅仅讨论了跌代规则不发生变化的系统，然而这个仿真系统却是一个跌代规则也会发生变化的系统。这种修改后的跌代系统刚好能够产生前面叙述的复杂性。&lt;br /&gt;
&lt;br /&gt;
==一些结果==&lt;br /&gt;
:下面所列都是一些视频文件，即我用真实的摄像机——电视系统摄出来的图案，有些图像的效果非常美丽。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|width=&amp;quot;85%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;background-color:transparent;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref2.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref3.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref4.jpg|thumb|center|[http://wiki.swarma.net/index.php/File:WEB4.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref5.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEB5.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|这段视频展示了当我们一点一点拉大摄像机的焦距的时候所产生的各种可能性。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|上面的图像是用另一台数字摄像机且把摄像机旋转180度摄出来的。这会在屏幕中心形成一个光带，这个光带还会增长。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|旋转90度的情况。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的视频是另一个放大的全过程。我们可以把焦距逐渐放大的图像过程分为明显的三个阶段：“固定点”、“混沌之气”、“复杂图案&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref6.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref7.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim2.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref8.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim3.zip 视频下载]]]&lt;br /&gt;
|style=&amp;quot;width:25%;align:center&amp;quot;|[[File:Selfref9.jpg|thumb|center|none|[http://wiki.swarma.net/index.php/File:WEBsim4.zip 视频下载]]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|下面的图像是用另外一台老的摄像机做的，这虽然是一台模拟摄像机，但是它产生的图案更加美丽。旋转45度的时候图片如上。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|在这次试验中，我们找来一束会发光的花（一种装饰品）放在屏幕前方，我们得到了非常漂亮的图像过程，这些图案是如此的惊人，以至于它的视觉冲击胜过好莱坞的经典大片。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|另外一些美丽的图案。&lt;br /&gt;
|style=&amp;quot;text-align:left;padding:2em&amp;quot;|一个比较长的过程展现优美的图案。&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:下面是一些仿真软件做出来的结果（静态图片）：&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Selfref5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
:通过变换仿真程序的参数，相信你也可以得到这些漂亮的图案&lt;br /&gt;
&lt;br /&gt;
==引申==&lt;br /&gt;
&lt;br /&gt;
这仅仅是一个绘制令人头晕目眩的计算机动画的小技巧么？我认为不是，至少这个简单的操作给我们揭示了这样一条原理：自指系统能够诞生复杂性。然而这条原理也许是某些更加深刻的科学原理的引子。&lt;br /&gt;
&lt;br /&gt;
==自指与层次==&lt;br /&gt;
前面已经提到，摄像机-电视系统就是一个跌代的反馈系统。然而我们为什么称该系统是一个自指系统呢？那是因为自然界的反馈系统千姿百态、多种多样，但反馈系统并不一定能够构成自指。那么什么是自指呢？所谓的自指就是一种自引用，是一种把一个系统的整体再次包含进自身中的一个更深的层次的过程。比如下面这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;这句话是错的!&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一个明显的自指语句。因为“这句话”是该句子的一部分，然而它所指代的含义是整句话本身。所以“这句话是错的”就把自己包含成为了自己的一部分。另外，自指一般都牵扯到层次性。也就是说从语义上看，引用构成了一个新的层次。比如这句话：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;我认为：“明天会下雨”&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
就牵扯了两个层次，第一个层次是我认为，它表达了真实世界中的“我”发出了一个动作“认为”。而第二个层次是“明天会下雨”，因为这第二个层次表达的是一个与我们的真实世界完全不同的虚拟世界，它处在另一个层次中。“这句话是错的”也包含了两个层次。我们可以把这句话整体叫做A，那么它的一部分“这句话”所指代的就是A，那么A也可以写为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;“这句话是错的”是错的&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我们已经可以清楚地看到它包含了两个层次，第一个层次为“是错的”，第二个层次为“这句话是错的”。那么之所以我们称A是一个悖论，是因为通过自指它把两个不同层次的意思扭缠到了一起。所以我们无从判断“这句话是错的”的对错。&lt;br /&gt;
&lt;br /&gt;
其实，在现实生活中类似的层次现象还有很多很多，比如下面的这些例子：小说中的世界、电脑游戏中的世界、镜子中的世界、电视机显示的世界、人脑中的世界等等。&lt;br /&gt;
&lt;br /&gt;
而在摄像机-电视试验中，电视中的景象就是第一层的虚拟世界，在第一层虚拟世界中的电视就是第二层的虚拟世界，……，所以该试验中嵌套了无穷层次的虚拟世界。而自指就是某个事物在更深一个层次把自身映射了。这样，自指过程就形成了把第N-1层次的世界拉到了第N层次中。通过摄像机的辅助，电视机把自己的影像又拉到了自己屏幕上所展示的世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与反馈===&lt;br /&gt;
&lt;br /&gt;
然而毕竟摄像机-电视系统就是一个反馈系统，那么自指与反馈有什么关系呢？我认为自指必须要通过反馈来实现。因为某事物A要想在它的内部映射其自身必须通过它所处的环境来动态完成一个反馈的过程。比如电视机要完成自指必须要通过摄像机的反馈系统。如果反馈不存在，孤立的电视机不可能形成自指。&lt;br /&gt;
&lt;br /&gt;
但反过来，自指决不等同于普通的反馈。普通的反馈仅仅形成了一个信息的回路，因而我们可以在自然界中找到很多反馈的现象。然而前面已经说了，自指必须要把自身的像在更深一层次映射出来。&lt;br /&gt;
&lt;br /&gt;
针对摄像机--电视系统，可以说如果我们从系统的信息回路角度来看它就是一个平凡的反馈系统。然而如果我们站在电视机中的虚拟世界来看，这就是一个不平凡的自指系统。也就是说我们站在信息所表达的意义上看，自指才会出现！因此自指是出现在语义层面上的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===迭代：一种用有限应对无限的方法===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视试验告诉我们，我们可以在一个完全有限的环境下展现一个无限的世界。首先，在空间上电视屏幕中无穷嵌套的世界从语义上具有无穷的空间。正如前面所说，电视机中的虚拟世界在任意两个嵌套的电视屏幕中间都有一段距离。这段“信息意义”的距离是不会经过嵌套而丢失的。所以电视屏中的无穷个电视实际上拥有了无穷的虚拟距离，因而我们一下子拥有了无穷的虚拟空间。&lt;br /&gt;
&lt;br /&gt;
其次，经过跌代，虚拟世界原则上拥有了和我们的宇宙一样长的时间，因而也可以认为虚拟世界中的时间是无限的。只要我们不关闭整个装置，那么虚拟世界就会一直存在下去。因此，通过跌代，我们把这个世界的时间“借”给了虚拟世界。回想现代复杂系统仿真演化程序，无论是细胞自动机还是人工生命都运用了计算机跌代的方法，这些方法都相当于把我们这个宇宙的时间借给了计算机中的虚拟世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===怪圈和悖论===&lt;br /&gt;
&lt;br /&gt;
自指还有一个别名：“怪圈”。然而我认为“怪圈”的范围似乎更广。比如一条想把自己吞掉的蛇就形成了一个怪圈，埃舍尔的很多画都在反映怪圈。怪圈会产生悖论，也就是让人们左右为难的命题。比如上面的那句话：这句话是错的。另外，著名的悖论还有罗素悖论，它直接动摇了集合论的基石。而后来哥德尔通过同样的悖论推理把悖论引到了逻辑中，从而颠覆了希尔伯特的梦想。之后，图灵运用同样的怪圈悖论逻辑证明了图灵停机定理，并指出了计算机的极限。可想而知，怪圈和悖论在经典理论中所起到的深刻作用。然而，人们普遍的一种看法总是认为悖论、怪圈是不好的、矛盾的，所以人们尽量要避免它、消除它。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===复杂性的困惑===&lt;br /&gt;
&lt;br /&gt;
进入21世纪，复杂性科学越来越受到人们的重视。复杂性科学所带给我们的真正革命意义是用一种综合、演化、生成的世界观。所以从复杂性科学诞生，科学方法就开始了180度大转弯，科学一下子变得和以前不同了。然而，复杂适应系统理论在很多方面很多年来一直没有形成很大的突破。大家似乎仅仅知道做计算机模拟试验，改进改进算法，而真正理论的突破没有完成。回顾复杂性科学的历史，我们不难发现下面几点启示：&lt;br /&gt;
&lt;br /&gt;
混沌边缘的延伸：Langton在研究混沌边缘的细胞自动机的时候，曾明确指出：如果把细胞自动机看作一个计算的过程，那么混沌边缘的细胞自动机所作的运算就相当于正在解决图灵停机这样的不可判定问题！因此，如果把混沌边缘的概念进一步引申就是前面提到的怪圈、悖论等等这些问题；&lt;br /&gt;
如何“无中生有”？万事万物的复杂性缘何起源？复杂系统的演化模型尽量强调减少人工的干预，因为每当人们减少一次干预的就一个底层的规则。&lt;br /&gt;
究竟什么是计算机模拟？计算机模拟其实就是在机器中获得一个新层次的世界，从而形成对外界世界的映射。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===自指与复杂性===&lt;br /&gt;
&lt;br /&gt;
摄像机-电视这个简单的试验告诉我们，怪圈并不仅仅是人们所想象的能够招致悖论的不好的东西，翻过来，自指形成的怪圈能够生成复杂性。它是系统真正创造性的来源。&lt;br /&gt;
&lt;br /&gt;
从信息意义上来看，摄像机-电视系统所产生的复杂性是纯粹的无中生有。因为电视机中所反映的自身内部是什么呢？这无非是一连串嵌套的电视机自己，当我们放大的时候，我们看到了摄像机的内部世界，然而从信息语义上讲，它应该是什么都没有！正是这种“无”才创造了复杂性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===起源问题===&lt;br /&gt;
&lt;br /&gt;
宇宙、生命、智能是如何起源的？我们还无从得知，但可以肯定的是，这些重大的问题都和怪圈有关。首先，宇宙本身就是一个悖论。因为按照人们的定义，宇宙即为所有的空间和时间，我们必须坚持宇宙之外空无一物，宇宙之前一无所有。所以宇宙在早期必须构成了自己起源的原因，而不能依靠外界。否则根据我们的定义，我们会把宇宙的外界也包含进宇宙这个概念中来。&lt;br /&gt;
&lt;br /&gt;
生命起源目前基本已经被复杂性科学所揭示。然而，生命能够自主运动本身就是一个怪圈。因为生命都是由成千上万的分子构成的，分子的运动是支配这其上的生命的运动的，然而生命为什么还能自发主动的运动呢？生命只有自己构成了自己运动的原因的时候才叫做具有了主动性和“活”性。因此自己构成自己运动原因就形成了一个怪圈。&lt;br /&gt;
&lt;br /&gt;
智能和自由意识更是与怪圈密切相关，因为我们能用我们大脑来分析大脑自己。面对人工智能，我们更是面对了怪圈的困惑：什么是真正的智能？有人说只有和人一样聪明的东西才叫真正的智能。那么，我们创造的人工智能如果满足这一标准的话，那么它们也会创造出属于它们的“人工智能”，接下来，它们创造的AI又会创造新的“AI”……，这个过程便形成了一个类似电视机中套电视机的怪圈。&lt;br /&gt;
&lt;br /&gt;
如果说自指能够诞生复杂性，而且自指能产生怪圈。那么我们如何利用类似摄像机—电视机的跌代系统方法实现真正的“无中生有”呢？也许这会是一个可能带来重大突破、激动人心的课题。&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
[[File:自指.jpeg|400px|thumb|[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]]]&lt;br /&gt;
===相关文章===&lt;br /&gt;
====[https://swarma.org/?p=3128 自指机器的奥秘]====&lt;br /&gt;
该文是冯·诺依曼自动机器理论”系列文章的第六篇（下半部分），由集智俱乐部资深粉丝“东方和尚”将全书第一部分翻译成中文，张江做了详细点评。&lt;br /&gt;
&lt;br /&gt;
====[https://swarma.org/?p=3034 自指——连接图形与衬底的金带]====&lt;br /&gt;
该文是为“自指机器奥秘”的补充材料，详细地介绍了从语言到计算机程序再到数理逻辑等领域中各种形式的自指现象。除此之外，该文也详细指出了对角线删除法则与自指等概念之间的联系。&lt;br /&gt;
&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
====[https://campus.swarma.org/course/1128 层级与自指]====&lt;br /&gt;
自复制只是自指的一种特例。而自指则是所有斑图想凭借自身演化翻身成为超越底层规则的唯一途径。阴阳二气并不会永无休止地争得个你死我活，而是会在一定阶段跃升进入无级之野。这也正是生命得以跃升进入更高层级的方式，它也将会指引人类如何超越奇点的唯一途径。该课程中，张江老师将介绍如何理解层级结构、虚拟层、哥德尔定理、自复制、自指。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条作者为[[Jake]]，由[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[category:虚拟世界]]&lt;br /&gt;
[[category:模拟程序]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E9%B8%9F%E7%BE%A4%E7%AE%97%E6%B3%95_Boids&amp;diff=45260</id>
		<title>鸟群算法 Boids</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E9%B8%9F%E7%BE%A4%E7%AE%97%E6%B3%95_Boids&amp;diff=45260"/>
		<updated>2025-06-29T00:50:13Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=鸟群算法,Craig Reynolds,计算机图形, boids, Boids, 人工生命,群体运动&lt;br /&gt;
|description=简单规则创造涌现行为的典型案例，每只鸟只关注视野半径内的鸟，然后遵循分离、对齐和靠近三条简单的规则，就能够在计算机中创造出丰富多彩的鸟类集群飞行的复杂现象。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;鸟群算法（ Boids）&amp;lt;/font&amp;gt;'''是模拟鸟类群集行为的人工生命项目，由'''克雷格·雷诺兹 Craig Reynolds'''于1986年开发。该模型常用于计算机动画或计算机辅助设计的计算机三维几何。他关于这个主题的论文发表在1987年的 ACM SIGGRAPH（美国计算机协会计算机图形专业组组织的计算机图形学顶级年度会议）会议记录上。&amp;lt;ref&amp;gt;{{Cite book | last1=Reynolds| first1=Craig| title=Flocks, herds and schools: A distributed behavioral model.| year=1987 |journal=SIGGRAPH '87: Proceedings of the 14th Annual Conference on Computer Graphics and Interactive Techniques| publisher=Association for Computing Machinery | pages=25–34| isbn=978-0-89791-227-3| doi=10.1145/37401.37406| citeseerx=10.1.1.103.7187}}&amp;lt;/ref&amp;gt;“ boid”是“ bird-oid object”的缩写，指一个类鸟对象。&amp;lt;ref&amp;gt;{{Cite journal| last1=Banks| first1=Alec| last2=Vincent| first2=Jonathan| last3=Anyakoha| first3=Chukwudi | title=A review of particle swarm optimization. Part I: background and development|date=July 2007| journal=Natural Computing| volume=6| issue=4| pages=467–484| doi=10.1007/s11047-007-9049-5| citeseerx=10.1.1.605.5879}}&amp;lt;/ref&amp;gt;恰巧，“boid”也是纽约都市方言中“bird”的发音。&lt;br /&gt;
&lt;br /&gt;
鸟群算法的模拟程序：&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;iframe&amp;quot; src=&amp;quot;/applets/boids_simulation/boids_simulation.html&amp;quot; style=&amp;quot;display: block; margin-bottom: 1em; width: 550px; height: 600px; border: solid 1px #ddd;&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==算法介绍==&lt;br /&gt;
[[File:Rule_separation.gif|thumb|200px|分离]]&lt;br /&gt;
[[File:Rule_cohesion.gif|thumb|200px|靠近]]&lt;br /&gt;
[[File:Rule_alignment.gif|thumb|200px|对齐]]&lt;br /&gt;
&lt;br /&gt;
与大多数人工生命模拟一样，Boids 是[[涌现]]行为的一个例子; 也就是说，Boids 的复杂性来自于遵循一系列简单规则'''个体 agents'''（这里是 Boids）的相互作用。在最简单的Boids世界中适用的规则如下，其描述了鸟群中的个体如何根据周边同伴的位置和速度移动:&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;分离 Separation&amp;lt;/font&amp;gt;''': 移动以避开群体拥挤处&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;对齐 Alignment&amp;lt;/font&amp;gt;''': 朝着周围同伴的平均方向前进&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;靠近 Cohesion&amp;lt;/font&amp;gt;''': 朝着周围同伴的平均位置（质心）移动&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
每个 boid 个体都可以得知整体的几何参数，但群体要求其只对其周围某个小邻近范围作出反应。该邻近范围由一个距离（从该个体的中心算起）和一个角度（从其飞行方向算起）决定。此范围外的同伴不予考虑。该临近范围可以认为是一个有限知觉的模型（就像浑水中的鱼一样）；但更恰当的想法可能是，其定义了鸟群影响了个体转向的区域范围。&lt;br /&gt;
&lt;br /&gt;
当然也可以添加更复杂的规则，如避障和寻找目标。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
该基本模型自Reynolds提出以来，已用多种方法扩展。例如，Delgado-Mata &amp;lt;ref&amp;gt;{{cite journal|first1= Carlos | last1= Delgado-Mata|first2= Jesus Ibanez | last2= Martinez|first3= Simon | last3= Bee|first4= Rocio | last4= Ruiz-Rodarte|first5= Ruth | last5= Aylett|title= On the use of Virtual Animals with Artificial Fear in Virtual Environments&lt;br /&gt;
|journal= New Generation Computing|volume=25 |issue=2 |pages= 145–169|date=2007|doi= 10.1007/s00354-007-0009-5}}&amp;lt;/ref&amp;gt;等人扩展基本模型以加入恐惧的影响。因为动物之间靠嗅觉来传递情感，所以他利用一种可自由膨胀气体中的粒子来模拟信息素。'''哈特曼 Hartman'''和'''贝内斯 Benes'''&amp;lt;ref&amp;gt;{{cite journal|first1= Christopher | last1= Hartman|first1= Christopher | last1= Hartman|first2= Bedr̆ich |last2= Benes̆|title= Autonomous boids|journal= Computer Animation and Virtual Worlds|volume=17 |issue=3–4 |pages= 199–206|date=July 2006|doi= 10.1002/cav.123}}&amp;lt;/ref&amp;gt;我们为这种结盟引入了互补的力量，称之为领导力更替。这个力决定了这个鸟成为领导者或者试图逃脱群体的概率。&lt;br /&gt;
&lt;br /&gt;
Boids 的运动可以表现为混乱（分裂的群体和狂野的行为）或有序。意想不到的行为比如群体分散和避开障碍后的集聚，可以被认为是涌现的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Boids 框架通常用于计算机图形学，提供鸟群和其他生物（如鱼群）的逼真表现。例如，在1998年的电子游戏《'''半条命 Half-Life'''》中，游戏结束时Xen中出现的类似鸟类的飞行生物就使用了该框架（游戏文件中命名为“ boid”）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Boids 模型可用于'''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;[[集群机器人]] Swarm Robotics&amp;lt;/font&amp;gt;'''中简单的无人地面车辆（UGV）&amp;lt;ref&amp;gt;{{cite conference |title= Design and analysis of Group Escape Behavior for distributed autonomous mobile robots  |first1= Hongkyu |last1= Min  |first2= Zhidong |last2= Wang |year= 2011 |conference= IEEE International Conference on Robotics and Automation (ICRA)|doi= 10.1109/ICRA.2011.5980123 }}&amp;lt;/ref&amp;gt; 或'''&amp;lt;font color=&amp;quot;#ff8000&amp;quot;&amp;gt;微型飞行器 Micro Aerial Vehicles&amp;lt;/font&amp;gt;'''（MAV）&amp;lt;ref&amp;gt;{{cite conference |title= Swarms of micro aerial vehicles stabilized under a visual relative localization  |first1= Martin |last1= Saska |first2= Vakula |last2= Jan |first3= Preucil |last3= Libor |year= 2014 |conference= IEEE International Conference on Robotics and Automation (ICRA)|doi= 10.1109/ICRA.2014.6907374 }}&amp;lt;/ref&amp;gt;群体的直接控制和稳定。为了异质 UAV-UGV 群体的稳定性，Saska 等人将该模型用于板载相对定位。&amp;lt;ref&amp;gt;{{cite conference |title= Coordination and Navigation of Heterogeneous UAVs-UGVs Teams Localized by a Hawk-Eye Approach  |first1= Martin |last1= Saska |first2= Vonasek |last2= Vojtech |first3= Krajnik |last3= Tomas |first4= Preucil |last4= Libor |year= 2012 |conference= IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)|url=http://labe.felk.cvut.cz/~tkrajnik/ardrone/articles/formace.pdf}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在当时提出时，Reynolds的方法相比于传统的计算机动画电影技术是一个巨大的进步。第一部利用了此模型的动画片是《'''史丹利和史黛拉: 破冰 Stanley and Stella in: Breaking The Ice'''》（1987），之后是'''蒂姆·伯顿 Tim Burton'''的故事片《'''蝙蝠侠归来 Batman Returns'''》（1992），电脑合成的蝙蝠群和成群的企鹅行进穿过'''哥谭市 Gotham City'''的街道。&amp;lt;ref&amp;gt;{{cite journal | url=http://lrss.fri.uni-lj.si/people/ilbajec/papers/ilb_ab09.pdf | last1=Lebar Bajec |first1= Iztok |first2=  Frank H. |last2= Heppner | date=2009 | title=Organized flight in birds | journal=Animal Behaviour | volume = 78 | issue = 4 | pages = 777–789 | doi = 10.1016/j.anbehav.2009.07.007 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Boids 模型已经被用于其他有趣应用。该系统已应用于互联网多频道广播电台的自动节目编排，它也被用于可视化信息和优化任务。&amp;lt;ref&amp;gt;{{cite conference| title= DJ-boids: emergent collective behavior as multichannel radio station programming| first1 = Jesús | last1 = Ibáñez| first2 = Antonio F. | last2 = Gómez-Skarmeta| first3 = Josep | last3 = Blat| date = 2003| booktitle = Proceedings of the 8th international conference on Intelligent User Interfaces| pages = 248–250| doi= 10.1145/604045.604089}}&amp;lt;/ref&amp;gt;以及可视化信息&amp;lt;ref&amp;gt;{{cite conference| title= Time-Varying Data Visualization Using Information Flocking Boids| last = Moere | first = A V| date= 2004| booktitle = Proceedings of the IEEE Symposium on Information Visualization| pages= 97–104| doi= 10.1109/INFVIS.2004.65}}&amp;lt;/ref&amp;gt;和优化任务。&amp;lt;ref&amp;gt;{{cite journal|first1 = Zhihua | last1 = Cui|first2 = Zhongzhi | last2 = Shi|title= Boid particle swarm optimisation|journal= International Journal of Innovative Computing and Applications|volume=2 |issue=2 |pages= 77–85|date=2009|doi= 10.1504/IJICA.2009.031778}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==代码实现==&lt;br /&gt;
以下内容是使用BOIDS三层模型对鸟群运动进行了模拟，可以通过调节不同的参数获取到不同的实验现象，可以在这个基础上修改模型规则，以更好的模拟集群运动，本文提供一个模板。代码来源是[https://www.cnblogs.com/zhangqifire/p/6621441.html 沐雨橙风fire]所写的博客。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding:utf-8 -*-&lt;br /&gt;
import argparse&lt;br /&gt;
import math&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import matplotlib.animation as animation&lt;br /&gt;
from scipy.spatial.distance import squareform, pdist&lt;br /&gt;
from numpy.linalg import norm&lt;br /&gt;
 &lt;br /&gt;
width, height = 1920, 1080&lt;br /&gt;
 &lt;br /&gt;
N = 100             # number of birds&lt;br /&gt;
minDist = 100.0      # min dist of approach&lt;br /&gt;
maxRuleVel = 0.3    # max magnitude of velocities calculated by &amp;quot;rules&amp;quot;&lt;br /&gt;
maxVel = 3.0        # max magnitude of final velocity&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
class Birds:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Simulates flock behaviour of birds, using the realistic-looking Boids model (1986)&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.N = N&lt;br /&gt;
        self.minDist = minDist&lt;br /&gt;
        self.maxRuleVel = maxRuleVel&lt;br /&gt;
        self.maxVel = maxVel&lt;br /&gt;
 &lt;br /&gt;
        # Computing initial position and velocity&lt;br /&gt;
        self.pos = [width / 2.0, height / 2.0] + 10 * np.random.rand(2 * N).reshape(N, 2)&lt;br /&gt;
        # Create an array of N random variable angles in the range [0. 2pi]&lt;br /&gt;
        angles = 2 * math.pi * np.random.rand(N)&lt;br /&gt;
        # Random velocity vector [x,y] coordinates zip grouped&lt;br /&gt;
        self.vel = np.array(list(zip(np.sin(angles), np.cos(angles))))&lt;br /&gt;
    def savef(self):&lt;br /&gt;
        with open(&amp;quot;douban.txt&amp;quot;, &amp;quot;a&amp;quot;) as f:&lt;br /&gt;
            f.write(str(self.pos.reshape(1, N*2)))&lt;br /&gt;
            print str(self.pos.reshape(1, N*2))&lt;br /&gt;
            f.close()&lt;br /&gt;
    def tick(self, frameNum, pts, beak):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Update the simulation by one time step&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # get pairwise distances&lt;br /&gt;
        self.distMatrix = squareform(pdist(self.pos))&lt;br /&gt;
        # apply rules:&lt;br /&gt;
        self.vel += self.apply_rules()&lt;br /&gt;
        self.limit(self.vel, self.maxVel)&lt;br /&gt;
        self.pos += self.vel&lt;br /&gt;
        self.apply_bc()&lt;br /&gt;
        # update data&lt;br /&gt;
        pts.set_data(self.pos.reshape(2 * self.N)[::2],&lt;br /&gt;
                     self.pos.reshape(2 * self.N)[1::2])&lt;br /&gt;
        vec = self.pos + 10 * self.vel / self.maxVel&lt;br /&gt;
        beak.set_data(vec.reshape(2 * self.N)[::2],&lt;br /&gt;
                      vec.reshape(2 * self.N)[1::2])&lt;br /&gt;
        self.savef()&lt;br /&gt;
        #print self.pos.reshape(2 * self.N)&lt;br /&gt;
        #np.savetxt(&amp;quot;x.txt&amp;quot;, self.pos.reshape(1, 2*N))&lt;br /&gt;
    def limit_vec(self, vec, max_val):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; Limit magnitude of 2D vector &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        mag = norm(vec)&lt;br /&gt;
        if mag &amp;gt; max_val:&lt;br /&gt;
            vec[0], vec[1] = vec[0] * max_val / mag, vec[1] * max_val / mag&lt;br /&gt;
 &lt;br /&gt;
    def limit(self, x, max_val):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; Limit magnitide of 2D vectors in array X to maxValue &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        for vec in x:&lt;br /&gt;
            self.limit_vec(vec, max_val)&lt;br /&gt;
 &lt;br /&gt;
    def apply_bc(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; Apply boundary conditions &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        deltaR = 2.0&lt;br /&gt;
        for coord in self.pos:&lt;br /&gt;
            if coord[0] &amp;gt; width + deltaR:&lt;br /&gt;
                coord[0] = - deltaR&lt;br /&gt;
            if coord[0] &amp;lt; - deltaR:&lt;br /&gt;
                coord[0] = width + deltaR&lt;br /&gt;
            if coord[1] &amp;gt; height + deltaR:&lt;br /&gt;
                coord[1] = - deltaR&lt;br /&gt;
            if coord[1] &amp;lt; - deltaR:&lt;br /&gt;
                coord[1] = height + deltaR&lt;br /&gt;
 &lt;br /&gt;
    def apply_rules(self):&lt;br /&gt;
        # apply rule #1 - Separation&lt;br /&gt;
        D = self.distMatrix &amp;lt; 20.0&lt;br /&gt;
        vel = self.pos * D.sum(axis=1).reshape(self.N, 1) - D.dot(self.pos)&lt;br /&gt;
        self.limit(vel, self.maxRuleVel)&lt;br /&gt;
 &lt;br /&gt;
        # different distance threshold&lt;br /&gt;
        D = self.distMatrix &amp;lt; 50.0&lt;br /&gt;
 &lt;br /&gt;
        # apply rule #2 - Alignment&lt;br /&gt;
        vel2 = D.dot(self.vel)&lt;br /&gt;
        self.limit(vel2, self.maxRuleVel)&lt;br /&gt;
        vel += vel2&lt;br /&gt;
 &lt;br /&gt;
        # apply rule #1 - Cohesion&lt;br /&gt;
        vel3 = D.dot(self.pos) - self.pos&lt;br /&gt;
        self.limit(vel3, self.maxRuleVel)&lt;br /&gt;
        vel += vel3&lt;br /&gt;
 &lt;br /&gt;
        return vel&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def tick(frameNum, pts, beak, birds):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; Update function for animation &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    birds.tick(frameNum, pts, beak)&lt;br /&gt;
    return pts, beak&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def main():&lt;br /&gt;
    print('Starting flock simulation...')&lt;br /&gt;
 &lt;br /&gt;
    # Create birds&lt;br /&gt;
    birds = Birds()&lt;br /&gt;
 &lt;br /&gt;
    # Setup plot&lt;br /&gt;
    fig = plt.figure()&lt;br /&gt;
    ax = plt.axes(xlim=(0, width), ylim=(0, height))&lt;br /&gt;
    pts, = ax.plot([], [], markersize=10, c='k', marker='o', ls='None')&lt;br /&gt;
    beak, = ax.plot([], [], markersize=4, c='r', marker='o', ls='None')&lt;br /&gt;
    anim = animation.FuncAnimation(fig, tick, fargs=(pts, beak, birds), interval=20)&lt;br /&gt;
 &lt;br /&gt;
    # TODO: add a &amp;quot;button press&amp;quot; event handler to scatter birds&lt;br /&gt;
    #anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])&lt;br /&gt;
    plt.show(anim)&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
&lt;br /&gt;
*[[群体智能]] Swarm intelligence &lt;br /&gt;
&lt;br /&gt;
*[[粒子群优化算法]]&lt;br /&gt;
&lt;br /&gt;
*[[集群机器人]]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
&lt;br /&gt;
* [http://www.red3d.com/cwr/boids/ Craig Reynolds' Boids page]&lt;br /&gt;
&lt;br /&gt;
* [http://www.vergenet.net/~conrad/boids/pseudocode.html Explanation of algorithm in pseudocode]&lt;br /&gt;
&lt;br /&gt;
* [https://gpolo.github.com/birdflocking JavaScript implementation]&lt;br /&gt;
&lt;br /&gt;
* [https://lufemas.github.io/boid-ai-implementation/ JavaScript implementation with Phaser Framework]&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20080205014305/http://www.navgen.com/3d_boids/ 3D Boids Simulation using OpenGL, used by the BBC's Natural History Unit]&lt;br /&gt;
&lt;br /&gt;
* [https://black-square.github.io/BirdFlock/ Live In-Browser 3D Simulation of Bird Flocking Behavior in Unity3D] – Open Source implementation for Windows, Linux and Mac&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/piskvorky/PredatorPrey UNIX+Windows open source implementation in C++, using OpenGL and simulation controls]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/tofti/javafx-boids A java implementation using the javafx API]&lt;br /&gt;
&lt;br /&gt;
==编者推荐==&lt;br /&gt;
===集智相关课程===&lt;br /&gt;
[[File:Auklet_flock_Shumagins_1986.jpg|300px|thumb|[https://swarma.org/?p=16504 张江：乌合之众还是群智涌现？鸟群知道答案]]]&lt;br /&gt;
====[https://campus.swarma.org/course/1104 透过人工鸟群Boid模型学习List的使用]====&lt;br /&gt;
&lt;br /&gt;
讲师：[[张江]](北师大系统科学学院教授、博士生导师，集智俱乐部、集智学园创始人。)&lt;br /&gt;
&lt;br /&gt;
本课程通过数个案例教会大家如何去动手搭建一个多主体仿真模型，以及如何利用NetLogo去实现。从生命游戏到人工鸟群，从模拟经济系统到病毒沿网络的传播，通过循序渐进的案例，该课程带你逐步走入NetLogo多主体建模的神奇世界。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===集智相关文章===&lt;br /&gt;
====[https://swarma.org/?p=16504 张江：乌合之众还是群智涌现？鸟群知道答案]====&lt;br /&gt;
&lt;br /&gt;
生命如何起源，智能如何涌现，因果如何反转，复杂谜题，引人深思。2019年7月13日，集智俱乐部创始人[[张江]]教授在混沌大学授课，详细解读了复杂系统中的混沌、涌现与进化，此文整理自课堂内容。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===其他===&lt;br /&gt;
====[https://v.qq.com/x/page/z13491sn7fy.html 动画片《Stanley and Stella in: Breaking the Ice (1987)》]====&lt;br /&gt;
&lt;br /&gt;
Craig Reynolds 与 Symbolics Graphics 和 Whitney / Demos Production 的同事合作制作的利用 boids 模型的小短片，讲述了飞鸟与鱼相爱，鸟儿冲破冰面与鱼相见的故事。影片最早于87年在 SIGGRAPH 电子剧院展出。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
本中文词条由[[用户:Dorr|Dorr]]参与编译，[[用户:木子二月鸟|木子二月鸟]]审校，[[用户:薄荷|薄荷]]编辑，欢迎在讨论页面留言。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:人工生命]]&lt;br /&gt;
[[Category:1986软件]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41533</id>
		<title>DeepSeek-R1</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41533"/>
		<updated>2025-02-05T02:17:07Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=DeepSeek-R1,DeepSeek&lt;br /&gt;
|description=DeepSeek-R1的集智百科词条&lt;br /&gt;
}}&lt;br /&gt;
DeepSeek-R1是[[DeepSeek团队]]推出的第一代推理模型，通过[[强化学习]]（RL）和[[蒸馏技术]]显著提升了[[语言模型]]的推理能力。DeepSeek-R1-Zero模型在没有[[监督微调]]（SFT）的情况下，通过大规模[[强化学习]]训练展现出强大的推理能力，但存在可读性和语言混合问题。为了解决这些问题，DeepSeek-R1引入了冷启动数据和多阶段训练，推理性能与[[OpenAI]]的[[GPT o1]]-1217相当。此外，团队还开源了六个基于[[Qwen]]和[[Llama]]的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
&lt;br /&gt;
==背景==&lt;br /&gt;
该模型的开发背景源于传统[[语言模型]]在复杂推理任务中的局限性，尤其是在需要多步逻辑推理的场景中。尽管现有的语言模型在生成文本和理解语言方面表现出色，但在数学推理、代码生成等需要精确逻辑推理的任务中，表现仍然有限。&lt;br /&gt;
&lt;br /&gt;
为了解决这一问题，[[DeepSeek团队]]提出了基于[[强化学习]]的训练方法，开发了DeepSeek-R1系列模型。该模型的核心目标是通过[[强化学习]]和大规模训练，提升模型在复杂推理任务中的表现。[[DeepSeek-R1-Zero]]是这一系列中的第一个模型，它通过纯强化学习训练，无需[[监督微调]]（SFT），展现出强大的推理能力。然而，DeepSeek-R1-Zero 在训练过程中也暴露出一些问题，如可读性差、语言混合等。&lt;br /&gt;
&lt;br /&gt;
为了进一步优化模型，[[DeepSeek团队]]引入了冷启动数据和多阶段训练方法，开发了DeepSeek-R1。冷启动数据的使用使得模型在训练初期能够更快地收敛，并且通过多阶段训练，模型的推理能力和可读性得到了显著提升。此外，团队还探索了[[蒸馏技术]]，将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中也能表现出色。&lt;br /&gt;
&lt;br /&gt;
总的来说，DeepSeek-R1 的开发背景是为了解决传统语言模型在复杂推理任务中的不足，通过强化学习和蒸馏技术，提升模型在数学推理、代码生成等任务中的表现，并为研究社区提供开源的推理模型资源。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek系列模型===&lt;br /&gt;
&lt;br /&gt;
2023年7月，国内大型私募基金''[[幻方量化]]''成立了子公司''[[深度求索]]''，他们储备了过万张A100和H800计算显卡，开启了半年迭代一版大模型的探索历程：&lt;br /&gt;
&lt;br /&gt;
* 2024年1月，[[深度求索]]发布了第一代模型，[[DeepSeekMoE]]系列，最大的版本有67B参数，确立了[[混合专家模型]](MoE)架构路线，能大幅减少训练和生成期间的成本。另外，[[DeepSeekMoE]]发现了'''细粒度多数量Expert模块'''以及'''设立独立的共享Expert模块'''能获得更加稳定且更好的效果。&lt;br /&gt;
* 2024年5月，深度求索发布了第二代模型，[[DeepSeek-v2]]，最大的版本有273B参数。其中最重要的创新是'''[[多头潜在注意力机制]](Multi-head Latent Attention，MLA)'''。MLA能大幅降低模型在生成（推理）阶段的显卡缓存占用，据报告可降到原先的5%-13%，因而可以大大提高其在生成阶段的效率。这一创新，配合其他创新使得DeepSeek-v2的生成文字的成本降到只有每百万token一块钱。&lt;br /&gt;
* 2024年12月，深度求索发布了第三代模型，[[DeepSeek-v3]]，最大的版本有671B参数。v3采用了'''[[多token预测训练]]（Multi-Token Prediction, MTP）'''技术以及'''[[无损负载均衡]]'''技术，在训练过程大幅提高模型能力，最终使得其模型能力比肩GPT-4o的最新版本。此外，DeepSeek-v3还第一次证明了大规模fp8混合精度训练的可行性，提出了DualPipe算法来重叠集群间计算和通信的开销，以及针对[[MoE架构]]的PD分离策略等各种技术。&lt;br /&gt;
&lt;br /&gt;
==技术特点==&lt;br /&gt;
===DeepSeek-R1-Zero与强化学习===&lt;br /&gt;
[[DeepSeek-R1-Zero]]模型通过纯[[强化学习]]训练，无需[[监督微调]]（SFT），展现出强大的推理能力。且模型在训练过程中表现出“顿悟时刻”，即自发地重新评估和优化推理步骤。&lt;br /&gt;
&lt;br /&gt;
在以往的研究中，模型的性能提升主要依赖于大量的监督数据，或者在预训练模型的基础上通过[[监督微调]]（SFT）来实现。监督微调是指在[[预训练模型]]的基础上，使用带有标注的数据进行进一步训练，使模型更好地适应特定任务（如[[文本分类]]、[[图像识别]]等），从而提升其在该任务上的性能。然而，[[DeepSeek-R1-Zero]]模型的出现打破了这一传统模式，证明了即使不使用监督微调作为冷启动，也能通过大规模强化学习（RL）显著提高推理能力。这一方法可以类比[[DeepMind]]的[[Alpha-Zero]]，后者通过自我对弈生成数据，在围棋对弈中实现了无需人类先验知识的强大决策能力。&lt;br /&gt;
&lt;br /&gt;
[[DeepSeek-R1-Zero]]模型的创新主要体现在两个方面：[[组相对策略优化]]（GRPO）和[[规则化奖励]]（Rule-based reward）。&lt;br /&gt;
&lt;br /&gt;
- '''组相对策略优化（GRPO）'''：GRPO方法放弃了通常与策略模型大小相同的[[批评者模型]]，而是通过组得分来估计基线。这种方法类似于多个科研小组共同攻关同一个课题，当某个小组取得领先时，其他小组会复制其方法，从而节省强化学习的训练成本。&lt;br /&gt;
&lt;br /&gt;
- '''基于规则的奖励（Rule-based reward）'''：即训练过程中的奖励由一个规则系统给出（而非神经网络）。例如，确定性的数学题答案可以和事先给定的标准答案对比，确定奖惩信号，二代码题的答案还可以直接丢进编译器，由编译器给出通过与否的奖惩信号。除此了答案正确与否的奖惩信号，奖励系统中还引入了格式的奖惩信号，即希望模型输出遵守给定的格式，即整个思考过程并放在“&amp;lt;think&amp;gt;...&amp;lt;/think&amp;gt;”里，而最终答案放在“&amp;lt;answer&amp;gt;...&amp;lt;/answer&amp;gt;”。 基于规则的奖励实现起来简单高效，也避免了基于神经网络的奖励系统在大规模强化学习过程中可能出现的“奖励操纵”（reward hacking）。&lt;br /&gt;
&lt;br /&gt;
基于上述策略，[[DeepSeek-R1-Zero]]的训练展示了两个显著效果。首先，模型自然而然地学会了用更多的思考时间来解决推理任务。这一变化并非通过外部压力实现，而是模型内在发展的结果。其次，模型进化出了复杂性，并产生了引人注目的“[[顿悟时刻]]”。这些结果表明，[[DeepSeek-R1-Zero]]在推理能力上取得了重要突破。&lt;br /&gt;
&lt;br /&gt;
[[文件:推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。.png|推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间|alt=DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务|居左|600x450像素]]&lt;br /&gt;
&lt;br /&gt;
''推理过程中[[DeepSeek-R1-Zero]]在训练集上的平均响应时间。[[DeepSeek-R1-Zero]]⾃然⽽然地学会了⽤更多的思考时间来解决推理任务''&lt;br /&gt;
&lt;br /&gt;
然而，[[DeepSeek-R1-Zero]]也面临一些挑战。由于在预训练阶段完全放弃了对计算资源消耗巨大的监督学习，模型具有明显的成本优势。但与此同时，完全放弃监督学习也导致输出结果不稳定，且可读性较差。这一问题的存在引发了DeepSeek团队对模型优化的进一步思考。&lt;br /&gt;
&lt;br /&gt;
受到[[DeepSeek-R1-Zero]]成果的启发，研究人员提出了两个未来研究方向。首先，作为冷启动，纳入少量高质量数据能否进一步提高推理性能或加速收敛？其次，如何才能训练出一个用户友好型模型，不仅能生成清晰连贯的[[思维链]]（CoT），还能展示强大的通用能力？这些问题的探索将为模型的发展提供新的思路和可能性。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek-R1-Zero 的顿悟时刻===&lt;br /&gt;
[[顿悟时刻]](Aha Moment) 体现了模型能自发地重新评估和优化推理步骤的能力。如下图所示。模型重新评估了其初始解题方法，并学会了为解题分配更多的思考时间。使用强化学习方法，人们不需要明确教导模型解决问题方法，只需要提供适当的激励，即可让模型自主发展出问题解决策略。这种自主性不仅展示了模型推理能力的提升，还显示了强化学习在解锁AI智能水平方面的潜力。&lt;br /&gt;
&lt;br /&gt;
[[文件:table3aha.png|居左|480×308像素|DeepSeek-R1-Zero的某一中间版本中，出现的顿悟时刻]]&lt;br /&gt;
&lt;br /&gt;
===冷启动数据与多阶段训练===&lt;br /&gt;
为了解决可读性和语言混合问题，DeepSeek-R1引入了冷启动数据和多阶段训练方法。这些改进使得模型在推理任务中的表现与[[OpenAI]]的o1-1217模型相当。&lt;br /&gt;
&lt;br /&gt;
尽管[[DeepSeek-R1-Zero]]显示出了强大的推理能力，但其输出不符合人类的阅读习惯，且会混杂中英文甚至代码和数学符号，所以人类的阅读体验并不好。而要使模型的输出符合人类习惯，人们使用微调技术就会比较适合。于是[[DeepSeek团队]]在一定程度上又把[[监督微调]](SFT)技术请了回来，在最初使用少量标注数据对基模进行监督微调，作为模型的冷启动，然后再进行[[DeepSeek-R1-Zero]]所经历的大规模强化学习。&lt;br /&gt;
&lt;br /&gt;
====冷启动数据====&lt;br /&gt;
“冷启动”是人工智能领域的一个术语，用于描述人工智能模型在没有任何先前训练数据的情况下从头开始学习的情况。与DeepSeek-R1-Zero不同，为了避免从基础模型开始的强化学习训练早期不稳定的冷启动阶段，DeepSeek-R1构建和收集了少量长[[思维链]]数据，收集的过程主要注重过滤掉不易读的结果。&lt;br /&gt;
&lt;br /&gt;
这次冷启动阶段的监督微调和以往的“先监督微调后强化学习”训练过程有显著区别，最大的区别在于二者的数量上。比如[[DeepseekMath]]在RL前的监督微调阶段使用了77.6万个样本，而这次的冷启动阶段只使用了几千个。也正因为冷启动阶段用于微调的样本量相对较少，所以工程人员可以精心挑选这些样本，因此它们的质量也比以往监督微调阶段用到的数据要高得多。事先使用高质量数据微调后，模型在开始就会使用人类偏好的语言和思维风格进行思考，并输出对人类阅读体验友好的结果。且由于这些微调数据一般都有高质量的[[思维链]]（Chain of Thoughts），在后续的强化学习之始可以跳过不断随机摸索的阶段，快速发展出使用思维链进行复杂推理的能力。因此，少批量高质量数据的冷启动不仅能使模型输出符合人类的阅读偏好，还能使模型更快收敛，获得更强的推理能力。不过即便经过了冷启动，大模型在第二阶段的在大规模强化学习过程中还是显示出了语言混杂的现象。为了解决这一问题，Deepseek团队还在训练过程中加入了“语言一致性奖励”，即奖励模型尽可能使用一致的语言来思考和回答。&lt;br /&gt;
&lt;br /&gt;
====多阶段训练====&lt;br /&gt;
经过第一阶段的冷启动和第二阶段的大规模强化学习后，第三和第四阶段的训练分别是提高模型各方面能力的大规模微调和增强模型有用性及无害性的进一步的强化学习。&lt;br /&gt;
&lt;br /&gt;
第三阶段和第一阶段虽然都是微调，但在目的和规模上都不一样。第一阶段的冷启动微调是为了使模型的输出更具可读性和激发其后续的思维推理潜力，而第三阶段的微调是为了提升模型的其他的通用能力，比如写作，问答、翻译、角色扮演、自我反思等。为此，相比于冷启动所需的几千个数据样本，第三阶段的微调使用了80多万个样本数据。这里面包括各种来源的数据，比如说训练[[Deepseek-v3]]时用到的监督微调数据集。&lt;br /&gt;
&lt;br /&gt;
有趣的是，这80多万个样本中，有60多万个是从之前R1的训练过程中所得的checkpoints中得来。团队人员使用prompt去让checkpoint模型做出回答，然后使用一个训练好的[[奖励模型]]来判断哪些回答质量高可以保留，哪些质量差要被拒绝、丢弃掉，如此获得一个由这些checkpoint生成的，但质量又高于这些checkpoint平均水平的数据集，从而继续训练。这个过程也被称为拒绝采样（Rejection Sampling）。&lt;br /&gt;
&lt;br /&gt;
使用这80多万个数据样本对模型进一步微调后，模型不仅有了强大的思维推理能力，还具备了其它各方面的能力。现在最后一步就是要进一步提高模型的推理能力以及有用性，并使其输出无害。这也是第四阶段的进一步强化学习要做的事情。对用于提升其推理能力的数据，可以遵循DeepSeek-R1-Zero的方法获得，而用于提升有用性和无害性的数据，就需要收集模型对于prompt的回答并人工分析，标注出有害部分的数据，使用这些标注好的数据去做强化学习。这也被称作从[[人类反馈中的强化学习]]（Reinforcement Learning from Human Feedback）。&lt;br /&gt;
&lt;br /&gt;
总的来说，Deepseek-R1的训练分为四阶段，两个监督式微调阶段，两个RL阶段：&lt;br /&gt;
&lt;br /&gt;
* 第一阶段：冷启动监督微调，培养正确（符合人类偏好）的语言习惯、激发模型的推理潜能。&lt;br /&gt;
&lt;br /&gt;
* 第二阶段：大规模强化学习，本阶段专注于提升模型的推理密集任务的能力，并训练模型在回答问题时应保持语言一致。&lt;br /&gt;
&lt;br /&gt;
* 第三阶段：大规模监督微调，结合更广阔领域的数据，提高模型其他方面的通用能力。本阶段还对推理任务和非推理任务进行分开训练。&lt;br /&gt;
&lt;br /&gt;
* 第四阶段：进一步强化学习，从而进一步提高推理能力和响应的有效性，并减少其输出的有害内容。&lt;br /&gt;
&lt;br /&gt;
可见模型的主要推理能力涌现自第一和第二阶段，第三第四阶段更像都是后训练（post-training）。理论上还可以有第五阶段监督微调、第六阶段强化学习，第七阶段监督微调、第八阶段强化学习……，从而不断迭代提高模型的能力。&lt;br /&gt;
&lt;br /&gt;
===蒸馏技术===&lt;br /&gt;
[[DeepSeek团队]]开源了六个基于Qwen和Llama的[[蒸馏模型]]，帮助小型模型提升推理能力。蒸馏技术将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中表现优异。&lt;br /&gt;
&lt;br /&gt;
2015年，[[Geoffrey Hinton]]、Oriol Vinyals 和[[Jeff Dean]]等学者&amp;lt;ref&amp;gt;HINTON G, VINYALS O, DEAN J. Distilling the Knowledge in a Neural Network[J/OL]. 2015. DOI:10.48550/arxiv.1503.02531. https://arxiv.org/pdf/1503.02531&amp;lt;/ref&amp;gt;提出了在AI领域的[[知识蒸馏]]技术，即将大型、复杂模型（教师模型）的'''知识'''转移到小型、简单模型（学生模型）上去的技术。DeepSeek团队发现，不仅仅是知识，推理能力也可以从大模型蒸馏传递到小模型。&lt;br /&gt;
&lt;br /&gt;
DeepSeek团队用DeepSeek-R1第三阶段整理得到的80万个样本对一些开源模型如Qwen2.5和Llama3.3的小模型版本进行了直接微调。它们发现，仅仅是如此简单的微调就能大大提升小模型的推理能力，而且这种提升的幅度是仅凭大规模强化学习所不能得到的。为此，它们使用Qwen-32B-Base做了一个实验，对其分别做了与Deepseek-R1-Zero相同大规模的强化学习&amp;lt;ref&amp;gt; 这里有点微妙。原文是“we conduct large-scale RL training on Qwen-32B-Base using math, code, and STEM data, training for over '''10K steps'''”。很难说1万步的训练到底够不够大规模，也许对于671B的模型来说足够了，但对于32B的模型就不知道了。&amp;lt;/ref&amp;gt;，以及从Deepseek-R1做蒸馏。实验结果是，大规模强化学习后得到的版本，DeepSeek-R1-Zero-Qwen-32B，与目前32B最强的推理模型QwQ-32B-Preview能力相似，然而从Deepseek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B表现却远超前两者。&lt;br /&gt;
&lt;br /&gt;
至此我们也能暂且得出结论：模型蒸馏技术非常有用，相比之下，小模型做大规模强化学习不仅消耗大量算力，而且结果还不如从大模型蒸馏所得。然而，这一切的前提是有这么一个有强能力的大模型。因此，要获得更强的推理能力，还是需要更强的大模型和更大规模的强化学习。&lt;br /&gt;
&lt;br /&gt;
===性能表现===&lt;br /&gt;
&lt;br /&gt;
下图显示了 DeepSeek 进行的测试结果，该测试针对 OpenAI 的 o1 模型在数学、编码和推理任务上测试了其大型语言模型的三个版本。DeepSeek-R1 在数学和编码基准测试中击败或与o1相媲美。&amp;lt;ref&amp;gt;DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X., Zhang, X., Yu, X., Wu, Y., Wu, Z. F., Gou, Z., Shao, Z., Li, Z., Gao, Z., … Zhang, Z. (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (No. arXiv:2501.12948). arXiv. https://doi.org/10.48550/arXiv.2501.12948&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:Benchmark.jpg|940x557像素|居左|Benchmark]]&lt;br /&gt;
&lt;br /&gt;
====教育领域任务====&lt;br /&gt;
&lt;br /&gt;
在[[MMLU]]、[[MMLU-Pro]]和[[GPQA Diamond]]等知识基准测试表明，DeepSeek-R1 在STEM科学、技术、工程和数学）相关问题上相比 DeepSeek-V3 具有显著的改进。研究者将其归因于大规模强化学习（reinforcement learning, RL）的使用。&lt;br /&gt;
&lt;br /&gt;
* MMLU (Massive Multitask Language Understanding) 是一项涵盖多学科、多领域的大规模基准测试，旨在评估语言模型在不同任务和学科中的表现。这些任务包括人文、科学、社会科学和数学等多个领域的高中至专业水平的问题。DeepSeek-R1在MMLU基准测试中取得了 90.8% 的[[Pass@1准确率]]，显著优于 DeepSeek-V3，展示了其强大的知识处理和推理能力。&lt;br /&gt;
&lt;br /&gt;
* MMLU-Pro是一个更加复杂和鲁棒的多任务语言理解基准，设计用于挑战模型在更高难度任务中的表现。与MMLU相比，MMLU-Pro更强调推理能力和跨领域的综合性。DeepSeek-R1 在这一基准中取得了 84.0% 的准确率，超越了 DeepSeek-V3，并在挑战性更高的任务中展现了卓越的推理能力。&lt;br /&gt;
&lt;br /&gt;
* GPQA Diamond (Graduate-Level Google-Proof Q&amp;amp;A Benchmark) 是一个针对研究级问答任务设计的基准，问题往往需要复杂的推理和深度分析才能回答。DeepSeek-R1 在这一基准中的表现达到 71.5% 的 Pass@1 准确率，显著高于 DeepSeek-V3，进一步证明了其在处理复杂问题上的潜力。&lt;br /&gt;
&lt;br /&gt;
====长上下文任务====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在[[FRAMES]]（依赖长上下文的问答任务）基准测试中展现了强大的文档分析能力。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====事实性问答====&lt;br /&gt;
&lt;br /&gt;
在[[SimpleQA]]基准测试中，DeepSeek-R1 超越了 DeepSeek-V3，证明了其处理基于事实查询的能力。但是在中文 SimpleQA 基准上，DeepSeek-R1 的表现不如 DeepSeek-V3，主要由于安全强化学习（safety RL）导致模型拒绝回答某些问题。&lt;br /&gt;
&lt;br /&gt;
====指令执行与规范化输出====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在[[IF-Eval基准测试]]中表现优异。这个测试专注于评估模型遵循格式指令（format instructions）的能力。这些改进主要归因于监督微调（supervised fine-tuning, SFT）和强化学习（RL）后期阶段中指令遵循数据的引入&lt;br /&gt;
&lt;br /&gt;
* IF-Eval (Instruction Following Evaluation) 旨在评估模型遵循格式化指令的能力，是衡量其在严格指令执行中的表现的重要基准。DeepSeek-R1 在 IF-Eval 中表现卓越，得益于训练过程中加入了指令遵循数据。这种改进显示出 DeepSeek-R1 在格式化和结构化任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====写作和开放问答任务====&lt;br /&gt;
&lt;br /&gt;
在[[AlpacaEval]]2.0和[[ArenaHard]]基准测试中，DeepSeek-R1 表现出色，进一步表明其在写作任务和开放问答（open-domain question answering）中的优势，强调了大规模强化学习的泛化优势，不仅增强了推理能力，还提升了跨领域的表现能力。此外，DeepSeek-R1 生成的摘要长度简洁，表明 DeepSeek-R1 在基于 GPT 的评估中避免了引入长度偏差（length bias），进一步巩固了其在多任务中的稳健性。&lt;br /&gt;
&lt;br /&gt;
* AlpacaEval 2.0 是一个评估模型在开放式问答任务中能力的基准，测试模型在非考试导向任务（如写作和回答复杂问题）中的表现。DeepSeek-R1 在这一基准中实现了 87.6% 的胜率（win-rate），显著优于 DeepSeek-V3，证明了其强大的写作能力和开放域问答能力。&lt;br /&gt;
&lt;br /&gt;
* ArenaHard 是一个以对话评估为主的高难度基准测试，使用 GPT-4 作为裁判来比较模型在复杂对话中的表现。DeepSeek-R1 在该基准中实现了 92.3% 的胜率，展现了其在复杂对话任务中的优越性能，同时避免了由于输出长度导致的偏差。&lt;br /&gt;
&lt;br /&gt;
====数学和编程任务====&lt;br /&gt;
&lt;br /&gt;
在数学（如[[AIME]] 2024 和[[MATH-500]]）和编程任务（如[[LiveCodeBench]]和[[Codeforces]]）中，DeepSeek-R1 的表现显著优于其他模型，并与[[OpenAI-o1-1217]] 相当。&lt;br /&gt;
&lt;br /&gt;
* AIME，全称 American Invitational Mathematics Examination，是一项面向中学生的高水平数学竞赛，其难度介于 AMC（美国数学竞赛）和 IMO（国际数学奥林匹克竞赛）之间，享有极高的声誉与含金量。与 AMC 相比，AIME 的试题更具挑战性，需要参赛者具备更强的数学推理能力和问题解决技巧。同时，AIME 也是选拔美国数学奥林匹克竞赛（USAMO）和国际数学奥林匹克竞赛（IMO）国家队的重要环节之一。在这一测试中，DeepSeek-R1 达到了 79.8% 的 Pass@1 准确率，略高于 OpenAI o1-1217 模型的 79.2%。这一结果表明，DeepSeek-R1 具备以较高准确率解决高中生水平复杂数学问题的能力。&lt;br /&gt;
&lt;br /&gt;
* MATH-500 数据集收录了 500 道难度极高的数学竞赛题，涵盖代数、几何、数论、组合数学等多个领域。这些题目要求深厚的数学知识储备以及复杂的推理步骤才能解答。在这一测试中，DeepSeek-R1 以 97.3% 的惊人成绩表现出色，与 OpenAI 的 o1-1217 模型持平，并显著超越了其他对比模型。这一表现表明，DeepSeek-R1 已经能够胜任大学水平的数学竞赛题解答，展现了其卓越的数学推理能力。&lt;br /&gt;
&lt;br /&gt;
* Codeforces 是全球知名的编程竞赛平台，以高难度和强竞争性闻名，吸引了来自世界各地的顶尖程序员参赛。其竞赛题目通常需要选手具备扎实的算法和数据结构知识，以及优秀的编程能力。在 Codeforces 平台上，DeepSeek-R1 获得了 2029 的 Elo 评分，超过了 96.3% 的人类程序员。这一结果表明，DeepSeek-R1 的编程能力已经超越了绝大多数人类程序员，成为算法和编程领域的强大竞争者。&lt;br /&gt;
&lt;br /&gt;
====蒸馏模型的性能评价====&lt;br /&gt;
&lt;br /&gt;
蒸馏 DeepSeek-R1 的输出使小型模型（如 DeepSeek-R1-Distill-Qwen-7B 和 DeepSeek-R1-Distill-Qwen-32B）在多个基准上超越了 GPT-4o-0513 等非推理模型和其他对比模型。这表明蒸馏技术的有效性。&lt;br /&gt;
&lt;br /&gt;
===开源贡献===&lt;br /&gt;
DeepSeek团队开源了以下模型，可以在 [https://github.com/deepseek-ai/DeepSeek-R1 GitHub 主页]下载：&lt;br /&gt;
&lt;br /&gt;
* DeepSeek-R1-Zero&lt;br /&gt;
* DeepSeek-R1&lt;br /&gt;
* 六个基于Qwen和Llama的蒸馏模型&lt;br /&gt;
&lt;br /&gt;
这些开源模型为研究社区提供了宝贵的资源，帮助进一步探索语言模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
===应用场景===&lt;br /&gt;
&lt;br /&gt;
* 推理密集型任务：例如编程任务中的代码生成、算法设计，以及数学问题求解、科学推理和逻辑分析等需要复杂推理的场景。&lt;br /&gt;
&lt;br /&gt;
* 教育与知识应用：可用于解决教育领域的问题，支持知识理解与解答。&lt;br /&gt;
&lt;br /&gt;
* 文档分析与长上下文理解：适合处理需要深入文档分析和理解长上下文的任务，例如复杂信息提取与整合。&lt;br /&gt;
&lt;br /&gt;
* 开放领域问答与写作：在内容生成、问题回答以及创造性写作中具有广泛应用，例如生成高质量文本或进行内容编辑。&lt;br /&gt;
&lt;br /&gt;
* 数据分析与搜索：在数据处理与智能搜索中展现出应用潜力，能够高效解析复杂信息。&lt;br /&gt;
&lt;br /&gt;
===未来展望===&lt;br /&gt;
DeepSeek团队计划进一步优化强化学习在推理任务中的应用，并探索更多蒸馏技术的潜力，以提升小型模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
==DeepSeek-R1发布带来的社会影响==&lt;br /&gt;
DeepSeek-R1 模型的发布确实引发了广泛关注，尤其是在中美科技竞争背景下，其影响不仅限于技术层面，还涉及经济、政治和国际关系等多个领域。&lt;br /&gt;
&lt;br /&gt;
===社会影响===&lt;br /&gt;
以下是该模型发布所产生的主要社会影响：&lt;br /&gt;
&lt;br /&gt;
* 中国科技创新的标志性事件&lt;br /&gt;
** 技术突破的象征：DeepSeek-R1 的发布被视为中国在人工智能领域取得重大突破的标志，尤其是在推理能力方面，展示了中国在高端技术研发上的实力。&lt;br /&gt;
** 国际影响力的提升：该模型的成功发布进一步巩固了中国在全球人工智能领域的地位，被视为中国科技创新崛起的重要里程碑。&lt;br /&gt;
* 对美国科技行业的影响&lt;br /&gt;
** 科技股票波动：DeepSeek-R1 的发布引发了美国科技股票市场的震荡，尤其是英伟达等公司的股价出现下跌。市场担忧中国在人工智能领域的快速进步可能削弱美国企业的竞争优势。&lt;br /&gt;
** 企业调查与竞争压力：OpenAI 等美国科技公司对 DeepSeek-R1 的技术细节展开调查，试图了解其技术优势并制定应对策略。这加剧了中美科技企业之间的竞争。&lt;br /&gt;
* 美国政府与政策反应&lt;br /&gt;
** 技术封禁的讨论：有报道称，美国政府正在考虑对 DeepSeek-R1 模型实施封禁或限制，以防止其技术在美国的广泛应用。这一举措反映了美国对中国技术崛起的警惕。&lt;br /&gt;
** 出口管制与制裁：美国政府可能进一步加强对人工智能相关技术的出口管制，限制中国获取高端芯片和关键技术，以遏制中国在人工智能领域的发展。&lt;br /&gt;
* 对全球科技格局的影响&lt;br /&gt;
** 技术竞争加剧：DeepSeek-R1 的发布加剧了中美两国在人工智能领域的技术竞争，促使其他国家加快相关技术的研发和投资。&lt;br /&gt;
&lt;br /&gt;
===相关事件===&lt;br /&gt;
* 2025年1月27日，DeepSeek超越ChatGPT，登顶苹果App Store美国区免费APP下载排行榜。&amp;lt;ref&amp;gt;{{Cite web |title=DeepSeek超越ChatGPT，登顶苹果美国区免费APP下载排行榜 |url=https://www.thepaper.cn/newsDetail_forward_30041291 |website=澎湃新闻 |date=2025-01-27 |author=李潇潇, 胡含嫣 |access-date=2025-01-29}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2025年1月27日起，DeepSeek的服务器受到大规模网络攻击，许多用户无法登录或注册，或者进行对话。&amp;lt;ref name=&amp;quot;:2&amp;quot;&amp;gt;{{Cite web |title=攻击DeepSeek数量激增 中国网安专家：IP均来自美国 |url=https://www.zaobao.com.sg/realtime/china/story20250129-5803705 |website=联合早报 |date=2025-01-28 |access-date=2025-01-29}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2025年1月28日，DeepSeek表示，为持续提供服务，暂时限制中国以外号码的注册。&amp;lt;ref name=&amp;quot;:2&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=360宣布无偿为DeepSeek提供安全服务 |url=https://www.qlwb.com.cn/detail/25577947.html |website=齐鲁晚报 |date=2025-01-28 |access-date=2025-01-29}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[OpenAI]]表示，其有证据表明DeepSeek使用OpenAI的专有模型来训练自己的开源模型，这违反了OpenAI的服务条款。&amp;lt;ref&amp;gt;{{Cite web |title=OpenAI称有证据表明DeepSeek利用其模型训练竞争对手 |url=https://www.rfi.fr/cn/%E5%9B%BD%E9%99%85/20250129-openai%E7%A7%B0%E6%9C%89%E8%AF%81%E6%8D%AE%E8%A1%A8%E6%98%8Edeepseek%E5%88%A9%E7%94%A8%E5%85%B6%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83%E7%AB%9E%E4%BA%89%E5%AF%B9%E6%89%8B |website=RFI - 法国国际广播电台 |date=2025-01-29 |access-date=2025-01-29}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==加入我们==&lt;br /&gt;
&lt;br /&gt;
亲爱的社区成员和知识爱好者：&lt;br /&gt;
&lt;br /&gt;
我们正在寻找对知识分享充满热情的志愿者，加入我们的集智百科词条编写团队！无论你是某个领域的专家，还是对某一主题有浓厚兴趣，我们都欢迎你的加入。通过编写和编辑百科词条，你将有机会为全球读者提供准确、权威的信息，同时提升自己的写作和研究能力。&lt;br /&gt;
&lt;br /&gt;
===我们需要的帮助===&lt;br /&gt;
&lt;br /&gt;
* 编写新的集智百科词条，涵盖复杂系统、人工智能等多个领域&lt;br /&gt;
&lt;br /&gt;
* 更新和完善现有词条，确保信息的准确性和时效性&lt;br /&gt;
&lt;br /&gt;
* 校对和审核其他志愿者提交的内容，确保词条质量&lt;br /&gt;
&lt;br /&gt;
===我们希望你具备===&lt;br /&gt;
&lt;br /&gt;
* 良好的写作能力，能够清晰、简洁地表达复杂的概念&lt;br /&gt;
&lt;br /&gt;
* 对某一领域有深入了解或浓厚兴趣&lt;br /&gt;
&lt;br /&gt;
* 具备基本的网络搜索和信息整理能力&lt;br /&gt;
&lt;br /&gt;
* 有责任心和团队合作精神，愿意为知识共享贡献力量&lt;br /&gt;
&lt;br /&gt;
如果你对知识分享充满热情，愿意为全球读者提供有价值的信息，请立即加入我们！可以发送邮件至wangzhipeng@mail.bnu.edu.cn。&lt;br /&gt;
&lt;br /&gt;
让我们一起，用知识连接世界！&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41450</id>
		<title>DeepSeek-R1</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41450"/>
		<updated>2025-01-28T03:15:15Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeepSeek-R1是[[DeepSeek团队]]推出的第一代推理模型，通过[[强化学习]]（RL）和[[蒸馏技术]]显著提升了[[语言模型]]的推理能力。DeepSeek-R1-Zero模型在没有监督微调（SFT）的情况下，通过大规模RL训练展现出强大的推理能力，但存在可读性和语言混合问题。为了解决这些问题，DeepSeek-R1引入了冷启动数据和多阶段训练，推理性能与[[OpenAI]]的[[GPT o1]]-1217相当。此外，团队还开源了六个基于[[Qwen]]和[[Llama]]的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
&lt;br /&gt;
==背景==&lt;br /&gt;
该模型的开发背景源于传统语言模型在复杂推理任务中的局限性，尤其是在需要多步逻辑推理的场景中。尽管现有的语言模型在生成文本和理解语言方面表现出色，但在数学推理、代码生成等需要精确逻辑推理的任务中，表现仍然有限。&lt;br /&gt;
&lt;br /&gt;
为了解决这一问题，DeepSeek 团队提出了基于强化学习的训练方法，开发了DeepSeek-R1系列模型。该模型的核心目标是通过强化学习和大规模训练，提升模型在复杂推理任务中的表现。DeepSeek-R1-Zero是这一系列中的第一个模型，它通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。然而，DeepSeek-R1-Zero 在训练过程中也暴露出一些问题，如可读性差、语言混合等。&lt;br /&gt;
&lt;br /&gt;
为了进一步优化模型，DeepSeek 团队引入了冷启动数据和多阶段训练方法，开发了DeepSeek-R1。冷启动数据的使用使得模型在训练初期能够更快地收敛，并且通过多阶段训练，模型的推理能力和可读性得到了显著提升。此外，团队还探索了蒸馏技术，将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中也能表现出色。&lt;br /&gt;
&lt;br /&gt;
总的来说，DeepSeek-R1 的开发背景是为了解决传统语言模型在复杂推理任务中的不足，通过强化学习和蒸馏技术，提升模型在数学推理、代码生成等任务中的表现，并为研究社区提供开源的推理模型资源。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek系列模型===&lt;br /&gt;
2023年7月，国内大性私募''幻方''成立了子公司''深度求索''，储备了过万张A100和H800计算显卡，开启了半年迭代一版大模型的历程：&lt;br /&gt;
* 2024年1月，深度求索发布了第一代模型，DeepSeekMoE系列，最大的版本有67B参数，确立了MoE架构路线，能大幅减少训练和生成期间的成本。另外，DeepSeekMoE发现了'''细粒度多数量Expert模块'''以及'''设立独立的共享Expert模块'''能获得稳定且较好的效果。&lt;br /&gt;
* 2024年5月，深度求索发布了第二代模型，DeepSeek-v2，最大的版本有273B参数。其中最重要的创新是'''多头潜在注意力机制(Multi-head Latent Attention，MLA)'''。MLA能大幅降低模型在生成（推理）阶段的显卡缓存占用，据报告可降到原先的5%-13%，因而可以大大提高其在生成阶段的效率。这一创新，配合其他创新使得DeepSeek-v2的生成文字的成本降到只有每百万token一块钱。&lt;br /&gt;
* 2024年12月，深度求索发布了第三代模型，DeepSeek-v3，最大的版本有671B参数。v3采用了'''多token预测训练（Multi-Token Prediction, MTP）'''技术以及'''无损负载均衡'''技术，在训练过程大幅提高模型能力，最终使得其模型能力比肩GPT-4o的最新版本。此外，DeepSeek-v3还第一次证明了大规模fp8混合精度训练的可行性，提出了DualPipe算法来重叠集群间计算和通信的开销，以及针对MoE架构的PD分离策略等各种技术。&lt;br /&gt;
&lt;br /&gt;
==技术特点==&lt;br /&gt;
===强化学习训练===&lt;br /&gt;
   - DeepSeek-R1-Zero模型通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。&lt;br /&gt;
   - 模型在训练过程中表现出“顿悟时刻”，即自发地重新评估和优化推理步骤。&lt;br /&gt;
   &lt;br /&gt;
在以往的研究中，模型的性能提升主要依赖于大量的监督数据，或者在预训练模型的基础上通过监督微调（SFT）来实现。监督微调是指在预训练模型的基础上，使用带有标注的数据进行进一步训练，使模型更好地适应特定任务（如文本分类、图像识别等），从而提升其在该任务上的性能。然而，DeepSeek-R1-Zero模型的出现打破了这一传统模式，证明了即使不使用监督微调作为冷启动，也能通过大规模强化学习（RL）显著提高推理能力。这一方法可以类比DeepMind的Alpha-Zero，后者通过自我对弈生成数据，在围棋对弈中实现了无需人类先验知识的强大决策能力。&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1-Zero模型的创新主要体现在两个方面：组相对策略优化（GRPO）和规则化奖励（Rule-based reward）。&lt;br /&gt;
&lt;br /&gt;
- '''组相对策略优化（GRPO）'''：GRPO方法放弃了通常与策略模型大小相同的批评者模型，而是通过组得分来估计基线。这种方法类似于多个科研小组共同攻关同一个课题，当某个小组取得领先时，其他小组会复制其方法，从而节省强化学习的训练成本。&lt;br /&gt;
&lt;br /&gt;
- '''规则化奖励（Rule-based reward）'''：规则化奖励则是为了防止大规模强化学习过程中可能出现的“奖励操纵”（reward hacking）。DeepSeek-R1-Zero没有使用结果或过程神经奖励模型，而是要求模型在提供答案的同时输出规范化的思考过程。这就像为了防止科研小组通过作弊取得优势，要求他们必须记录规范的解题过程，而不仅仅是给出结果。&lt;br /&gt;
&lt;br /&gt;
基于上述策略，DeepSeek-R1-Zero的训练展示了两个显著结果。首先，模型自然而然地学会了用更多的思考时间来解决推理任务。这一变化并非通过外部压力实现，而是模型内在发展的结果。其次，模型进化出了复杂性，并产生了引人注目的“顿悟时刻”。这些结果表明，DeepSeek-R1-Zero在推理能力上取得了重要突破。&lt;br /&gt;
&lt;br /&gt;
[[文件:推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。.png|推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间|alt=DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务|居左|600x450像素]]&lt;br /&gt;
&lt;br /&gt;
''推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务''&lt;br /&gt;
&lt;br /&gt;
然而，DeepSeek-R1-Zero也面临一些挑战。由于在预训练阶段完全放弃了对计算资源消耗巨大的监督学习，模型具有明显的成本优势。但与此同时，完全放弃监督学习也导致输出结果不稳定，且可读性较差。这一问题的存在引发了对模型优化的进一步思考。&lt;br /&gt;
&lt;br /&gt;
受到DeepSeek-R1-Zero成果的启发，研究人员提出了两个未来研究方向。首先，作为冷启动，纳入少量高质量数据能否进一步提高推理性能或加速收敛？其次，如何才能训练出一个用户友好型模型，不仅能生成清晰连贯的思维链（CoT），还能展示强大的通用能力？这些问题的探索将为模型的发展提供新的思路和可能性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===冷启动数据与多阶段训练===&lt;br /&gt;
   - 为了解决可读性和语言混合问题，DeepSeek-R1引入了冷启动数据和多阶段训练方法。&lt;br /&gt;
   - 这些改进使得模型在推理任务中的表现与OpenAI的o1-1217模型相当。&lt;br /&gt;
&lt;br /&gt;
尽管 DeepSeek-R1-Zero 显示出了强大的推理能力，但其输出不符合人类的阅读习惯，且会混杂中英文甚至代码和数学符号，所以人类的阅读体验并不好。而使模型的输出符合人类习惯，就很适合使用微调技术。于是deepseek团队一定程度上又把监督微调(SFT)技术请了回来，在最初先使用少量标注数据对基模进行监督微调，作为冷启动，然后再进行 DeepSeek-R1-Zero 所经历的大规模强化学习。&lt;br /&gt;
&lt;br /&gt;
“冷启动”是人工智能领域的一个术语，用于描述人工智能模型在没有任何先前训练数据的情况下从头开始学习的情况。与 DeepSeek-R1-Zero 不同，为了避免从基础模型开始的强化学习训练早期不稳定的冷启动阶段，DeepSeek-R1 构建和收集了少量长思维链数据，收集的过程主要注重过滤掉不易读的结果。&lt;br /&gt;
&lt;br /&gt;
这次冷启动阶段的监督微调和以往的“先监督微调后强化学习”训练过程有显著区别，最大的区别在于数量上。比如DeepseekMath在RL前的监督微调阶段使用了77.6万个样本，而这次的冷启动阶段只使用了几千个。也正因为冷启动阶段用于微调的样本量相对较少，所以工程人员可以精心挑选这些样本，因此它们的质量也比以往监督微调阶段用到的数据要高得多。事先使用高质量数据微调后，模型在开始就会使用人类偏好的语言和思维风格进行思考，吐出对人类阅读体验友好的结果。且由于这些微调数据一般都有高质量的思维链（Chain of Thoughts），在后续的强化学习之始可以跳过不断随机摸索的阶段，快速发展出使用思维链进行复杂推理的能力。因此，少批量高质量数据的冷启动不仅能使模型输出符合人类阅读偏好，还能使模型更快收敛，获得更强的推理能力。不过即便经过了冷启动，大模型在第二阶段的在大规模强化学习过程中海水显示出语言混杂的现象。为了解决这一问题，Deepseek团队还在训练过程中加入了“语言一致性奖励”，即奖励模型尽可能使用一致的语言来思考和回答。&lt;br /&gt;
&lt;br /&gt;
经过第一阶段得冷启动和第二阶段的大规模强化学习后，第三和第四阶段的训练分别是提高模型各方面能力的大规模微调和增强模型有用性及无害性的进一步强化学习。第三阶段和第一阶段虽然都是微调，但在目的和规模上都不一样。第一阶段的冷启动微调是为了使模型的输出更具可读性和激发其后续的思维推理潜力，而第三阶段的微调是为了提升模型的其他通用能力，比如写作，问答、翻译、角色扮演、自我反思等。为此，相比于冷启动所需的几千个数据样本，第三阶段的微调使用的80多万样本数据。这里面包括各种来源的数据，比如说训练Deepseek-v3时用到的监督微调数据集。&lt;br /&gt;
&lt;br /&gt;
有趣的是，这80多万样本中60多万是从之前R1的训练过程中所得的checkpoints中得来。团队人员使用prompt去让checkpoint模型做出回答，然后使用一个训练好的奖励模型来给判断哪些回答质量高可以保留，哪些质量差要被拒绝、丢弃掉，如此获得一个由这些checkpoint生成的，但质量又高于这些checkpoint平均水平的数据集，从而继续训练。这个过程也被称为拒绝采样（Rejection Sampling）。&lt;br /&gt;
&lt;br /&gt;
使用这80多万数据样本对模型进一步微调后，模型不仅有了强大的思维推理能力，还有了各方面的能力。现在最后一步就是要进一步提高模型的推理能力以及有用性，并使其输出无害。这也是第四阶段的进一步强化学习要做的事情。对用于提升其推理能力的数据，可以遵循 DeepSeek-R1-Zero 的方法获得，而用于提升有用性和无害性的数据，就需要收集模型对于prompt的回答并人工分析，标注出有害部分的数据，使用这些标注好的数据去做强化学习。这也被称作从人类反馈中的强化学习（Reinforcement Learning from Human Feedback）。&lt;br /&gt;
&lt;br /&gt;
总的来说，Deepseek-R1的训练分为四阶段，两个SFT阶段，两个RL阶段：&lt;br /&gt;
&lt;br /&gt;
第一阶段：冷启动监督微调，培养正确（符合人类偏好）的语言习惯、激发模型的推理潜能。&lt;br /&gt;
&lt;br /&gt;
第二阶段：大规模强化学习，本阶段专注于提升模型的推理密集任务的能力，并训练模型在回答问题时保持语言一致。&lt;br /&gt;
&lt;br /&gt;
第三阶段：大规模监督微调，结合更广阔领域的数据，提高模型其他方面的通用能力。本阶段还对推理任务和非推理任务进行分开训练。&lt;br /&gt;
&lt;br /&gt;
第四阶段：进一步RL，进一步提高推理能力，响应的有效性，并减少其输出的有害内容。&lt;br /&gt;
&lt;br /&gt;
可见模型的主要推理能力涌现自第一和第二阶段，第三第四阶段更像都是后训练（post-training）。理论上还可以有第五阶段监督微调、第六强化学习，第七阶段监督微调、第八阶段强化学习，不断迭代提高模型的能力。&lt;br /&gt;
&lt;br /&gt;
===蒸馏技术===&lt;br /&gt;
   - DeepSeek团队开源了六个基于Qwen和Llama的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
   - 蒸馏技术将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中表现优异。&lt;br /&gt;
&lt;br /&gt;
2015年，Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean等学者&amp;lt;ref&amp;gt;HINTON G, VINYALS O, DEAN J. Distilling the Knowledge in a Neural Network[J/OL]. 2015. DOI:10.48550/arxiv.1503.02531. https://arxiv.org/pdf/1503.02531&amp;lt;/ref&amp;gt;提出了在AI领域的知识蒸馏技术，即将大型、复杂模型（教师模型）的'''知识'''转移到小型、简单模型（学生模型）的技术。DeepSeek团队发现，不仅仅是知识，推理能力也可以从大模型的推理能力蒸馏递到小模型。&lt;br /&gt;
&lt;br /&gt;
DeepSeek团队用DeepSeek-R1第三阶段整理得到的80万样本对一些开源模型如Qwen2.5和Llama3.3的小模型版本进行了直接微调。它们发现，仅仅是如此简单的微调就能大大提升小模型的推理能力，而且这种幅度的提升是仅凭大规模强化学习所不能得到的。为此，它们使用Qwen-32B-Base做了一个实验，对其分别做了与Deepseek-R1-Zero相同的大规模强化学习&amp;lt;ref&amp;gt; 这里有点微妙。原文是“we conduct large-scale RL training on Qwen-32B-Base using math,code,and STEM data,training for over '''10K steps'''”。很难说1万步的训练到底够不够大规模，也许对于671B的模型来说足够了，但对于32B的模型可能还缺了点。&amp;lt;/ref&amp;gt;，以及从Deepseek-R1做蒸馏。实验结果是，大规模强化学习后得到的版本，DeepSeek-R1-Zero-Qwen-32B，与目前32B最强的推理模型QwQ-32B-Preview能力相似，然而从Deepseek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B表现却远超前两者。&lt;br /&gt;
&lt;br /&gt;
至此我们也能暂且得出结论：模型蒸馏技术非常有用，相比之下，小模型做大规模强化学习不仅消耗大量算力，而且结果还不如从大模型蒸馏所得。然而，这一切的前提是有这么一个有强能力的大模型。因此，要获得更强的推理能力，还是需要更强的大模型和更大规模的强化学习。&lt;br /&gt;
&lt;br /&gt;
===性能表现===&lt;br /&gt;
&lt;br /&gt;
下图显示了 DeepSeek 进行的测试结果，该测试针对 OpenAI 的 o1 模型在数学、编码和推理任务上测试了其大型语言模型的三个版本。DeepSeek-R1 在数学和编码基准测试中击败或与o1相媲美。&amp;lt;ref&amp;gt;DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X., Zhang, X., Yu, X., Wu, Y., Wu, Z. F., Gou, Z., Shao, Z., Li, Z., Gao, Z., … Zhang, Z. (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (No. arXiv:2501.12948). arXiv. https://doi.org/10.48550/arXiv.2501.12948&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====教育领域任务====&lt;br /&gt;
&lt;br /&gt;
在 MMLU、MMLU-Pro 和 GPQA Diamond 等知识基准测试表明，DeepSeek-R1 在 STEM（科学、技术、工程和数学）相关问题上相比 DeepSeek-V3 具有显著的改进。研究者将其归因于大规模强化学习（reinforcement learning, RL）的使用。&lt;br /&gt;
&lt;br /&gt;
* MMLU (Massive Multitask Language Understanding) 是一项涵盖多学科、多领域的大规模基准测试，旨在评估语言模型在不同任务和学科中的表现。这些任务包括人文、科学、社会科学和数学等多个领域的高中至专业水平的问题。DeepSeek-R1 在 MMLU 基准测试中取得了 90.8% 的 Pass@1 准确率，显著优于 DeepSeek-V3，展示了其强大的知识处理和推理能力。&lt;br /&gt;
&lt;br /&gt;
* MMLU-Pro 是一个更加复杂和鲁棒的多任务语言理解基准，设计用于挑战模型在更高难度任务中的表现。与 MMLU 相比，MMLU-Pro 更强调推理能力和跨领域的综合性。DeepSeek-R1 在这一基准中取得了 84.0% 的准确率，超越了 DeepSeek-V3，并在挑战性更高的任务中展现了卓越的推理能力。&lt;br /&gt;
&lt;br /&gt;
* GPQA Diamond (Graduate-Level Google-Proof Q&amp;amp;A Benchmark) 是一个针对研究级问答任务设计的基准，问题往往需要复杂的推理和深度分析才能回答。DeepSeek-R1 在这一基准中的表现达到 71.5% 的 Pass@1 准确率，显著高于 DeepSeek-V3，进一步证明了其在处理复杂问题上的潜力。&lt;br /&gt;
&lt;br /&gt;
====长上下文任务====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 FRAMES（依赖长上下文的问答任务）基准测试中展现了强大的文档分析能力。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====事实性问答====&lt;br /&gt;
&lt;br /&gt;
在 SimpleQA 基准测试中，DeepSeek-R1 超越了 DeepSeek-V3，证明了其处理基于事实查询的能力。但是在中文 SimpleQA 基准上，DeepSeek-R1 的表现不如 DeepSeek-V3，主要由于安全强化学习（safety RL）导致模型拒绝回答某些问题。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====指令执行与规范化输出====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 IF-Eval 基准测试中表现优异。这个测试专注于评估模型遵循格式指令（format instructions）的能力。这些改进主要归因于监督微调（supervised fine-tuning, SFT）和强化学习（RL）后期阶段中指令遵循数据的引入&lt;br /&gt;
&lt;br /&gt;
* IF-Eval (Instruction Following Evaluation) 旨在评估模型遵循格式化指令的能力，是衡量其在严格指令执行中的表现的重要基准。DeepSeek-R1 在 IF-Eval 中表现卓越，得益于训练过程中加入了指令遵循数据。这种改进显示出 DeepSeek-R1 在格式化和结构化任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====写作和开放问答任务====&lt;br /&gt;
&lt;br /&gt;
在 AlpacaEval 2.0 和 ArenaHard 基准测试中，DeepSeek-R1 表现出色，进一步表明其在写作任务和开放问答（open-domain question answering）中的优势，强调了大规模强化学习的泛化优势，不仅增强了推理能力，还提升了跨领域的表现能力。此外，DeepSeek-R1 生成的摘要长度简洁，表明 DeepSeek-R1 在基于 GPT 的评估中避免了引入长度偏差（length bias），进一步巩固了其在多任务中的稳健性。&lt;br /&gt;
&lt;br /&gt;
* AlpacaEval 2.0 是一个评估模型在开放式问答任务中能力的基准，测试模型在非考试导向任务（如写作和回答复杂问题）中的表现。DeepSeek-R1 在这一基准中实现了 87.6% 的胜率（win-rate），显著优于 DeepSeek-V3，证明了其强大的写作能力和开放域问答能力。&lt;br /&gt;
&lt;br /&gt;
* ArenaHard 是一个以对话评估为主的高难度基准测试，使用 GPT-4 作为裁判来比较模型在复杂对话中的表现。DeepSeek-R1 在该基准中实现了 92.3% 的胜率，展现了其在复杂对话任务中的优越性能，同时避免了由于输出长度导致的偏差。&lt;br /&gt;
&lt;br /&gt;
====数学和编程任务====&lt;br /&gt;
&lt;br /&gt;
在数学（如 AIME 2024 和 MATH-500）和编程任务（如 LiveCodeBench 和 Codeforces）中，DeepSeek-R1 的表现显著优于其他模型，并与 OpenAI-o1-1217 相当。&lt;br /&gt;
&lt;br /&gt;
* AIME，全称 American Invitational Mathematics Examination，是一项面向中学生的高水平数学竞赛，其难度介于 AMC（美国数学竞赛）和 IMO（国际数学奥林匹克竞赛）之间，享有极高的声誉与含金量。与 AMC 相比，AIME 的试题更具挑战性，需要参赛者具备更强的数学推理能力和问题解决技巧。同时，AIME 也是选拔美国数学奥林匹克竞赛（USAMO）和国际数学奥林匹克竞赛（IMO）国家队的重要环节之一。在这一测试中，DeepSeek-R1 达到了 79.8% 的 Pass@1 准确率，略高于 OpenAI o1-1217 模型的 79.2%。这一结果表明，DeepSeek-R1 具备以较高准确率解决高中生水平复杂数学问题的能力。&lt;br /&gt;
&lt;br /&gt;
* MATH-500 数据集收录了 500 道难度极高的数学竞赛题，涵盖代数、几何、数论、组合数学等多个领域。这些题目要求深厚的数学知识储备以及复杂的推理步骤才能解答。在这一测试中，DeepSeek-R1 以 97.3% 的惊人成绩表现出色，与 OpenAI 的 o1-1217 模型持平，并显著超越了其他对比模型。这一表现表明，DeepSeek-R1 已经能够胜任大学水平的数学竞赛题解答，展现了其卓越的数学推理能力。&lt;br /&gt;
&lt;br /&gt;
* Codeforces 是全球知名的编程竞赛平台，以高难度和强竞争性闻名，吸引了来自世界各地的顶尖程序员参赛。其竞赛题目通常需要选手具备扎实的算法和数据结构知识，以及优秀的编程能力。在 Codeforces 平台上，DeepSeek-R1 获得了 2029 的 Elo 评分，超过了 96.3% 的人类程序员。这一结果表明，DeepSeek-R1 的编程能力已经超越了绝大多数人类程序员，成为算法和编程领域的强大竞争者。&lt;br /&gt;
&lt;br /&gt;
====蒸馏模型的性能评价====&lt;br /&gt;
&lt;br /&gt;
蒸馏 DeepSeek-R1 的输出使小型模型（如 DeepSeek-R1-Distill-Qwen-7B 和 DeepSeek-R1-Distill-Qwen-32B）在多个基准上超越了 GPT-4o-0513 等非推理模型和其他对比模型。这表明蒸馏技术的有效性。&lt;br /&gt;
&lt;br /&gt;
===开源贡献===&lt;br /&gt;
DeepSeek团队开源了以下模型，可以在 [https://github.com/deepseek-ai/DeepSeek-R1 GitHub 主页]下载：&lt;br /&gt;
&lt;br /&gt;
* DeepSeek-R1-Zero&lt;br /&gt;
* DeepSeek-R1&lt;br /&gt;
* 六个基于Qwen和Llama的蒸馏模型&lt;br /&gt;
&lt;br /&gt;
这些开源模型为研究社区提供了宝贵的资源，帮助进一步探索语言模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
===应用场景===&lt;br /&gt;
&lt;br /&gt;
* 推理密集型任务：例如编程任务中的代码生成、算法设计，以及数学问题求解、科学推理和逻辑分析等需要复杂推理的场景。&lt;br /&gt;
&lt;br /&gt;
* 教育与知识应用：可用于解决教育领域的问题，支持知识理解与解答。&lt;br /&gt;
&lt;br /&gt;
* 文档分析与长上下文理解：适合处理需要深入文档分析和理解长上下文的任务，例如复杂信息提取与整合。&lt;br /&gt;
&lt;br /&gt;
* 开放领域问答与写作：在内容生成、问题回答以及创造性写作中具有广泛应用，例如生成高质量文本或进行内容编辑。&lt;br /&gt;
&lt;br /&gt;
* 数据分析与搜索：在数据处理与智能搜索中展现出应用潜力，能够高效解析复杂信息。&lt;br /&gt;
&lt;br /&gt;
===未来展望===&lt;br /&gt;
DeepSeek团队计划进一步优化强化学习在推理任务中的应用，并探索更多蒸馏技术的潜力，以提升小型模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==加入我们==&lt;br /&gt;
&lt;br /&gt;
亲爱的社区成员和知识爱好者：&lt;br /&gt;
&lt;br /&gt;
我们正在寻找对知识分享充满热情的志愿者，加入我们的集智百科词条编写团队！无论你是某个领域的专家，还是对某一主题有浓厚兴趣，我们都欢迎你的加入。通过编写和编辑百科词条，你将有机会为全球读者提供准确、权威的信息，同时提升自己的写作和研究能力。&lt;br /&gt;
&lt;br /&gt;
===我们需要的帮助===&lt;br /&gt;
&lt;br /&gt;
* 编写新的集智百科词条，涵盖复杂系统、人工智能等多个领域&lt;br /&gt;
&lt;br /&gt;
* 更新和完善现有词条，确保信息的准确性和时效性&lt;br /&gt;
&lt;br /&gt;
* 校对和审核其他志愿者提交的内容，确保词条质量&lt;br /&gt;
&lt;br /&gt;
===我们希望你具备===&lt;br /&gt;
&lt;br /&gt;
* 良好的写作能力，能够清晰、简洁地表达复杂的概念&lt;br /&gt;
&lt;br /&gt;
* 对某一领域有深入了解或浓厚兴趣&lt;br /&gt;
&lt;br /&gt;
* 具备基本的网络搜索和信息整理能力&lt;br /&gt;
&lt;br /&gt;
* 有责任心和团队合作精神，愿意为知识共享贡献力量&lt;br /&gt;
&lt;br /&gt;
如果你对知识分享充满热情，愿意为全球读者提供有价值的信息，请立即加入我们！可以发送邮件至wangzhipeng@mail.bnu.edu.cn。&lt;br /&gt;
&lt;br /&gt;
让我们一起，用知识连接世界！&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41449</id>
		<title>DeepSeek-R1</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41449"/>
		<updated>2025-01-28T03:13:12Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeepSeek-R1是[[DeepSeek团队]]推出的第一代推理模型，通过[[强化学习]]（RL）和[[蒸馏技术]]显著提升了[[语言模型]]的推理能力。DeepSeek-R1-Zero模型在没有监督微调（SFT）的情况下，通过大规模RL训练展现出强大的推理能力，但存在可读性和语言混合问题。为了解决这些问题，DeepSeek-R1引入了冷启动数据和多阶段训练，推理性能与[[OpenAI]]的[[GPT o1]]-1217相当。此外，团队还开源了六个基于[[Qwen]]和[[Llama]]的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
&lt;br /&gt;
==背景==&lt;br /&gt;
该模型的开发背景源于传统语言模型在复杂推理任务中的局限性，尤其是在需要多步逻辑推理的场景中。尽管现有的语言模型在生成文本和理解语言方面表现出色，但在数学推理、代码生成等需要精确逻辑推理的任务中，表现仍然有限。&lt;br /&gt;
&lt;br /&gt;
为了解决这一问题，DeepSeek 团队提出了基于强化学习的训练方法，开发了DeepSeek-R1系列模型。该模型的核心目标是通过强化学习和大规模训练，提升模型在复杂推理任务中的表现。DeepSeek-R1-Zero是这一系列中的第一个模型，它通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。然而，DeepSeek-R1-Zero 在训练过程中也暴露出一些问题，如可读性差、语言混合等。&lt;br /&gt;
&lt;br /&gt;
为了进一步优化模型，DeepSeek 团队引入了冷启动数据和多阶段训练方法，开发了DeepSeek-R1。冷启动数据的使用使得模型在训练初期能够更快地收敛，并且通过多阶段训练，模型的推理能力和可读性得到了显著提升。此外，团队还探索了蒸馏技术，将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中也能表现出色。&lt;br /&gt;
&lt;br /&gt;
总的来说，DeepSeek-R1 的开发背景是为了解决传统语言模型在复杂推理任务中的不足，通过强化学习和蒸馏技术，提升模型在数学推理、代码生成等任务中的表现，并为研究社区提供开源的推理模型资源。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek系列模型===&lt;br /&gt;
2023年7月，国内大性私募''幻方''成立了子公司''深度求索''，储备了过万张A100和H800计算显卡，开启了半年迭代一版大模型的历程：&lt;br /&gt;
* 2024年1月，深度求索发布了第一代模型，DeepSeekMoE系列，最大的版本有67B参数，确立了MoE架构路线，能大幅减少训练和生成期间的成本。另外，DeepSeekMoE发现了'''细粒度多数量Expert模块'''以及'''设立独立的共享Expert模块'''能获得稳定且较好的效果。&lt;br /&gt;
* 2024年5月，深度求索发布了第二代模型，DeepSeek-v2，最大的版本有273B参数。其中最重要的创新是'''多头潜在注意力机制(Multi-head Latent Attention，MLA)'''。MLA能大幅降低模型在生成（推理）阶段的显卡缓存占用，据报告可降到原先的5%-13%，因而可以大大提高其在生成阶段的效率。这一创新，配合其他创新使得DeepSeek-v2的生成文字的成本降到只有每百万token一块钱。&lt;br /&gt;
* 2024年12月，深度求索发布了第三代模型，DeepSeek-v3，最大的版本有671B参数。v3采用了'''多token预测训练（Multi-Token Prediction, MTP）'''技术以及'''无损负载均衡'''技术，在训练过程大幅提高模型能力，最终使得其模型能力比肩GPT-4o的最新版本。此外，DeepSeek-v3还第一次证明了大规模fp8混合精度训练的可行性，提出了DualPipe算法来重叠集群间计算和通信的开销，以及针对MoE架构的PD分离策略等各种技术。&lt;br /&gt;
&lt;br /&gt;
==技术特点==&lt;br /&gt;
===强化学习训练===&lt;br /&gt;
   - DeepSeek-R1-Zero模型通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。&lt;br /&gt;
   - 模型在训练过程中表现出“顿悟时刻”，即自发地重新评估和优化推理步骤。&lt;br /&gt;
   &lt;br /&gt;
在以往的研究中，模型的性能提升主要依赖于大量的监督数据，或者在预训练模型的基础上通过监督微调（SFT）来实现。监督微调是指在预训练模型的基础上，使用带有标注的数据进行进一步训练，使模型更好地适应特定任务（如文本分类、图像识别等），从而提升其在该任务上的性能。然而，DeepSeek-R1-Zero模型的出现打破了这一传统模式，证明了即使不使用监督微调作为冷启动，也能通过大规模强化学习（RL）显著提高推理能力。这一方法可以类比DeepMind的Alpha-Zero，后者通过自我对弈生成数据，在围棋对弈中实现了无需人类先验知识的强大决策能力。&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1-Zero模型的创新主要体现在两个方面：组相对策略优化（GRPO）和规则化奖励（Rule-based reward）。&lt;br /&gt;
&lt;br /&gt;
- '''组相对策略优化（GRPO）'''：GRPO方法放弃了通常与策略模型大小相同的批评者模型，而是通过组得分来估计基线。这种方法类似于多个科研小组共同攻关同一个课题，当某个小组取得领先时，其他小组会复制其方法，从而节省强化学习的训练成本。&lt;br /&gt;
&lt;br /&gt;
- '''规则化奖励（Rule-based reward）'''：规则化奖励则是为了防止大规模强化学习过程中可能出现的“奖励操纵”（reward hacking）。DeepSeek-R1-Zero没有使用结果或过程神经奖励模型，而是要求模型在提供答案的同时输出规范化的思考过程。这就像为了防止科研小组通过作弊取得优势，要求他们必须记录规范的解题过程，而不仅仅是给出结果。&lt;br /&gt;
&lt;br /&gt;
基于上述策略，DeepSeek-R1-Zero的训练展示了两个显著结果。首先，模型自然而然地学会了用更多的思考时间来解决推理任务。这一变化并非通过外部压力实现，而是模型内在发展的结果。其次，模型进化出了复杂性，并产生了引人注目的“顿悟时刻”。这些结果表明，DeepSeek-R1-Zero在推理能力上取得了重要突破。&lt;br /&gt;
&lt;br /&gt;
[[文件:推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。.png|推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间|alt=DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务|居左|600x450像素]]&lt;br /&gt;
''推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务''&lt;br /&gt;
&lt;br /&gt;
然而，DeepSeek-R1-Zero也面临一些挑战。由于在预训练阶段完全放弃了对计算资源消耗巨大的监督学习，模型具有明显的成本优势。但与此同时，完全放弃监督学习也导致输出结果不稳定，且可读性较差。这一问题的存在引发了对模型优化的进一步思考。&lt;br /&gt;
&lt;br /&gt;
受到DeepSeek-R1-Zero成果的启发，研究人员提出了两个未来研究方向。首先，作为冷启动，纳入少量高质量数据能否进一步提高推理性能或加速收敛？其次，如何才能训练出一个用户友好型模型，不仅能生成清晰连贯的思维链（CoT），还能展示强大的通用能力？这些问题的探索将为模型的发展提供新的思路和可能性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===冷启动数据与多阶段训练===&lt;br /&gt;
   - 为了解决可读性和语言混合问题，DeepSeek-R1引入了冷启动数据和多阶段训练方法。&lt;br /&gt;
   - 这些改进使得模型在推理任务中的表现与OpenAI的o1-1217模型相当。&lt;br /&gt;
&lt;br /&gt;
尽管 DeepSeek-R1-Zero 显示出了强大的推理能力，但其输出不符合人类的阅读习惯，且会混杂中英文甚至代码和数学符号，所以人类的阅读体验并不好。而使模型的输出符合人类习惯，就很适合使用微调技术。于是deepseek团队一定程度上又把监督微调(SFT)技术请了回来，在最初先使用少量标注数据对基模进行监督微调，作为冷启动，然后再进行 DeepSeek-R1-Zero 所经历的大规模强化学习。&lt;br /&gt;
&lt;br /&gt;
“冷启动”是人工智能领域的一个术语，用于描述人工智能模型在没有任何先前训练数据的情况下从头开始学习的情况。与 DeepSeek-R1-Zero 不同，为了避免从基础模型开始的强化学习训练早期不稳定的冷启动阶段，DeepSeek-R1 构建和收集了少量长思维链数据，收集的过程主要注重过滤掉不易读的结果。&lt;br /&gt;
&lt;br /&gt;
这次冷启动阶段的监督微调和以往的“先监督微调后强化学习”训练过程有显著区别，最大的区别在于数量上。比如DeepseekMath在RL前的监督微调阶段使用了77.6万个样本，而这次的冷启动阶段只使用了几千个。也正因为冷启动阶段用于微调的样本量相对较少，所以工程人员可以精心挑选这些样本，因此它们的质量也比以往监督微调阶段用到的数据要高得多。事先使用高质量数据微调后，模型在开始就会使用人类偏好的语言和思维风格进行思考，吐出对人类阅读体验友好的结果。且由于这些微调数据一般都有高质量的思维链（Chain of Thoughts），在后续的强化学习之始可以跳过不断随机摸索的阶段，快速发展出使用思维链进行复杂推理的能力。因此，少批量高质量数据的冷启动不仅能使模型输出符合人类阅读偏好，还能使模型更快收敛，获得更强的推理能力。不过即便经过了冷启动，大模型在第二阶段的在大规模强化学习过程中海水显示出语言混杂的现象。为了解决这一问题，Deepseek团队还在训练过程中加入了“语言一致性奖励”，即奖励模型尽可能使用一致的语言来思考和回答。&lt;br /&gt;
&lt;br /&gt;
经过第一阶段得冷启动和第二阶段的大规模强化学习后，第三和第四阶段的训练分别是提高模型各方面能力的大规模微调和增强模型有用性及无害性的进一步强化学习。第三阶段和第一阶段虽然都是微调，但在目的和规模上都不一样。第一阶段的冷启动微调是为了使模型的输出更具可读性和激发其后续的思维推理潜力，而第三阶段的微调是为了提升模型的其他通用能力，比如写作，问答、翻译、角色扮演、自我反思等。为此，相比于冷启动所需的几千个数据样本，第三阶段的微调使用的80多万样本数据。这里面包括各种来源的数据，比如说训练Deepseek-v3时用到的监督微调数据集。&lt;br /&gt;
&lt;br /&gt;
有趣的是，这80多万样本中60多万是从之前R1的训练过程中所得的checkpoints中得来。团队人员使用prompt去让checkpoint模型做出回答，然后使用一个训练好的奖励模型来给判断哪些回答质量高可以保留，哪些质量差要被拒绝、丢弃掉，如此获得一个由这些checkpoint生成的，但质量又高于这些checkpoint平均水平的数据集，从而继续训练。这个过程也被称为拒绝采样（Rejection Sampling）。&lt;br /&gt;
&lt;br /&gt;
使用这80多万数据样本对模型进一步微调后，模型不仅有了强大的思维推理能力，还有了各方面的能力。现在最后一步就是要进一步提高模型的推理能力以及有用性，并使其输出无害。这也是第四阶段的进一步强化学习要做的事情。对用于提升其推理能力的数据，可以遵循 DeepSeek-R1-Zero 的方法获得，而用于提升有用性和无害性的数据，就需要收集模型对于prompt的回答并人工分析，标注出有害部分的数据，使用这些标注好的数据去做强化学习。这也被称作从人类反馈中的强化学习（Reinforcement Learning from Human Feedback）。&lt;br /&gt;
&lt;br /&gt;
总的来说，Deepseek-R1的训练分为四阶段，两个SFT阶段，两个RL阶段：&lt;br /&gt;
&lt;br /&gt;
第一阶段：冷启动监督微调，培养正确（符合人类偏好）的语言习惯、激发模型的推理潜能。&lt;br /&gt;
&lt;br /&gt;
第二阶段：大规模强化学习，本阶段专注于提升模型的推理密集任务的能力，并训练模型在回答问题时保持语言一致。&lt;br /&gt;
&lt;br /&gt;
第三阶段：大规模监督微调，结合更广阔领域的数据，提高模型其他方面的通用能力。本阶段还对推理任务和非推理任务进行分开训练。&lt;br /&gt;
&lt;br /&gt;
第四阶段：进一步RL，进一步提高推理能力，响应的有效性，并减少其输出的有害内容。&lt;br /&gt;
&lt;br /&gt;
可见模型的主要推理能力涌现自第一和第二阶段，第三第四阶段更像都是后训练（post-training）。理论上还可以有第五阶段监督微调、第六强化学习，第七阶段监督微调、第八阶段强化学习，不断迭代提高模型的能力。&lt;br /&gt;
&lt;br /&gt;
===蒸馏技术===&lt;br /&gt;
   - DeepSeek团队开源了六个基于Qwen和Llama的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
   - 蒸馏技术将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中表现优异。&lt;br /&gt;
&lt;br /&gt;
2015年，Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean等学者&amp;lt;ref&amp;gt;HINTON G, VINYALS O, DEAN J. Distilling the Knowledge in a Neural Network[J/OL]. 2015. DOI:10.48550/arxiv.1503.02531. https://arxiv.org/pdf/1503.02531&amp;lt;/ref&amp;gt;提出了在AI领域的知识蒸馏技术，即将大型、复杂模型（教师模型）的'''知识'''转移到小型、简单模型（学生模型）的技术。DeepSeek团队发现，不仅仅是知识，推理能力也可以从大模型的推理能力蒸馏递到小模型。&lt;br /&gt;
&lt;br /&gt;
DeepSeek团队用DeepSeek-R1第三阶段整理得到的80万样本对一些开源模型如Qwen2.5和Llama3.3的小模型版本进行了直接微调。它们发现，仅仅是如此简单的微调就能大大提升小模型的推理能力，而且这种幅度的提升是仅凭大规模强化学习所不能得到的。为此，它们使用Qwen-32B-Base做了一个实验，对其分别做了与Deepseek-R1-Zero相同的大规模强化学习&amp;lt;ref&amp;gt; 这里有点微妙。原文是“we conduct large-scale RL training on Qwen-32B-Base using math,code,and STEM data,training for over '''10K steps'''”。很难说1万步的训练到底够不够大规模，也许对于671B的模型来说足够了，但对于32B的模型可能还缺了点。&amp;lt;/ref&amp;gt;，以及从Deepseek-R1做蒸馏。实验结果是，大规模强化学习后得到的版本，DeepSeek-R1-Zero-Qwen-32B，与目前32B最强的推理模型QwQ-32B-Preview能力相似，然而从Deepseek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B表现却远超前两者。&lt;br /&gt;
&lt;br /&gt;
至此我们也能暂且得出结论：模型蒸馏技术非常有用，相比之下，小模型做大规模强化学习不仅消耗大量算力，而且结果还不如从大模型蒸馏所得。然而，这一切的前提是有这么一个有强能力的大模型。因此，要获得更强的推理能力，还是需要更强的大模型和更大规模的强化学习。&lt;br /&gt;
&lt;br /&gt;
===性能表现===&lt;br /&gt;
&lt;br /&gt;
下图显示了 DeepSeek 进行的测试结果，该测试针对 OpenAI 的 o1 模型在数学、编码和推理任务上测试了其大型语言模型的三个版本。DeepSeek-R1 在数学和编码基准测试中击败或与o1相媲美。&amp;lt;ref&amp;gt;DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X., Zhang, X., Yu, X., Wu, Y., Wu, Z. F., Gou, Z., Shao, Z., Li, Z., Gao, Z., … Zhang, Z. (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (No. arXiv:2501.12948). arXiv. https://doi.org/10.48550/arXiv.2501.12948&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====教育领域任务====&lt;br /&gt;
&lt;br /&gt;
在 MMLU、MMLU-Pro 和 GPQA Diamond 等知识基准测试表明，DeepSeek-R1 在 STEM（科学、技术、工程和数学）相关问题上相比 DeepSeek-V3 具有显著的改进。研究者将其归因于大规模强化学习（reinforcement learning, RL）的使用。&lt;br /&gt;
&lt;br /&gt;
* MMLU (Massive Multitask Language Understanding) 是一项涵盖多学科、多领域的大规模基准测试，旨在评估语言模型在不同任务和学科中的表现。这些任务包括人文、科学、社会科学和数学等多个领域的高中至专业水平的问题。DeepSeek-R1 在 MMLU 基准测试中取得了 90.8% 的 Pass@1 准确率，显著优于 DeepSeek-V3，展示了其强大的知识处理和推理能力。&lt;br /&gt;
&lt;br /&gt;
* MMLU-Pro 是一个更加复杂和鲁棒的多任务语言理解基准，设计用于挑战模型在更高难度任务中的表现。与 MMLU 相比，MMLU-Pro 更强调推理能力和跨领域的综合性。DeepSeek-R1 在这一基准中取得了 84.0% 的准确率，超越了 DeepSeek-V3，并在挑战性更高的任务中展现了卓越的推理能力。&lt;br /&gt;
&lt;br /&gt;
* GPQA Diamond (Graduate-Level Google-Proof Q&amp;amp;A Benchmark) 是一个针对研究级问答任务设计的基准，问题往往需要复杂的推理和深度分析才能回答。DeepSeek-R1 在这一基准中的表现达到 71.5% 的 Pass@1 准确率，显著高于 DeepSeek-V3，进一步证明了其在处理复杂问题上的潜力。&lt;br /&gt;
&lt;br /&gt;
====长上下文任务====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 FRAMES（依赖长上下文的问答任务）基准测试中展现了强大的文档分析能力。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====事实性问答====&lt;br /&gt;
&lt;br /&gt;
在 SimpleQA 基准测试中，DeepSeek-R1 超越了 DeepSeek-V3，证明了其处理基于事实查询的能力。但是在中文 SimpleQA 基准上，DeepSeek-R1 的表现不如 DeepSeek-V3，主要由于安全强化学习（safety RL）导致模型拒绝回答某些问题。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====指令执行与规范化输出====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 IF-Eval 基准测试中表现优异。这个测试专注于评估模型遵循格式指令（format instructions）的能力。这些改进主要归因于监督微调（supervised fine-tuning, SFT）和强化学习（RL）后期阶段中指令遵循数据的引入&lt;br /&gt;
&lt;br /&gt;
* IF-Eval (Instruction Following Evaluation) 旨在评估模型遵循格式化指令的能力，是衡量其在严格指令执行中的表现的重要基准。DeepSeek-R1 在 IF-Eval 中表现卓越，得益于训练过程中加入了指令遵循数据。这种改进显示出 DeepSeek-R1 在格式化和结构化任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====写作和开放问答任务====&lt;br /&gt;
&lt;br /&gt;
在 AlpacaEval 2.0 和 ArenaHard 基准测试中，DeepSeek-R1 表现出色，进一步表明其在写作任务和开放问答（open-domain question answering）中的优势，强调了大规模强化学习的泛化优势，不仅增强了推理能力，还提升了跨领域的表现能力。此外，DeepSeek-R1 生成的摘要长度简洁，表明 DeepSeek-R1 在基于 GPT 的评估中避免了引入长度偏差（length bias），进一步巩固了其在多任务中的稳健性。&lt;br /&gt;
&lt;br /&gt;
* AlpacaEval 2.0 是一个评估模型在开放式问答任务中能力的基准，测试模型在非考试导向任务（如写作和回答复杂问题）中的表现。DeepSeek-R1 在这一基准中实现了 87.6% 的胜率（win-rate），显著优于 DeepSeek-V3，证明了其强大的写作能力和开放域问答能力。&lt;br /&gt;
&lt;br /&gt;
* ArenaHard 是一个以对话评估为主的高难度基准测试，使用 GPT-4 作为裁判来比较模型在复杂对话中的表现。DeepSeek-R1 在该基准中实现了 92.3% 的胜率，展现了其在复杂对话任务中的优越性能，同时避免了由于输出长度导致的偏差。&lt;br /&gt;
&lt;br /&gt;
====数学和编程任务====&lt;br /&gt;
&lt;br /&gt;
在数学（如 AIME 2024 和 MATH-500）和编程任务（如 LiveCodeBench 和 Codeforces）中，DeepSeek-R1 的表现显著优于其他模型，并与 OpenAI-o1-1217 相当。&lt;br /&gt;
&lt;br /&gt;
* AIME，全称 American Invitational Mathematics Examination，是一项面向中学生的高水平数学竞赛，其难度介于 AMC（美国数学竞赛）和 IMO（国际数学奥林匹克竞赛）之间，享有极高的声誉与含金量。与 AMC 相比，AIME 的试题更具挑战性，需要参赛者具备更强的数学推理能力和问题解决技巧。同时，AIME 也是选拔美国数学奥林匹克竞赛（USAMO）和国际数学奥林匹克竞赛（IMO）国家队的重要环节之一。在这一测试中，DeepSeek-R1 达到了 79.8% 的 Pass@1 准确率，略高于 OpenAI o1-1217 模型的 79.2%。这一结果表明，DeepSeek-R1 具备以较高准确率解决高中生水平复杂数学问题的能力。&lt;br /&gt;
&lt;br /&gt;
* MATH-500 数据集收录了 500 道难度极高的数学竞赛题，涵盖代数、几何、数论、组合数学等多个领域。这些题目要求深厚的数学知识储备以及复杂的推理步骤才能解答。在这一测试中，DeepSeek-R1 以 97.3% 的惊人成绩表现出色，与 OpenAI 的 o1-1217 模型持平，并显著超越了其他对比模型。这一表现表明，DeepSeek-R1 已经能够胜任大学水平的数学竞赛题解答，展现了其卓越的数学推理能力。&lt;br /&gt;
&lt;br /&gt;
* Codeforces 是全球知名的编程竞赛平台，以高难度和强竞争性闻名，吸引了来自世界各地的顶尖程序员参赛。其竞赛题目通常需要选手具备扎实的算法和数据结构知识，以及优秀的编程能力。在 Codeforces 平台上，DeepSeek-R1 获得了 2029 的 Elo 评分，超过了 96.3% 的人类程序员。这一结果表明，DeepSeek-R1 的编程能力已经超越了绝大多数人类程序员，成为算法和编程领域的强大竞争者。&lt;br /&gt;
&lt;br /&gt;
====蒸馏模型的性能评价====&lt;br /&gt;
&lt;br /&gt;
蒸馏 DeepSeek-R1 的输出使小型模型（如 DeepSeek-R1-Distill-Qwen-7B 和 DeepSeek-R1-Distill-Qwen-32B）在多个基准上超越了 GPT-4o-0513 等非推理模型和其他对比模型。这表明蒸馏技术的有效性。&lt;br /&gt;
&lt;br /&gt;
===开源贡献===&lt;br /&gt;
DeepSeek团队开源了以下模型，可以在 [https://github.com/deepseek-ai/DeepSeek-R1 GitHub 主页]下载：&lt;br /&gt;
&lt;br /&gt;
* DeepSeek-R1-Zero&lt;br /&gt;
* DeepSeek-R1&lt;br /&gt;
* 六个基于Qwen和Llama的蒸馏模型&lt;br /&gt;
&lt;br /&gt;
这些开源模型为研究社区提供了宝贵的资源，帮助进一步探索语言模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
===应用场景===&lt;br /&gt;
&lt;br /&gt;
* 推理密集型任务：例如编程任务中的代码生成、算法设计，以及数学问题求解、科学推理和逻辑分析等需要复杂推理的场景。&lt;br /&gt;
&lt;br /&gt;
* 教育与知识应用：可用于解决教育领域的问题，支持知识理解与解答。&lt;br /&gt;
&lt;br /&gt;
* 文档分析与长上下文理解：适合处理需要深入文档分析和理解长上下文的任务，例如复杂信息提取与整合。&lt;br /&gt;
&lt;br /&gt;
* 开放领域问答与写作：在内容生成、问题回答以及创造性写作中具有广泛应用，例如生成高质量文本或进行内容编辑。&lt;br /&gt;
&lt;br /&gt;
* 数据分析与搜索：在数据处理与智能搜索中展现出应用潜力，能够高效解析复杂信息。&lt;br /&gt;
&lt;br /&gt;
===未来展望===&lt;br /&gt;
DeepSeek团队计划进一步优化强化学习在推理任务中的应用，并探索更多蒸馏技术的潜力，以提升小型模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==加入我们==&lt;br /&gt;
&lt;br /&gt;
亲爱的社区成员和知识爱好者：&lt;br /&gt;
&lt;br /&gt;
我们正在寻找对知识分享充满热情的志愿者，加入我们的集智百科词条编写团队！无论你是某个领域的专家，还是对某一主题有浓厚兴趣，我们都欢迎你的加入。通过编写和编辑百科词条，你将有机会为全球读者提供准确、权威的信息，同时提升自己的写作和研究能力。&lt;br /&gt;
&lt;br /&gt;
===我们需要的帮助===&lt;br /&gt;
&lt;br /&gt;
* 编写新的集智百科词条，涵盖复杂系统、人工智能等多个领域&lt;br /&gt;
&lt;br /&gt;
* 更新和完善现有词条，确保信息的准确性和时效性&lt;br /&gt;
&lt;br /&gt;
* 校对和审核其他志愿者提交的内容，确保词条质量&lt;br /&gt;
&lt;br /&gt;
===我们希望你具备===&lt;br /&gt;
&lt;br /&gt;
* 良好的写作能力，能够清晰、简洁地表达复杂的概念&lt;br /&gt;
&lt;br /&gt;
* 对某一领域有深入了解或浓厚兴趣&lt;br /&gt;
&lt;br /&gt;
* 具备基本的网络搜索和信息整理能力&lt;br /&gt;
&lt;br /&gt;
* 有责任心和团队合作精神，愿意为知识共享贡献力量&lt;br /&gt;
&lt;br /&gt;
如果你对知识分享充满热情，愿意为全球读者提供有价值的信息，请立即加入我们！可以发送邮件至wangzhipeng@mail.bnu.edu.cn。&lt;br /&gt;
&lt;br /&gt;
让我们一起，用知识连接世界！&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41448</id>
		<title>DeepSeek-R1</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41448"/>
		<updated>2025-01-28T03:11:10Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeepSeek-R1是[[DeepSeek团队]]推出的第一代推理模型，通过[[强化学习]]（RL）和[[蒸馏技术]]显著提升了[[语言模型]]的推理能力。DeepSeek-R1-Zero模型在没有监督微调（SFT）的情况下，通过大规模RL训练展现出强大的推理能力，但存在可读性和语言混合问题。为了解决这些问题，DeepSeek-R1引入了冷启动数据和多阶段训练，推理性能与[[OpenAI]]的[[GPT o1]]-1217相当。此外，团队还开源了六个基于[[Qwen]]和[[Llama]]的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
&lt;br /&gt;
==背景==&lt;br /&gt;
该模型的开发背景源于传统语言模型在复杂推理任务中的局限性，尤其是在需要多步逻辑推理的场景中。尽管现有的语言模型在生成文本和理解语言方面表现出色，但在数学推理、代码生成等需要精确逻辑推理的任务中，表现仍然有限。&lt;br /&gt;
&lt;br /&gt;
为了解决这一问题，DeepSeek 团队提出了基于强化学习的训练方法，开发了DeepSeek-R1系列模型。该模型的核心目标是通过强化学习和大规模训练，提升模型在复杂推理任务中的表现。DeepSeek-R1-Zero是这一系列中的第一个模型，它通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。然而，DeepSeek-R1-Zero 在训练过程中也暴露出一些问题，如可读性差、语言混合等。&lt;br /&gt;
&lt;br /&gt;
为了进一步优化模型，DeepSeek 团队引入了冷启动数据和多阶段训练方法，开发了DeepSeek-R1。冷启动数据的使用使得模型在训练初期能够更快地收敛，并且通过多阶段训练，模型的推理能力和可读性得到了显著提升。此外，团队还探索了蒸馏技术，将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中也能表现出色。&lt;br /&gt;
&lt;br /&gt;
总的来说，DeepSeek-R1 的开发背景是为了解决传统语言模型在复杂推理任务中的不足，通过强化学习和蒸馏技术，提升模型在数学推理、代码生成等任务中的表现，并为研究社区提供开源的推理模型资源。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek系列模型===&lt;br /&gt;
2023年7月，国内大性私募''幻方''成立了子公司''深度求索''，储备了过万张A100和H800计算显卡，开启了半年迭代一版大模型的历程：&lt;br /&gt;
* 2024年1月，深度求索发布了第一代模型，DeepSeekMoE系列，最大的版本有67B参数，确立了MoE架构路线，能大幅减少训练和生成期间的成本。另外，DeepSeekMoE发现了'''细粒度多数量Expert模块'''以及'''设立独立的共享Expert模块'''能获得稳定且较好的效果。&lt;br /&gt;
* 2024年5月，深度求索发布了第二代模型，DeepSeek-v2，最大的版本有273B参数。其中最重要的创新是'''多头潜在注意力机制(Multi-head Latent Attention，MLA)'''。MLA能大幅降低模型在生成（推理）阶段的显卡缓存占用，据报告可降到原先的5%-13%，因而可以大大提高其在生成阶段的效率。这一创新，配合其他创新使得DeepSeek-v2的生成文字的成本降到只有每百万token一块钱。&lt;br /&gt;
* 2024年12月，深度求索发布了第三代模型，DeepSeek-v3，最大的版本有671B参数。v3采用了'''多token预测训练（Multi-Token Prediction, MTP）'''技术以及'''无损负载均衡'''技术，在训练过程大幅提高模型能力，最终使得其模型能力比肩GPT-4o的最新版本。此外，DeepSeek-v3还第一次证明了大规模fp8混合精度训练的可行性，提出了DualPipe算法来重叠集群间计算和通信的开销，以及针对MoE架构的PD分离策略等各种技术。&lt;br /&gt;
&lt;br /&gt;
==技术特点==&lt;br /&gt;
===强化学习训练===&lt;br /&gt;
   - DeepSeek-R1-Zero模型通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。&lt;br /&gt;
   - 模型在训练过程中表现出“顿悟时刻”，即自发地重新评估和优化推理步骤。&lt;br /&gt;
   &lt;br /&gt;
在以往的研究中，模型的性能提升主要依赖于大量的监督数据，或者在预训练模型的基础上通过监督微调（SFT）来实现。监督微调是指在预训练模型的基础上，使用带有标注的数据进行进一步训练，使模型更好地适应特定任务（如文本分类、图像识别等），从而提升其在该任务上的性能。然而，DeepSeek-R1-Zero模型的出现打破了这一传统模式，证明了即使不使用监督微调作为冷启动，也能通过大规模强化学习（RL）显著提高推理能力。这一方法可以类比DeepMind的Alpha-Zero，后者通过自我对弈生成数据，在围棋对弈中实现了无需人类先验知识的强大决策能力。&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1-Zero模型的创新主要体现在两个方面：组相对策略优化（GRPO）和规则化奖励（Rule-based reward）。&lt;br /&gt;
&lt;br /&gt;
- '''组相对策略优化（GRPO）'''：GRPO方法放弃了通常与策略模型大小相同的批评者模型，而是通过组得分来估计基线。这种方法类似于多个科研小组共同攻关同一个课题，当某个小组取得领先时，其他小组会复制其方法，从而节省强化学习的训练成本。&lt;br /&gt;
&lt;br /&gt;
- '''规则化奖励（Rule-based reward）'''：规则化奖励则是为了防止大规模强化学习过程中可能出现的“奖励操纵”（reward hacking）。DeepSeek-R1-Zero没有使用结果或过程神经奖励模型，而是要求模型在提供答案的同时输出规范化的思考过程。这就像为了防止科研小组通过作弊取得优势，要求他们必须记录规范的解题过程，而不仅仅是给出结果。&lt;br /&gt;
&lt;br /&gt;
基于上述策略，DeepSeek-R1-Zero的训练展示了两个显著结果。首先，模型自然而然地学会了用更多的思考时间来解决推理任务。这一变化并非通过外部压力实现，而是模型内在发展的结果。其次，模型进化出了复杂性，并产生了引人注目的“顿悟时刻”。这些结果表明，DeepSeek-R1-Zero在推理能力上取得了重要突破。&lt;br /&gt;
&lt;br /&gt;
[[文件:推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。.png|推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间|alt=DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务|居左|600x450像素]]&lt;br /&gt;
&lt;br /&gt;
然而，DeepSeek-R1-Zero也面临一些挑战。由于在预训练阶段完全放弃了对计算资源消耗巨大的监督学习，模型具有明显的成本优势。但与此同时，完全放弃监督学习也导致输出结果不稳定，且可读性较差。这一问题的存在引发了对模型优化的进一步思考。&lt;br /&gt;
&lt;br /&gt;
受到DeepSeek-R1-Zero成果的启发，研究人员提出了两个未来研究方向。首先，作为冷启动，纳入少量高质量数据能否进一步提高推理性能或加速收敛？其次，如何才能训练出一个用户友好型模型，不仅能生成清晰连贯的思维链（CoT），还能展示强大的通用能力？这些问题的探索将为模型的发展提供新的思路和可能性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===冷启动数据与多阶段训练===&lt;br /&gt;
   - 为了解决可读性和语言混合问题，DeepSeek-R1引入了冷启动数据和多阶段训练方法。&lt;br /&gt;
   - 这些改进使得模型在推理任务中的表现与OpenAI的o1-1217模型相当。&lt;br /&gt;
&lt;br /&gt;
尽管 DeepSeek-R1-Zero 显示出了强大的推理能力，但其输出不符合人类的阅读习惯，且会混杂中英文甚至代码和数学符号，所以人类的阅读体验并不好。而使模型的输出符合人类习惯，就很适合使用微调技术。于是deepseek团队一定程度上又把监督微调(SFT)技术请了回来，在最初先使用少量标注数据对基模进行监督微调，作为冷启动，然后再进行 DeepSeek-R1-Zero 所经历的大规模强化学习。&lt;br /&gt;
&lt;br /&gt;
“冷启动”是人工智能领域的一个术语，用于描述人工智能模型在没有任何先前训练数据的情况下从头开始学习的情况。与 DeepSeek-R1-Zero 不同，为了避免从基础模型开始的强化学习训练早期不稳定的冷启动阶段，DeepSeek-R1 构建和收集了少量长思维链数据，收集的过程主要注重过滤掉不易读的结果。&lt;br /&gt;
&lt;br /&gt;
这次冷启动阶段的监督微调和以往的“先监督微调后强化学习”训练过程有显著区别，最大的区别在于数量上。比如DeepseekMath在RL前的监督微调阶段使用了77.6万个样本，而这次的冷启动阶段只使用了几千个。也正因为冷启动阶段用于微调的样本量相对较少，所以工程人员可以精心挑选这些样本，因此它们的质量也比以往监督微调阶段用到的数据要高得多。事先使用高质量数据微调后，模型在开始就会使用人类偏好的语言和思维风格进行思考，吐出对人类阅读体验友好的结果。且由于这些微调数据一般都有高质量的思维链（Chain of Thoughts），在后续的强化学习之始可以跳过不断随机摸索的阶段，快速发展出使用思维链进行复杂推理的能力。因此，少批量高质量数据的冷启动不仅能使模型输出符合人类阅读偏好，还能使模型更快收敛，获得更强的推理能力。不过即便经过了冷启动，大模型在第二阶段的在大规模强化学习过程中海水显示出语言混杂的现象。为了解决这一问题，Deepseek团队还在训练过程中加入了“语言一致性奖励”，即奖励模型尽可能使用一致的语言来思考和回答。&lt;br /&gt;
&lt;br /&gt;
经过第一阶段得冷启动和第二阶段的大规模强化学习后，第三和第四阶段的训练分别是提高模型各方面能力的大规模微调和增强模型有用性及无害性的进一步强化学习。第三阶段和第一阶段虽然都是微调，但在目的和规模上都不一样。第一阶段的冷启动微调是为了使模型的输出更具可读性和激发其后续的思维推理潜力，而第三阶段的微调是为了提升模型的其他通用能力，比如写作，问答、翻译、角色扮演、自我反思等。为此，相比于冷启动所需的几千个数据样本，第三阶段的微调使用的80多万样本数据。这里面包括各种来源的数据，比如说训练Deepseek-v3时用到的监督微调数据集。&lt;br /&gt;
&lt;br /&gt;
有趣的是，这80多万样本中60多万是从之前R1的训练过程中所得的checkpoints中得来。团队人员使用prompt去让checkpoint模型做出回答，然后使用一个训练好的奖励模型来给判断哪些回答质量高可以保留，哪些质量差要被拒绝、丢弃掉，如此获得一个由这些checkpoint生成的，但质量又高于这些checkpoint平均水平的数据集，从而继续训练。这个过程也被称为拒绝采样（Rejection Sampling）。&lt;br /&gt;
&lt;br /&gt;
使用这80多万数据样本对模型进一步微调后，模型不仅有了强大的思维推理能力，还有了各方面的能力。现在最后一步就是要进一步提高模型的推理能力以及有用性，并使其输出无害。这也是第四阶段的进一步强化学习要做的事情。对用于提升其推理能力的数据，可以遵循 DeepSeek-R1-Zero 的方法获得，而用于提升有用性和无害性的数据，就需要收集模型对于prompt的回答并人工分析，标注出有害部分的数据，使用这些标注好的数据去做强化学习。这也被称作从人类反馈中的强化学习（Reinforcement Learning from Human Feedback）。&lt;br /&gt;
&lt;br /&gt;
总的来说，Deepseek-R1的训练分为四阶段，两个SFT阶段，两个RL阶段：&lt;br /&gt;
&lt;br /&gt;
第一阶段：冷启动监督微调，培养正确（符合人类偏好）的语言习惯、激发模型的推理潜能。&lt;br /&gt;
&lt;br /&gt;
第二阶段：大规模强化学习，本阶段专注于提升模型的推理密集任务的能力，并训练模型在回答问题时保持语言一致。&lt;br /&gt;
&lt;br /&gt;
第三阶段：大规模监督微调，结合更广阔领域的数据，提高模型其他方面的通用能力。本阶段还对推理任务和非推理任务进行分开训练。&lt;br /&gt;
&lt;br /&gt;
第四阶段：进一步RL，进一步提高推理能力，响应的有效性，并减少其输出的有害内容。&lt;br /&gt;
&lt;br /&gt;
可见模型的主要推理能力涌现自第一和第二阶段，第三第四阶段更像都是后训练（post-training）。理论上还可以有第五阶段监督微调、第六强化学习，第七阶段监督微调、第八阶段强化学习，不断迭代提高模型的能力。&lt;br /&gt;
&lt;br /&gt;
===蒸馏技术===&lt;br /&gt;
   - DeepSeek团队开源了六个基于Qwen和Llama的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
   - 蒸馏技术将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中表现优异。&lt;br /&gt;
&lt;br /&gt;
2015年，Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean等学者&amp;lt;ref&amp;gt;HINTON G, VINYALS O, DEAN J. Distilling the Knowledge in a Neural Network[J/OL]. 2015. DOI:10.48550/arxiv.1503.02531. https://arxiv.org/pdf/1503.02531&amp;lt;/ref&amp;gt;提出了在AI领域的知识蒸馏技术，即将大型、复杂模型（教师模型）的'''知识'''转移到小型、简单模型（学生模型）的技术。DeepSeek团队发现，不仅仅是知识，推理能力也可以从大模型的推理能力蒸馏递到小模型。&lt;br /&gt;
&lt;br /&gt;
DeepSeek团队用DeepSeek-R1第三阶段整理得到的80万样本对一些开源模型如Qwen2.5和Llama3.3的小模型版本进行了直接微调。它们发现，仅仅是如此简单的微调就能大大提升小模型的推理能力，而且这种幅度的提升是仅凭大规模强化学习所不能得到的。为此，它们使用Qwen-32B-Base做了一个实验，对其分别做了与Deepseek-R1-Zero相同的大规模强化学习&amp;lt;ref&amp;gt; 这里有点微妙。原文是“we conduct large-scale RL training on Qwen-32B-Base using math,code,and STEM data,training for over '''10K steps'''”。很难说1万步的训练到底够不够大规模，也许对于671B的模型来说足够了，但对于32B的模型可能还缺了点。&amp;lt;/ref&amp;gt;，以及从Deepseek-R1做蒸馏。实验结果是，大规模强化学习后得到的版本，DeepSeek-R1-Zero-Qwen-32B，与目前32B最强的推理模型QwQ-32B-Preview能力相似，然而从Deepseek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B表现却远超前两者。&lt;br /&gt;
&lt;br /&gt;
至此我们也能暂且得出结论：模型蒸馏技术非常有用，相比之下，小模型做大规模强化学习不仅消耗大量算力，而且结果还不如从大模型蒸馏所得。然而，这一切的前提是有这么一个有强能力的大模型。因此，要获得更强的推理能力，还是需要更强的大模型和更大规模的强化学习。&lt;br /&gt;
&lt;br /&gt;
===性能表现===&lt;br /&gt;
&lt;br /&gt;
下图显示了 DeepSeek 进行的测试结果，该测试针对 OpenAI 的 o1 模型在数学、编码和推理任务上测试了其大型语言模型的三个版本。DeepSeek-R1 在数学和编码基准测试中击败或与o1相媲美。&amp;lt;ref&amp;gt;DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X., Zhang, X., Yu, X., Wu, Y., Wu, Z. F., Gou, Z., Shao, Z., Li, Z., Gao, Z., … Zhang, Z. (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (No. arXiv:2501.12948). arXiv. https://doi.org/10.48550/arXiv.2501.12948&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====教育领域任务====&lt;br /&gt;
&lt;br /&gt;
在 MMLU、MMLU-Pro 和 GPQA Diamond 等知识基准测试表明，DeepSeek-R1 在 STEM（科学、技术、工程和数学）相关问题上相比 DeepSeek-V3 具有显著的改进。研究者将其归因于大规模强化学习（reinforcement learning, RL）的使用。&lt;br /&gt;
&lt;br /&gt;
* MMLU (Massive Multitask Language Understanding) 是一项涵盖多学科、多领域的大规模基准测试，旨在评估语言模型在不同任务和学科中的表现。这些任务包括人文、科学、社会科学和数学等多个领域的高中至专业水平的问题。DeepSeek-R1 在 MMLU 基准测试中取得了 90.8% 的 Pass@1 准确率，显著优于 DeepSeek-V3，展示了其强大的知识处理和推理能力。&lt;br /&gt;
&lt;br /&gt;
* MMLU-Pro 是一个更加复杂和鲁棒的多任务语言理解基准，设计用于挑战模型在更高难度任务中的表现。与 MMLU 相比，MMLU-Pro 更强调推理能力和跨领域的综合性。DeepSeek-R1 在这一基准中取得了 84.0% 的准确率，超越了 DeepSeek-V3，并在挑战性更高的任务中展现了卓越的推理能力。&lt;br /&gt;
&lt;br /&gt;
* GPQA Diamond (Graduate-Level Google-Proof Q&amp;amp;A Benchmark) 是一个针对研究级问答任务设计的基准，问题往往需要复杂的推理和深度分析才能回答。DeepSeek-R1 在这一基准中的表现达到 71.5% 的 Pass@1 准确率，显著高于 DeepSeek-V3，进一步证明了其在处理复杂问题上的潜力。&lt;br /&gt;
&lt;br /&gt;
====长上下文任务====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 FRAMES（依赖长上下文的问答任务）基准测试中展现了强大的文档分析能力。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====事实性问答====&lt;br /&gt;
&lt;br /&gt;
在 SimpleQA 基准测试中，DeepSeek-R1 超越了 DeepSeek-V3，证明了其处理基于事实查询的能力。但是在中文 SimpleQA 基准上，DeepSeek-R1 的表现不如 DeepSeek-V3，主要由于安全强化学习（safety RL）导致模型拒绝回答某些问题。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====指令执行与规范化输出====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 IF-Eval 基准测试中表现优异。这个测试专注于评估模型遵循格式指令（format instructions）的能力。这些改进主要归因于监督微调（supervised fine-tuning, SFT）和强化学习（RL）后期阶段中指令遵循数据的引入&lt;br /&gt;
&lt;br /&gt;
* IF-Eval (Instruction Following Evaluation) 旨在评估模型遵循格式化指令的能力，是衡量其在严格指令执行中的表现的重要基准。DeepSeek-R1 在 IF-Eval 中表现卓越，得益于训练过程中加入了指令遵循数据。这种改进显示出 DeepSeek-R1 在格式化和结构化任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====写作和开放问答任务====&lt;br /&gt;
&lt;br /&gt;
在 AlpacaEval 2.0 和 ArenaHard 基准测试中，DeepSeek-R1 表现出色，进一步表明其在写作任务和开放问答（open-domain question answering）中的优势，强调了大规模强化学习的泛化优势，不仅增强了推理能力，还提升了跨领域的表现能力。此外，DeepSeek-R1 生成的摘要长度简洁，表明 DeepSeek-R1 在基于 GPT 的评估中避免了引入长度偏差（length bias），进一步巩固了其在多任务中的稳健性。&lt;br /&gt;
&lt;br /&gt;
* AlpacaEval 2.0 是一个评估模型在开放式问答任务中能力的基准，测试模型在非考试导向任务（如写作和回答复杂问题）中的表现。DeepSeek-R1 在这一基准中实现了 87.6% 的胜率（win-rate），显著优于 DeepSeek-V3，证明了其强大的写作能力和开放域问答能力。&lt;br /&gt;
&lt;br /&gt;
* ArenaHard 是一个以对话评估为主的高难度基准测试，使用 GPT-4 作为裁判来比较模型在复杂对话中的表现。DeepSeek-R1 在该基准中实现了 92.3% 的胜率，展现了其在复杂对话任务中的优越性能，同时避免了由于输出长度导致的偏差。&lt;br /&gt;
&lt;br /&gt;
====数学和编程任务====&lt;br /&gt;
&lt;br /&gt;
在数学（如 AIME 2024 和 MATH-500）和编程任务（如 LiveCodeBench 和 Codeforces）中，DeepSeek-R1 的表现显著优于其他模型，并与 OpenAI-o1-1217 相当。&lt;br /&gt;
&lt;br /&gt;
* AIME，全称 American Invitational Mathematics Examination，是一项面向中学生的高水平数学竞赛，其难度介于 AMC（美国数学竞赛）和 IMO（国际数学奥林匹克竞赛）之间，享有极高的声誉与含金量。与 AMC 相比，AIME 的试题更具挑战性，需要参赛者具备更强的数学推理能力和问题解决技巧。同时，AIME 也是选拔美国数学奥林匹克竞赛（USAMO）和国际数学奥林匹克竞赛（IMO）国家队的重要环节之一。在这一测试中，DeepSeek-R1 达到了 79.8% 的 Pass@1 准确率，略高于 OpenAI o1-1217 模型的 79.2%。这一结果表明，DeepSeek-R1 具备以较高准确率解决高中生水平复杂数学问题的能力。&lt;br /&gt;
&lt;br /&gt;
* MATH-500 数据集收录了 500 道难度极高的数学竞赛题，涵盖代数、几何、数论、组合数学等多个领域。这些题目要求深厚的数学知识储备以及复杂的推理步骤才能解答。在这一测试中，DeepSeek-R1 以 97.3% 的惊人成绩表现出色，与 OpenAI 的 o1-1217 模型持平，并显著超越了其他对比模型。这一表现表明，DeepSeek-R1 已经能够胜任大学水平的数学竞赛题解答，展现了其卓越的数学推理能力。&lt;br /&gt;
&lt;br /&gt;
* Codeforces 是全球知名的编程竞赛平台，以高难度和强竞争性闻名，吸引了来自世界各地的顶尖程序员参赛。其竞赛题目通常需要选手具备扎实的算法和数据结构知识，以及优秀的编程能力。在 Codeforces 平台上，DeepSeek-R1 获得了 2029 的 Elo 评分，超过了 96.3% 的人类程序员。这一结果表明，DeepSeek-R1 的编程能力已经超越了绝大多数人类程序员，成为算法和编程领域的强大竞争者。&lt;br /&gt;
&lt;br /&gt;
====蒸馏模型的性能评价====&lt;br /&gt;
&lt;br /&gt;
蒸馏 DeepSeek-R1 的输出使小型模型（如 DeepSeek-R1-Distill-Qwen-7B 和 DeepSeek-R1-Distill-Qwen-32B）在多个基准上超越了 GPT-4o-0513 等非推理模型和其他对比模型。这表明蒸馏技术的有效性。&lt;br /&gt;
&lt;br /&gt;
===开源贡献===&lt;br /&gt;
DeepSeek团队开源了以下模型，可以在 [https://github.com/deepseek-ai/DeepSeek-R1 GitHub 主页]下载：&lt;br /&gt;
&lt;br /&gt;
* DeepSeek-R1-Zero&lt;br /&gt;
* DeepSeek-R1&lt;br /&gt;
* 六个基于Qwen和Llama的蒸馏模型&lt;br /&gt;
&lt;br /&gt;
这些开源模型为研究社区提供了宝贵的资源，帮助进一步探索语言模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
===应用场景===&lt;br /&gt;
&lt;br /&gt;
* 推理密集型任务：例如编程任务中的代码生成、算法设计，以及数学问题求解、科学推理和逻辑分析等需要复杂推理的场景。&lt;br /&gt;
&lt;br /&gt;
* 教育与知识应用：可用于解决教育领域的问题，支持知识理解与解答。&lt;br /&gt;
&lt;br /&gt;
* 文档分析与长上下文理解：适合处理需要深入文档分析和理解长上下文的任务，例如复杂信息提取与整合。&lt;br /&gt;
&lt;br /&gt;
* 开放领域问答与写作：在内容生成、问题回答以及创造性写作中具有广泛应用，例如生成高质量文本或进行内容编辑。&lt;br /&gt;
&lt;br /&gt;
* 数据分析与搜索：在数据处理与智能搜索中展现出应用潜力，能够高效解析复杂信息。&lt;br /&gt;
&lt;br /&gt;
===未来展望===&lt;br /&gt;
DeepSeek团队计划进一步优化强化学习在推理任务中的应用，并探索更多蒸馏技术的潜力，以提升小型模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==加入我们==&lt;br /&gt;
&lt;br /&gt;
亲爱的社区成员和知识爱好者：&lt;br /&gt;
&lt;br /&gt;
我们正在寻找对知识分享充满热情的志愿者，加入我们的集智百科词条编写团队！无论你是某个领域的专家，还是对某一主题有浓厚兴趣，我们都欢迎你的加入。通过编写和编辑百科词条，你将有机会为全球读者提供准确、权威的信息，同时提升自己的写作和研究能力。&lt;br /&gt;
&lt;br /&gt;
===我们需要的帮助===&lt;br /&gt;
&lt;br /&gt;
* 编写新的集智百科词条，涵盖复杂系统、人工智能等多个领域&lt;br /&gt;
&lt;br /&gt;
* 更新和完善现有词条，确保信息的准确性和时效性&lt;br /&gt;
&lt;br /&gt;
* 校对和审核其他志愿者提交的内容，确保词条质量&lt;br /&gt;
&lt;br /&gt;
===我们希望你具备===&lt;br /&gt;
&lt;br /&gt;
* 良好的写作能力，能够清晰、简洁地表达复杂的概念&lt;br /&gt;
&lt;br /&gt;
* 对某一领域有深入了解或浓厚兴趣&lt;br /&gt;
&lt;br /&gt;
* 具备基本的网络搜索和信息整理能力&lt;br /&gt;
&lt;br /&gt;
* 有责任心和团队合作精神，愿意为知识共享贡献力量&lt;br /&gt;
&lt;br /&gt;
如果你对知识分享充满热情，愿意为全球读者提供有价值的信息，请立即加入我们！可以发送邮件至wangzhipeng@mail.bnu.edu.cn。&lt;br /&gt;
&lt;br /&gt;
让我们一起，用知识连接世界！&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%96%87%E4%BB%B6:%E6%8E%A8%E7%90%86%E8%BF%87%E7%A8%8B%E4%B8%AD_DeepSeek-R1-Zero_%E5%9C%A8%E8%AE%AD%E7%BB%83%E9%9B%86%E4%B8%8A%E7%9A%84%E5%B9%B3%E5%9D%87%E5%93%8D%E5%BA%94%E6%97%B6%E9%97%B4%E3%80%82.png&amp;diff=41447</id>
		<title>文件:推理过程中 DeepSeek-R1-Zero 在训练集上的平均响应时间。.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%96%87%E4%BB%B6:%E6%8E%A8%E7%90%86%E8%BF%87%E7%A8%8B%E4%B8%AD_DeepSeek-R1-Zero_%E5%9C%A8%E8%AE%AD%E7%BB%83%E9%9B%86%E4%B8%8A%E7%9A%84%E5%B9%B3%E5%9D%87%E5%93%8D%E5%BA%94%E6%97%B6%E9%97%B4%E3%80%82.png&amp;diff=41447"/>
		<updated>2025-01-28T03:03:22Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeepSeek-R1-Zero ⾃然⽽然地学会了⽤更多的思考时间来解决推理任务&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41446</id>
		<title>DeepSeek-R1</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=DeepSeek-R1&amp;diff=41446"/>
		<updated>2025-01-28T02:28:56Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeepSeek-R1是[[DeepSeek团队]]推出的第一代推理模型，通过[[强化学习]]（RL）和[[蒸馏技术]]显著提升了[[语言模型]]的推理能力。DeepSeek-R1-Zero模型在没有监督微调（SFT）的情况下，通过大规模RL训练展现出强大的推理能力，但存在可读性和语言混合问题。为了解决这些问题，DeepSeek-R1引入了冷启动数据和多阶段训练，推理性能与[[OpenAI]]的[[GPT o1]]-1217相当。此外，团队还开源了六个基于[[Qwen]]和[[Llama]]的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
&lt;br /&gt;
==背景==&lt;br /&gt;
该模型的开发背景源于传统语言模型在复杂推理任务中的局限性，尤其是在需要多步逻辑推理的场景中。尽管现有的语言模型在生成文本和理解语言方面表现出色，但在数学推理、代码生成等需要精确逻辑推理的任务中，表现仍然有限。&lt;br /&gt;
&lt;br /&gt;
为了解决这一问题，DeepSeek 团队提出了基于强化学习的训练方法，开发了DeepSeek-R1系列模型。该模型的核心目标是通过强化学习和大规模训练，提升模型在复杂推理任务中的表现。DeepSeek-R1-Zero是这一系列中的第一个模型，它通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。然而，DeepSeek-R1-Zero 在训练过程中也暴露出一些问题，如可读性差、语言混合等。&lt;br /&gt;
&lt;br /&gt;
为了进一步优化模型，DeepSeek 团队引入了冷启动数据和多阶段训练方法，开发了DeepSeek-R1。冷启动数据的使用使得模型在训练初期能够更快地收敛，并且通过多阶段训练，模型的推理能力和可读性得到了显著提升。此外，团队还探索了蒸馏技术，将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中也能表现出色。&lt;br /&gt;
&lt;br /&gt;
总的来说，DeepSeek-R1 的开发背景是为了解决传统语言模型在复杂推理任务中的不足，通过强化学习和蒸馏技术，提升模型在数学推理、代码生成等任务中的表现，并为研究社区提供开源的推理模型资源。&lt;br /&gt;
&lt;br /&gt;
===DeepSeek系列模型===&lt;br /&gt;
2023年7月，国内大性私募''幻方''成立了子公司''深度求索''，储备了过万张A100和H800计算显卡，开启了半年迭代一版大模型的历程：&lt;br /&gt;
* 2024年1月，深度求索发布了第一代模型，DeepSeekMoE系列，最大的版本有67B参数，确立了MoE架构路线，能大幅减少训练和生成期间的成本。另外，DeepSeekMoE发现了'''细粒度多数量Expert模块'''以及'''设立独立的共享Expert模块'''能获得稳定且较好的效果。&lt;br /&gt;
* 2024年5月，深度求索发布了第二代模型，DeepSeek-v2，最大的版本有273B参数。其中最重要的创新是'''多头潜在注意力机制(Multi-head Latent Attention，MLA)'''。MLA能大幅降低模型在生成（推理）阶段的显卡缓存占用，据报告可降到原先的5%-13%，因而可以大大提高其在生成阶段的效率。这一创新，配合其他创新使得DeepSeek-v2的生成文字的成本降到只有每百万token一块钱。&lt;br /&gt;
* 2024年12月，深度求索发布了第三代模型，DeepSeek-v3，最大的版本有671B参数。v3采用了'''多token预测训练（Multi-Token Prediction, MTP）'''技术以及'''无损负载均衡'''技术，在训练过程大幅提高模型能力，最终使得其模型能力比肩GPT-4o的最新版本。此外，DeepSeek-v3还第一次证明了大规模fp8混合精度训练的可行性，提出了DualPipe算法来重叠集群间计算和通信的开销，以及针对MoE架构的PD分离策略等各种技术。&lt;br /&gt;
&lt;br /&gt;
==技术特点==&lt;br /&gt;
===强化学习训练===&lt;br /&gt;
   - DeepSeek-R1-Zero模型通过纯强化学习训练，无需监督微调（SFT），展现出强大的推理能力。&lt;br /&gt;
   - 模型在训练过程中表现出“顿悟时刻”，即自发地重新评估和优化推理步骤。&lt;br /&gt;
   &lt;br /&gt;
在以往的研究中，模型的性能提升主要依赖于大量的监督数据，或者在预训练模型的基础上通过监督微调（SFT）来实现。监督微调是指在预训练模型的基础上，使用带有标注的数据进行进一步训练，使模型更好地适应特定任务（如文本分类、图像识别等），从而提升其在该任务上的性能。然而，DeepSeek-R1-Zero模型的出现打破了这一传统模式，证明了即使不使用监督微调作为冷启动，也能通过大规模强化学习（RL）显著提高推理能力。这一方法可以类比DeepMind的Alpha-Zero，后者通过自我对弈生成数据，在围棋对弈中实现了无需人类先验知识的强大决策能力。&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1-Zero模型的创新主要体现在两个方面：组相对策略优化（GRPO）和规则化奖励（Rule-based reward）。&lt;br /&gt;
&lt;br /&gt;
- '''组相对策略优化（GRPO）'''：GRPO方法放弃了通常与策略模型大小相同的批评者模型，而是通过组得分来估计基线。这种方法类似于多个科研小组共同攻关同一个课题，当某个小组取得领先时，其他小组会复制其方法，从而节省强化学习的训练成本。&lt;br /&gt;
&lt;br /&gt;
- '''规则化奖励（Rule-based reward）'''：规则化奖励则是为了防止大规模强化学习过程中可能出现的“奖励操纵”（reward hacking）。DeepSeek-R1-Zero没有使用结果或过程神经奖励模型，而是要求模型在提供答案的同时输出规范化的思考过程。这就像为了防止科研小组通过作弊取得优势，要求他们必须记录规范的解题过程，而不仅仅是给出结果。&lt;br /&gt;
&lt;br /&gt;
基于上述策略，DeepSeek-R1-Zero的训练展示了两个显著结果。首先，模型自然而然地学会了用更多的思考时间来解决推理任务。这一变化并非通过外部压力实现，而是模型内在发展的结果。其次，模型进化出了复杂性，并产生了引人注目的“顿悟时刻”。这些结果表明，DeepSeek-R1-Zero在推理能力上取得了重要突破。&lt;br /&gt;
&lt;br /&gt;
然而，DeepSeek-R1-Zero也面临一些挑战。由于在预训练阶段完全放弃了对计算资源消耗巨大的监督学习，模型具有明显的成本优势。但与此同时，完全放弃监督学习也导致输出结果不稳定，且可读性较差。这一问题的存在引发了对模型优化的进一步思考。&lt;br /&gt;
&lt;br /&gt;
受到DeepSeek-R1-Zero成果的启发，研究人员提出了两个未来研究方向。首先，作为冷启动，纳入少量高质量数据能否进一步提高推理性能或加速收敛？其次，如何才能训练出一个用户友好型模型，不仅能生成清晰连贯的思维链（CoT），还能展示强大的通用能力？这些问题的探索将为模型的发展提供新的思路和可能性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===冷启动数据与多阶段训练===&lt;br /&gt;
   - 为了解决可读性和语言混合问题，DeepSeek-R1引入了冷启动数据和多阶段训练方法。&lt;br /&gt;
   - 这些改进使得模型在推理任务中的表现与OpenAI的o1-1217模型相当。&lt;br /&gt;
&lt;br /&gt;
尽管 DeepSeek-R1-Zero 显示出了强大的推理能力，但其输出不符合人类的阅读习惯，且会混杂中英文甚至代码和数学符号，所以人类的阅读体验并不好。而使模型的输出符合人类习惯，就很适合使用微调技术。于是deepseek团队一定程度上又把监督微调(SFT)技术请了回来，在最初先使用少量标注数据对基模进行监督微调，作为冷启动，然后再进行 DeepSeek-R1-Zero 所经历的大规模强化学习。&lt;br /&gt;
&lt;br /&gt;
“冷启动”是人工智能领域的一个术语，用于描述人工智能模型在没有任何先前训练数据的情况下从头开始学习的情况。与 DeepSeek-R1-Zero 不同，为了避免从基础模型开始的强化学习训练早期不稳定的冷启动阶段，DeepSeek-R1 构建和收集了少量长思维链数据，收集的过程主要注重过滤掉不易读的结果。&lt;br /&gt;
&lt;br /&gt;
这次冷启动阶段的监督微调和以往的“先监督微调后强化学习”训练过程有显著区别，最大的区别在于数量上。比如DeepseekMath在RL前的监督微调阶段使用了77.6万个样本，而这次的冷启动阶段只使用了几千个。也正因为冷启动阶段用于微调的样本量相对较少，所以工程人员可以精心挑选这些样本，因此它们的质量也比以往监督微调阶段用到的数据要高得多。事先使用高质量数据微调后，模型在开始就会使用人类偏好的语言和思维风格进行思考，吐出对人类阅读体验友好的结果。且由于这些微调数据一般都有高质量的思维链（Chain of Thoughts），在后续的强化学习之始可以跳过不断随机摸索的阶段，快速发展出使用思维链进行复杂推理的能力。因此，少批量高质量数据的冷启动不仅能使模型输出符合人类阅读偏好，还能使模型更快收敛，获得更强的推理能力。不过即便经过了冷启动，大模型在第二阶段的在大规模强化学习过程中海水显示出语言混杂的现象。为了解决这一问题，Deepseek团队还在训练过程中加入了“语言一致性奖励”，即奖励模型尽可能使用一致的语言来思考和回答。&lt;br /&gt;
&lt;br /&gt;
经过第一阶段得冷启动和第二阶段的大规模强化学习后，第三和第四阶段的训练分别是提高模型各方面能力的大规模微调和增强模型有用性及无害性的进一步强化学习。第三阶段和第一阶段虽然都是微调，但在目的和规模上都不一样。第一阶段的冷启动微调是为了使模型的输出更具可读性和激发其后续的思维推理潜力，而第三阶段的微调是为了提升模型的其他通用能力，比如写作，问答、翻译、角色扮演、自我反思等。为此，相比于冷启动所需的几千个数据样本，第三阶段的微调使用的80多万样本数据。这里面包括各种来源的数据，比如说训练Deepseek-v3时用到的监督微调数据集。&lt;br /&gt;
&lt;br /&gt;
有趣的是，这80多万样本中60多万是从之前R1的训练过程中所得的checkpoints中得来。团队人员使用prompt去让checkpoint模型做出回答，然后使用一个训练好的奖励模型来给判断哪些回答质量高可以保留，哪些质量差要被拒绝、丢弃掉，如此获得一个由这些checkpoint生成的，但质量又高于这些checkpoint平均水平的数据集，从而继续训练。这个过程也被称为拒绝采样（Rejection Sampling）。&lt;br /&gt;
&lt;br /&gt;
使用这80多万数据样本对模型进一步微调后，模型不仅有了强大的思维推理能力，还有了各方面的能力。现在最后一步就是要进一步提高模型的推理能力以及有用性，并使其输出无害。这也是第四阶段的进一步强化学习要做的事情。对用于提升其推理能力的数据，可以遵循 DeepSeek-R1-Zero 的方法获得，而用于提升有用性和无害性的数据，就需要收集模型对于prompt的回答并人工分析，标注出有害部分的数据，使用这些标注好的数据去做强化学习。这也被称作从人类反馈中的强化学习（Reinforcement Learning from Human Feedback）。&lt;br /&gt;
&lt;br /&gt;
总的来说，Deepseek-R1的训练分为四阶段，两个SFT阶段，两个RL阶段：&lt;br /&gt;
&lt;br /&gt;
第一阶段：冷启动监督微调，培养正确（符合人类偏好）的语言习惯、激发模型的推理潜能。&lt;br /&gt;
&lt;br /&gt;
第二阶段：大规模强化学习，本阶段专注于提升模型的推理密集任务的能力，并训练模型在回答问题时保持语言一致。&lt;br /&gt;
&lt;br /&gt;
第三阶段：大规模监督微调，结合更广阔领域的数据，提高模型其他方面的通用能力。本阶段还对推理任务和非推理任务进行分开训练。&lt;br /&gt;
&lt;br /&gt;
第四阶段：进一步RL，进一步提高推理能力，响应的有效性，并减少其输出的有害内容。&lt;br /&gt;
&lt;br /&gt;
可见模型的主要推理能力涌现自第一和第二阶段，第三第四阶段更像都是后训练（post-training）。理论上还可以有第五阶段监督微调、第六强化学习，第七阶段监督微调、第八阶段强化学习，不断迭代提高模型的能力。&lt;br /&gt;
&lt;br /&gt;
===蒸馏技术===&lt;br /&gt;
   - DeepSeek团队开源了六个基于Qwen和Llama的蒸馏模型，帮助小型模型提升推理能力。&lt;br /&gt;
   - 蒸馏技术将大型模型的推理能力传递到小型模型，使得小型模型在推理任务中表现优异。&lt;br /&gt;
&lt;br /&gt;
2015年，Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean等学者&amp;lt;ref&amp;gt;HINTON G, VINYALS O, DEAN J. Distilling the Knowledge in a Neural Network[J/OL]. 2015. DOI:10.48550/arxiv.1503.02531. https://arxiv.org/pdf/1503.02531&amp;lt;/ref&amp;gt;提出了在AI领域的知识蒸馏技术，即将大型、复杂模型（教师模型）的'''知识'''转移到小型、简单模型（学生模型）的技术。DeepSeek团队发现，不仅仅是知识，推理能力也可以从大模型的推理能力蒸馏递到小模型。&lt;br /&gt;
&lt;br /&gt;
DeepSeek团队用DeepSeek-R1第三阶段整理得到的80万样本对一些开源模型如Qwen2.5和Llama3.3的小模型版本进行了直接微调。它们发现，仅仅是如此简单的微调就能大大提升小模型的推理能力，而且这种幅度的提升是仅凭大规模强化学习所不能得到的。为此，它们使用Qwen-32B-Base做了一个实验，对其分别做了与Deepseek-R1-Zero相同的大规模强化学习&amp;lt;ref&amp;gt; 这里有点微妙。原文是“we conduct large-scale RL training on Qwen-32B-Base using math,code,and STEM data,training for over '''10K steps'''”。很难说1万步的训练到底够不够大规模，也许对于671B的模型来说足够了，但对于32B的模型可能还缺了点。&amp;lt;/ref&amp;gt;，以及从Deepseek-R1做蒸馏。实验结果是，大规模强化学习后得到的版本，DeepSeek-R1-Zero-Qwen-32B，与目前32B最强的推理模型QwQ-32B-Preview能力相似，然而从Deepseek-R1蒸馏得到的DeepSeek-R1-Distill-Qwen-32B表现却远超前两者。&lt;br /&gt;
&lt;br /&gt;
至此我们也能暂且得出结论：模型蒸馏技术非常有用，相比之下，小模型做大规模强化学习不仅消耗大量算力，而且结果还不如从大模型蒸馏所得。然而，这一切的前提是有这么一个有强能力的大模型。因此，要获得更强的推理能力，还是需要更强的大模型和更大规模的强化学习。&lt;br /&gt;
&lt;br /&gt;
===性能表现===&lt;br /&gt;
&lt;br /&gt;
下图显示了 DeepSeek 进行的测试结果，该测试针对 OpenAI 的 o1 模型在数学、编码和推理任务上测试了其大型语言模型的三个版本。DeepSeek-R1 在数学和编码基准测试中击败或与o1相媲美。&amp;lt;ref&amp;gt;DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., Wang, P., Bi, X., Zhang, X., Yu, X., Wu, Y., Wu, Z. F., Gou, Z., Shao, Z., Li, Z., Gao, Z., … Zhang, Z. (2025). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (No. arXiv:2501.12948). arXiv. https://doi.org/10.48550/arXiv.2501.12948&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====教育领域任务====&lt;br /&gt;
&lt;br /&gt;
在 MMLU、MMLU-Pro 和 GPQA Diamond 等知识基准测试表明，DeepSeek-R1 在 STEM（科学、技术、工程和数学）相关问题上相比 DeepSeek-V3 具有显著的改进。研究者将其归因于大规模强化学习（reinforcement learning, RL）的使用。&lt;br /&gt;
&lt;br /&gt;
* MMLU (Massive Multitask Language Understanding) 是一项涵盖多学科、多领域的大规模基准测试，旨在评估语言模型在不同任务和学科中的表现。这些任务包括人文、科学、社会科学和数学等多个领域的高中至专业水平的问题。DeepSeek-R1 在 MMLU 基准测试中取得了 90.8% 的 Pass@1 准确率，显著优于 DeepSeek-V3，展示了其强大的知识处理和推理能力。&lt;br /&gt;
&lt;br /&gt;
* MMLU-Pro 是一个更加复杂和鲁棒的多任务语言理解基准，设计用于挑战模型在更高难度任务中的表现。与 MMLU 相比，MMLU-Pro 更强调推理能力和跨领域的综合性。DeepSeek-R1 在这一基准中取得了 84.0% 的准确率，超越了 DeepSeek-V3，并在挑战性更高的任务中展现了卓越的推理能力。&lt;br /&gt;
&lt;br /&gt;
* GPQA Diamond (Graduate-Level Google-Proof Q&amp;amp;A Benchmark) 是一个针对研究级问答任务设计的基准，问题往往需要复杂的推理和深度分析才能回答。DeepSeek-R1 在这一基准中的表现达到 71.5% 的 Pass@1 准确率，显著高于 DeepSeek-V3，进一步证明了其在处理复杂问题上的潜力。&lt;br /&gt;
&lt;br /&gt;
====长上下文任务====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 FRAMES（依赖长上下文的问答任务）基准测试中展现了强大的文档分析能力。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====事实性问答====&lt;br /&gt;
&lt;br /&gt;
在 SimpleQA 基准测试中，DeepSeek-R1 超越了 DeepSeek-V3，证明了其处理基于事实查询的能力。但是在中文 SimpleQA 基准上，DeepSeek-R1 的表现不如 DeepSeek-V3，主要由于安全强化学习（safety RL）导致模型拒绝回答某些问题。&lt;br /&gt;
&lt;br /&gt;
* FRAMES 是一项评估模型在长上下文环境中问答能力的基准测试，旨在检测其文档分析和信息提取能力。DeepSeek-R1 在该测试中取得了 82.5% 的准确率，远超 DeepSeek-V3，展现了其在复杂文档分析任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====指令执行与规范化输出====&lt;br /&gt;
&lt;br /&gt;
DeepSeek-R1 在 IF-Eval 基准测试中表现优异。这个测试专注于评估模型遵循格式指令（format instructions）的能力。这些改进主要归因于监督微调（supervised fine-tuning, SFT）和强化学习（RL）后期阶段中指令遵循数据的引入&lt;br /&gt;
&lt;br /&gt;
* IF-Eval (Instruction Following Evaluation) 旨在评估模型遵循格式化指令的能力，是衡量其在严格指令执行中的表现的重要基准。DeepSeek-R1 在 IF-Eval 中表现卓越，得益于训练过程中加入了指令遵循数据。这种改进显示出 DeepSeek-R1 在格式化和结构化任务中的显著优势。&lt;br /&gt;
&lt;br /&gt;
====写作和开放问答任务====&lt;br /&gt;
&lt;br /&gt;
在 AlpacaEval 2.0 和 ArenaHard 基准测试中，DeepSeek-R1 表现出色，进一步表明其在写作任务和开放问答（open-domain question answering）中的优势，强调了大规模强化学习的泛化优势，不仅增强了推理能力，还提升了跨领域的表现能力。此外，DeepSeek-R1 生成的摘要长度简洁，表明 DeepSeek-R1 在基于 GPT 的评估中避免了引入长度偏差（length bias），进一步巩固了其在多任务中的稳健性。&lt;br /&gt;
&lt;br /&gt;
* AlpacaEval 2.0 是一个评估模型在开放式问答任务中能力的基准，测试模型在非考试导向任务（如写作和回答复杂问题）中的表现。DeepSeek-R1 在这一基准中实现了 87.6% 的胜率（win-rate），显著优于 DeepSeek-V3，证明了其强大的写作能力和开放域问答能力。&lt;br /&gt;
&lt;br /&gt;
* ArenaHard 是一个以对话评估为主的高难度基准测试，使用 GPT-4 作为裁判来比较模型在复杂对话中的表现。DeepSeek-R1 在该基准中实现了 92.3% 的胜率，展现了其在复杂对话任务中的优越性能，同时避免了由于输出长度导致的偏差。&lt;br /&gt;
&lt;br /&gt;
====数学和编程任务====&lt;br /&gt;
&lt;br /&gt;
在数学（如 AIME 2024 和 MATH-500）和编程任务（如 LiveCodeBench 和 Codeforces）中，DeepSeek-R1 的表现显著优于其他模型，并与 OpenAI-o1-1217 相当。&lt;br /&gt;
&lt;br /&gt;
* AIME，全称 American Invitational Mathematics Examination，是一项面向中学生的高水平数学竞赛，其难度介于 AMC（美国数学竞赛）和 IMO（国际数学奥林匹克竞赛）之间，享有极高的声誉与含金量。与 AMC 相比，AIME 的试题更具挑战性，需要参赛者具备更强的数学推理能力和问题解决技巧。同时，AIME 也是选拔美国数学奥林匹克竞赛（USAMO）和国际数学奥林匹克竞赛（IMO）国家队的重要环节之一。在这一测试中，DeepSeek-R1 达到了 79.8% 的 Pass@1 准确率，略高于 OpenAI o1-1217 模型的 79.2%。这一结果表明，DeepSeek-R1 具备以较高准确率解决高中生水平复杂数学问题的能力。&lt;br /&gt;
&lt;br /&gt;
* MATH-500 数据集收录了 500 道难度极高的数学竞赛题，涵盖代数、几何、数论、组合数学等多个领域。这些题目要求深厚的数学知识储备以及复杂的推理步骤才能解答。在这一测试中，DeepSeek-R1 以 97.3% 的惊人成绩表现出色，与 OpenAI 的 o1-1217 模型持平，并显著超越了其他对比模型。这一表现表明，DeepSeek-R1 已经能够胜任大学水平的数学竞赛题解答，展现了其卓越的数学推理能力。&lt;br /&gt;
&lt;br /&gt;
* Codeforces 是全球知名的编程竞赛平台，以高难度和强竞争性闻名，吸引了来自世界各地的顶尖程序员参赛。其竞赛题目通常需要选手具备扎实的算法和数据结构知识，以及优秀的编程能力。在 Codeforces 平台上，DeepSeek-R1 获得了 2029 的 Elo 评分，超过了 96.3% 的人类程序员。这一结果表明，DeepSeek-R1 的编程能力已经超越了绝大多数人类程序员，成为算法和编程领域的强大竞争者。&lt;br /&gt;
&lt;br /&gt;
====蒸馏模型的性能评价====&lt;br /&gt;
&lt;br /&gt;
蒸馏 DeepSeek-R1 的输出使小型模型（如 DeepSeek-R1-Distill-Qwen-7B 和 DeepSeek-R1-Distill-Qwen-32B）在多个基准上超越了 GPT-4o-0513 等非推理模型和其他对比模型。这表明蒸馏技术的有效性。&lt;br /&gt;
&lt;br /&gt;
===开源贡献===&lt;br /&gt;
DeepSeek团队开源了以下模型，可以在 [https://github.com/deepseek-ai/DeepSeek-R1 GitHub 主页]下载：&lt;br /&gt;
&lt;br /&gt;
* DeepSeek-R1-Zero&lt;br /&gt;
* DeepSeek-R1&lt;br /&gt;
* 六个基于Qwen和Llama的蒸馏模型&lt;br /&gt;
&lt;br /&gt;
这些开源模型为研究社区提供了宝贵的资源，帮助进一步探索语言模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
===应用场景===&lt;br /&gt;
&lt;br /&gt;
* 推理密集型任务：例如编程任务中的代码生成、算法设计，以及数学问题求解、科学推理和逻辑分析等需要复杂推理的场景。&lt;br /&gt;
&lt;br /&gt;
* 教育与知识应用：可用于解决教育领域的问题，支持知识理解与解答。&lt;br /&gt;
&lt;br /&gt;
* 文档分析与长上下文理解：适合处理需要深入文档分析和理解长上下文的任务，例如复杂信息提取与整合。&lt;br /&gt;
&lt;br /&gt;
* 开放领域问答与写作：在内容生成、问题回答以及创造性写作中具有广泛应用，例如生成高质量文本或进行内容编辑。&lt;br /&gt;
&lt;br /&gt;
* 数据分析与搜索：在数据处理与智能搜索中展现出应用潜力，能够高效解析复杂信息。&lt;br /&gt;
&lt;br /&gt;
===未来展望===&lt;br /&gt;
DeepSeek团队计划进一步优化强化学习在推理任务中的应用，并探索更多蒸馏技术的潜力，以提升小型模型的推理能力。&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==加入我们==&lt;br /&gt;
&lt;br /&gt;
亲爱的社区成员和知识爱好者：&lt;br /&gt;
&lt;br /&gt;
我们正在寻找对知识分享充满热情的志愿者，加入我们的集智百科词条编写团队！无论你是某个领域的专家，还是对某一主题有浓厚兴趣，我们都欢迎你的加入。通过编写和编辑百科词条，你将有机会为全球读者提供准确、权威的信息，同时提升自己的写作和研究能力。&lt;br /&gt;
&lt;br /&gt;
===我们需要的帮助===&lt;br /&gt;
&lt;br /&gt;
* 编写新的集智百科词条，涵盖复杂系统、人工智能等多个领域&lt;br /&gt;
&lt;br /&gt;
* 更新和完善现有词条，确保信息的准确性和时效性&lt;br /&gt;
&lt;br /&gt;
* 校对和审核其他志愿者提交的内容，确保词条质量&lt;br /&gt;
&lt;br /&gt;
===我们希望你具备===&lt;br /&gt;
&lt;br /&gt;
* 良好的写作能力，能够清晰、简洁地表达复杂的概念&lt;br /&gt;
&lt;br /&gt;
* 对某一领域有深入了解或浓厚兴趣&lt;br /&gt;
&lt;br /&gt;
* 具备基本的网络搜索和信息整理能力&lt;br /&gt;
&lt;br /&gt;
* 有责任心和团队合作精神，愿意为知识共享贡献力量&lt;br /&gt;
&lt;br /&gt;
如果你对知识分享充满热情，愿意为全球读者提供有价值的信息，请立即加入我们！可以发送邮件至wangzhipeng@mail.bnu.edu.cn。&lt;br /&gt;
&lt;br /&gt;
让我们一起，用知识连接世界！&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%9C%89%E6%95%88%E4%BF%A1%E6%81%AF&amp;diff=35699</id>
		<title>有效信息</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%9C%89%E6%95%88%E4%BF%A1%E6%81%AF&amp;diff=35699"/>
		<updated>2024-07-06T05:22:09Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 因果元语与确定性和简并性 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=有效信息,因果涌现,互信息,Effective Information,EI,确定性,简并性&lt;br /&gt;
|description=本文是目前互联网世界中关于因果涌现理论和整合信息论中的有效信息（Effective information,简称EI）的少数的全面的介绍文章，包括有效信息的来源，有效信息的定义与分解、实际例子，以及如何扩展到连续变量、与因果度量指标、动力学可逆性的关系是什么等问题进行了全面的讨论。&lt;br /&gt;
}}&lt;br /&gt;
有效信息（Effective Information，简称EI）是[[因果涌现 Causal Emergence]]理论中的一个核心概念，它可以用来衡量一个[[马尔科夫动力学]]的[[因果效应]]的强度。这里，因果效应是指把动力学看做一个黑箱，那么不同的输入分布就会导致不同的输出分布，二者之间联系的紧密程度就是因果效应。有效信息通常可以分解为两个部分：确定性（Determinism）和简并性（Degeneracy）。确定性是指，在动力学的作用下，我们根据系统前一时刻的状态会以多大程度预测它下一时刻状态；简并性是指：我们能够以多大程度从下一时刻的状态预测上一时刻的状态。如果确定性越大，或简并性越小，则系统的有效信息就会越大。在本页中，所有的[math]\log[/math]都表示以2为底的对数运算。&lt;br /&gt;
&lt;br /&gt;
=历史渊源=&lt;br /&gt;
有效信息（effective informaion，EI）这个概念最早由[[Giulio Tononi]]等人在2003年提出&amp;lt;ref name=tononi_2003&amp;gt;{{cite journal |last1=Tononi|first1=G.|last2=Sporns|first2=O.|title=Measuring information integration|journal=BMC Neuroscience|volume=4 |issue=31 |year=2003|url=https://doi.org/10.1186/1471-2202-4-31}}&amp;lt;/ref&amp;gt;，作为[[整合信息论]]中的一个关键指标。当一个系统各个组分之间具有很强的因果关联的时候，可以说这个系统便具备很高的整合程度，而有效信息：EI，便是用来度量这种因果关联程度的关键指标。&lt;br /&gt;
&lt;br /&gt;
到了2013年，[[Giulio Tononi]]的学生[[Erik Hoel]]等人将有效信息这个概念进一步提炼出来，从而定量地刻画涌现，于是提出了[[因果涌现]]理论&amp;lt;ref name=hoel_2013&amp;gt;{{cite journal|last1=Hoel|first1=Erik P.|last2=Albantakis|first2=L.|last3=Tononi|first3=G.|title=Quantifying causal emergence shows that macro can beat micro|journal=Proceedings of the National Academy of Sciences|volume=110|issue=49|page=19790–19795|year=2013|url=https://doi.org/10.1073/pnas.1314922110}}&amp;lt;/ref&amp;gt;。在这个理论中，Hoel使用了[[Judea Pearl]]的[[do算子]]来改造一般的[[互信息]]指标&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot;&amp;gt;{{cite book|title=因果论——模型、推理和推断|author1=Judea Pearl|author2=刘礼|author3=杨矫云|author4=廖军|author5=李廉|publisher=机械工业出版社|year=2022|month=4}}&amp;lt;/ref&amp;gt;，这使得EI本质上与[[互信息]]不同。[[互信息]]度量的是相关性，而有效信息因为引入了[[do算子]]，从而可以度量因果性。在这一文章中，作者们同时提出了[[归一化的有效信息]]指标Eff。&lt;br /&gt;
&lt;br /&gt;
然而，传统的EI主要被用于具有离散状态的[[马尔科夫链]]上。为了能扩充到一般的实数域，P. Chvykov和E. Hoel于2020年合作提出了[[因果几何]]理论&amp;lt;ref  name=Chvykov_causal_geometry&amp;gt;{{cite journal|author1=Chvykov P|author2=Hoel E.|title=Causal Geometry|journal=Entropy|year=2021|volume=23|issue=1|page=24|url=https://doi.org/10.3390/e2}}&amp;lt;/ref&amp;gt;，将EI的定义扩充到了具备连续状态变量的函数映射上，并通过结合[[信息几何]]理论，探讨了EI的一种微扰形式，并与[[Fisher信息]]指标进行了比较，提出了[[因果几何]]的概念。然而，这一连续变量的EI计算方法需要假设方程中的正态分布随机变量的方差是无限小的，这一要求显然过于苛刻了。&lt;br /&gt;
&lt;br /&gt;
到了2022年，为了解决一般[[前馈神经网络]]的EI计算问题，[[张江]]与[[刘凯威]]又将[[因果几何]]中的连续变量的EI计算方法的方差限制去掉，探讨了EI的更一般形式&amp;lt;ref  name=zhang_nis&amp;gt;{{cite journal|title=Neural Information Squeezer for Causal Emergence|first1=Jiang|last1=Zhang|first2=Kaiwei|last2=Liu|journal=Entropy|year=2022|volume=25|issue=1|page=26|url=https://api.semanticscholar.org/CorpusID:246275672}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=yang_nis+&amp;gt;{{cite journal|title=Finding emergence in data by maximizing effective information|author1=Mingzhe Yang|author2=Zhipeng Wang|author3=Kaiwei Liu|author4=Yingqi Rong|author5=Bing Yuan|author6=Jiang Zhang|journal=arXiv|page=2308.09952|year=2024}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=liu_exact&amp;gt;{{cite journal|title=An Exact Theory of Causal Emergence for Stochastic Iterative Systems|author1=Kaiwei Liu|author2=Bing Yuan|author3=Jiang Zhang|journal=arXiv|page=2405.09207|year=2024}}&amp;lt;/ref&amp;gt;。然而，这种扩充仍然存在着一个缺陷，由于实数域上变量的均匀分布严格讲是定义在无穷大空间上的，为了避免遭遇无穷大，EI的计算中就会带着一个参数[math]L[/math]，表示均匀分布的区间范围。为了避免这个缺陷，也为了在不同[[粗粒化]]程度上比较EI，作者们便提出了[[维度平均EI]]的概念，并发现由[[维度平均EI]]定义的[[因果涌现度量]]是一个仅与[[神经网络]]的[[雅可比矩阵]]的行列式与两个比较维度的随机变量方差有关的量，而与其它参量，如L无关，而且，[[维度平均EI]]也可以看作是一种[[归一化的EI]]，即Eff。&lt;br /&gt;
&lt;br /&gt;
本质上讲，EI仅仅与一个[[马尔科夫动力系统]]的[[动力学]]——也就是与[[马尔科夫状态转移矩阵]]有关，而与状态变量的分布无关的量，然而，这一点在之前的文章中并没有被指出或刻意强调。在2024年的[[袁冰]]等人的综述文章中，作者们进一步强调了这一点，并给出了EI仅依赖于[[马尔科夫状态转移矩阵]]的显式形式&amp;lt;ref name=review&amp;gt;{{cite journal|last1=Yuan|first1=Bing|last2=Zhang|first2=Jiang|last3=Lyu|first3=Aobo|last4=Wu|first4=Jiaying|last5=Wang|first5=Zhipeng|last6=Yang|first6=Mingzhe|last7=Liu|first7=Kaiwei|last8=Mou|first8=Muyun|last9=Cui|first9=Peng|year=2024|title=Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies|journal=Entropy|volume=26|issue=2|page=108|url=https://doi.org/10.3390/e26020108}}&amp;lt;/ref&amp;gt;。[[张江]]等人在最新的讨论[[动力学可逆性]]与[[因果涌现]]的文章中，又指出EI实际上是对底层[[马尔科夫状态转移矩阵]]的[[可逆性]]的一种刻画，于是尝试直接刻画这种[[马尔科夫链的动力学可逆性]]以替代EI&amp;lt;ref name=zhang_reversibility&amp;gt;{{cite journal|author1=Jiang Zhang|author2=Ruyi Tao|author3=Keng Hou Leong|author4=Mingzhe Yang|author5=Bing Yuan|year=2024|title=Dynamical reversibility and a new theory of causal emergence|url=https://arxiv.org/abs/2402.15054|journal=arXiv}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=简介=&lt;br /&gt;
有效信息（EI）指标主要用来度量马尔科夫动力学的因果效应强度。与一般的因果推断理论不同，EI主要用于动力学（马尔科夫的转移概率矩阵）已知，且不存在未知变量即[[混杂因子]]的情况。其核心目标是度量因果关联强度，而并非是否存在因果效应。也就是说，EI更适用于已经确知了因果变量X和Y之间存在着因果联系的场合。&lt;br /&gt;
&lt;br /&gt;
更正式地，EI是因果机制（在离散状态的[[马尔科夫链]]中，是这个马尔科夫链的[[概率转移矩阵]]）的函数，而与其它因素无关。EI的正式定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(P)\equiv I(Y;X|do(X\sim U))&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，P代表X到Y的因果机制，它是一个概率转移矩阵，即[math]p_{ij}\equiv Pr(Y=j|X=i)[/math]；X是因变量，Y是果变量，[math]do(X\sim U)[/math]表示对因变量X进行[[do干预]]，将X的分布变为均匀分布。在这一干预下，同时假设X到Y的因果机制P保持不变，那么，Y就会间接地受到X的do干预的影响而发生变化。则EI度量的是经过干预后的X和Y之间的互信息。&lt;br /&gt;
&lt;br /&gt;
之所以引入do操作，目的是为了消除数据X的分布对EI的影响，以使得最后的EI度量仅仅是因果机制f的函数，而与数据X无关。&lt;br /&gt;
&lt;br /&gt;
下面，给出三个马尔科夫链的例子，以及相应的EI数值也放到了下面：&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|[[文件:P1.png|替代=P_1的状态转移图|居中|无框|168x168像素|P_1的状态转移图]]&lt;br /&gt;
|[[文件:P2.png|替代=P_2的状态转移图|居中|无框|200x200像素|P_2的状态转移图]]&lt;br /&gt;
|[[文件:P3.png|替代=P_3的状态转移图|居中|无框|164x164像素|P_3的状态转移图]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;EI(P_1)=2\ bits,\\&amp;amp;Det(P_1)=2\ bits,\\&amp;amp;Deg(P_1)=0\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;EI(P_2)=0.81\ bits,\\&amp;amp;Det(P_2)=0.81\ bits,\\&amp;amp;Deg(P_2)=0\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;EI(P_3)=0.81\ bits\\&amp;amp;Det(P_3)=2\ bits,\\&amp;amp;Deg(P_3)=1.19\ bits.\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
{{NumBlk|:||{{EquationRef|example}}}}&lt;br /&gt;
&lt;br /&gt;
我们可以看到，第一个矩阵[math]P_1[/math]的EI比第二个[math]P_2[/math]的高，这是因为这一概率转移是一个完全确定性的转移，也就是从某一个状态出发，它会以100%的概率转移到另外某一个状态。然而，并不是所有的确定性转移的矩阵都会对应较大的EI，比如[math]P_3[/math]这个矩阵，虽然它的转移概率也都是100%或0，但是因为所有后面三种状态都会转移到第1个状态，因此我们将无法区分它上一时刻是处于何种状态的。这种情况下它的EI也会比较低，我们称这种情况存在着'''简并性'''。于是，如果一个转移矩阵具有较高的确定性和较低的简并性，则它的EI就会很高。进一步，存在如下对EI的分解：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI=Det-Deg&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，Det是对确定性（Determinism）的缩写，而Deg是对简并性（Degeneracy）的缩写，EI是二者之差。在上面的表格中，我们将矩阵所对应的Det和Deg数值也都列在了下面。&lt;br /&gt;
&lt;br /&gt;
第一个转移概率矩阵是一个[[排列矩阵]]（Permutation），它是可逆的，因此确定性最高，没有简并性，因而EI最大；第二个矩阵的前三个状态都会以1/3的概率跳转到彼此，因此确定性程度最低，而简并性也很低，EI是0.81；第三个矩阵虽然也是非0即1的转移概率，因而确定性最高，但是由于后三个状态都跳转到1，因此，从1状态不能推知它来自于哪个状态，因此简并性最高，最终的EI与第二个相同，仍然是0.81。&lt;br /&gt;
&lt;br /&gt;
尽管在原始文献中&amp;lt;ref name=hoel_2013 /&amp;gt;，有效信息大多应用于离散状态的马尔科夫链，但是，[[张江]]、[[刘凯威]]、[[杨明哲]]等人将EI的定义扩展到了更一般的连续变量的情形&amp;lt;ref name=zhang_nis /&amp;gt;&amp;lt;ref name=yang_nis+ /&amp;gt;&amp;lt;ref name=liu_exact /&amp;gt;。这一扩充的基本思想是从EI的原始定义出发，将因变量x干预为一个足够大的有界区间，即[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上的均匀分布，然后再假设因果机制为一种满足高斯分布的条件概率，其均值为确定值映射[math]f(x)[/math]，协方差矩阵为[math]\Sigma[/math]，从而在此基础上，再度量因果变量之间的有效信息。这里的因果机制是由映射[math]f(x)[/math]和协方差矩阵共同决定的，也就是条件概率[math]Pr(y|x)[/math]来决定的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
下面，我们将进行更详细地讲解。&lt;br /&gt;
&lt;br /&gt;
=Do形式及解释=&lt;br /&gt;
原始的有效信息是定义在离散的马尔科夫链上的。然而，为了能够更广泛地应用，在这里我们探讨有效信息的更一般的形式。&lt;br /&gt;
&lt;br /&gt;
==形式定义==&lt;br /&gt;
&lt;br /&gt;
考虑两个随机变量：[math]X[/math]和[math]Y[/math]，分别代表因变量（Cause Variable）和果变量（Effect Variable），并且假定它们的取值区间分别是[math]\mathcal{X}[/math]和[math]\mathcal{Y}[/math]。则[math]X[/math]到[math]Y[/math]的有效信息EI的定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\equiv I(X:Y|do(X\sim U(\mathcal{X})))\equiv I(\tilde{X}:\tilde{Y})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]do(X\sim U(\mathcal{X}))[/math]代表对[math]X[/math]实施[[do干预]](或称[[do操作]]，英文是do-operator），使其服从[math]\mathcal{X}[/math]上的均匀分布[math]U(\mathcal{X})[/math]，也即是[[最大熵分布]]。[math]\tilde{X}[/math]与[math]\tilde{Y}[/math]分别代表在经过[math]do[/math]干预后的[math]X[/math]和[math]Y[/math]变量，其中，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(\tilde{X}=x)=\frac{1}{\#(\mathcal{X})},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也就是，经过干预后的变量[math]\tilde{X}[/math]与干预前的变量[math]X[/math]之间的最大区别就在于分布不同：[math]\tilde{X}[/math]服从[math]\mathcal{X}[/math]上的均匀分布，而[math]X[/math]则可能是任意的分布。这里[math]\#(\mathcal{X})[/math]代表集合[math]\mathcal{X}[/math]的基数。对于有限元素集合来说，这就是集合中元素的个数。&lt;br /&gt;
&lt;br /&gt;
按照[[Judea Pearl]]的理论，do算子实际上是切断了所有指向[math]X[/math]变量的因果箭头，同时保持其它因素，特别是从[math]X[/math]到[math]Y[/math]的因果机制保持不变。所谓的[[因果机制]]是指在给定[math]X[/math]取值[math]x\in \mathcal{X}[/math]的情况下，[math]Y[/math]在[math]\mathcal{Y}[/math]上取任意值[math]y\in \mathcal{Y}[/math]的条件概率：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f\equiv Pr(Y=y|X=x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在干预中，我们要始终保持则这个[[因果机制]][math]f[/math]保持不变。当没有其它变量影响的时候，这就会导致，[math]Y[/math]的概率分布会跟着发生变化，即被间接干预成为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(\tilde{Y}=y)=\sum_{x\in \mathcal{X}}Pr(X=x) Pr(Y=y|X=x)=\sum_{x\in \mathcal{X}} \frac{Pr(Y=y|X=x)}{\#(\mathcal{X})}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]\tilde{Y}[/math]则代表：在保持因果机制[math]f[/math]不变的情况下，[math]Y[/math]变量被[math]X[/math]的do干预所间接改变了的Y变量，这种变化主要体现在概率分布的变化上。&lt;br /&gt;
&lt;br /&gt;
因此，所谓一个因果机制[math]f[/math]的有效信息EI，就是被干预后的因变量[math]\tilde{X}[/math]和果变量[math]\tilde{Y}[/math]之间的[[互信息]]。&lt;br /&gt;
&lt;br /&gt;
==为什么要使用do算子？==&lt;br /&gt;
&lt;br /&gt;
不难看出，尽管EI本质上就是[[互信息]]，但是与传统[[信息论]]中的[[互信息]]不同，有效信息EI在定义中包含了[[do操作]]，即对输入变量做了一个[[干预操作]]。为什么要引入这一操作呢？&lt;br /&gt;
&lt;br /&gt;
根据[[Judea Pearl]]的[[因果阶梯理论]]&amp;lt;ref name=pearl_causality /&amp;gt;，[[因果推断]]包含了三个层次，分别是：关联、[[干预]]和[[反事实]]。阶梯层级越高，因果特征越明显。直接对观测数据估测[[互信息]]，便是在度量关联程度；而如果我们能对变量做[[干预]]操作，即设定变量为某个值或服从某个分布，便上升到了干预的层级。在EI的定义中引入了[math]do[/math]操作，则使得EI能够比[[互信息]]更能体现因果特征。&lt;br /&gt;
&lt;br /&gt;
而从实际意义上来讲，在EI的计算中引入[[do算子]]，则可以把数据和动力学分开，从而消除数据分布（即[math]X[/math]的分布）对EI度量所带来的影响。事实上，在一般的[[因果图]]上，[[do算子]]是一种消除指向被干预变量所有的因果箭头的操作，这种操作可以避免[[混杂因子]]造成的[[虚假关联]]。因此，EI定义中的[[do算子]]也可以消除所有指向因变量[math]X[/math]的因果箭头，包括其它变量（包括不可观测的变量）对[math]X[/math]的影响，从而使得EI更能够刻画动力学本身的特性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[do算子]]的引入让EI这个指标与其他信息度量指标截然不同，关键在于它是且仅是[[因果机制]]的函数，一方面这一特性使得它比其他指标（比如[[转移熵]]）更能抓住因果概念的本质，另一方面它需要我们能够已知或获取到[[因果机制]]，这在只有观测数据的情况下存在一定的困难。&lt;br /&gt;
&lt;br /&gt;
==为什么干预成均匀分布？==&lt;br /&gt;
&lt;br /&gt;
在[[Erik Hoel]]的原始定义中，[[do操作]]是将因变量[math]X[/math]干预成了在其定义域[math]\mathcal{X}[/math]上的[[均匀分布]]（也就是[[最大熵分布]]）&amp;lt;ref name=hoel_2013 /&amp;gt;&amp;lt;ref name=hoel_2017&amp;gt;{{cite journal|author1=Hoel, E.P.|title=When the Map Is Better Than the Territory|journal=Entropy|year=2017|volume=19|page=188|url=https://doi.org/10.3390/e19050188}}&amp;lt;/ref&amp;gt;。那么， 为什么要干预成[[均匀分布]]呢？其它分布是否也可以？&lt;br /&gt;
&lt;br /&gt;
首先，根据上一小节的论述，[[do操作]]的实质是希望让EI能够更清晰地刻画[[因果机制]][math]f[/math]的性质，因此，需要切断因变量[math]X[/math]与其它变量的联系，并改变其分布，让EI度量与[math]X[/math]的分布无关。&lt;br /&gt;
&lt;br /&gt;
而之所以要把输入变量干预为[[均匀分布]]，其实就是要更好地刻画[[因果机制]]的特性。&lt;br /&gt;
&lt;br /&gt;
这是因为，当[math]\mathcal{X}[/math]和[math]\mathcal{Y}[/math]都是有限可数集合的时候，因果机制[math]f\equiv Pr(Y=y|X=x)[/math]就成为了一个[math]\#(\mathcal{X})[/math]行[math]\#(\mathcal{Y})[/math]列的矩阵，我们可以展开EI的定义：&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= I(X,Y|do(X)\sim U)= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x,Y=y)\log \frac{Pr(X=x,Y=y)}{Pr(X=x)Pr(Y=y)}\\&lt;br /&gt;
&amp;amp;= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log \frac{Pr(Y=y|X=x)}{Pr(Y=y)}\\&lt;br /&gt;
&amp;amp;= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log Pr(Y=y|X=x)- \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log Pr(Y=y) \\&lt;br /&gt;
&amp;amp;=\frac{1}{\#(\mathcal{X})}\left(-\sum_{x\in\mathcal{X}}H(Pr(Y|X))\right) + H(Pr(Y))&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|1}}}}&lt;br /&gt;
&lt;br /&gt;
不难看出，最后得到的等式告诉我们，EI实际上由两项构成，第一项是因果机制矩阵每一行的负熵的平均值，第二项则是变量[math]Y[/math]的熵。&lt;br /&gt;
在第一项中，[math]X[/math]的概率分布[math]Pr(X=x)[/math]实际上起到了对每一行的熵求平均时候的权重的作用。只有当我们将该权重取为同样的数值的时候，才能够平等地对待因果机制矩阵中的每一个行，这时就恰好是将[math]X[/math]干预成均匀分布的时候。&lt;br /&gt;
&lt;br /&gt;
如果不是均匀分布，也就意味着某些行的熵就会被乘以一个较大的权重，有的行就会被赋予一个较小的权重，这种权重代表了某种“偏见”，因此也就不能做到让EI能够反映因果机制的天然属性了。&lt;br /&gt;
&lt;br /&gt;
=马尔科夫链的有效信息=&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链简介==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;在本小节中，所有的马尔科夫转移概率矩阵都表示为[math]P[/math]。N为总的状态数量。&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最早，[[Erik Hoel]]等人是在离散状态的[[马尔科夫动力学]]，即[[马尔科夫链]]上提出有效信息这一度量因果性的指标的。因此，这一节中，我们介绍有效信息在[[马尔科夫链]]上的特殊形式。&lt;br /&gt;
&lt;br /&gt;
所谓的[[马尔科夫链]]是指状态离散、时间离散的一种[[平稳随机过程]]，它的动力学一般都可以用所谓的[[转移概率矩阵]](Transitional Probability Matrix)，简称TPM来表示，有时也叫做[[概率转移矩阵]]或[[状态概率转移矩阵]]或[[状态转移矩阵]]。&lt;br /&gt;
&lt;br /&gt;
具体来讲，[[马尔科夫链]]包含一组随机变量[math]X_t[/math]，它在状态空间[math]\mathcal{X}=\{1,2,\cdots,N\}[/math]上取值，其中[math]t[/math]往往表示时间。所谓的[[转移概率矩阵]]是指一个概率矩阵，其中第[math]i[/math]行，第[math]j[/math]列元素：[math]p_{ij}[/math]表示了系统在任意时刻[math]t[/math]在[math]i[/math]状态的条件下，在[math]t+1[/math]时刻跳转到[math]j[/math]状态的概率。同时，每一行满足归一化条件：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum_{j=1}^Np_{ij}=1,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[状态转移矩阵]]可以看作是[[马尔科夫链]]的[[动力学]]，这是因为，任意时刻[math]t+1[/math]上的状态概率分布，即[math]Pr(X_t)[/math]，可以被上一时刻的状态概率分布，即[math]Pr(X_t)[/math]和[[状态转移矩阵]]所唯一确定，并满足关系：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(X_{t+1}=j)=\sum_{i=1}^N p_{ij}\cdot Pr(X_t=i),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里的[math]i,j\in \mathcal{X}[/math]都是[math]\mathcal{X}[/math]中的任意状态，且[math]N=\#(\mathcal{X})[/math]即[math]\mathcal{X}[/math]中的总状态数。&lt;br /&gt;
&lt;br /&gt;
下表展示的是三个不同的转移概率矩阵，以及它们的EI数值：&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]EI(P_1)=2[/math] bits||[math]EI(P_2)=1[/math] bits||[math]EI(P_3)=0[/math] bits&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这三个[[马尔科夫链]]的状态空间都是[math]\mathcal{X}=\{1,2,3,4\}[/math]，因此它们的TPM的大小都是[math]4\times 4[/math]。&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链的EI==&lt;br /&gt;
&lt;br /&gt;
在[[马尔科夫链]]中，任意时刻的状态变量[math]X_t[/math]都可以看作是原因，而下一时刻的状态变量[math]X_{t+1}[/math]就可以看作是结果，这样[[马尔科夫链]]的[[状态转移矩阵]]就是它的[[因果机制]]。因此，我们可以将有效信息的定义套用到[[马尔科夫链]]上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= I(X_t,X_{t+1}|do(X_t)\sim U(\mathcal{X}))=I(\tilde{X}_t,\tilde{X}_{t+1}) \\ &lt;br /&gt;
&amp;amp;= \sum^N_{i=1}\sum^N_{j=1}Pr(\tilde{X}_t=i,\tilde{X}_{t+1}=j)\log \frac{Pr(\tilde{X}_t=i,\tilde{X}_{t+1}=j)}{Pr(\tilde{X}_t=i)Pr(\tilde{X}_{t+1}=j)}\\&lt;br /&gt;
&amp;amp;= \sum^N_{i=1}Pr(\tilde{X}_t=i)\sum^N_{j=1}Pr(\tilde{X}_{t+1}=j|\tilde{X}_t=i)\log \frac{Pr(\tilde{X}_{t+1}=j|\tilde{X}_t=i)}{Pr(\tilde{X}_{t+1}=j)}\\&lt;br /&gt;
&amp;amp;= \frac{1}{N}\sum^N_{i=1}\sum^N_{j=1}p_{ij}\log\frac{N\cdot p_{ij}}{\sum_{k=1}^N  p_{kj}}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\tilde{X}_t,\tilde{X}_{t+1}&amp;lt;/math&amp;gt;分别为把t时刻的[math]X_t[/math][[干预]]为[[均匀分布]]后，前后两个时刻的状态。&amp;lt;math&amp;gt;p_{ij}&amp;lt;/math&amp;gt;为第i个状态转移到第j个状态的转移概率。从这个式子，不难看出，EI仅仅是概率转移矩阵[math]P[/math]的函数。&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链EI的向量形式==&lt;br /&gt;
&lt;br /&gt;
我们也可以将[[转移概率矩阵]][math]P[/math]写成[math]N[/math]个行向量拼接而成的形式，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P=(P_1,P_2,\cdots,P_N)^T&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]P_i[/math]矩阵[math]P[/math]的第[math]i[/math]个行向量，且满足条件概率的归一化条件：[math]||P_i||_1=1[/math]，这里的[math]||\cdot||_1[/math]表示向量的1范数。那么EI可以写成如下的形式：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= \frac{1}{N}\sum^N_{i=1}\sum^N_{j=1}p_{ij}\log\frac{N\cdot p_{ij}}{\sum_{k=1}^N  p_{kj}}\\&lt;br /&gt;
&amp;amp;=\frac{1}{N}\cdot \sum_{i=1}^N\left(P_i\cdot \log P_i - P_i\cdot\log \bar{P}\right)\\&lt;br /&gt;
&amp;amp;=\frac{1}{N}\sum_{i=1}^N D_{KL}(P_i||\bar{P})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|2}}}}&lt;br /&gt;
将矩阵每列求均值，可得到平均转移向量&amp;lt;math&amp;gt;\overline{P}=\sum_{k=1}^N P_k/N&amp;lt;/math&amp;gt;。[math]D_{KL}[/math]便是两个分布的[[KL散度]]。因此，EI是转移矩阵每个行转移向量[math]P_i[/math]与平均转移向量[math]\bar{P}[/math]的[[KL散度]]的均值。&lt;br /&gt;
&lt;br /&gt;
针对上面所列的三个[[状态转移矩阵]]，我们可以分别求出它们的EI为：2比特、1比特和0比特。由此可见，如果[[转移概率矩阵]]中出现更多的0或1，也就是行向量多是[[独热向量]]（也叫做[[one-hot向量]]，即某一个位置为1，其它位置为0的向量），则EI值就会更大。也就是说，如果在状态转移的过程中，从某一时刻到下一时刻的跳转越确定，则EI值就会倾向于越高。但是，这个观察并不十分精确，更精确的结论由后面的小节给出。&lt;br /&gt;
&lt;br /&gt;
==归一化==&lt;br /&gt;
显然，EI的大小和状态空间大小有关，这一性质在我们比较不同尺度的[[马尔科夫链]]的时候非常不方便，我们需要一个尽可能不受尺度效应影响的[[因果效应度量]]。因此，我们需要对有效信息EI做一个归一化处理，得到和系统尺寸无关的一个量化指标。&lt;br /&gt;
&lt;br /&gt;
根据[[Erik Hoel]]和[[Tononi]]等人的工作，要用[[均匀分布]]即[[最大熵分布]]下的熵值，即&amp;lt;math&amp;gt;\log N&amp;lt;/math&amp;gt;来做分母对EI进行归一化，这里的[math]N[/math]为状态空间[math]\mathcal{X}[/math]中的状态的数量&amp;lt;ref name=hoel_2013 /&amp;gt;。那么归一化后的EI便等于：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff=\frac{EI}{\log N}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
进一步定义归一化指标也称为'''有效性'''（effectiveness）。&lt;br /&gt;
&lt;br /&gt;
然而，在处理连续状态变量的时候，这种使用状态空间中状态数量的对数值进行归一化的处理方式并不是非常合适，因为这一状态数往往受到变量的维度和实数分辨率的影响。&lt;br /&gt;
&lt;br /&gt;
==确定性和简并性==&lt;br /&gt;
===EI的分解===&lt;br /&gt;
根据公式{{EquationNote|1}}，我们发现，EI实际上可以被分解为两项，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI&amp;amp;=\frac{1}{\#(\mathcal{X})} \left(-\sum_{x\in\mathcal{X}}H(Pr(Y|X))\right) + H\left(Pr(Y)\right)\\&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同样，在马尔科夫链的情景下，EI也可以做这样的分解：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= \frac{1}{N}\cdot \sum_{i=1}^N\left(P_i\cdot \log P_i - P_i\cdot\log \bar{P}\right)\\&lt;br /&gt;
&amp;amp;=\underbrace{-\langle H(P_i)\rangle}_{确定性项}+\underbrace{H(\bar{P})}_{非简并性项}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|tow_terms}}}}&lt;br /&gt;
&lt;br /&gt;
其中，第一项：[math]-\langle H(P_i)\rangle\equiv \frac{1}{N}\sum_{i=1}^N H(P_i)[/math]为每个行向量[math]P_i[/math]的负熵的平均值，它刻画了整个马尔科夫转移矩阵的'''确定性'''（determinism）；&lt;br /&gt;
&lt;br /&gt;
第二项：[math]H(\bar{P})[/math]为平均行向量的熵，其中[math]\bar{P}\equiv \frac{1}{N}\sum_{i=1}^N P_i [/math]为所有N个行向量的平均行向量，它刻画了整个马尔科夫转移矩阵的'''非简并性'''或'''非退化性'''(non-degeneracy)。&lt;br /&gt;
&lt;br /&gt;
===确定性与简并性===&lt;br /&gt;
然而上述定义中的确定性项和非简并性都是负数，为此，我们重新定义一个马尔科夫链转移矩阵P的'''确定性'''为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Determinism \equiv \log N - \langle H(P_i)\rangle = \frac{1}{N}\sum_{i=1}^N \sum_{j=1}^N p_{ij}\log \left(N\cdot p_{ij}\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一项是一个平均的[[负熵]]，为了防止其为负数，所以加上了[math]\log N[/math]&amp;lt;ref name=hoel_2013 /&amp;gt;。Determinism能刻画整个转移矩阵的确定性：也就是说如果我们知道了系统当前时刻所处的状态，则我们能够推断出系统在下一时刻所处的状态的程度。为什么这么说呢？这是因为确定性这一项是所有行向量熵的平均值，再取一个负号。我们知道，当一个向量更靠近均匀分布的时候，它的熵就越大，相反，如果一个向量越靠近一个“独热”（one-hot）的向量，也就是这个向量中只有一个1，其它元素都是0，那么它的熵就越小。我们知道，马尔科夫概率转移矩阵的一个行向量的含义就代表系统从当前状态转移到各个不同状态的概率大小。那么，当平均的行向量负熵大的时候，也就是这个行向量的某一个单元概率为1，其它为0，这就意味着系统能够确定地转移到1对应的状态。&lt;br /&gt;
&lt;br /&gt;
我们定义一个马尔科夫链转移矩阵P的'''简并性'''为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Degeneracy \equiv \log N - H(\bar{P})=\log N + \sum_{j=1}^N \bar{P}_{\cdot j}\log \bar{P}_{\cdot j}=\sum_{j=1}^N \frac{\sum_{i=1}^Np_{ij}}{N}\log \left(\sum_{i=1}^Np_{ij}\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一项为简并性或叫退化性，为了防止其为负数，所以加上了[math]\log N[/math]&amp;lt;ref name=hoel_2013 /&amp;gt;。这里的“简并性”的含义是：如果知道了系统的当前状态，能不能反推系统在上一时刻的状态的能力，如果可以推断，则这个马尔科夫矩阵的简并性就会比较低，也就是非简并的；而如果很难推断，则马尔科夫矩阵就是简并的，也即退化的。为什么“简并性”可以用平均行向量分布的负熵来刻画呢？这是因为，首先，当所有的P中的行向量都是彼此独立的独热向量，那么它们的平均分布就会非常接近于一个均匀分布，即[math]\bar{P}\approx (\frac{1}{N},\frac{1}{N},\cdots,\frac{1}{N})[/math]，这个时候，它的[[Shannon熵]]最大，即[math]\log N[/math]。而在此时，这个马尔科夫转移矩阵是一个'''可逆矩阵'''（由彼此独立的“独热”向量形成的全体彼此线性无关，因此矩阵满秩，因此是可逆的）。这也就意味着，我们从系统当前的状态，是可以推断出系统的上一时刻的状态的，所以这个马尔科夫转移矩阵是非简并的，计算出的简并度恰恰也为0；&lt;br /&gt;
&lt;br /&gt;
其次，当P中的行向量都是相同的独热向量的时候，则平均向量也是一个独热的向量，而这种向量的[[熵]]是最小的。在此时，由于所有的上一时刻状态都会转移到行向量中1对应的状态，因此我们也就很难推断出当前这个状态是由哪一个上一步的状态转移过来的。因此，这种情形下的马尔科夫矩阵是简并的（或退化的），计算出来的简并度则恰恰是[math]\log N[/math]。&lt;br /&gt;
&lt;br /&gt;
对于更一般的情况，如果P中的行向量靠近一个彼此独立的独热行向量构成的矩阵，则P就越非简并，相反，如果行向量彼此相同且靠近同一个独热向量，则P就越简并。&lt;br /&gt;
&lt;br /&gt;
===举例===&lt;br /&gt;
下面，我们以三个马尔科夫链为例，来考察它们的确定性和简并性&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;Det(P_1)=2\ bits,\\&amp;amp;Deg(P_1)=0\ bits,\\&amp;amp;EI(P_1)=2\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_2)=0.81\ bits,\\&amp;amp;Deg(P_2)=0\ bits,\\&amp;amp;EI(P_2)=0.81\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_3)=2\ bits,\\&amp;amp;Deg(P_3)=1.19\ bits,\\&amp;amp;EI(P_3)=0.81\ bits\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
第一个转移概率矩阵是一个置换排列矩阵（Permutation），它是可逆的，因此确定性最高，没有简并性，因而EI最大；第二个矩阵的前三个状态都会以1/3的概率跳转到彼此，因此确定性程度最低，而非简并，EI是0.81；第三个矩阵虽然也是确定性的矩阵，因而确定性最高，但是由于后三个状态都跳转到1，因此，从1状态不能推知它来自于哪个状态，因此简并性最高，最终的EI与第二个相同，仍然是0.81。&lt;br /&gt;
&lt;br /&gt;
===归一化的确定性与简并性===&lt;br /&gt;
&lt;br /&gt;
在[[Erik Hoel]]等人的原始论文中&amp;lt;ref name=hoel_2013 /&amp;gt;，作者们定义的确定性和简并性是以归一化的形式呈现的，也就是将确定性和简并性除以了一个与系统尺度有关的量。为了区分，我们将归一化的对应量称为确定性系数和简并性系数。&lt;br /&gt;
&lt;br /&gt;
具体地，[[Erik Hoel]]等人将归一化后的有效信息，即Eff进行分解，分别对应确定性系数（determinism coefficient）和简并性系数（degeneracy coefficient）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff = Determinism\ Coefficient - Degeneracy\ Coefficient&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这两项的定义分别是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
&amp;amp;Determinism\ Coefficient = \frac{1}{N\log N}\sum_{i,j}p_{ij}\log\left(N\cdot {p_{ij}}\right) \\&lt;br /&gt;
&amp;amp;Degeneracy\ Coefficient = \frac{1}{N\log N}\sum_{ij}p_{ij}\log{\left(\sum_k p_{k,j}\right)}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
总之，确定性指的是，已知当前时刻状态概率分布，对未来可能状态的判断有多大的把握；而简并性指的是，已知当前的状态，追溯历史，我们能有多大确定性做出判断。如果有状态在动力学过程中发生简并，我们回溯历史时能运用的信息就会变少。当一个系统背后的动力学确定性高，同时简并性低时，说明这是一个具有明显因果效应的动力学。&lt;br /&gt;
&lt;br /&gt;
==EI的函数性质==&lt;br /&gt;
由公式{{EquationNote|2}}可以看出，在概率转移矩阵P上，EI是关于矩阵中每一个元素（从某一状态到另一状态的条件概率）的函数，于是我们自然会问：这样一个函数具有哪些数学性质？如它有没有极值点？极值点在哪里？凸性如何？最大值和最小值又是多少？&lt;br /&gt;
===定义域===&lt;br /&gt;
在离散状态和离散时间的马尔科夫链上，EI的定义域显然是概率转移矩阵P。P是一个由[math]N\times N[/math]个元素构成的矩阵，其中每一个元素[math]p_{ij}\in[0,1][/math]代表一个概率值，同时对于任意的行，这组概率值需要满足归一化条件，也就是对于任意的[math]\forall i\in[1,N][/math]:&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
||P_i||_1=\sum_{j=1}^N p_{ij}=1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|3}}}}&lt;br /&gt;
因此EI的定义域，也就是P的可能空间并不是全部[math]N\times N[/math]维的实数空间[math]\mathcal{R}^{N^2}[/math]，由于归一化条件{{EquationNote|3}}的存在，使得该定义域成为一个[math]N\times N[/math]维实数空间中的一个子空间。如何表达这个子空间呢？&lt;br /&gt;
&lt;br /&gt;
首先，对于任意一个行向量[math]P_i[/math]来说，它的取值范围空间为N维实数空间中的一个超正多面体。例如，当[math]N=2[/math]的时候，该空间为一条直线：[math]p_{i,1}+p_{i,2}=1, \forall i\in\{1,2\}[/math]。当[math]N=3[/math]的时候，该空间为一张三维空间中的平面：[math]p_{i,1}+p_{i,2}+p_{i,3}=1, \forall i\in\{1,2,3\}[/math]。这两个空间如下图所示：&lt;br /&gt;
&lt;br /&gt;
[[文件:P1+p2=1.png|301x301像素|替代=]][[文件:P1+p2+p3=1.png|380x380像素|替代=]]&lt;br /&gt;
&lt;br /&gt;
在一般情况，我们将N维空间下的行向量[math]P_i[/math]的取值范围空间定义为[math]\Delta=\{p_{j}|\sum_{j=1}^Np_{j}=1,p_{j}\in[0,1]\}[/math]，则N个这样的空间的笛卡尔积即为EI的定义域：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Dom(EI)=\Delta\times \Delta\cdots\times\Delta=\Delta^N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===一阶导数及极值点===&lt;br /&gt;
&lt;br /&gt;
对公式{{EquationNote|2}}求[math]p_{ij}[/math]的一阶导数，并注意到归一化条件[math]\sum_{j=1}^Np_{ij}=1[/math]，则就可以得到：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial EI}{\partial p_{ij}}=\log\left(\frac{p_{ij}}{p_{iN}}\right)-\log\left(\frac{\bar{p}_{\cdot j}}{\bar{p}_{\cdot N}}\right),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|3}}}}&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;p_{ij}&amp;lt;/math&amp;gt;表示P中第i行第j列的条件概率，因为P每一行有归一化约束条件{{EquationNote|2}}，所以EI函数本身有&amp;lt;math&amp;gt;N(N-1)&amp;lt;/math&amp;gt;个自由变元，我们可以取&amp;lt;math&amp;gt;1\leq i\leq N, 1\leq j\leq N-1&amp;lt;/math&amp;gt;。&amp;lt;math&amp;gt;p_{iN}&amp;lt;/math&amp;gt;表示第i行第N列的条件概率，&amp;lt;math&amp;gt;\bar{p}_{\cdot j}, \bar{p}_{\cdot N}&amp;lt;/math&amp;gt;则分别表示第j列和第N列条件概率的均值。不难看出，该导数有定义的前提是对于选定的[math]i,j\in[1,N][/math]，[math]p_{ij},p_{iN},\bar{p}_{\cdot j}\equiv \frac{\sum_{k=1}^Np_{kj}}{N},\bar{p}_{\cdot N}\equiv \frac{\sum_{k=1}^Np_{kN}}{N}[/math]都大于0，只有满足这个条件，则EI在[math]p_{ij}[/math]附近是可导的。否则，如果有一项为0，则导数不存在。&lt;br /&gt;
&lt;br /&gt;
令式{{EquationNote|3}}等于0，可以求得极值点：即对于任意的&amp;lt;math&amp;gt;1\leq i\leq N, 1\leq j\leq N-1&amp;lt;/math&amp;gt;，都有下式的成立，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p_{ij}=\bar{p}_{\cdot j}=\frac{1}{N}\sum_{k=1}^Np_{kj}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
不难计算出，此时&amp;lt;math&amp;gt;EI=0&amp;lt;/math&amp;gt;，即EI达到了极值点。根据EI的二阶导数不难判断出，这是极小值点。换个角度来看这个公式，这意味着EI的极小值点有很多个，只要转移概率矩阵所有行向量完全一致，无论该行向量本身是怎样的分布，EI都会等于0。&lt;br /&gt;
&lt;br /&gt;
===二阶导数与凸性===&lt;br /&gt;
进一步地，为了求得EI函数的凸性，我们可以求出EI这个函数的二阶导数&amp;lt;math&amp;gt;\frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}&amp;lt;/math&amp;gt;，其中&amp;lt;math&amp;gt;1\leq s \leq N, 1\leq t \leq N-1 &amp;lt;/math&amp;gt;。首先我们需要引入一个函数符号&amp;lt;math&amp;gt;\delta_{i,j} &amp;lt;/math&amp;gt;，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\delta_{i,j} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
0 &amp;amp; \text{if } i\ne j,\\&lt;br /&gt;
1 &amp;amp; \text{if } i = j.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
于是我们可以来推导EI的二阶导数，当&amp;lt;math&amp;gt;i=s &amp;lt;/math&amp;gt;时，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
     \begin{aligned}&lt;br /&gt;
    \frac{\partial^2 EI}{\partial p_{ij}\partial p_{it}}&amp;amp;=\frac{\delta_{j,t}}{N}\left(\frac{1}{p_{ij}}-\frac{1}{N\cdot \bar{p}_{\cdot j}}\right)+\frac{1}{N\cdot p_{iN}}-\frac{1}{N^2\cdot \bar{p}_{\cdot N}}\\&lt;br /&gt;
    &amp;amp;=\delta_{j,t}\frac{\sum_{k=1}^{N-1}p_{k j}-p_{ij}}{N^2\cdot p_{ij}\cdot \bar{p}_{\cdot j}}+\frac{\sum_{k=1}^{N-1}p_{k N}-p_{iN}}{N^2\cdot p_{iN}\cdot \bar{p}_{\cdot N}}\\&lt;br /&gt;
    &amp;amp;=\delta_{j,t}\frac{\sum_{k\neq i}p_{kj}}{N^2\cdot p_{ij}\cdot \bar{p}_{\cdot j}}+\frac{\sum_{k\neq i}p_{k N}}{N^2\cdot p_{iN}\cdot \bar{p}_{\cdot N}}&amp;gt;0,&lt;br /&gt;
\end{aligned}&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当&amp;lt;math&amp;gt;i\ne s&amp;lt;/math&amp;gt;时，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
    \frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}=-\frac{\delta_{j,t}}{N^2\cdot \bar{p}_{\cdot j}}-\frac{1}{N^2\cdot \bar{p}_{\cdot N}}&amp;lt;0.&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
综上，EI的二阶导数为，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
        \frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}=\frac{1}{N}\cdot\left(\frac{\delta_{i,s}\delta_{j,t}}{p_{ij}}+\frac{\delta_{i,s}}{p_{iN}}-\frac{\delta_{j,t}}{N\cdot\bar{p}_{\cdot j}}-\frac{1}{N\cdot \bar{p}_{\cdot N}}\right).&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且，二阶导数在&amp;lt;math&amp;gt;i=s &amp;lt;/math&amp;gt;的时候为正，在&amp;lt;math&amp;gt;i\ne s&amp;lt;/math&amp;gt;时为负。因此EI既不是凸的也不是凹的。&lt;br /&gt;
&lt;br /&gt;
===最小值===&lt;br /&gt;
前面已经根据EI的一阶导数讨论了它的极值问题。即EI会在所有行向量都是同一个向量的时候达到极小值0。那么，这个极小值是不是最小的呢？&lt;br /&gt;
&lt;br /&gt;
我们知道，根据公式{{EquationNote|2}}，EI本质上是一种KL散度，而KL散度都是非负的，也就是说：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\geq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个不等式的等号在[math]p_{ij}=\bar{p}_{\cdot j}[/math]对所有的[math]i,j[/math]都成立的时候能够取到。因此，0是EI的最小值，且[math]p_{ij}=\bar{p}_{\cdot j}=\frac{1}{N}\sum_{k=1}^Np_{kj}[/math]是它的最小值点，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_{min}=0.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===最大值===&lt;br /&gt;
通过前面确定性和简并性章节的讨论，我们知道EI可以拆成两部分，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI = -\langle H(P_i)\rangle + H(\bar{P}),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中熵的定义是&amp;lt;math&amp;gt;H(P_i)=-\sum_{j=1}^Np_{ij}\log p_{ij}&amp;lt;/math&amp;gt;。分开来看，前一项式子最大值为0，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
- H(P_i)\leq 0,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为没有不确定性的独热向量时，该式子的等号成立。所以，当对所有的i都有&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为独热变量时，有&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
-\langle H(P_i)\rangle=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
成立。另一边，P中所有行向量的平均向量的熵也有一个不等式成立，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
H(\bar{P})\leq \log N,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中等于号在满足&amp;lt;math&amp;gt;\bar{P}=\frac{1}{N}\cdot \mathbb{1}&amp;lt;/math&amp;gt;条件时成立。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\leq 0+\log N=\log N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当这两个式子的等号同时成立时，即&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为独热向量，同时&amp;lt;math&amp;gt;\bar{P}&amp;lt;/math&amp;gt;为均匀分布时（此时必然要求[math]P_i[/math]彼此垂直，也就是P是一个[[排列置换矩阵]]），EI会达到最大值：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_{max}=\log N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==最简马尔科夫链下的解析解==&lt;br /&gt;
&lt;br /&gt;
我们考虑一个最简单的2*2马尔科夫链矩阵：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P=\begin{pmatrix}p &amp;amp; 1-p \\1-q &amp;amp; q\end{pmatrix},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中 [math]p[/math] 和 [math]q[/math] 为取值 [math][0,1][/math] 的参数。&lt;br /&gt;
&lt;br /&gt;
这个参数为[math]p[/math]和[math]q[/math]的转移概率矩阵的EI可以通过以下解析解计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI=\frac{1}{2}\left[p\log_2\frac{2p}{1+p-q}+(1-p)\log_2\frac{2(1-p)}{1-p+q}\right. + \left.(1-q)\log_2\frac{2(1-q)}{1+p-q}+q\log_2\frac{2q}{1-p+q}\right]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下图展示了不同[math]p[/math] 和 [math]q[/math]取值的 EI 的变化。&lt;br /&gt;
&lt;br /&gt;
[[文件:EIpq.png|替代=|400x400像素]]&lt;br /&gt;
&lt;br /&gt;
由这张图不难看出，当p+q=1的时候，也就是所有行向量都相同的情形，EI取得最小值0。否则，随着p,q沿着垂直于p+q=1的方向增大，EI开始变大，而最大值为1.&lt;br /&gt;
&lt;br /&gt;
==因果涌现==&lt;br /&gt;
有了有效信息这一度量指标后，我们便可以讨论马尔科夫链上的因果涌现了。对于一个马尔科夫链，观察者可以建立多尺度视角去观测，区分出微观和宏观。首先，原始的马尔科夫概率转移矩阵P即定义了微观动力学；其次，经过对微观态的粗粒化映射（coarse-graining）后（通常反映为对微观状态的分组），观察者可以得到对应的宏观状态（即分组），这些宏观状态彼此之间的概率转移可以用宏观的马尔科夫概率转移矩阵P'来刻画。对两个动力学分别可以计算EI，如果宏观的EI大于微观EI，我们说该系统发生了因果涌现。&lt;br /&gt;
&lt;br /&gt;
[[文件:CE.png|替代=因果涌现示意图|500x500像素]]&lt;br /&gt;
&lt;br /&gt;
可以定义一个新的指标直接度量因果涌现的程度：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
CE = EI(P') - EI(P)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里[math]P[/math]为微观状态的马尔科夫概率转移矩阵，维度为：[math]N\times N[/math]，这里N为微观的状态数；而[math]P'[/math]为对[math]P[/math]做粗粒化操作之后得到的宏观态的马尔科夫概率转移矩阵，维度为[math]M\times M[/math]，其中[math]M&amp;lt;N[/math]为宏观状态数。&lt;br /&gt;
&lt;br /&gt;
关于如何对马尔科夫概率转移矩阵实施粗粒化的方法，往往体现为两步：1、对微观状态做归并，将N个微观态，归并为M个宏观态；2、对马尔科夫转移矩阵做约简。关于具体的粗粒化马尔科夫链的方法，请参考[[马尔科夫链的粗粒化]]。&lt;br /&gt;
&lt;br /&gt;
如果计算得出的CE&amp;gt;0，则称该系统发生了[[因果涌现]]，否则没有发生。&lt;br /&gt;
&lt;br /&gt;
下面，我们展示一个具体的因果涌现的例子：&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_m=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_M=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1       &amp;amp;0            &amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1            &amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;Det(P_m)=0.81\ bits,\\&amp;amp;Deg(P_m)=0\ bits,\\&amp;amp;EI(P_m)=0.81\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_M)=1\ bits,\\&amp;amp;Deg(P_M)=0\ bits,\\&amp;amp;EI(P_M)=1\ bits\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
在这个例子中，微观态的转移矩阵是一个4*4的矩阵，其中前三个状态彼此以1/3的概率相互转移，这导致该转移矩阵具有较小的确定性，因此EI也不是很大为0.81。然而，当我们对该矩阵进行粗粒化，也就是把前三个状态合并为一个状态a，而最后一个状态转变为一个宏观态b。这样所有的原本三个微观态彼此之间的转移就变成了宏观态a到a内部的转移了。因此，转移概率矩阵也就变成了[math]P_M[/math]，它的EI为1。在这个例子中，可以计算它的[[因果涌现度量]]为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
CE=EI(P_M)-EI(P_m)=1-0.81=0.19\ bits&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即存在着0.19比特的因果涌现。&lt;br /&gt;
&lt;br /&gt;
有时，我们也会根据归一化的EI来计算[[因果涌现度量]]，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ce=Eff(P_M)-Eff(P_m)=1-0.405=0.595&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由此可见，由于归一化的EI消除了系统尺寸的影响，因此因果涌现度量更大。&lt;br /&gt;
&amp;lt;!--[[文件:Example1.png|815x815px|无框|居中]]&lt;br /&gt;
&lt;br /&gt;
上图展示了几种马尔科夫链的转移概率矩阵，其中（a）是确定性高，简并性低，所以整体eff比较高。（b）则是确定性和简并性都比较高，所以eff是0。（c）相比于（a）确定性更低，（d）也是确定性和简并性都较高导致eff较低，它们都可以通过同一种粗粒化策略（将前4个状态合并为一个状态）来得到（e）。此时（e）确定性很高，无简并性，所以（e）的eff比（c）（d）要高。&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==计算EI的源代码==&lt;br /&gt;
&lt;br /&gt;
这是计算一个马尔科夫概率转移矩阵的Python源代码。输入tpm为一个满足行归一化条件的马尔科夫概率转移矩阵，返回的ei_all为其EI值，其余两项分别为'''确定性系数'''和'''简并性系数'''。&lt;br /&gt;
python:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def tpm_ei(tpm, log_base = 2):&lt;br /&gt;
    # marginal distribution of y given x ~ Unifrom Dist&lt;br /&gt;
    puy = tpm.sum(axis=0)&lt;br /&gt;
    n = tpm.shape[0]&lt;br /&gt;
    &lt;br /&gt;
    # replace 0 to a small positive number to avoid log error&lt;br /&gt;
    eps = 1E-10&lt;br /&gt;
    tpm_e = np.where(tpm==0, eps, tpm)&lt;br /&gt;
    puy_e = np.where(tpm==0, eps, puy)&lt;br /&gt;
    &lt;br /&gt;
    # calculate EI of specific x&lt;br /&gt;
    ei_x = (np.log2(n * tpm_e / puy_e) / np.log2(log_base)  * tpm).sum(axis=1)&lt;br /&gt;
    &lt;br /&gt;
    # calculate det and deg&lt;br /&gt;
    det = np.log2(n) + (tpm * np.log2(tpm_e)).sum(axis=1).mean(axis=0)&lt;br /&gt;
    deg = np.log2(n) + (tpm.mean(axis=0) * np.log2(tpm_e.mean(axis=0))).sum()&lt;br /&gt;
    &lt;br /&gt;
    # calculate total EI&lt;br /&gt;
    ei_all = ei_x.mean()&lt;br /&gt;
    return ei_all,det/np.log2(log_base),deg/np.log2(log_base)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=连续变量的EI=&lt;br /&gt;
&lt;br /&gt;
现实中大部分系统都要在连续空间上考虑，所以很有必要将EI的概念拓展到连续系统上。&lt;br /&gt;
&lt;br /&gt;
这种扩展的核心思想是将连续空间中的因果机制简化为一个确定性的函数映射[math]f(X)[/math]再加上一个噪声随机变量[math]\xi[/math]。而且，在下面列举的情形中，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]，即满足高斯分布，这样便可求得EI的解析表达式。对于更一般的情况，尚没有文献进行讨论。&lt;br /&gt;
&lt;br /&gt;
==随机函数映射==&lt;br /&gt;
最初Erik Hoel考虑到了这一点，提出了[[因果几何]]&amp;lt;ref name=Chvykov_causal_geometry /&amp;gt;框架，它不仅率先讨论了随机函数映射的EI计算问题，同时还引入了干预噪音和[[因果几何]]的概念，并定义了EI的局部形式，并将这种形式与[[信息几何]]进行了对照和类比。下面，我们分别从一维函数映射、多维函数映射，和EI的局部形式来分别进行讨论。&lt;br /&gt;
&lt;br /&gt;
===一维函数映射===&lt;br /&gt;
&lt;br /&gt;
首先，我们考虑最简单的情况：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\varepsilon, \varepsilon\sim\mathcal{N}(0,\sigma^2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]x,y\in \mathcal{R}[/math]都是一维实数变量。按照有效信息的定义，我们需要对变量x进行干预，使其满足在其定义域空间上服从均匀分布。如果x的定义域为一个固定的区间，如[a,b]，其中a,b都是实数，那么x的概率密度函数就是[math]1/(b-a)[/math]。然而，当x的定义域为全体实数的时候，区间成为了无穷大，而x的概率密度函数就成为了无穷小。&lt;br /&gt;
&lt;br /&gt;
为了解决这个问题，我们假设x的定义域不是整个实数空间，而是一个足够大的区域：[math][-L/2,L/2][/math]，其中L为该区间的大小。这样，该区域上的均匀分布的密度函数为：[math]1/L[/math]。我们希望当[math]L\rightarrow +\infty[/math]的时候，EI能够收敛到一个有限的数。然而，实际的EI是一个和x定义域大小有关的量，所以EI是参数L的函数。这一点可以从EI的定义中看出：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI&amp;amp;=I(y;x|do(x\sim U[-L/2,L/2]))\\&lt;br /&gt;
&amp;amp;=\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln\frac{p(y|x)}{p(y)}dydx\\ &lt;br /&gt;
&amp;amp;=\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y|x)dydx -\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y)dydx&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|4}}}}&lt;br /&gt;
&lt;br /&gt;
这里，[math]p(y|x)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)[/math]为给定x的条件下，y的条件概率密度函数。由于[math]\varepsilon[/math]服从均值为0，方差为[math]\sigma^2[/math]的正态分布，所以[math]y=f(x)+\varepsilon[/math]就服从均值为[math]f(x)[/math]，方差为[math]\sigma^2[/math]的正态分布。&lt;br /&gt;
&lt;br /&gt;
y的积分区间为：[math]f([-\frac{L}{L},\frac{L}{2}])[/math]，即将x的定义域[math][-\frac{L}{2},\frac{L}{2}][/math]经过f的映射，形成y上的区间范围。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p(y)=\int_{-\frac{L}{2}}^{\frac{L}{2}}p(x_0)p(y|x_0)dx_0=\int_{-\frac{L}{2}}^{\frac{L}{2}}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x_0))^2}{\sigma^2}\right)dx_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为y的概率密度函数，它也可以由联合概率密度函数[math]p(x,y)=p(x)p(y|x)[/math]对x进行积分得到。为了后续叙述方便，我们将x重新命名为[math]x_0[/math]，从而以区分出现在{{EquationNote|4}}中的其它x变量。&lt;br /&gt;
&lt;br /&gt;
由于L很大，所以区间[math][-\frac{L}{2},\frac{L}{2}][/math]很大，进而假设区间[math]f([-\frac{L}{L},\frac{L}{2}])[/math]也很大。这就使得，上述积分的积分上下界可以近似取到无穷大，也就有{{EquationNote|4}}中的第一项为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y|x)dydx&amp;amp;\approx \int_{-\infty}^{\infty}\int_{-\infty}^{\infty}p(x)p(y|x)\ln p(y|x)dydx\\&lt;br /&gt;
&amp;amp;=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)\ln\left[\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)\right]dydx\\&lt;br /&gt;
&amp;amp;=\ln(\frac{1}{\sigma\cdot\sqrt{2\pi e}})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，e为自然对数的底，最后一个等式是根据高斯分布函数的Shannon熵公式计算得出的。&lt;br /&gt;
&lt;br /&gt;
然而，要计算第二项，即使使用了积分区间为无穷大这个条件，仍然很难计算得出结果，为此，我们对函数[math]f(x_0)[/math]进行一阶泰勒展开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f(x_0)\approx f(x)+f'(x)(x_0-x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]x\in[-\frac{L}{2},\frac{L}{2}][/math]是x定义域上的任意一点。&lt;br /&gt;
&lt;br /&gt;
因此，p(y)可以被近似计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p(y)=\int_{-\frac{L}{2}}^{\frac{L}{2}}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x_0))^2}{\sigma^2}\right)dx_0\approx \int_{-\infty}^{\infty}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x)-f'(x)(x_0-x))^2}{\sigma^2}\right)dx_0\approx \frac{1}{L}\cdot\frac{1}{f'(x)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
值得注意的是，在这一步中，我们不仅将[math]f(x_0)[/math]近似为一个线性函数，同时还引入了一个假设，即p(y)的结果与y无关，而与[math]x[/math]有关。我们知道在对EI计算的第二项中包含着对x的积分，因此这一近似也就意味着不同x处的p(y)近似是不同的。&lt;br /&gt;
&lt;br /&gt;
这样，{{EquationNote|4}}中的第二项近似为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y)dydx\approx -\ln L - \frac{1}{L}\int_{-\frac{L}{2}}^{\frac{L}{2}}\ln f'(x)dx&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最终的EI可以由下式近似计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\approx \ln(\frac{L}{\sqrt{2\pi e}})+\frac{1}{2L}\int_{-\frac{L}{2}}^{\frac{L}{2}}\ln \left(\frac{f'(x)}{\sigma}\right)^2dx&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--如果同时考虑两种噪声，并且如果干预空间大小为&amp;lt;math&amp;gt;L&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;\epsilon\ll 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;，EI数学形式如下所示&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;EI\approx -\frac{1}{2}\int_{-L/2}^{L/2}\ln\left[\left(\frac{\epsilon}{f'(x)}\right)^2+\delta^2\right]dx.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;分别表示观测噪音和干预噪音的大小。--&amp;gt;&lt;br /&gt;
与上述推导类似的推导首见于Hoel2013的文章中&amp;lt;ref name=hoel_2013 /&amp;gt;，并在[[神经信息压缩器]]一文中&amp;lt;ref name=zhang_nis /&amp;gt;中进行了详细讨论。&lt;br /&gt;
&lt;br /&gt;
===高维情况===&lt;br /&gt;
&lt;br /&gt;
我们可以把上述对一维变量的EI计算推广到更一般的n维情景。即：&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{y}=f(\mathbf{x})+\xi,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|5}}}}&lt;br /&gt;
&lt;br /&gt;
其中，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]，&amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;是高斯噪声&amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt;的协方差矩阵。&lt;br /&gt;
首先，我们将[math]\mathbf{x}[/math]干预成&amp;lt;math&amp;gt;[-L/2，L/2]^n\subset\mathcal{R}^n&amp;lt;/math&amp;gt;上的均匀分布，&amp;lt;math&amp;gt;[-L/2，L/2]^n&amp;lt;/math&amp;gt;表示n维空间中的超立方体，我们假设&amp;lt;math&amp;gt;\mathbf{y}\in\mathcal{R}^m&amp;lt;/math&amp;gt;，其中&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;是正整数。只存在观测噪声的情况下，EI可以推广为以下形式：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;EI\approx \ln\left(\frac{L^n}{(2\pi e)^{m/2}}\right)+\frac{1}{L^n}\int_{-[\frac{L}{2},\frac{L}{2}]^n}\ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|6}}}}&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;|\cdot|&amp;lt;/math&amp;gt;是绝对值运算，&amp;lt;math&amp;gt;\det&amp;lt;/math&amp;gt;是行列式。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
为了将信息几何推广到具有干预噪声和观测噪声的情况，需要引入一个新的维度为&amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;的中间变量&amp;lt;math&amp;gt;\theta\subset\mathcal{R}^l&amp;lt;/math&amp;gt;，使得我们不能通过直接干预&amp;lt;math&amp;gt;\mathbf{x}&amp;lt;/math&amp;gt;来控制&amp;lt;math&amp;gt;\mathbf{y}&amp;lt;/math&amp;gt;。相反，我们可以干预&amp;lt;math&amp;gt;\mathbf{x}&amp;lt;/math&amp;gt;以影响&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;并间接影响&amp;lt;math&amp;gt;\mathbf{y}&amp;lt;/math&amp;gt;。因此，这三个变量形成了一个马尔可夫链：&amp;lt;math&amp;gt;\mathbf{x}\to\theta\to\mathbf{y}&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
在这种情况下，可以获得两个流形：效应流形&amp;lt;math&amp;gt;\mathcal{M}_E=\{p(\mathbf{y}|\theta)\}_{\theta}&amp;lt;/math&amp;gt;，度量为&amp;lt;math&amp;gt;g_{\mu\nu}=-\mathbb{E}_{p(\mathbf{y}|\theta)}\partial_{\mu}\partial_{\nu}\ln p(\mathbf{y}|\theta)&amp;lt;/math&amp;gt;；干预流形&amp;lt;math&amp;gt;\mathcal{M}_I=\{\tilde{q}(\mathbf{x}|\theta)\}_{\theta\in \Theta}&amp;lt;/math&amp;gt;，度量为&amp;lt;math&amp;gt;h_{\mu\nu}=-\mathbb{E}_{\tilde{q}(\mathbf{x}|\theta)}\partial_{\mu}\partial_{\nu}\ln \tilde{q}(\mathbf{x}|\theta)&amp;lt;/math&amp;gt;。其中&amp;lt;math&amp;gt;\tilde{q}\equiv \frac{q(\theta|\mathbf{x})}{\int q(\theta|\mathbf{x})d\mathbf{x}}&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;\partial_{\mu}=\partial/\partial \theta_{\mu}&amp;lt;/math&amp;gt;。效应和干预两个流形合在一起称为因果几何。&lt;br /&gt;
&lt;br /&gt;
因果几何的EI计算公式为:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_g=\ln\frac{V_I}{(2\pi e)^{n/2}}-\frac{1}{2V_I}\int_\Theta\sqrt{|\det(h_{\mu\nu})|} \ln\left|\det\left( I_n+\frac{h_{\mu\nu}}{g_{\mu\nu}}\right)\right|d^l\theta,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==维度平均的EI==&lt;br /&gt;
&lt;br /&gt;
在离散状态的系统中，当我们比较不同尺度系统的时候，可以直接计算EI的差异也可以计算归一化的EI差异。归一化的EI是除以[math]\log N[/math]，这里[math]N=\#(\mathcal{X})[/math]为离散状态空间[math]\mathcal{X}[/math]中的元素个数。&lt;br /&gt;
&lt;br /&gt;
然而，在针对连续变量进行扩展的时候，如果使用原始的EI，那么就会出现不合理的情况。首先，如公式{{EquationNote|6}}所示，EI的计算公式中包含着[math]\ln L^n[/math]项。由于L为一个很大的正数，因而EI的计算结果将会受到L的严重影响。其次，如果计算归一化的EI，即Eff，那么会遇到一个问题是，对于连续变量来说，其状态空间的元素个数为无穷多个，如果直接使用，势必会引入无穷大量。一种解决办法是将空间的体积视作个数N，因此应该除以归一化变量为：[math]n \ln L[/math]，由此可见它是正比于n和ln L的，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff=\frac{EI}{\ln L^n}\approx 1-\frac{m\ln\left(2\pi e\right)}{2n \ln L}+\frac{1}{n\ln L}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然而，在这个式子中，仍然包含着L项，因而也会对Eff造成很大的影响。并且，当我们比较微观（n维）和宏观（m维，且m&amp;lt;n）两个维度的Eff时，即计算归一化的因果涌现的时候，L并不能消掉。&lt;br /&gt;
&lt;br /&gt;
看来，连续变量系统的归一化问题并不能简单平移离散变量的结果。&lt;br /&gt;
&lt;br /&gt;
在[[神经信息压缩器]]（Neural information squeezer, NIS）的框架被提出时&amp;lt;ref name=zhang_nis /&amp;gt;，作者们发明了另一种对连续变量的有效信息进行归一化方式，即用状态空间维数来归一化EI，从而解决连续状态变量上的EI比较问题，这一指标被称为'''维度平均的有效信息'''（Dimension Averaged Effective Information，简称dEI）。其描述为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}\equiv\frac{EI}{n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]n[/math]为状态空间的维度。可以证明，在离散的状态空间中，'''维度平均的EI'''和'''有效性'''指标（Eff）实际上是等价的。关于连续变量上的EI，我们将在下文进一步详述。&lt;br /&gt;
&lt;br /&gt;
对于n维迭代动力系统来说，首先，[math]\mathbf{y}[/math]和[math]\mathbf{x}[/math]是同一维度的变量，因此[math]m=n[/math]，因而：将公式{{EquationNote|6}}代入维度平均EI，得到：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}=\frac{EI}{n}\approx \ln L - \frac{1}{2}\ln (2\pi e)+\frac{1}{n}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
虽然L仍然没有消失，但是当我们计算'''维度平均的因果涌现'''的时候，即假设我们可以将n维的状态变量[math]\mathbf{x}_t[/math]投影到一个N维的宏观态变量[math]\mathbf{X}_t[/math]，以及相对应的宏观动力学(F)，和噪声的协方差[math]\Sigma'[/math]则宏观动力学的维度平均EI与微观动力学的维度平均EI之差为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta \mathcal{J}\equiv \mathcal{J_F}-\mathcal{J_f}=\frac{EI_F}{N}-\frac{EI_f}{n}\approx \frac{1}{N}\int_{-[\frac{L}{2},\frac{L}{2}]^N}\frac{1}{L^N}\cdot \ln \left|\det\left(\frac{\partial_\mathbf{X} F(\mathbf{X})}{\Sigma'^{1/2}}\right)\right| dX - \frac{1}{n}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
注意，上式中的积分可以写成均匀分布下的期望，即[math]\int_{[-\frac{L}{2},\frac{L}{2}]}\frac{1}{L^n}\cdot=\mathbb{E}_{\mathbf{x}\sim \mathcal{U}[-\frac{L}{2},\frac{L}{2}]^n}\cdot[/math]，继而上式化为：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta \mathcal{J}\approx \frac{1}{N}\mathbb{E}_{X\sim\mathcal{U}[-\frac{L}{2},\frac{L}{2}]^N}\ln \left|\det\left(\frac{\partial_\mathbf{X} F(\mathbf{X})}{\Sigma'^{1/2}}\right)\right| - \frac{1}{n}\mathbb{E}_{\mathbf{x}\sim\mathcal{U}[-\frac{L}{2},\frac{L}{2}]^n}\ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里[math]\mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)[/math]表示立方体[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上的均匀分布。由此可见，尽管在期望中仍然隐含地包含L，但该式中所有显含L的项就都被消失了。在实际数值计算的时候，期望的计算可以表现为在[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上多个采样取平均，因而也是与L的大小无关的。这就展示出来引入维度平均EI的一定的合理性。&lt;br /&gt;
&lt;br /&gt;
==随机迭代系统==&lt;br /&gt;
&lt;br /&gt;
我们可以把上述结论，推广到线性迭代动力系统中，也就是对于形如&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x_{t+1}=Ax_t+\varepsilon_t,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
的迭代系统，其中，[math]A\in\mathcal{R}^{n\times n}[/math]是尺度为n*n的满秩的方阵，代表线性迭代系统中的动力学系数, [math]\varepsilon_t\sim\mathcal{N}(0,\Sigma)[/math]为n维的高斯噪声，满足0均值，协方差为[math]\Sigma[/math]的正态分布，其中，协方差矩阵[math]\Sigma[/math]也是满秩的。&lt;br /&gt;
&lt;br /&gt;
可以看出这一迭代系统可以看做是公式{{EquationNote|5}}的特例，其中[math]y[/math]对应这里的[math]x_{t+1}[/math]，[math]f(x_t)[/math]即是[math]A x_t[/math]。&lt;br /&gt;
&lt;br /&gt;
为定义EI，设干预空间大小为&amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;，对于单步的映射我们可以得到维度平均有效信息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}(A,\Sigma)\equiv \frac{EI(A,\Sigma)}{n}=\frac{1}{n}\ln\displaystyle\frac{|\det(A)|L^n}{(2\pi e)^\frac{n}{2}\displaystyle \det(\Sigma)^\frac{1}{2}}=\ln\displaystyle\frac{|\det(A)|^\frac{1}{n}L}{(2\pi e)^\frac{1}{2}\displaystyle \det(\Sigma)^\frac{1}{2n}}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随机迭代系统的有效信息可以分解确定性和简并性为两项，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}=\mathcal{J}_1-\mathcal{J}_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中确定性&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}_1\equiv-\left&amp;lt;H(p(x_{t+1}|x_t))\right&amp;gt;=-\ln\left[(2\pi e)^\frac{n}{2}\det(\Sigma)^\frac{1}{2}\right]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
描述系统前一时刻状态已知的情况下，后一时刻的随机性，确定性越强，随机性越小，越容易对系统未来趋势进行预测；&lt;br /&gt;
&lt;br /&gt;
简并性:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}_2\equiv-H(\tilde{x}_{t+1}))=-\ln\left(|\det(A)|L^n\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
描述后一时刻已知的情况下，对前一时刻的可追溯性，简并性越弱，越容易推断系统以往的演化路径。其中，[math]\tilde{x}_{t+1}[/math]是保持因果机制不变，经过干预以后得到的新的[math]x_{t+1}[/math]变量。&lt;br /&gt;
&lt;br /&gt;
确定性越强，简并性越弱，有效信息则会越大，因果效应越强。&lt;br /&gt;
&lt;br /&gt;
宏观有效信息与微观有效信息做差之后就可以得到随即迭代系统的因果涌现为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta\mathcal{J}=\ln\frac{|\det(WAW^{\dagger})|^{1/N}}{|\det(A)|^{1/n}}-\ln\frac{|\det(W\Sigma W^T)|^{\frac{1}{2N}}}{|\det(\Sigma)|^{\frac{1}{2n}}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]W[/math]为粗粒化矩阵，它的阶数为n*m，m为宏观状态空间的维度，它的作用是把任意的微观态[math]x_t[/math]映射为宏观态[math]y_t[/math]。[math]W^{\dagger}[/math]为W的伪逆运算。式中第一项是由确定性引发的涌现，简称'''确定性涌现'''(Determinism Emergence)，第二项为简并性引发的涌现，简称'''简并性涌现'''。更详细的内容参看[[随机迭代系统的因果涌现]]。&lt;br /&gt;
&lt;br /&gt;
==前馈神经网络==&lt;br /&gt;
针对复杂系统自动建模任务，我们往往使用神经网络来建模系统动力学。具体的，对于前馈神经网络来说，[[张江]]等人推导出了前馈神经网络有效信息的计算公式&amp;lt;ref name=zhang_nis /&amp;gt;，其中神经网络的输入是&amp;lt;math&amp;gt;x(x_1,...,x_n)&amp;lt;/math&amp;gt;，输出是&amp;lt;math&amp;gt;y(y_1,...,y_n)&amp;lt;/math&amp;gt;，并且满足&amp;lt;math&amp;gt;y=f(x)&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;是由神经网络实现的确定性映射。然而，根据公式{{EquationNote|5}}，映射中必须包含噪声才能够体现不确定性。&lt;br /&gt;
&lt;br /&gt;
因而，在神经网络中，我们假设神经网络从输入到输出的计算也是不确定性的，即也符合公式{{EquationNote|5}}：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\xi,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]为一高斯噪声，且[math]\Sigma=\mathrm{diag}(\sigma_1,\sigma_2,\cdots,\sigma_n)[/math]，这里[math]\sigma_i[/math]为第i个维度的最小平方误差（Mean Square Error，简称MSE误差）。也就是说，我们假设从x到y的神经网络映射实际上满足一个均值为[math]f(x)[/math]，协方差为[math]\Sigma[/math]的条件高斯分布，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(y|x)\sim \mathcal{N}(f(x),\Sigma)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由此，套用高维映射一般情况下的结论，我们可以给出神经网络有效信息的一般计算公式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{gathered}EI(f)=I(do(x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n));y)\approx-\frac{n+n\ln(2\pi)+\sum_{i=1}^n\ln\sigma_i^2}2+n\ln(2L)+\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{x}f(x)))|)\end{gathered} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\mathcal{U}\left(\left[-L/2, L/2\right]^n\right) &amp;lt;/math&amp;gt;表示范围在&amp;lt;math&amp;gt;\left[-L/2 ,L/2\right]^n&amp;lt;/math&amp;gt;上的&amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt;维均匀分布，&amp;lt;math&amp;gt;\det &amp;lt;/math&amp;gt;表示行列式。维度平均EI为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{gathered}&lt;br /&gt;
\mathcal{J}\equiv \frac{EI(f)}{n}\approx -\frac{\ln(2\pi e)}{2}-\frac{\sum_{i=1}^n\ln\sigma_i}{n}+\ln(2L)+\frac{1}{n}\cdot\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{x}f(x)))|)&lt;br /&gt;
\end{gathered} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果设微观的动力学可以用神经网络f来拟合，宏观动力学则可以用F来拟合，则因果涌现可以由下式计算：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{gathered}&lt;br /&gt;
\mathcal{\Delta J}\equiv \frac{EI(F)}{m}-\frac{EI(f)}{n}\approx \frac{\sum_{i=1}^n\ln\sigma_i}{n}-\frac{\sum_{i=1}^m\ln\sigma'_i}{m}+\frac{1}{m}\cdot\mathbb{E}_{X\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{X}F(X)))|)-\frac{1}{n}\cdot\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^m)}(\ln|\det(\partial_{x}f(x)))|)&lt;br /&gt;
\end{gathered} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]m[/math]为宏观态维度，[math]\sigma'_i[/math]为第i个宏观维度的平均平方误差（MSE），这一误差可以通过反向传播算法计算的宏观态[math]X_i[/math]的梯度计算得出。&lt;br /&gt;
&lt;br /&gt;
注意，上述结论都要求：&amp;lt;math&amp;gt;\partial_{x}f(x)&amp;lt;/math&amp;gt;不为0，而对于所有的&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;\partial_{x}f(x)&amp;lt;/math&amp;gt;处处为0时，我们得到： &lt;br /&gt;
&amp;lt;math&amp;gt;\begin{gathered}EI(f)\approx\end{gathered}0&amp;lt;/math&amp;gt;。对于更一般的情形，则需要考虑矩阵不满秩的情况，请参考[[神经网络的有效信息]]。&lt;br /&gt;
&lt;br /&gt;
== 连续系统EI的源代码 ==&lt;br /&gt;
可逆神经网络下的数值解以及随机迭代系统的解析解都可以给出计算方法。&lt;br /&gt;
&lt;br /&gt;
对于一般的神经网络，它可看做是从输入X到输出Y的一种不确定的函数映射：&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\xi&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中x的维度为input_size，y的维度为output_size，[math]\xi[/math]为一高斯分布，其协方差矩阵为：[math]\Sigma=\mathrm{diag}(\sigma_1,\sigma_2,\cdots,\sigma_n)[/math]，这里，[math]\sigma_i[/math]为该神经网络第i个维度的均方误差（MSE）。该矩阵的逆记为sigmas_matrix。映射函数f记为func，则可以用下面的代码计算该神经网络的EI。该算法的基本思想是利用蒙特卡洛方法计算公式{{EquationNote|6}}的积分。&lt;br /&gt;
&lt;br /&gt;
* 输入变量：&lt;br /&gt;
神经网络的输入维度（input_size）输出维数（output_size）、输出变量视为高斯分布后的协方差矩阵的逆（sigmas_matrix）、映射函数（func）、干预区间大小（L的取值）、以及蒙特卡罗积分的样本数（num_samples）。&lt;br /&gt;
&lt;br /&gt;
* 输出变量：&lt;br /&gt;
&lt;br /&gt;
维度平均EI（d_EI）、EI系数（eff）、EI值（EI）、确定性（term1）、简并性（term2）和[math]\ln L[/math]（-np.log(rho)）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def approx_ei(input_size, output_size, sigmas_matrix, func, num_samples, L, easy=True, device=None):&lt;br /&gt;
&lt;br /&gt;
    rho=1/(2*L)**input_size #the density of X even distribution&lt;br /&gt;
    &lt;br /&gt;
    #the first term of EI, the entropy of a gaussian distribution&lt;br /&gt;
    #sigmas_matrix_np=sigmas_matrix.cpu() if use_cuda else sigmas_matrix&lt;br /&gt;
    dett=1.0&lt;br /&gt;
    if easy:&lt;br /&gt;
        dd = torch.diag(sigmas_matrix)&lt;br /&gt;
        dett = torch.log(dd).sum()&lt;br /&gt;
    else:&lt;br /&gt;
        #dett = np.log(np.linalg.det(sigmas_matrix_np))&lt;br /&gt;
        dett = torch.log(torch.linalg.det(sigmas_matrix))&lt;br /&gt;
    term1 = - (output_size + output_size * np.log(2*np.pi) + dett)/2 &lt;br /&gt;
    &lt;br /&gt;
    #sampling x on the space [-L,L]^n, n is the number of samples&lt;br /&gt;
    xx=L*2*(torch.rand(num_samples, input_size, device=sigmas_matrix.device)-1/2)&lt;br /&gt;
    &lt;br /&gt;
    dets = 0&lt;br /&gt;
    logdets = 0&lt;br /&gt;
    &lt;br /&gt;
    #iterate all samples of x&lt;br /&gt;
    for i in range(xx.size()[0]):&lt;br /&gt;
        jac=jacobian(func, xx[i,:]) #use pytorch's jacobian function to obtain jacobian matrix&lt;br /&gt;
        det=torch.abs(torch.det(jac)) #calculate the determinate of the jacobian matrix&lt;br /&gt;
        dets += det.item()&lt;br /&gt;
        if det!=0:&lt;br /&gt;
            logdets+=torch.log(det).item() #log jacobian&lt;br /&gt;
        else:&lt;br /&gt;
            #if det==0 then, it becomes a gaussian integration&lt;br /&gt;
            logdet = -(output_size+output_size*np.log(2*np.pi)+dett)&lt;br /&gt;
            logdets+=logdet.item()&lt;br /&gt;
    &lt;br /&gt;
    int_jacobian = logdets / xx.size()[0] #take average of log jacobian&lt;br /&gt;
    &lt;br /&gt;
    term2 = -np.log(rho) + int_jacobian # derive the 2nd term&lt;br /&gt;
    &lt;br /&gt;
    if dets==0:&lt;br /&gt;
        term2 = - term1&lt;br /&gt;
    EI = max(term1 + term2, 0)&lt;br /&gt;
    if torch.is_tensor(EI):&lt;br /&gt;
        EI = EI.item()&lt;br /&gt;
    eff = -EI / np.log(rho)&lt;br /&gt;
    d_EI = EI/output_size&lt;br /&gt;
    &lt;br /&gt;
    return d_EI, eff, EI, term1, term2, -np.log(rho)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;对于随机迭代系统，由于是解析解，相对会简单许多。既可以直接计算，也可以作为上述神经网络计算结果的对照。输入的变量分别为参数矩阵和协方差矩阵。&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def EI_calculate_SIS(A,Sigma):&lt;br /&gt;
    n=A.shape[0]&lt;br /&gt;
    return math.log(abs(sl.det(A))/(np.sqrt(sl.det(Sigma))*math.pow(2*np.pi*np.e,n/2)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=EI与其它相关主题=&lt;br /&gt;
==EI与整合信息论==&lt;br /&gt;
&lt;br /&gt;
有效信息这一指标最早出现在文献Tononi等人(2003)的文章中&amp;lt;ref name=tononi_2003 /&amp;gt;，在这篇文章中，作者们定义了[[整合信息能力]]这一指标，并建立了[[整合信息理论]]，这一理论后来演化成意识理论的一个重要分支。而[[整合信息能力]]这一指标的定义是以有效信息为基础的。&lt;br /&gt;
&lt;br /&gt;
===EI与Φ===&lt;br /&gt;
整合信息能力（或者叫整合程度）&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;，可以被定义为系统的任意一个二划分两部分之间相互影响的有效信息最小值。假如系统是X，S是X的一个子集，它被划分为两个部分，分别是A和B。那么，A、B之间以及它们跟X中其余的部分都存在着相互作用和因果关系。&lt;br /&gt;
&lt;br /&gt;
[[文件:OriginalEI.png|350x350px|整合信息论中的划分|替代=|缩略图]]&lt;br /&gt;
&lt;br /&gt;
这时，我们可以度量这些因果关系的强弱。首先，我们来计算从A到B的有效信息。即干预A，使其服从最大熵分布，然后度量A和B之间的互信息：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(A\rightarrow B) = I(A^{H^{max}}: B)  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;A^{H^{max}}&amp;lt;/math&amp;gt;表示A上的最大熵分布，也就是前文中的均匀分布。该式子中没有明确表示，但实际上暗含了一种从A到B的因果机制，即[math]Pr(B|A)[/math]。它在干预中始终保持不变。这样，如果A的不同状态会导致B有很不一样的变化，这个EI值会很高；反之，如果无论A怎么变，B都受到很少的影响，那么EI就会很低。显然，这种度量是有方向的，A对B的EI和B对A的EI可以很不同。我们可以把这两个方向的EI加在一起，得到S在某一个划分下的EI大小。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(A\leftrightarrow B) = EI(A\rightarrow B) + EI(B\rightarrow A)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
遍历各种划分，如果存在某一个划分S，使得EI为0，说明这个S可以被看做是两个因果独立的部分，所以整合程度也应该是0。从这种特殊例子中我们可以看出，我们应该关注所有划分中有效信息最小的那个。当然，不同划分会导致A和B的状态空间就不一样，所以应该做一个归一化处理，即除以A和B最大熵值中较小的那一个。于是，我们可以有一个最小信息划分（minimum information bipartition，MIB）。整合程度&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;定义如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Phi(S) = EI(MIB(S)) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这就是[[整合信息能力]]与有效信息的关系。&lt;br /&gt;
&lt;br /&gt;
===区别===&lt;br /&gt;
&lt;br /&gt;
值得注意的是，与马尔科夫链的EI计算不同，这里的EI更多衡量的是系统中两个部分彼此之间的因果联系。而马尔科夫链的EI衡量的是同一个系统在不同两个时刻之间的因果关联强度。&lt;br /&gt;
&lt;br /&gt;
==EI与其它因果度量指标==&lt;br /&gt;
&lt;br /&gt;
EI是一种度量因果机制中因果变量的因果联系强弱的一种指标。而在EI提出之前，已有多个因果度量指标被提出了。那么，EI和这些因果度量指标之间存在着什么样的联系呢？事实上，正如Comolatti与Hoel在2022年的文章中所指出的，包括EI在内的这些因果度量指标都可以统一表达为两个基本要素的组合&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;Comolatti, R., &amp;amp; Hoel, E. (2022). Causal emergence is widespread across measures of causation. ''arXiv preprint arXiv:2202.01854''.&amp;lt;/ref&amp;gt;。这两个基本要素被称为“因果元语”（Causal Primatives），分别代表了因果关系中的'''充分性'''和'''必要性'''。&lt;br /&gt;
&lt;br /&gt;
=== 因果元语的定义 ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
&lt;br /&gt;
\text{充分性：}~~~&amp;amp;suff(e,c) = P(e|c) \\&lt;br /&gt;
&lt;br /&gt;
\text{必要性：}~~~&amp;amp;nec(e,c) = 1 - P(e|C \backslash c)&lt;br /&gt;
&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;分别表示因事件（cause）和果事件（effect），&amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;表示因事件的全部集合，&amp;lt;math&amp;gt;C \backslash c&amp;lt;/math&amp;gt;则为因事件&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;的补集，即&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;之外的事件，也可记作&amp;lt;math&amp;gt;\lnot c&amp;lt;/math&amp;gt;。'''充分性'''表明当因发生时，果发生的概率，当&amp;lt;math&amp;gt;suff = 1&amp;lt;/math&amp;gt;时，因发生确定导致果发生；而'''必要性'''则衡量当因不发生时，果也不发生的概率；当&amp;lt;math&amp;gt;nec = 1&amp;lt;/math&amp;gt;时，因不发生则果一定不发生。&lt;br /&gt;
&lt;br /&gt;
有些因果指标中的必要性表现为以下的变型形式，在此也给出定义：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\text{必要性}'&lt;br /&gt;
 \text{：}~~~nec'(e) = 1 - P(e|C)&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
根据定义，当&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;为极小概率事件时，&amp;lt;math&amp;gt;nec(e,c) \approx nec'(e)&amp;lt;/math&amp;gt;。当&amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;为连续状态空间时，可认为两者等价。&lt;br /&gt;
&lt;br /&gt;
注意：&amp;lt;math&amp;gt;nec'(e)&amp;lt;/math&amp;gt;的定义与文献&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;中定义的&amp;lt;math&amp;gt;nec^\dagger(e) = P(e|C)&amp;lt;/math&amp;gt;不同，两者关系为&amp;lt;math&amp;gt;net'(e) = 1 - nec^\dagger(e)&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 因果元语与确定性和简并性 ===&lt;br /&gt;
如前所述，EI可被分解为确定性与简并性两项，这两项分别对应充分性和必要性的因果元语表达：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
determinism &amp;amp;= \sum_{e \in E, c \in C}{P(e,c) det(e,c)}, ~~ &amp;amp;\text{where} ~~ det(e,c) &amp;amp;= 1 - \frac{\log_2{\frac{1}{suff(e,c)}}}{\log_2{N}} \\&lt;br /&gt;
degeneracy &amp;amp;= \sum_{e \in E}{P(e|C) deg(e)}, ~~ &amp;amp;\text{where} ~~ deg(e) &amp;amp;= 1 - \frac{\log_2{\frac{1}{1 - nec'(e)}}}{\log_2{N}}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以看到，充分性和确定性之间，以及必要性和简并性之间存在单调映射关系。充分性越高，确定性也越高；必要性越高，简并性则越小。&lt;br /&gt;
&lt;br /&gt;
=== 因果度量指标的因果元语表示 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
因果度量指标的因果元语表现形式&lt;br /&gt;
!因果指标&lt;br /&gt;
!概率定义&lt;br /&gt;
!因果元语定义&lt;br /&gt;
!参考文献&lt;br /&gt;
|-&lt;br /&gt;
|有效信息EI&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\log_2{\frac{P(e|c)}{P(e|C)}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\log_2\frac{suff}{1 - nec'}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;hoel_2013&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Galton度量&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(c)P(C\backslash c)(P(e|c) - P(e|C\backslash c))&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(c)P(C\backslash c)(suff + nec - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref&amp;gt;Fitelson, B., &amp;amp; Hitchcock, C. (2011). ''Probabilistic measures of causal strength'' (pp. 600-627). na.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Suppes度量&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(e|c) - P(e|C)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
suff + nec' - 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref&amp;gt;Suppes, P. (1973). A probabilistic theory of causality. ''British Journal for the Philosophy of Science'', ''24''(4).&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Eells度量(等同于Judea Pearl的充要概率PNS)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(e|c) - P(e|C\backslash c)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
suff + nec - 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Eells, E. (1991). ''Probabilistic causality'' (Vol. 1). Cambridge University Press.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Cheng度量(等同于Judea Pearl的充分概率PS)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{P(e|c) - P(e|C\backslash c)}{1 - P(e|C\backslash c)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{suff + nec - 1}{nec}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Cheng, P. W., &amp;amp; Novick, L. R. (1991). Causes versus enabling conditions. ''Cognition'', ''40''(1-2), 83-120.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Lewis度量(等同于Judea Pearl的必要概率PN)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{P(e|c) - P(e|C\backslash c)}{P(e|c)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{suff + nec - 1}{suff}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Lewis, D. (1973). Causation. ''The journal of philosophy'', ''70''(17), 556-567.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==EI与动力学可逆性==&lt;br /&gt;
正如示例{{EquationNote|example}}中的马尔科夫链所示，当概率转移矩阵呈现为一种[[排列置换矩阵]]（Permutation matrix）的时候，EI会更大。&lt;br /&gt;
&lt;br /&gt;
可以证明，[[排列置换矩阵]]是唯一一种能同时满足如下两个条件的矩阵：&lt;br /&gt;
&lt;br /&gt;
1、矩阵是可逆的；&lt;br /&gt;
2、矩阵满足马尔科夫链的归一化条件，也就是对于任意的[math]i\in[1,N][/math]来说，[math]|P_i|_1=1[/math]&lt;br /&gt;
&lt;br /&gt;
我们将这一性质称为[[动力学可逆性]]。因此，从某种程度上说，EI衡量的是马尔科夫链的一种[[动力学可逆性]]。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，这里所说的马尔科夫链的[[动力学可逆性]]与通常意义下的[[马尔科夫链的可逆性]]是不等同的。前者的可逆性体现为马尔科夫概率转移矩阵的可逆性，也就是它针对状态空间中的每一个确定性状态的运算都是可逆的，所以也称其为动力学可逆的。但是，文献中通常意义下的可逆的马尔科夫链并不要求转移矩阵是可逆的，而是要以稳态分布为时间反演对称轴，使得在动力学P作用构成的演化下的正向时间形成的状态分布序列和逆向状态分布序列完全相同。&lt;br /&gt;
&lt;br /&gt;
由于[[排列置换矩阵]]过于特殊，我们需要能够衡量一般的马尔科夫概率转移矩阵与排列置换矩阵的靠近程度，以度量其[[近似动力学可逆性]]。在文献&amp;lt;ref name=zhang_reversibility/&amp;gt;中，作者们提出了一种用矩阵的类[[Schatten范数]]来度量一个马尔科夫概率转移矩阵的[[近似动力学可逆性]]的方法，定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Gamma_{\alpha}\equiv \sum_{i=1}^N\sigma_i^{\alpha}=|P|_{\alpha}^{\alpha}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]|P|_{\alpha}[/math]为矩阵P的[[Schatten范数]]，[math]\Gamma_{\alpha}[/math]为[[近似动力学可逆性]]指标，[math]\sigma_i[/math]为概率转移矩阵P的奇异值，并且按照从大到小的顺序排列，[math]\alpha\in(0,2)[/math]为一个指定的参数，它起到让[math]\Gamma_{\alpha}[/math]能够更多地反映'''确定性'''还是'''简并性'''这样一种权重或倾向性。事实上，不难看出，如果让[math]\alpha\rightarrow 0[/math]，则[math]\Gamma_{\alpha}[/math]就退化成了矩阵P的秩，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
rank(P)=\sum_{i=1}^N\sigma_i^{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
而[[矩阵的秩]]衡量的是矩阵P非退化（也就是可逆）的程度，与Degeneracy有着类似的效果。&lt;br /&gt;
&lt;br /&gt;
而当[math]\alpha\rightarrow 2[/math]，则[math]\Gamma_{\alpha}[/math]就退化成了矩阵P的[[Frobinius范数]]的平方，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
||P||_F^2=\sum_{i=1}^N\sigma_i^{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
这一指标衡量的是矩阵P的确定性的程度，这是因为只有当矩阵P中的所有行向量都是[[独热向量]]（one-hot）的时候，[math]||P||_F[/math]才会最大，因此它与Determinism有着类似的衡量效果。&lt;br /&gt;
&lt;br /&gt;
所以，当[math]\alpha\in(0,2)[/math]连续变化的时候，[math]\Gamma_{\alpha}[/math]就可以在简并性与确定性二者之间切换了。通常情况下，我们取[math]\alpha=1[/math]，这可以让[math]\Gamma_{\alpha}[/math]能够在确定性与简并性之间达到一种平衡。&lt;br /&gt;
&lt;br /&gt;
在文献&amp;lt;ref name=zhang_reversibility/&amp;gt;中，作者们证明了EI与动力学可逆性[math]\Gamma_{\alpha}[/math]之间存在着一种近似的关系：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\sim \log\Gamma_{\alpha}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
关于[[马尔科夫链的近似动力学可逆性]]的进一步讨论和说明，请参考词条：[[近似动力学可逆性]]，以及论文：&amp;lt;ref name=zhang_reversibility/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EI与JS散度==&lt;br /&gt;
根据{{EquationNote|2}}的表达式，我们知道，EI实际上是一种广义的[[JS散度]]，即[[Jensen-Shannon divergence]]。&lt;br /&gt;
&lt;br /&gt;
所谓的[[JS散度]]是一种度量两个定义在同一个支撑集上的概率分布之间差异的指标。设两个定义在支撑集[math]\mathcal{X}[/math]上的概率分布[math]P[/math]和[math]Q[/math]，它们之间的JS散度定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
JSD(P||Q)\equiv \frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]M=\frac{P+Q}{2}=\frac{1}{2}\sum_{x\in\mathcal{X}}\left[P(x)+Q(x)\right][/math]为P和Q的平均分布，[math]D_{KL}[/math]为[[KL散度]]。&lt;br /&gt;
&lt;br /&gt;
与[[KL散度]]相比，[[JS散度]]是一种对称的度量，即[math]JSD(P||Q)=JSD(Q||P)[/math]，而KL散度是非对称的。&lt;br /&gt;
&lt;br /&gt;
可以看出，该式与{{EquationNote|2}}式的相似之处。不难验证，当P和Q都是2维向量，且构成了一个马尔科夫转移矩阵K的时候，K的EI就是P、Q的JS散度。&lt;br /&gt;
&lt;br /&gt;
进一步，在文献&amp;lt;ref name=GJS_divergence&amp;gt;{{cite journal|author=Jianhua Lin|title=Divergence Measures Based on the Shannon Entropy|journal=IEEE TRANSACTIONS ON INFORMATION THEORY|volume=37|issue=1|page=145-151|year=1991}}&amp;lt;/ref&amp;gt;中，作者提出了[[广义的JS散度]]为：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
JSD_{\pi}(P_1,P_2,\cdots,P_n)\equiv H(\sum_{i=1}^n\pi_iP_i)-\sum_{i=1}^n\pi_i H(P_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|GJSD}}}}&lt;br /&gt;
&lt;br /&gt;
其中，[math]P_i,i\in[1,m][/math]为一组概率分布向量，m为它们的维度，而[math]\pi=(\pi_1,\pi_2,\cdots,\pi_n)[/math]为一组权重，并满足：[math]\pi_i\in[0,1],\forall i\in[1,n][/math]和[math]\sum_{i=1}^n\pi_i=1[/math]。&lt;br /&gt;
&lt;br /&gt;
通过与公式{{EquationNote|tow_terms}}比较，不难发现，当[math]\pi_i=\frac{1}{n}[/math]，则[math]JSD_{\pi}[/math]就退化为EI了。&lt;br /&gt;
&lt;br /&gt;
在文献&amp;lt;ref name=GJSD&amp;gt;{{cite conference|author1=Erik Englesson|author2=Hossein Azizpour|title=Generalized Jensen-Shannon Divergence Loss for Learning with Noisy Labels|conference=35th Conference on Neural Information Processing Systems (NeurIPS 2021)|year=2021}}&amp;lt;/ref&amp;gt;中，作者们讨论了广义JS散度在分类多样性度量方面的应用。因此，EI也可以理解为是对行向量多样化程度的一种度量。&lt;br /&gt;
&lt;br /&gt;
进一步，如果我们将[[Shannon熵]][math]H(P_i)[/math]看做一个函数，则不难验证，H是一个[[凹函数]]，那么公式{{EquationNote|GJSD}}实际上是H函数的[[Jensen差距]]，即[[Jensen Gap]]。关于这一差距的数学性质，包括它的上下界估计，有大量的论文进行讨论&amp;lt;ref name=&amp;quot;Gao et al.&amp;quot;&amp;gt;{{cite journal | last1 = Gao | first1 = Xiang | last2 = Sitharam | first2 = Meera | last3 = Roitberg | first3 = Adrian | year = 2019 | title = Bounds on the Jensen Gap, and Implications for Mean-Concentrated Distributions | journal=The Australian Journal of Mathematical Analysis and Applications | arxiv = 1712.05267 | url = https://ajmaa.org/searchroot/files/pdf/v16n2/v16i2p14.pdf | volume = 16 | issue = 2 }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=参考文献=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=编者推荐=&lt;br /&gt;
下面是一些链接能够帮助读者更好的了解因果涌现的相关信息： &lt;br /&gt;
&lt;br /&gt;
===因果涌现读书会===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[https://pattern.swarma.org/study_group_issue/490 因果涌现读书会第三季第一期：涌现、因果与人工智能]&lt;br /&gt;
&lt;br /&gt;
*[https://pattern.swarma.org/study_group_issue/645 因果涌现读书会第五季第二期：复杂系统中的因果与涌现综述]&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*Zhang, J.; Liu, K. [https://www.mdpi.com/1099-4300/25/1/26 Neural Information Squeezer for Causal Emergence]. ''Entropy'' 2023, ''25'', 26.&lt;br /&gt;
*Yuan, B.; Zhang, J. et al. [https://www.mdpi.com/1099-4300/26/2/108 Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies]. ''Entropy'' 2024, ''26'', 108.&lt;br /&gt;
&lt;br /&gt;
===路径推荐===&lt;br /&gt;
*张江老师根据因果涌现读书会第一季梳理的关于因果涌现的学习路径：https://pattern.swarma.org/article/153&lt;br /&gt;
*张江老师根据因果涌现前五季读书会整理的因果涌现入门路径：https://pattern.swarma.org/article/296&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
此词条由[[张江]]编写，[[张江]]、[[袁冰]]、[[刘凯威]]、[[杨明哲]]和[[王志鹏]]整理和审校。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[Category:因果涌现]]&lt;br /&gt;
[[Category:信息论]]&lt;br /&gt;
[[Category:因果度量]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%9C%89%E6%95%88%E4%BF%A1%E6%81%AF&amp;diff=35696</id>
		<title>有效信息</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%9C%89%E6%95%88%E4%BF%A1%E6%81%AF&amp;diff=35696"/>
		<updated>2024-07-06T05:19:25Z</updated>

		<summary type="html">&lt;p&gt;Aceyuan：/* 因果元语与确定性和简并性 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|keywords=有效信息,因果涌现,互信息,Effective Information,EI,确定性,简并性&lt;br /&gt;
|description=本文是目前互联网世界中关于因果涌现理论和整合信息论中的有效信息（Effective information,简称EI）的少数的全面的介绍文章，包括有效信息的来源，有效信息的定义与分解、实际例子，以及如何扩展到连续变量、与因果度量指标、动力学可逆性的关系是什么等问题进行了全面的讨论。&lt;br /&gt;
}}&lt;br /&gt;
有效信息（Effective Information，简称EI）是[[因果涌现 Causal Emergence]]理论中的一个核心概念，它可以用来衡量一个[[马尔科夫动力学]]的[[因果效应]]的强度。这里，因果效应是指把动力学看做一个黑箱，那么不同的输入分布就会导致不同的输出分布，二者之间联系的紧密程度就是因果效应。有效信息通常可以分解为两个部分：确定性（Determinism）和简并性（Degeneracy）。确定性是指，在动力学的作用下，我们根据系统前一时刻的状态会以多大程度预测它下一时刻状态；简并性是指：我们能够以多大程度从下一时刻的状态预测上一时刻的状态。如果确定性越大，或简并性越小，则系统的有效信息就会越大。在本页中，所有的[math]\log[/math]都表示以2为底的对数运算。&lt;br /&gt;
&lt;br /&gt;
=历史渊源=&lt;br /&gt;
有效信息（effective informaion，EI）这个概念最早由[[Giulio Tononi]]等人在2003年提出&amp;lt;ref name=tononi_2003&amp;gt;{{cite journal |last1=Tononi|first1=G.|last2=Sporns|first2=O.|title=Measuring information integration|journal=BMC Neuroscience|volume=4 |issue=31 |year=2003|url=https://doi.org/10.1186/1471-2202-4-31}}&amp;lt;/ref&amp;gt;，作为[[整合信息论]]中的一个关键指标。当一个系统各个组分之间具有很强的因果关联的时候，可以说这个系统便具备很高的整合程度，而有效信息：EI，便是用来度量这种因果关联程度的关键指标。&lt;br /&gt;
&lt;br /&gt;
到了2013年，[[Giulio Tononi]]的学生[[Erik Hoel]]等人将有效信息这个概念进一步提炼出来，从而定量地刻画涌现，于是提出了[[因果涌现]]理论&amp;lt;ref name=hoel_2013&amp;gt;{{cite journal|last1=Hoel|first1=Erik P.|last2=Albantakis|first2=L.|last3=Tononi|first3=G.|title=Quantifying causal emergence shows that macro can beat micro|journal=Proceedings of the National Academy of Sciences|volume=110|issue=49|page=19790–19795|year=2013|url=https://doi.org/10.1073/pnas.1314922110}}&amp;lt;/ref&amp;gt;。在这个理论中，Hoel使用了[[Judea Pearl]]的[[do算子]]来改造一般的[[互信息]]指标&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot;&amp;gt;{{cite book|title=因果论——模型、推理和推断|author1=Judea Pearl|author2=刘礼|author3=杨矫云|author4=廖军|author5=李廉|publisher=机械工业出版社|year=2022|month=4}}&amp;lt;/ref&amp;gt;，这使得EI本质上与[[互信息]]不同。[[互信息]]度量的是相关性，而有效信息因为引入了[[do算子]]，从而可以度量因果性。在这一文章中，作者们同时提出了[[归一化的有效信息]]指标Eff。&lt;br /&gt;
&lt;br /&gt;
然而，传统的EI主要被用于具有离散状态的[[马尔科夫链]]上。为了能扩充到一般的实数域，P. Chvykov和E. Hoel于2020年合作提出了[[因果几何]]理论&amp;lt;ref  name=Chvykov_causal_geometry&amp;gt;{{cite journal|author1=Chvykov P|author2=Hoel E.|title=Causal Geometry|journal=Entropy|year=2021|volume=23|issue=1|page=24|url=https://doi.org/10.3390/e2}}&amp;lt;/ref&amp;gt;，将EI的定义扩充到了具备连续状态变量的函数映射上，并通过结合[[信息几何]]理论，探讨了EI的一种微扰形式，并与[[Fisher信息]]指标进行了比较，提出了[[因果几何]]的概念。然而，这一连续变量的EI计算方法需要假设方程中的正态分布随机变量的方差是无限小的，这一要求显然过于苛刻了。&lt;br /&gt;
&lt;br /&gt;
到了2022年，为了解决一般[[前馈神经网络]]的EI计算问题，[[张江]]与[[刘凯威]]又将[[因果几何]]中的连续变量的EI计算方法的方差限制去掉，探讨了EI的更一般形式&amp;lt;ref  name=zhang_nis&amp;gt;{{cite journal|title=Neural Information Squeezer for Causal Emergence|first1=Jiang|last1=Zhang|first2=Kaiwei|last2=Liu|journal=Entropy|year=2022|volume=25|issue=1|page=26|url=https://api.semanticscholar.org/CorpusID:246275672}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=yang_nis+&amp;gt;{{cite journal|title=Finding emergence in data by maximizing effective information|author1=Mingzhe Yang|author2=Zhipeng Wang|author3=Kaiwei Liu|author4=Yingqi Rong|author5=Bing Yuan|author6=Jiang Zhang|journal=arXiv|page=2308.09952|year=2024}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=liu_exact&amp;gt;{{cite journal|title=An Exact Theory of Causal Emergence for Stochastic Iterative Systems|author1=Kaiwei Liu|author2=Bing Yuan|author3=Jiang Zhang|journal=arXiv|page=2405.09207|year=2024}}&amp;lt;/ref&amp;gt;。然而，这种扩充仍然存在着一个缺陷，由于实数域上变量的均匀分布严格讲是定义在无穷大空间上的，为了避免遭遇无穷大，EI的计算中就会带着一个参数[math]L[/math]，表示均匀分布的区间范围。为了避免这个缺陷，也为了在不同[[粗粒化]]程度上比较EI，作者们便提出了[[维度平均EI]]的概念，并发现由[[维度平均EI]]定义的[[因果涌现度量]]是一个仅与[[神经网络]]的[[雅可比矩阵]]的行列式与两个比较维度的随机变量方差有关的量，而与其它参量，如L无关，而且，[[维度平均EI]]也可以看作是一种[[归一化的EI]]，即Eff。&lt;br /&gt;
&lt;br /&gt;
本质上讲，EI仅仅与一个[[马尔科夫动力系统]]的[[动力学]]——也就是与[[马尔科夫状态转移矩阵]]有关，而与状态变量的分布无关的量，然而，这一点在之前的文章中并没有被指出或刻意强调。在2024年的[[袁冰]]等人的综述文章中，作者们进一步强调了这一点，并给出了EI仅依赖于[[马尔科夫状态转移矩阵]]的显式形式&amp;lt;ref name=review&amp;gt;{{cite journal|last1=Yuan|first1=Bing|last2=Zhang|first2=Jiang|last3=Lyu|first3=Aobo|last4=Wu|first4=Jiaying|last5=Wang|first5=Zhipeng|last6=Yang|first6=Mingzhe|last7=Liu|first7=Kaiwei|last8=Mou|first8=Muyun|last9=Cui|first9=Peng|year=2024|title=Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies|journal=Entropy|volume=26|issue=2|page=108|url=https://doi.org/10.3390/e26020108}}&amp;lt;/ref&amp;gt;。[[张江]]等人在最新的讨论[[动力学可逆性]]与[[因果涌现]]的文章中，又指出EI实际上是对底层[[马尔科夫状态转移矩阵]]的[[可逆性]]的一种刻画，于是尝试直接刻画这种[[马尔科夫链的动力学可逆性]]以替代EI&amp;lt;ref name=zhang_reversibility&amp;gt;{{cite journal|author1=Jiang Zhang|author2=Ruyi Tao|author3=Keng Hou Leong|author4=Mingzhe Yang|author5=Bing Yuan|year=2024|title=Dynamical reversibility and a new theory of causal emergence|url=https://arxiv.org/abs/2402.15054|journal=arXiv}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=简介=&lt;br /&gt;
有效信息（EI）指标主要用来度量马尔科夫动力学的因果效应强度。与一般的因果推断理论不同，EI主要用于动力学（马尔科夫的转移概率矩阵）已知，且不存在未知变量即[[混杂因子]]的情况。其核心目标是度量因果关联强度，而并非是否存在因果效应。也就是说，EI更适用于已经确知了因果变量X和Y之间存在着因果联系的场合。&lt;br /&gt;
&lt;br /&gt;
更正式地，EI是因果机制（在离散状态的[[马尔科夫链]]中，是这个马尔科夫链的[[概率转移矩阵]]）的函数，而与其它因素无关。EI的正式定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(P)\equiv I(Y;X|do(X\sim U))&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，P代表X到Y的因果机制，它是一个概率转移矩阵，即[math]p_{ij}\equiv Pr(Y=j|X=i)[/math]；X是因变量，Y是果变量，[math]do(X\sim U)[/math]表示对因变量X进行[[do干预]]，将X的分布变为均匀分布。在这一干预下，同时假设X到Y的因果机制P保持不变，那么，Y就会间接地受到X的do干预的影响而发生变化。则EI度量的是经过干预后的X和Y之间的互信息。&lt;br /&gt;
&lt;br /&gt;
之所以引入do操作，目的是为了消除数据X的分布对EI的影响，以使得最后的EI度量仅仅是因果机制f的函数，而与数据X无关。&lt;br /&gt;
&lt;br /&gt;
下面，给出三个马尔科夫链的例子，以及相应的EI数值也放到了下面：&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|[[文件:P1.png|替代=P_1的状态转移图|居中|无框|168x168像素|P_1的状态转移图]]&lt;br /&gt;
|[[文件:P2.png|替代=P_2的状态转移图|居中|无框|200x200像素|P_2的状态转移图]]&lt;br /&gt;
|[[文件:P3.png|替代=P_3的状态转移图|居中|无框|164x164像素|P_3的状态转移图]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;EI(P_1)=2\ bits,\\&amp;amp;Det(P_1)=2\ bits,\\&amp;amp;Deg(P_1)=0\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;EI(P_2)=0.81\ bits,\\&amp;amp;Det(P_2)=0.81\ bits,\\&amp;amp;Deg(P_2)=0\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;EI(P_3)=0.81\ bits\\&amp;amp;Det(P_3)=2\ bits,\\&amp;amp;Deg(P_3)=1.19\ bits.\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
{{NumBlk|:||{{EquationRef|example}}}}&lt;br /&gt;
&lt;br /&gt;
我们可以看到，第一个矩阵[math]P_1[/math]的EI比第二个[math]P_2[/math]的高，这是因为这一概率转移是一个完全确定性的转移，也就是从某一个状态出发，它会以100%的概率转移到另外某一个状态。然而，并不是所有的确定性转移的矩阵都会对应较大的EI，比如[math]P_3[/math]这个矩阵，虽然它的转移概率也都是100%或0，但是因为所有后面三种状态都会转移到第1个状态，因此我们将无法区分它上一时刻是处于何种状态的。这种情况下它的EI也会比较低，我们称这种情况存在着'''简并性'''。于是，如果一个转移矩阵具有较高的确定性和较低的简并性，则它的EI就会很高。进一步，存在如下对EI的分解：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI=Det-Deg&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，Det是对确定性（Determinism）的缩写，而Deg是对简并性（Degeneracy）的缩写，EI是二者之差。在上面的表格中，我们将矩阵所对应的Det和Deg数值也都列在了下面。&lt;br /&gt;
&lt;br /&gt;
第一个转移概率矩阵是一个[[排列矩阵]]（Permutation），它是可逆的，因此确定性最高，没有简并性，因而EI最大；第二个矩阵的前三个状态都会以1/3的概率跳转到彼此，因此确定性程度最低，而简并性也很低，EI是0.81；第三个矩阵虽然也是非0即1的转移概率，因而确定性最高，但是由于后三个状态都跳转到1，因此，从1状态不能推知它来自于哪个状态，因此简并性最高，最终的EI与第二个相同，仍然是0.81。&lt;br /&gt;
&lt;br /&gt;
尽管在原始文献中&amp;lt;ref name=hoel_2013 /&amp;gt;，有效信息大多应用于离散状态的马尔科夫链，但是，[[张江]]、[[刘凯威]]、[[杨明哲]]等人将EI的定义扩展到了更一般的连续变量的情形&amp;lt;ref name=zhang_nis /&amp;gt;&amp;lt;ref name=yang_nis+ /&amp;gt;&amp;lt;ref name=liu_exact /&amp;gt;。这一扩充的基本思想是从EI的原始定义出发，将因变量x干预为一个足够大的有界区间，即[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上的均匀分布，然后再假设因果机制为一种满足高斯分布的条件概率，其均值为确定值映射[math]f(x)[/math]，协方差矩阵为[math]\Sigma[/math]，从而在此基础上，再度量因果变量之间的有效信息。这里的因果机制是由映射[math]f(x)[/math]和协方差矩阵共同决定的，也就是条件概率[math]Pr(y|x)[/math]来决定的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
下面，我们将进行更详细地讲解。&lt;br /&gt;
&lt;br /&gt;
=Do形式及解释=&lt;br /&gt;
原始的有效信息是定义在离散的马尔科夫链上的。然而，为了能够更广泛地应用，在这里我们探讨有效信息的更一般的形式。&lt;br /&gt;
&lt;br /&gt;
==形式定义==&lt;br /&gt;
&lt;br /&gt;
考虑两个随机变量：[math]X[/math]和[math]Y[/math]，分别代表因变量（Cause Variable）和果变量（Effect Variable），并且假定它们的取值区间分别是[math]\mathcal{X}[/math]和[math]\mathcal{Y}[/math]。则[math]X[/math]到[math]Y[/math]的有效信息EI的定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\equiv I(X:Y|do(X\sim U(\mathcal{X})))\equiv I(\tilde{X}:\tilde{Y})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]do(X\sim U(\mathcal{X}))[/math]代表对[math]X[/math]实施[[do干预]](或称[[do操作]]，英文是do-operator），使其服从[math]\mathcal{X}[/math]上的均匀分布[math]U(\mathcal{X})[/math]，也即是[[最大熵分布]]。[math]\tilde{X}[/math]与[math]\tilde{Y}[/math]分别代表在经过[math]do[/math]干预后的[math]X[/math]和[math]Y[/math]变量，其中，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(\tilde{X}=x)=\frac{1}{\#(\mathcal{X})},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也就是，经过干预后的变量[math]\tilde{X}[/math]与干预前的变量[math]X[/math]之间的最大区别就在于分布不同：[math]\tilde{X}[/math]服从[math]\mathcal{X}[/math]上的均匀分布，而[math]X[/math]则可能是任意的分布。这里[math]\#(\mathcal{X})[/math]代表集合[math]\mathcal{X}[/math]的基数。对于有限元素集合来说，这就是集合中元素的个数。&lt;br /&gt;
&lt;br /&gt;
按照[[Judea Pearl]]的理论，do算子实际上是切断了所有指向[math]X[/math]变量的因果箭头，同时保持其它因素，特别是从[math]X[/math]到[math]Y[/math]的因果机制保持不变。所谓的[[因果机制]]是指在给定[math]X[/math]取值[math]x\in \mathcal{X}[/math]的情况下，[math]Y[/math]在[math]\mathcal{Y}[/math]上取任意值[math]y\in \mathcal{Y}[/math]的条件概率：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f\equiv Pr(Y=y|X=x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在干预中，我们要始终保持则这个[[因果机制]][math]f[/math]保持不变。当没有其它变量影响的时候，这就会导致，[math]Y[/math]的概率分布会跟着发生变化，即被间接干预成为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(\tilde{Y}=y)=\sum_{x\in \mathcal{X}}Pr(X=x) Pr(Y=y|X=x)=\sum_{x\in \mathcal{X}} \frac{Pr(Y=y|X=x)}{\#(\mathcal{X})}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]\tilde{Y}[/math]则代表：在保持因果机制[math]f[/math]不变的情况下，[math]Y[/math]变量被[math]X[/math]的do干预所间接改变了的Y变量，这种变化主要体现在概率分布的变化上。&lt;br /&gt;
&lt;br /&gt;
因此，所谓一个因果机制[math]f[/math]的有效信息EI，就是被干预后的因变量[math]\tilde{X}[/math]和果变量[math]\tilde{Y}[/math]之间的[[互信息]]。&lt;br /&gt;
&lt;br /&gt;
==为什么要使用do算子？==&lt;br /&gt;
&lt;br /&gt;
不难看出，尽管EI本质上就是[[互信息]]，但是与传统[[信息论]]中的[[互信息]]不同，有效信息EI在定义中包含了[[do操作]]，即对输入变量做了一个[[干预操作]]。为什么要引入这一操作呢？&lt;br /&gt;
&lt;br /&gt;
根据[[Judea Pearl]]的[[因果阶梯理论]]&amp;lt;ref name=pearl_causality /&amp;gt;，[[因果推断]]包含了三个层次，分别是：关联、[[干预]]和[[反事实]]。阶梯层级越高，因果特征越明显。直接对观测数据估测[[互信息]]，便是在度量关联程度；而如果我们能对变量做[[干预]]操作，即设定变量为某个值或服从某个分布，便上升到了干预的层级。在EI的定义中引入了[math]do[/math]操作，则使得EI能够比[[互信息]]更能体现因果特征。&lt;br /&gt;
&lt;br /&gt;
而从实际意义上来讲，在EI的计算中引入[[do算子]]，则可以把数据和动力学分开，从而消除数据分布（即[math]X[/math]的分布）对EI度量所带来的影响。事实上，在一般的[[因果图]]上，[[do算子]]是一种消除指向被干预变量所有的因果箭头的操作，这种操作可以避免[[混杂因子]]造成的[[虚假关联]]。因此，EI定义中的[[do算子]]也可以消除所有指向因变量[math]X[/math]的因果箭头，包括其它变量（包括不可观测的变量）对[math]X[/math]的影响，从而使得EI更能够刻画动力学本身的特性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[do算子]]的引入让EI这个指标与其他信息度量指标截然不同，关键在于它是且仅是[[因果机制]]的函数，一方面这一特性使得它比其他指标（比如[[转移熵]]）更能抓住因果概念的本质，另一方面它需要我们能够已知或获取到[[因果机制]]，这在只有观测数据的情况下存在一定的困难。&lt;br /&gt;
&lt;br /&gt;
==为什么干预成均匀分布？==&lt;br /&gt;
&lt;br /&gt;
在[[Erik Hoel]]的原始定义中，[[do操作]]是将因变量[math]X[/math]干预成了在其定义域[math]\mathcal{X}[/math]上的[[均匀分布]]（也就是[[最大熵分布]]）&amp;lt;ref name=hoel_2013 /&amp;gt;&amp;lt;ref name=hoel_2017&amp;gt;{{cite journal|author1=Hoel, E.P.|title=When the Map Is Better Than the Territory|journal=Entropy|year=2017|volume=19|page=188|url=https://doi.org/10.3390/e19050188}}&amp;lt;/ref&amp;gt;。那么， 为什么要干预成[[均匀分布]]呢？其它分布是否也可以？&lt;br /&gt;
&lt;br /&gt;
首先，根据上一小节的论述，[[do操作]]的实质是希望让EI能够更清晰地刻画[[因果机制]][math]f[/math]的性质，因此，需要切断因变量[math]X[/math]与其它变量的联系，并改变其分布，让EI度量与[math]X[/math]的分布无关。&lt;br /&gt;
&lt;br /&gt;
而之所以要把输入变量干预为[[均匀分布]]，其实就是要更好地刻画[[因果机制]]的特性。&lt;br /&gt;
&lt;br /&gt;
这是因为，当[math]\mathcal{X}[/math]和[math]\mathcal{Y}[/math]都是有限可数集合的时候，因果机制[math]f\equiv Pr(Y=y|X=x)[/math]就成为了一个[math]\#(\mathcal{X})[/math]行[math]\#(\mathcal{Y})[/math]列的矩阵，我们可以展开EI的定义：&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= I(X,Y|do(X)\sim U)= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x,Y=y)\log \frac{Pr(X=x,Y=y)}{Pr(X=x)Pr(Y=y)}\\&lt;br /&gt;
&amp;amp;= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log \frac{Pr(Y=y|X=x)}{Pr(Y=y)}\\&lt;br /&gt;
&amp;amp;= \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log Pr(Y=y|X=x)- \sum_{x\in\mathcal{X}}\sum_{y\in\mathcal{Y}}Pr(X=x)Pr(Y=y|X=x)\log Pr(Y=y) \\&lt;br /&gt;
&amp;amp;=\frac{1}{\#(\mathcal{X})}\left(-\sum_{x\in\mathcal{X}}H(Pr(Y|X))\right) + H(Pr(Y))&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|1}}}}&lt;br /&gt;
&lt;br /&gt;
不难看出，最后得到的等式告诉我们，EI实际上由两项构成，第一项是因果机制矩阵每一行的负熵的平均值，第二项则是变量[math]Y[/math]的熵。&lt;br /&gt;
在第一项中，[math]X[/math]的概率分布[math]Pr(X=x)[/math]实际上起到了对每一行的熵求平均时候的权重的作用。只有当我们将该权重取为同样的数值的时候，才能够平等地对待因果机制矩阵中的每一个行，这时就恰好是将[math]X[/math]干预成均匀分布的时候。&lt;br /&gt;
&lt;br /&gt;
如果不是均匀分布，也就意味着某些行的熵就会被乘以一个较大的权重，有的行就会被赋予一个较小的权重，这种权重代表了某种“偏见”，因此也就不能做到让EI能够反映因果机制的天然属性了。&lt;br /&gt;
&lt;br /&gt;
=马尔科夫链的有效信息=&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链简介==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;在本小节中，所有的马尔科夫转移概率矩阵都表示为[math]P[/math]。N为总的状态数量。&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最早，[[Erik Hoel]]等人是在离散状态的[[马尔科夫动力学]]，即[[马尔科夫链]]上提出有效信息这一度量因果性的指标的。因此，这一节中，我们介绍有效信息在[[马尔科夫链]]上的特殊形式。&lt;br /&gt;
&lt;br /&gt;
所谓的[[马尔科夫链]]是指状态离散、时间离散的一种[[平稳随机过程]]，它的动力学一般都可以用所谓的[[转移概率矩阵]](Transitional Probability Matrix)，简称TPM来表示，有时也叫做[[概率转移矩阵]]或[[状态概率转移矩阵]]或[[状态转移矩阵]]。&lt;br /&gt;
&lt;br /&gt;
具体来讲，[[马尔科夫链]]包含一组随机变量[math]X_t[/math]，它在状态空间[math]\mathcal{X}=\{1,2,\cdots,N\}[/math]上取值，其中[math]t[/math]往往表示时间。所谓的[[转移概率矩阵]]是指一个概率矩阵，其中第[math]i[/math]行，第[math]j[/math]列元素：[math]p_{ij}[/math]表示了系统在任意时刻[math]t[/math]在[math]i[/math]状态的条件下，在[math]t+1[/math]时刻跳转到[math]j[/math]状态的概率。同时，每一行满足归一化条件：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum_{j=1}^Np_{ij}=1,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[状态转移矩阵]]可以看作是[[马尔科夫链]]的[[动力学]]，这是因为，任意时刻[math]t+1[/math]上的状态概率分布，即[math]Pr(X_t)[/math]，可以被上一时刻的状态概率分布，即[math]Pr(X_t)[/math]和[[状态转移矩阵]]所唯一确定，并满足关系：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(X_{t+1}=j)=\sum_{i=1}^N p_{ij}\cdot Pr(X_t=i),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里的[math]i,j\in \mathcal{X}[/math]都是[math]\mathcal{X}[/math]中的任意状态，且[math]N=\#(\mathcal{X})[/math]即[math]\mathcal{X}[/math]中的总状态数。&lt;br /&gt;
&lt;br /&gt;
下表展示的是三个不同的转移概率矩阵，以及它们的EI数值：&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
&amp;amp;1/4     &amp;amp;1/4           &amp;amp;1/4           &amp;amp;1/4&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]EI(P_1)=2[/math] bits||[math]EI(P_2)=1[/math] bits||[math]EI(P_3)=0[/math] bits&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这三个[[马尔科夫链]]的状态空间都是[math]\mathcal{X}=\{1,2,3,4\}[/math]，因此它们的TPM的大小都是[math]4\times 4[/math]。&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链的EI==&lt;br /&gt;
&lt;br /&gt;
在[[马尔科夫链]]中，任意时刻的状态变量[math]X_t[/math]都可以看作是原因，而下一时刻的状态变量[math]X_{t+1}[/math]就可以看作是结果，这样[[马尔科夫链]]的[[状态转移矩阵]]就是它的[[因果机制]]。因此，我们可以将有效信息的定义套用到[[马尔科夫链]]上来。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= I(X_t,X_{t+1}|do(X_t)\sim U(\mathcal{X}))=I(\tilde{X}_t,\tilde{X}_{t+1}) \\ &lt;br /&gt;
&amp;amp;= \sum^N_{i=1}\sum^N_{j=1}Pr(\tilde{X}_t=i,\tilde{X}_{t+1}=j)\log \frac{Pr(\tilde{X}_t=i,\tilde{X}_{t+1}=j)}{Pr(\tilde{X}_t=i)Pr(\tilde{X}_{t+1}=j)}\\&lt;br /&gt;
&amp;amp;= \sum^N_{i=1}Pr(\tilde{X}_t=i)\sum^N_{j=1}Pr(\tilde{X}_{t+1}=j|\tilde{X}_t=i)\log \frac{Pr(\tilde{X}_{t+1}=j|\tilde{X}_t=i)}{Pr(\tilde{X}_{t+1}=j)}\\&lt;br /&gt;
&amp;amp;= \frac{1}{N}\sum^N_{i=1}\sum^N_{j=1}p_{ij}\log\frac{N\cdot p_{ij}}{\sum_{k=1}^N  p_{kj}}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\tilde{X}_t,\tilde{X}_{t+1}&amp;lt;/math&amp;gt;分别为把t时刻的[math]X_t[/math][[干预]]为[[均匀分布]]后，前后两个时刻的状态。&amp;lt;math&amp;gt;p_{ij}&amp;lt;/math&amp;gt;为第i个状态转移到第j个状态的转移概率。从这个式子，不难看出，EI仅仅是概率转移矩阵[math]P[/math]的函数。&lt;br /&gt;
&lt;br /&gt;
==马尔科夫链EI的向量形式==&lt;br /&gt;
&lt;br /&gt;
我们也可以将[[转移概率矩阵]][math]P[/math]写成[math]N[/math]个行向量拼接而成的形式，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P=(P_1,P_2,\cdots,P_N)^T&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]P_i[/math]矩阵[math]P[/math]的第[math]i[/math]个行向量，且满足条件概率的归一化条件：[math]||P_i||_1=1[/math]，这里的[math]||\cdot||_1[/math]表示向量的1范数。那么EI可以写成如下的形式：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= \frac{1}{N}\sum^N_{i=1}\sum^N_{j=1}p_{ij}\log\frac{N\cdot p_{ij}}{\sum_{k=1}^N  p_{kj}}\\&lt;br /&gt;
&amp;amp;=\frac{1}{N}\cdot \sum_{i=1}^N\left(P_i\cdot \log P_i - P_i\cdot\log \bar{P}\right)\\&lt;br /&gt;
&amp;amp;=\frac{1}{N}\sum_{i=1}^N D_{KL}(P_i||\bar{P})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|2}}}}&lt;br /&gt;
将矩阵每列求均值，可得到平均转移向量&amp;lt;math&amp;gt;\overline{P}=\sum_{k=1}^N P_k/N&amp;lt;/math&amp;gt;。[math]D_{KL}[/math]便是两个分布的[[KL散度]]。因此，EI是转移矩阵每个行转移向量[math]P_i[/math]与平均转移向量[math]\bar{P}[/math]的[[KL散度]]的均值。&lt;br /&gt;
&lt;br /&gt;
针对上面所列的三个[[状态转移矩阵]]，我们可以分别求出它们的EI为：2比特、1比特和0比特。由此可见，如果[[转移概率矩阵]]中出现更多的0或1，也就是行向量多是[[独热向量]]（也叫做[[one-hot向量]]，即某一个位置为1，其它位置为0的向量），则EI值就会更大。也就是说，如果在状态转移的过程中，从某一时刻到下一时刻的跳转越确定，则EI值就会倾向于越高。但是，这个观察并不十分精确，更精确的结论由后面的小节给出。&lt;br /&gt;
&lt;br /&gt;
==归一化==&lt;br /&gt;
显然，EI的大小和状态空间大小有关，这一性质在我们比较不同尺度的[[马尔科夫链]]的时候非常不方便，我们需要一个尽可能不受尺度效应影响的[[因果效应度量]]。因此，我们需要对有效信息EI做一个归一化处理，得到和系统尺寸无关的一个量化指标。&lt;br /&gt;
&lt;br /&gt;
根据[[Erik Hoel]]和[[Tononi]]等人的工作，要用[[均匀分布]]即[[最大熵分布]]下的熵值，即&amp;lt;math&amp;gt;\log N&amp;lt;/math&amp;gt;来做分母对EI进行归一化，这里的[math]N[/math]为状态空间[math]\mathcal{X}[/math]中的状态的数量&amp;lt;ref name=hoel_2013 /&amp;gt;。那么归一化后的EI便等于：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff=\frac{EI}{\log N}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
进一步定义归一化指标也称为'''有效性'''（effectiveness）。&lt;br /&gt;
&lt;br /&gt;
然而，在处理连续状态变量的时候，这种使用状态空间中状态数量的对数值进行归一化的处理方式并不是非常合适，因为这一状态数往往受到变量的维度和实数分辨率的影响。&lt;br /&gt;
&lt;br /&gt;
==确定性和简并性==&lt;br /&gt;
===EI的分解===&lt;br /&gt;
根据公式{{EquationNote|1}}，我们发现，EI实际上可以被分解为两项，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI&amp;amp;=\frac{1}{\#(\mathcal{X})} \left(-\sum_{x\in\mathcal{X}}H(Pr(Y|X))\right) + H\left(Pr(Y)\right)\\&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同样，在马尔科夫链的情景下，EI也可以做这样的分解：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI &amp;amp;= \frac{1}{N}\cdot \sum_{i=1}^N\left(P_i\cdot \log P_i - P_i\cdot\log \bar{P}\right)\\&lt;br /&gt;
&amp;amp;=\underbrace{-\langle H(P_i)\rangle}_{确定性项}+\underbrace{H(\bar{P})}_{非简并性项}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|tow_terms}}}}&lt;br /&gt;
&lt;br /&gt;
其中，第一项：[math]-\langle H(P_i)\rangle\equiv \frac{1}{N}\sum_{i=1}^N H(P_i)[/math]为每个行向量[math]P_i[/math]的负熵的平均值，它刻画了整个马尔科夫转移矩阵的'''确定性'''（determinism）；&lt;br /&gt;
&lt;br /&gt;
第二项：[math]H(\bar{P})[/math]为平均行向量的熵，其中[math]\bar{P}\equiv \frac{1}{N}\sum_{i=1}^N P_i [/math]为所有N个行向量的平均行向量，它刻画了整个马尔科夫转移矩阵的'''非简并性'''或'''非退化性'''(non-degeneracy)。&lt;br /&gt;
&lt;br /&gt;
===确定性与简并性===&lt;br /&gt;
然而上述定义中的确定性项和非简并性都是负数，为此，我们重新定义一个马尔科夫链转移矩阵P的'''确定性'''为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Determinism \equiv \log N - \langle H(P_i)\rangle = \frac{1}{N}\sum_{i=1}^N \sum_{j=1}^N p_{ij}\log \left(N\cdot p_{ij}\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一项是一个平均的[[负熵]]，为了防止其为负数，所以加上了[math]\log N[/math]&amp;lt;ref name=hoel_2013 /&amp;gt;。Determinism能刻画整个转移矩阵的确定性：也就是说如果我们知道了系统当前时刻所处的状态，则我们能够推断出系统在下一时刻所处的状态的程度。为什么这么说呢？这是因为确定性这一项是所有行向量熵的平均值，再取一个负号。我们知道，当一个向量更靠近均匀分布的时候，它的熵就越大，相反，如果一个向量越靠近一个“独热”（one-hot）的向量，也就是这个向量中只有一个1，其它元素都是0，那么它的熵就越小。我们知道，马尔科夫概率转移矩阵的一个行向量的含义就代表系统从当前状态转移到各个不同状态的概率大小。那么，当平均的行向量负熵大的时候，也就是这个行向量的某一个单元概率为1，其它为0，这就意味着系统能够确定地转移到1对应的状态。&lt;br /&gt;
&lt;br /&gt;
我们定义一个马尔科夫链转移矩阵P的'''简并性'''为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Degeneracy \equiv \log N - H(\bar{P})=\log N + \sum_{j=1}^N \bar{P}_{\cdot j}\log \bar{P}_{\cdot j}=\sum_{j=1}^N \frac{\sum_{i=1}^Np_{ij}}{N}\log \left(\sum_{i=1}^Np_{ij}\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这一项为简并性或叫退化性，为了防止其为负数，所以加上了[math]\log N[/math]&amp;lt;ref name=hoel_2013 /&amp;gt;。这里的“简并性”的含义是：如果知道了系统的当前状态，能不能反推系统在上一时刻的状态的能力，如果可以推断，则这个马尔科夫矩阵的简并性就会比较低，也就是非简并的；而如果很难推断，则马尔科夫矩阵就是简并的，也即退化的。为什么“简并性”可以用平均行向量分布的负熵来刻画呢？这是因为，首先，当所有的P中的行向量都是彼此独立的独热向量，那么它们的平均分布就会非常接近于一个均匀分布，即[math]\bar{P}\approx (\frac{1}{N},\frac{1}{N},\cdots,\frac{1}{N})[/math]，这个时候，它的[[Shannon熵]]最大，即[math]\log N[/math]。而在此时，这个马尔科夫转移矩阵是一个'''可逆矩阵'''（由彼此独立的“独热”向量形成的全体彼此线性无关，因此矩阵满秩，因此是可逆的）。这也就意味着，我们从系统当前的状态，是可以推断出系统的上一时刻的状态的，所以这个马尔科夫转移矩阵是非简并的，计算出的简并度恰恰也为0；&lt;br /&gt;
&lt;br /&gt;
其次，当P中的行向量都是相同的独热向量的时候，则平均向量也是一个独热的向量，而这种向量的[[熵]]是最小的。在此时，由于所有的上一时刻状态都会转移到行向量中1对应的状态，因此我们也就很难推断出当前这个状态是由哪一个上一步的状态转移过来的。因此，这种情形下的马尔科夫矩阵是简并的（或退化的），计算出来的简并度则恰恰是[math]\log N[/math]。&lt;br /&gt;
&lt;br /&gt;
对于更一般的情况，如果P中的行向量靠近一个彼此独立的独热行向量构成的矩阵，则P就越非简并，相反，如果行向量彼此相同且靠近同一个独热向量，则P就越简并。&lt;br /&gt;
&lt;br /&gt;
===举例===&lt;br /&gt;
下面，我们以三个马尔科夫链为例，来考察它们的确定性和简并性&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P_1=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_2=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_3=\begin{pmatrix}&lt;br /&gt;
&amp;amp;0       &amp;amp;0             &amp;amp;1             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1       &amp;amp;0             &amp;amp;0             &amp;amp;0&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;Det(P_1)=2\ bits,\\&amp;amp;Deg(P_1)=0\ bits,\\&amp;amp;EI(P_1)=2\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_2)=0.81\ bits,\\&amp;amp;Deg(P_2)=0\ bits,\\&amp;amp;EI(P_2)=0.81\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_3)=2\ bits,\\&amp;amp;Deg(P_3)=1.19\ bits,\\&amp;amp;EI(P_3)=0.81\ bits\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
第一个转移概率矩阵是一个置换排列矩阵（Permutation），它是可逆的，因此确定性最高，没有简并性，因而EI最大；第二个矩阵的前三个状态都会以1/3的概率跳转到彼此，因此确定性程度最低，而非简并，EI是0.81；第三个矩阵虽然也是确定性的矩阵，因而确定性最高，但是由于后三个状态都跳转到1，因此，从1状态不能推知它来自于哪个状态，因此简并性最高，最终的EI与第二个相同，仍然是0.81。&lt;br /&gt;
&lt;br /&gt;
===归一化的确定性与简并性===&lt;br /&gt;
&lt;br /&gt;
在[[Erik Hoel]]等人的原始论文中&amp;lt;ref name=hoel_2013 /&amp;gt;，作者们定义的确定性和简并性是以归一化的形式呈现的，也就是将确定性和简并性除以了一个与系统尺度有关的量。为了区分，我们将归一化的对应量称为确定性系数和简并性系数。&lt;br /&gt;
&lt;br /&gt;
具体地，[[Erik Hoel]]等人将归一化后的有效信息，即Eff进行分解，分别对应确定性系数（determinism coefficient）和简并性系数（degeneracy coefficient）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff = Determinism\ Coefficient - Degeneracy\ Coefficient&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这两项的定义分别是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
&amp;amp;Determinism\ Coefficient = \frac{1}{N\log N}\sum_{i,j}p_{ij}\log\left(N\cdot {p_{ij}}\right) \\&lt;br /&gt;
&amp;amp;Degeneracy\ Coefficient = \frac{1}{N\log N}\sum_{ij}p_{ij}\log{\left(\sum_k p_{k,j}\right)}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
总之，确定性指的是，已知当前时刻状态概率分布，对未来可能状态的判断有多大的把握；而简并性指的是，已知当前的状态，追溯历史，我们能有多大确定性做出判断。如果有状态在动力学过程中发生简并，我们回溯历史时能运用的信息就会变少。当一个系统背后的动力学确定性高，同时简并性低时，说明这是一个具有明显因果效应的动力学。&lt;br /&gt;
&lt;br /&gt;
==EI的函数性质==&lt;br /&gt;
由公式{{EquationNote|2}}可以看出，在概率转移矩阵P上，EI是关于矩阵中每一个元素（从某一状态到另一状态的条件概率）的函数，于是我们自然会问：这样一个函数具有哪些数学性质？如它有没有极值点？极值点在哪里？凸性如何？最大值和最小值又是多少？&lt;br /&gt;
===定义域===&lt;br /&gt;
在离散状态和离散时间的马尔科夫链上，EI的定义域显然是概率转移矩阵P。P是一个由[math]N\times N[/math]个元素构成的矩阵，其中每一个元素[math]p_{ij}\in[0,1][/math]代表一个概率值，同时对于任意的行，这组概率值需要满足归一化条件，也就是对于任意的[math]\forall i\in[1,N][/math]:&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
||P_i||_1=\sum_{j=1}^N p_{ij}=1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|3}}}}&lt;br /&gt;
因此EI的定义域，也就是P的可能空间并不是全部[math]N\times N[/math]维的实数空间[math]\mathcal{R}^{N^2}[/math]，由于归一化条件{{EquationNote|3}}的存在，使得该定义域成为一个[math]N\times N[/math]维实数空间中的一个子空间。如何表达这个子空间呢？&lt;br /&gt;
&lt;br /&gt;
首先，对于任意一个行向量[math]P_i[/math]来说，它的取值范围空间为N维实数空间中的一个超正多面体。例如，当[math]N=2[/math]的时候，该空间为一条直线：[math]p_{i,1}+p_{i,2}=1, \forall i\in\{1,2\}[/math]。当[math]N=3[/math]的时候，该空间为一张三维空间中的平面：[math]p_{i,1}+p_{i,2}+p_{i,3}=1, \forall i\in\{1,2,3\}[/math]。这两个空间如下图所示：&lt;br /&gt;
&lt;br /&gt;
[[文件:P1+p2=1.png|301x301像素|替代=]][[文件:P1+p2+p3=1.png|380x380像素|替代=]]&lt;br /&gt;
&lt;br /&gt;
在一般情况，我们将N维空间下的行向量[math]P_i[/math]的取值范围空间定义为[math]\Delta=\{p_{j}|\sum_{j=1}^Np_{j}=1,p_{j}\in[0,1]\}[/math]，则N个这样的空间的笛卡尔积即为EI的定义域：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Dom(EI)=\Delta\times \Delta\cdots\times\Delta=\Delta^N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===一阶导数及极值点===&lt;br /&gt;
&lt;br /&gt;
对公式{{EquationNote|2}}求[math]p_{ij}[/math]的一阶导数，并注意到归一化条件[math]\sum_{j=1}^Np_{ij}=1[/math]，则就可以得到：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{\partial EI}{\partial p_{ij}}=\log\left(\frac{p_{ij}}{p_{iN}}\right)-\log\left(\frac{\bar{p}_{\cdot j}}{\bar{p}_{\cdot N}}\right),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|3}}}}&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;p_{ij}&amp;lt;/math&amp;gt;表示P中第i行第j列的条件概率，因为P每一行有归一化约束条件{{EquationNote|2}}，所以EI函数本身有&amp;lt;math&amp;gt;N(N-1)&amp;lt;/math&amp;gt;个自由变元，我们可以取&amp;lt;math&amp;gt;1\leq i\leq N, 1\leq j\leq N-1&amp;lt;/math&amp;gt;。&amp;lt;math&amp;gt;p_{iN}&amp;lt;/math&amp;gt;表示第i行第N列的条件概率，&amp;lt;math&amp;gt;\bar{p}_{\cdot j}, \bar{p}_{\cdot N}&amp;lt;/math&amp;gt;则分别表示第j列和第N列条件概率的均值。不难看出，该导数有定义的前提是对于选定的[math]i,j\in[1,N][/math]，[math]p_{ij},p_{iN},\bar{p}_{\cdot j}\equiv \frac{\sum_{k=1}^Np_{kj}}{N},\bar{p}_{\cdot N}\equiv \frac{\sum_{k=1}^Np_{kN}}{N}[/math]都大于0，只有满足这个条件，则EI在[math]p_{ij}[/math]附近是可导的。否则，如果有一项为0，则导数不存在。&lt;br /&gt;
&lt;br /&gt;
令式{{EquationNote|3}}等于0，可以求得极值点：即对于任意的&amp;lt;math&amp;gt;1\leq i\leq N, 1\leq j\leq N-1&amp;lt;/math&amp;gt;，都有下式的成立，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p_{ij}=\bar{p}_{\cdot j}=\frac{1}{N}\sum_{k=1}^Np_{kj}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
不难计算出，此时&amp;lt;math&amp;gt;EI=0&amp;lt;/math&amp;gt;，即EI达到了极值点。根据EI的二阶导数不难判断出，这是极小值点。换个角度来看这个公式，这意味着EI的极小值点有很多个，只要转移概率矩阵所有行向量完全一致，无论该行向量本身是怎样的分布，EI都会等于0。&lt;br /&gt;
&lt;br /&gt;
===二阶导数与凸性===&lt;br /&gt;
进一步地，为了求得EI函数的凸性，我们可以求出EI这个函数的二阶导数&amp;lt;math&amp;gt;\frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}&amp;lt;/math&amp;gt;，其中&amp;lt;math&amp;gt;1\leq s \leq N, 1\leq t \leq N-1 &amp;lt;/math&amp;gt;。首先我们需要引入一个函数符号&amp;lt;math&amp;gt;\delta_{i,j} &amp;lt;/math&amp;gt;，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\delta_{i,j} = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
0 &amp;amp; \text{if } i\ne j,\\&lt;br /&gt;
1 &amp;amp; \text{if } i = j.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
于是我们可以来推导EI的二阶导数，当&amp;lt;math&amp;gt;i=s &amp;lt;/math&amp;gt;时，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
     \begin{aligned}&lt;br /&gt;
    \frac{\partial^2 EI}{\partial p_{ij}\partial p_{it}}&amp;amp;=\frac{\delta_{j,t}}{N}\left(\frac{1}{p_{ij}}-\frac{1}{N\cdot \bar{p}_{\cdot j}}\right)+\frac{1}{N\cdot p_{iN}}-\frac{1}{N^2\cdot \bar{p}_{\cdot N}}\\&lt;br /&gt;
    &amp;amp;=\delta_{j,t}\frac{\sum_{k=1}^{N-1}p_{k j}-p_{ij}}{N^2\cdot p_{ij}\cdot \bar{p}_{\cdot j}}+\frac{\sum_{k=1}^{N-1}p_{k N}-p_{iN}}{N^2\cdot p_{iN}\cdot \bar{p}_{\cdot N}}\\&lt;br /&gt;
    &amp;amp;=\delta_{j,t}\frac{\sum_{k\neq i}p_{kj}}{N^2\cdot p_{ij}\cdot \bar{p}_{\cdot j}}+\frac{\sum_{k\neq i}p_{k N}}{N^2\cdot p_{iN}\cdot \bar{p}_{\cdot N}}&amp;gt;0,&lt;br /&gt;
\end{aligned}&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当&amp;lt;math&amp;gt;i\ne s&amp;lt;/math&amp;gt;时，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
    \frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}=-\frac{\delta_{j,t}}{N^2\cdot \bar{p}_{\cdot j}}-\frac{1}{N^2\cdot \bar{p}_{\cdot N}}&amp;lt;0.&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
综上，EI的二阶导数为，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
        \frac{\partial^2 EI}{\partial p_{ij}\partial p_{st}}=\frac{1}{N}\cdot\left(\frac{\delta_{i,s}\delta_{j,t}}{p_{ij}}+\frac{\delta_{i,s}}{p_{iN}}-\frac{\delta_{j,t}}{N\cdot\bar{p}_{\cdot j}}-\frac{1}{N\cdot \bar{p}_{\cdot N}}\right).&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
并且，二阶导数在&amp;lt;math&amp;gt;i=s &amp;lt;/math&amp;gt;的时候为正，在&amp;lt;math&amp;gt;i\ne s&amp;lt;/math&amp;gt;时为负。因此EI既不是凸的也不是凹的。&lt;br /&gt;
&lt;br /&gt;
===最小值===&lt;br /&gt;
前面已经根据EI的一阶导数讨论了它的极值问题。即EI会在所有行向量都是同一个向量的时候达到极小值0。那么，这个极小值是不是最小的呢？&lt;br /&gt;
&lt;br /&gt;
我们知道，根据公式{{EquationNote|2}}，EI本质上是一种KL散度，而KL散度都是非负的，也就是说：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\geq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个不等式的等号在[math]p_{ij}=\bar{p}_{\cdot j}[/math]对所有的[math]i,j[/math]都成立的时候能够取到。因此，0是EI的最小值，且[math]p_{ij}=\bar{p}_{\cdot j}=\frac{1}{N}\sum_{k=1}^Np_{kj}[/math]是它的最小值点，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_{min}=0.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===最大值===&lt;br /&gt;
通过前面确定性和简并性章节的讨论，我们知道EI可以拆成两部分，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI = -\langle H(P_i)\rangle + H(\bar{P}),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中熵的定义是&amp;lt;math&amp;gt;H(P_i)=-\sum_{j=1}^Np_{ij}\log p_{ij}&amp;lt;/math&amp;gt;。分开来看，前一项式子最大值为0，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
- H(P_i)\leq 0,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为没有不确定性的独热向量时，该式子的等号成立。所以，当对所有的i都有&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为独热变量时，有&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
-\langle H(P_i)\rangle=0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
成立。另一边，P中所有行向量的平均向量的熵也有一个不等式成立，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
H(\bar{P})\leq \log N,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中等于号在满足&amp;lt;math&amp;gt;\bar{P}=\frac{1}{N}\cdot \mathbb{1}&amp;lt;/math&amp;gt;条件时成立。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\leq 0+\log N=\log N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
当这两个式子的等号同时成立时，即&amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;为独热向量，同时&amp;lt;math&amp;gt;\bar{P}&amp;lt;/math&amp;gt;为均匀分布时（此时必然要求[math]P_i[/math]彼此垂直，也就是P是一个[[排列置换矩阵]]），EI会达到最大值：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_{max}=\log N&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==最简马尔科夫链下的解析解==&lt;br /&gt;
&lt;br /&gt;
我们考虑一个最简单的2*2马尔科夫链矩阵：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P=\begin{pmatrix}p &amp;amp; 1-p \\1-q &amp;amp; q\end{pmatrix},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中 [math]p[/math] 和 [math]q[/math] 为取值 [math][0,1][/math] 的参数。&lt;br /&gt;
&lt;br /&gt;
这个参数为[math]p[/math]和[math]q[/math]的转移概率矩阵的EI可以通过以下解析解计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI=\frac{1}{2}\left[p\log_2\frac{2p}{1+p-q}+(1-p)\log_2\frac{2(1-p)}{1-p+q}\right. + \left.(1-q)\log_2\frac{2(1-q)}{1+p-q}+q\log_2\frac{2q}{1-p+q}\right]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下图展示了不同[math]p[/math] 和 [math]q[/math]取值的 EI 的变化。&lt;br /&gt;
&lt;br /&gt;
[[文件:EIpq.png|替代=|400x400像素]]&lt;br /&gt;
&lt;br /&gt;
由这张图不难看出，当p+q=1的时候，也就是所有行向量都相同的情形，EI取得最小值0。否则，随着p,q沿着垂直于p+q=1的方向增大，EI开始变大，而最大值为1.&lt;br /&gt;
&lt;br /&gt;
==因果涌现==&lt;br /&gt;
有了有效信息这一度量指标后，我们便可以讨论马尔科夫链上的因果涌现了。对于一个马尔科夫链，观察者可以建立多尺度视角去观测，区分出微观和宏观。首先，原始的马尔科夫概率转移矩阵P即定义了微观动力学；其次，经过对微观态的粗粒化映射（coarse-graining）后（通常反映为对微观状态的分组），观察者可以得到对应的宏观状态（即分组），这些宏观状态彼此之间的概率转移可以用宏观的马尔科夫概率转移矩阵P'来刻画。对两个动力学分别可以计算EI，如果宏观的EI大于微观EI，我们说该系统发生了因果涌现。&lt;br /&gt;
&lt;br /&gt;
[[文件:CE.png|替代=因果涌现示意图|500x500像素]]&lt;br /&gt;
&lt;br /&gt;
可以定义一个新的指标直接度量因果涌现的程度：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
CE = EI(P') - EI(P)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里[math]P[/math]为微观状态的马尔科夫概率转移矩阵，维度为：[math]N\times N[/math]，这里N为微观的状态数；而[math]P'[/math]为对[math]P[/math]做粗粒化操作之后得到的宏观态的马尔科夫概率转移矩阵，维度为[math]M\times M[/math]，其中[math]M&amp;lt;N[/math]为宏观状态数。&lt;br /&gt;
&lt;br /&gt;
关于如何对马尔科夫概率转移矩阵实施粗粒化的方法，往往体现为两步：1、对微观状态做归并，将N个微观态，归并为M个宏观态；2、对马尔科夫转移矩阵做约简。关于具体的粗粒化马尔科夫链的方法，请参考[[马尔科夫链的粗粒化]]。&lt;br /&gt;
&lt;br /&gt;
如果计算得出的CE&amp;gt;0，则称该系统发生了[[因果涌现]]，否则没有发生。&lt;br /&gt;
&lt;br /&gt;
下面，我们展示一个具体的因果涌现的例子：&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+马尔科夫链示例&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_m=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;1/3     &amp;amp;1/3           &amp;amp;1/3           &amp;amp;0&amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1             &amp;amp;0             &amp;amp;1&amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,    &lt;br /&gt;
||&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P_M=\begin{pmatrix}&lt;br /&gt;
&amp;amp;1       &amp;amp;0            &amp;amp; \\&lt;br /&gt;
&amp;amp;0       &amp;amp;1            &amp;amp; \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[math]\begin{aligned}&amp;amp;Det(P_m)=0.81\ bits,\\&amp;amp;Deg(P_m)=0\ bits,\\&amp;amp;EI(P_m)=0.81\ bits\end{aligned}[/math]||[math]\begin{aligned}&amp;amp;Det(P_M)=1\ bits,\\&amp;amp;Deg(P_M)=0\ bits,\\&amp;amp;EI(P_M)=1\ bits\end{aligned}[/math]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
在这个例子中，微观态的转移矩阵是一个4*4的矩阵，其中前三个状态彼此以1/3的概率相互转移，这导致该转移矩阵具有较小的确定性，因此EI也不是很大为0.81。然而，当我们对该矩阵进行粗粒化，也就是把前三个状态合并为一个状态a，而最后一个状态转变为一个宏观态b。这样所有的原本三个微观态彼此之间的转移就变成了宏观态a到a内部的转移了。因此，转移概率矩阵也就变成了[math]P_M[/math]，它的EI为1。在这个例子中，可以计算它的[[因果涌现度量]]为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
CE=EI(P_M)-EI(P_m)=1-0.81=0.19\ bits&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即存在着0.19比特的因果涌现。&lt;br /&gt;
&lt;br /&gt;
有时，我们也会根据归一化的EI来计算[[因果涌现度量]]，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ce=Eff(P_M)-Eff(P_m)=1-0.405=0.595&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由此可见，由于归一化的EI消除了系统尺寸的影响，因此因果涌现度量更大。&lt;br /&gt;
&amp;lt;!--[[文件:Example1.png|815x815px|无框|居中]]&lt;br /&gt;
&lt;br /&gt;
上图展示了几种马尔科夫链的转移概率矩阵，其中（a）是确定性高，简并性低，所以整体eff比较高。（b）则是确定性和简并性都比较高，所以eff是0。（c）相比于（a）确定性更低，（d）也是确定性和简并性都较高导致eff较低，它们都可以通过同一种粗粒化策略（将前4个状态合并为一个状态）来得到（e）。此时（e）确定性很高，无简并性，所以（e）的eff比（c）（d）要高。&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==计算EI的源代码==&lt;br /&gt;
&lt;br /&gt;
这是计算一个马尔科夫概率转移矩阵的Python源代码。输入tpm为一个满足行归一化条件的马尔科夫概率转移矩阵，返回的ei_all为其EI值，其余两项分别为'''确定性系数'''和'''简并性系数'''。&lt;br /&gt;
python:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def tpm_ei(tpm, log_base = 2):&lt;br /&gt;
    # marginal distribution of y given x ~ Unifrom Dist&lt;br /&gt;
    puy = tpm.sum(axis=0)&lt;br /&gt;
    n = tpm.shape[0]&lt;br /&gt;
    &lt;br /&gt;
    # replace 0 to a small positive number to avoid log error&lt;br /&gt;
    eps = 1E-10&lt;br /&gt;
    tpm_e = np.where(tpm==0, eps, tpm)&lt;br /&gt;
    puy_e = np.where(tpm==0, eps, puy)&lt;br /&gt;
    &lt;br /&gt;
    # calculate EI of specific x&lt;br /&gt;
    ei_x = (np.log2(n * tpm_e / puy_e) / np.log2(log_base)  * tpm).sum(axis=1)&lt;br /&gt;
    &lt;br /&gt;
    # calculate det and deg&lt;br /&gt;
    det = np.log2(n) + (tpm * np.log2(tpm_e)).sum(axis=1).mean(axis=0)&lt;br /&gt;
    deg = np.log2(n) + (tpm.mean(axis=0) * np.log2(tpm_e.mean(axis=0))).sum()&lt;br /&gt;
    &lt;br /&gt;
    # calculate total EI&lt;br /&gt;
    ei_all = ei_x.mean()&lt;br /&gt;
    return ei_all,det/np.log2(log_base),deg/np.log2(log_base)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=连续变量的EI=&lt;br /&gt;
&lt;br /&gt;
现实中大部分系统都要在连续空间上考虑，所以很有必要将EI的概念拓展到连续系统上。&lt;br /&gt;
&lt;br /&gt;
这种扩展的核心思想是将连续空间中的因果机制简化为一个确定性的函数映射[math]f(X)[/math]再加上一个噪声随机变量[math]\xi[/math]。而且，在下面列举的情形中，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]，即满足高斯分布，这样便可求得EI的解析表达式。对于更一般的情况，尚没有文献进行讨论。&lt;br /&gt;
&lt;br /&gt;
==随机函数映射==&lt;br /&gt;
最初Erik Hoel考虑到了这一点，提出了[[因果几何]]&amp;lt;ref name=Chvykov_causal_geometry /&amp;gt;框架，它不仅率先讨论了随机函数映射的EI计算问题，同时还引入了干预噪音和[[因果几何]]的概念，并定义了EI的局部形式，并将这种形式与[[信息几何]]进行了对照和类比。下面，我们分别从一维函数映射、多维函数映射，和EI的局部形式来分别进行讨论。&lt;br /&gt;
&lt;br /&gt;
===一维函数映射===&lt;br /&gt;
&lt;br /&gt;
首先，我们考虑最简单的情况：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\varepsilon, \varepsilon\sim\mathcal{N}(0,\sigma^2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]x,y\in \mathcal{R}[/math]都是一维实数变量。按照有效信息的定义，我们需要对变量x进行干预，使其满足在其定义域空间上服从均匀分布。如果x的定义域为一个固定的区间，如[a,b]，其中a,b都是实数，那么x的概率密度函数就是[math]1/(b-a)[/math]。然而，当x的定义域为全体实数的时候，区间成为了无穷大，而x的概率密度函数就成为了无穷小。&lt;br /&gt;
&lt;br /&gt;
为了解决这个问题，我们假设x的定义域不是整个实数空间，而是一个足够大的区域：[math][-L/2,L/2][/math]，其中L为该区间的大小。这样，该区域上的均匀分布的密度函数为：[math]1/L[/math]。我们希望当[math]L\rightarrow +\infty[/math]的时候，EI能够收敛到一个有限的数。然而，实际的EI是一个和x定义域大小有关的量，所以EI是参数L的函数。这一点可以从EI的定义中看出：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
EI&amp;amp;=I(y;x|do(x\sim U[-L/2,L/2]))\\&lt;br /&gt;
&amp;amp;=\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln\frac{p(y|x)}{p(y)}dydx\\ &lt;br /&gt;
&amp;amp;=\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y|x)dydx -\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y)dydx&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|4}}}}&lt;br /&gt;
&lt;br /&gt;
这里，[math]p(y|x)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)[/math]为给定x的条件下，y的条件概率密度函数。由于[math]\varepsilon[/math]服从均值为0，方差为[math]\sigma^2[/math]的正态分布，所以[math]y=f(x)+\varepsilon[/math]就服从均值为[math]f(x)[/math]，方差为[math]\sigma^2[/math]的正态分布。&lt;br /&gt;
&lt;br /&gt;
y的积分区间为：[math]f([-\frac{L}{L},\frac{L}{2}])[/math]，即将x的定义域[math][-\frac{L}{2},\frac{L}{2}][/math]经过f的映射，形成y上的区间范围。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p(y)=\int_{-\frac{L}{2}}^{\frac{L}{2}}p(x_0)p(y|x_0)dx_0=\int_{-\frac{L}{2}}^{\frac{L}{2}}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x_0))^2}{\sigma^2}\right)dx_0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为y的概率密度函数，它也可以由联合概率密度函数[math]p(x,y)=p(x)p(y|x)[/math]对x进行积分得到。为了后续叙述方便，我们将x重新命名为[math]x_0[/math]，从而以区分出现在{{EquationNote|4}}中的其它x变量。&lt;br /&gt;
&lt;br /&gt;
由于L很大，所以区间[math][-\frac{L}{2},\frac{L}{2}][/math]很大，进而假设区间[math]f([-\frac{L}{L},\frac{L}{2}])[/math]也很大。这就使得，上述积分的积分上下界可以近似取到无穷大，也就有{{EquationNote|4}}中的第一项为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y|x)dydx&amp;amp;\approx \int_{-\infty}^{\infty}\int_{-\infty}^{\infty}p(x)p(y|x)\ln p(y|x)dydx\\&lt;br /&gt;
&amp;amp;=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)\ln\left[\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x))^2}{\sigma^2}\right)\right]dydx\\&lt;br /&gt;
&amp;amp;=\ln(\frac{1}{\sigma\cdot\sqrt{2\pi e}})&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，e为自然对数的底，最后一个等式是根据高斯分布函数的Shannon熵公式计算得出的。&lt;br /&gt;
&lt;br /&gt;
然而，要计算第二项，即使使用了积分区间为无穷大这个条件，仍然很难计算得出结果，为此，我们对函数[math]f(x_0)[/math]进行一阶泰勒展开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f(x_0)\approx f(x)+f'(x)(x_0-x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]x\in[-\frac{L}{2},\frac{L}{2}][/math]是x定义域上的任意一点。&lt;br /&gt;
&lt;br /&gt;
因此，p(y)可以被近似计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p(y)=\int_{-\frac{L}{2}}^{\frac{L}{2}}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x_0))^2}{\sigma^2}\right)dx_0\approx \int_{-\infty}^{\infty}\frac{1}{L}\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(y-f(x)-f'(x)(x_0-x))^2}{\sigma^2}\right)dx_0\approx \frac{1}{L}\cdot\frac{1}{f'(x)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
值得注意的是，在这一步中，我们不仅将[math]f(x_0)[/math]近似为一个线性函数，同时还引入了一个假设，即p(y)的结果与y无关，而与[math]x[/math]有关。我们知道在对EI计算的第二项中包含着对x的积分，因此这一近似也就意味着不同x处的p(y)近似是不同的。&lt;br /&gt;
&lt;br /&gt;
这样，{{EquationNote|4}}中的第二项近似为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\int_{-\frac{L}{2}}^{\frac{L}{2}}\int_{f([-\frac{L}{2},\frac{L}{2}])}p(x)p(y|x)\ln p(y)dydx\approx -\ln L - \frac{1}{L}\int_{-\frac{L}{2}}^{\frac{L}{2}}\ln f'(x)dx&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最终的EI可以由下式近似计算：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\approx \ln(\frac{L}{\sqrt{2\pi e}})+\frac{1}{2L}\int_{-\frac{L}{2}}^{\frac{L}{2}}\ln \left(\frac{f'(x)}{\sigma}\right)^2dx&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--如果同时考虑两种噪声，并且如果干预空间大小为&amp;lt;math&amp;gt;L&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;\epsilon\ll 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;，EI数学形式如下所示&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;EI\approx -\frac{1}{2}\int_{-L/2}^{L/2}\ln\left[\left(\frac{\epsilon}{f'(x)}\right)^2+\delta^2\right]dx.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;分别表示观测噪音和干预噪音的大小。--&amp;gt;&lt;br /&gt;
与上述推导类似的推导首见于Hoel2013的文章中&amp;lt;ref name=hoel_2013 /&amp;gt;，并在[[神经信息压缩器]]一文中&amp;lt;ref name=zhang_nis /&amp;gt;中进行了详细讨论。&lt;br /&gt;
&lt;br /&gt;
===高维情况===&lt;br /&gt;
&lt;br /&gt;
我们可以把上述对一维变量的EI计算推广到更一般的n维情景。即：&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{y}=f(\mathbf{x})+\xi,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|5}}}}&lt;br /&gt;
&lt;br /&gt;
其中，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]，&amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;是高斯噪声&amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt;的协方差矩阵。&lt;br /&gt;
首先，我们将[math]\mathbf{x}[/math]干预成&amp;lt;math&amp;gt;[-L/2，L/2]^n\subset\mathcal{R}^n&amp;lt;/math&amp;gt;上的均匀分布，&amp;lt;math&amp;gt;[-L/2，L/2]^n&amp;lt;/math&amp;gt;表示n维空间中的超立方体，我们假设&amp;lt;math&amp;gt;\mathbf{y}\in\mathcal{R}^m&amp;lt;/math&amp;gt;，其中&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;是正整数。只存在观测噪声的情况下，EI可以推广为以下形式：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;EI\approx \ln\left(\frac{L^n}{(2\pi e)^{m/2}}\right)+\frac{1}{L^n}\int_{-[\frac{L}{2},\frac{L}{2}]^n}\ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|6}}}}&lt;br /&gt;
&lt;br /&gt;
其中，&amp;lt;math&amp;gt;|\cdot|&amp;lt;/math&amp;gt;是绝对值运算，&amp;lt;math&amp;gt;\det&amp;lt;/math&amp;gt;是行列式。&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
为了将信息几何推广到具有干预噪声和观测噪声的情况，需要引入一个新的维度为&amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt;的中间变量&amp;lt;math&amp;gt;\theta\subset\mathcal{R}^l&amp;lt;/math&amp;gt;，使得我们不能通过直接干预&amp;lt;math&amp;gt;\mathbf{x}&amp;lt;/math&amp;gt;来控制&amp;lt;math&amp;gt;\mathbf{y}&amp;lt;/math&amp;gt;。相反，我们可以干预&amp;lt;math&amp;gt;\mathbf{x}&amp;lt;/math&amp;gt;以影响&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;并间接影响&amp;lt;math&amp;gt;\mathbf{y}&amp;lt;/math&amp;gt;。因此，这三个变量形成了一个马尔可夫链：&amp;lt;math&amp;gt;\mathbf{x}\to\theta\to\mathbf{y}&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
在这种情况下，可以获得两个流形：效应流形&amp;lt;math&amp;gt;\mathcal{M}_E=\{p(\mathbf{y}|\theta)\}_{\theta}&amp;lt;/math&amp;gt;，度量为&amp;lt;math&amp;gt;g_{\mu\nu}=-\mathbb{E}_{p(\mathbf{y}|\theta)}\partial_{\mu}\partial_{\nu}\ln p(\mathbf{y}|\theta)&amp;lt;/math&amp;gt;；干预流形&amp;lt;math&amp;gt;\mathcal{M}_I=\{\tilde{q}(\mathbf{x}|\theta)\}_{\theta\in \Theta}&amp;lt;/math&amp;gt;，度量为&amp;lt;math&amp;gt;h_{\mu\nu}=-\mathbb{E}_{\tilde{q}(\mathbf{x}|\theta)}\partial_{\mu}\partial_{\nu}\ln \tilde{q}(\mathbf{x}|\theta)&amp;lt;/math&amp;gt;。其中&amp;lt;math&amp;gt;\tilde{q}\equiv \frac{q(\theta|\mathbf{x})}{\int q(\theta|\mathbf{x})d\mathbf{x}}&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;\partial_{\mu}=\partial/\partial \theta_{\mu}&amp;lt;/math&amp;gt;。效应和干预两个流形合在一起称为因果几何。&lt;br /&gt;
&lt;br /&gt;
因果几何的EI计算公式为:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI_g=\ln\frac{V_I}{(2\pi e)^{n/2}}-\frac{1}{2V_I}\int_\Theta\sqrt{|\det(h_{\mu\nu})|} \ln\left|\det\left( I_n+\frac{h_{\mu\nu}}{g_{\mu\nu}}\right)\right|d^l\theta,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==维度平均的EI==&lt;br /&gt;
&lt;br /&gt;
在离散状态的系统中，当我们比较不同尺度系统的时候，可以直接计算EI的差异也可以计算归一化的EI差异。归一化的EI是除以[math]\log N[/math]，这里[math]N=\#(\mathcal{X})[/math]为离散状态空间[math]\mathcal{X}[/math]中的元素个数。&lt;br /&gt;
&lt;br /&gt;
然而，在针对连续变量进行扩展的时候，如果使用原始的EI，那么就会出现不合理的情况。首先，如公式{{EquationNote|6}}所示，EI的计算公式中包含着[math]\ln L^n[/math]项。由于L为一个很大的正数，因而EI的计算结果将会受到L的严重影响。其次，如果计算归一化的EI，即Eff，那么会遇到一个问题是，对于连续变量来说，其状态空间的元素个数为无穷多个，如果直接使用，势必会引入无穷大量。一种解决办法是将空间的体积视作个数N，因此应该除以归一化变量为：[math]n \ln L[/math]，由此可见它是正比于n和ln L的，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Eff=\frac{EI}{\ln L^n}\approx 1-\frac{m\ln\left(2\pi e\right)}{2n \ln L}+\frac{1}{n\ln L}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然而，在这个式子中，仍然包含着L项，因而也会对Eff造成很大的影响。并且，当我们比较微观（n维）和宏观（m维，且m&amp;lt;n）两个维度的Eff时，即计算归一化的因果涌现的时候，L并不能消掉。&lt;br /&gt;
&lt;br /&gt;
看来，连续变量系统的归一化问题并不能简单平移离散变量的结果。&lt;br /&gt;
&lt;br /&gt;
在[[神经信息压缩器]]（Neural information squeezer, NIS）的框架被提出时&amp;lt;ref name=zhang_nis /&amp;gt;，作者们发明了另一种对连续变量的有效信息进行归一化方式，即用状态空间维数来归一化EI，从而解决连续状态变量上的EI比较问题，这一指标被称为'''维度平均的有效信息'''（Dimension Averaged Effective Information，简称dEI）。其描述为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}\equiv\frac{EI}{n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]n[/math]为状态空间的维度。可以证明，在离散的状态空间中，'''维度平均的EI'''和'''有效性'''指标（Eff）实际上是等价的。关于连续变量上的EI，我们将在下文进一步详述。&lt;br /&gt;
&lt;br /&gt;
对于n维迭代动力系统来说，首先，[math]\mathbf{y}[/math]和[math]\mathbf{x}[/math]是同一维度的变量，因此[math]m=n[/math]，因而：将公式{{EquationNote|6}}代入维度平均EI，得到：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}=\frac{EI}{n}\approx \ln L - \frac{1}{2}\ln (2\pi e)+\frac{1}{n}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
虽然L仍然没有消失，但是当我们计算'''维度平均的因果涌现'''的时候，即假设我们可以将n维的状态变量[math]\mathbf{x}_t[/math]投影到一个N维的宏观态变量[math]\mathbf{X}_t[/math]，以及相对应的宏观动力学(F)，和噪声的协方差[math]\Sigma'[/math]则宏观动力学的维度平均EI与微观动力学的维度平均EI之差为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta \mathcal{J}\equiv \mathcal{J_F}-\mathcal{J_f}=\frac{EI_F}{N}-\frac{EI_f}{n}\approx \frac{1}{N}\int_{-[\frac{L}{2},\frac{L}{2}]^N}\frac{1}{L^N}\cdot \ln \left|\det\left(\frac{\partial_\mathbf{X} F(\mathbf{X})}{\Sigma'^{1/2}}\right)\right| dX - \frac{1}{n}\int_{[-\frac{L}{2},\frac{L}{2}]^n}\frac{1}{L^n}\cdot \ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right| d\mathbf{x}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
注意，上式中的积分可以写成均匀分布下的期望，即[math]\int_{[-\frac{L}{2},\frac{L}{2}]}\frac{1}{L^n}\cdot=\mathbb{E}_{\mathbf{x}\sim \mathcal{U}[-\frac{L}{2},\frac{L}{2}]^n}\cdot[/math]，继而上式化为：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta \mathcal{J}\approx \frac{1}{N}\mathbb{E}_{X\sim\mathcal{U}[-\frac{L}{2},\frac{L}{2}]^N}\ln \left|\det\left(\frac{\partial_\mathbf{X} F(\mathbf{X})}{\Sigma'^{1/2}}\right)\right| - \frac{1}{n}\mathbb{E}_{\mathbf{x}\sim\mathcal{U}[-\frac{L}{2},\frac{L}{2}]^n}\ln\left|\det\left(\frac{\partial_\mathbf{x} f(\mathbf{x})}{\Sigma^{1/2}}\right)\right|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里[math]\mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)[/math]表示立方体[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上的均匀分布。由此可见，尽管在期望中仍然隐含地包含L，但该式中所有显含L的项就都被消失了。在实际数值计算的时候，期望的计算可以表现为在[math][-\frac{L}{2},\frac{L}{2}]^n[/math]上多个采样取平均，因而也是与L的大小无关的。这就展示出来引入维度平均EI的一定的合理性。&lt;br /&gt;
&lt;br /&gt;
==随机迭代系统==&lt;br /&gt;
&lt;br /&gt;
我们可以把上述结论，推广到线性迭代动力系统中，也就是对于形如&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x_{t+1}=Ax_t+\varepsilon_t,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
的迭代系统，其中，[math]A\in\mathcal{R}^{n\times n}[/math]是尺度为n*n的满秩的方阵，代表线性迭代系统中的动力学系数, [math]\varepsilon_t\sim\mathcal{N}(0,\Sigma)[/math]为n维的高斯噪声，满足0均值，协方差为[math]\Sigma[/math]的正态分布，其中，协方差矩阵[math]\Sigma[/math]也是满秩的。&lt;br /&gt;
&lt;br /&gt;
可以看出这一迭代系统可以看做是公式{{EquationNote|5}}的特例，其中[math]y[/math]对应这里的[math]x_{t+1}[/math]，[math]f(x_t)[/math]即是[math]A x_t[/math]。&lt;br /&gt;
&lt;br /&gt;
为定义EI，设干预空间大小为&amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;，对于单步的映射我们可以得到维度平均有效信息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}(A,\Sigma)\equiv \frac{EI(A,\Sigma)}{n}=\frac{1}{n}\ln\displaystyle\frac{|\det(A)|L^n}{(2\pi e)^\frac{n}{2}\displaystyle \det(\Sigma)^\frac{1}{2}}=\ln\displaystyle\frac{|\det(A)|^\frac{1}{n}L}{(2\pi e)^\frac{1}{2}\displaystyle \det(\Sigma)^\frac{1}{2n}}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
随机迭代系统的有效信息可以分解确定性和简并性为两项，&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}=\mathcal{J}_1-\mathcal{J}_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中确定性&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}_1\equiv-\left&amp;lt;H(p(x_{t+1}|x_t))\right&amp;gt;=-\ln\left[(2\pi e)^\frac{n}{2}\det(\Sigma)^\frac{1}{2}\right]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
描述系统前一时刻状态已知的情况下，后一时刻的随机性，确定性越强，随机性越小，越容易对系统未来趋势进行预测；&lt;br /&gt;
&lt;br /&gt;
简并性:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\mathcal{J}_2\equiv-H(\tilde{x}_{t+1}))=-\ln\left(|\det(A)|L^n\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
描述后一时刻已知的情况下，对前一时刻的可追溯性，简并性越弱，越容易推断系统以往的演化路径。其中，[math]\tilde{x}_{t+1}[/math]是保持因果机制不变，经过干预以后得到的新的[math]x_{t+1}[/math]变量。&lt;br /&gt;
&lt;br /&gt;
确定性越强，简并性越弱，有效信息则会越大，因果效应越强。&lt;br /&gt;
&lt;br /&gt;
宏观有效信息与微观有效信息做差之后就可以得到随即迭代系统的因果涌现为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta\mathcal{J}=\ln\frac{|\det(WAW^{\dagger})|^{1/N}}{|\det(A)|^{1/n}}-\ln\frac{|\det(W\Sigma W^T)|^{\frac{1}{2N}}}{|\det(\Sigma)|^{\frac{1}{2n}}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]W[/math]为粗粒化矩阵，它的阶数为n*m，m为宏观状态空间的维度，它的作用是把任意的微观态[math]x_t[/math]映射为宏观态[math]y_t[/math]。[math]W^{\dagger}[/math]为W的伪逆运算。式中第一项是由确定性引发的涌现，简称'''确定性涌现'''(Determinism Emergence)，第二项为简并性引发的涌现，简称'''简并性涌现'''。更详细的内容参看[[随机迭代系统的因果涌现]]。&lt;br /&gt;
&lt;br /&gt;
==前馈神经网络==&lt;br /&gt;
针对复杂系统自动建模任务，我们往往使用神经网络来建模系统动力学。具体的，对于前馈神经网络来说，[[张江]]等人推导出了前馈神经网络有效信息的计算公式&amp;lt;ref name=zhang_nis /&amp;gt;，其中神经网络的输入是&amp;lt;math&amp;gt;x(x_1,...,x_n)&amp;lt;/math&amp;gt;，输出是&amp;lt;math&amp;gt;y(y_1,...,y_n)&amp;lt;/math&amp;gt;，并且满足&amp;lt;math&amp;gt;y=f(x)&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;是由神经网络实现的确定性映射。然而，根据公式{{EquationNote|5}}，映射中必须包含噪声才能够体现不确定性。&lt;br /&gt;
&lt;br /&gt;
因而，在神经网络中，我们假设神经网络从输入到输出的计算也是不确定性的，即也符合公式{{EquationNote|5}}：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\xi,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]\xi\sim \mathcal{N}(0,\Sigma)[/math]为一高斯噪声，且[math]\Sigma=\mathrm{diag}(\sigma_1,\sigma_2,\cdots,\sigma_n)[/math]，这里[math]\sigma_i[/math]为第i个维度的最小平方误差（Mean Square Error，简称MSE误差）。也就是说，我们假设从x到y的神经网络映射实际上满足一个均值为[math]f(x)[/math]，协方差为[math]\Sigma[/math]的条件高斯分布，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Pr(y|x)\sim \mathcal{N}(f(x),\Sigma)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
由此，套用高维映射一般情况下的结论，我们可以给出神经网络有效信息的一般计算公式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{gathered}EI(f)=I(do(x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n));y)\approx-\frac{n+n\ln(2\pi)+\sum_{i=1}^n\ln\sigma_i^2}2+n\ln(2L)+\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{x}f(x)))|)\end{gathered} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;\mathcal{U}\left(\left[-L/2, L/2\right]^n\right) &amp;lt;/math&amp;gt;表示范围在&amp;lt;math&amp;gt;\left[-L/2 ,L/2\right]^n&amp;lt;/math&amp;gt;上的&amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt;维均匀分布，&amp;lt;math&amp;gt;\det &amp;lt;/math&amp;gt;表示行列式。维度平均EI为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{gathered}&lt;br /&gt;
\mathcal{J}\equiv \frac{EI(f)}{n}\approx -\frac{\ln(2\pi e)}{2}-\frac{\sum_{i=1}^n\ln\sigma_i}{n}+\ln(2L)+\frac{1}{n}\cdot\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{x}f(x)))|)&lt;br /&gt;
\end{gathered} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果设微观的动力学可以用神经网络f来拟合，宏观动力学则可以用F来拟合，则因果涌现可以由下式计算：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{gathered}&lt;br /&gt;
\mathcal{\Delta J}\equiv \frac{EI(F)}{m}-\frac{EI(f)}{n}\approx \frac{\sum_{i=1}^n\ln\sigma_i}{n}-\frac{\sum_{i=1}^m\ln\sigma'_i}{m}+\frac{1}{m}\cdot\mathbb{E}_{X\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^n)}(\ln|\det(\partial_{X}F(X)))|)-\frac{1}{n}\cdot\mathbb{E}_{x\sim \mathcal{U}([-\frac{L}{2},\frac{L}{2}]^m)}(\ln|\det(\partial_{x}f(x)))|)&lt;br /&gt;
\end{gathered} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]m[/math]为宏观态维度，[math]\sigma'_i[/math]为第i个宏观维度的平均平方误差（MSE），这一误差可以通过反向传播算法计算的宏观态[math]X_i[/math]的梯度计算得出。&lt;br /&gt;
&lt;br /&gt;
注意，上述结论都要求：&amp;lt;math&amp;gt;\partial_{x}f(x)&amp;lt;/math&amp;gt;不为0，而对于所有的&amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;，&amp;lt;math&amp;gt;\partial_{x}f(x)&amp;lt;/math&amp;gt;处处为0时，我们得到： &lt;br /&gt;
&amp;lt;math&amp;gt;\begin{gathered}EI(f)\approx\end{gathered}0&amp;lt;/math&amp;gt;。对于更一般的情形，则需要考虑矩阵不满秩的情况，请参考[[神经网络的有效信息]]。&lt;br /&gt;
&lt;br /&gt;
== 连续系统EI的源代码 ==&lt;br /&gt;
可逆神经网络下的数值解以及随机迭代系统的解析解都可以给出计算方法。&lt;br /&gt;
&lt;br /&gt;
对于一般的神经网络，它可看做是从输入X到输出Y的一种不确定的函数映射：&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y=f(x)+\xi&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中x的维度为input_size，y的维度为output_size，[math]\xi[/math]为一高斯分布，其协方差矩阵为：[math]\Sigma=\mathrm{diag}(\sigma_1,\sigma_2,\cdots,\sigma_n)[/math]，这里，[math]\sigma_i[/math]为该神经网络第i个维度的均方误差（MSE）。该矩阵的逆记为sigmas_matrix。映射函数f记为func，则可以用下面的代码计算该神经网络的EI。该算法的基本思想是利用蒙特卡洛方法计算公式{{EquationNote|6}}的积分。&lt;br /&gt;
&lt;br /&gt;
* 输入变量：&lt;br /&gt;
神经网络的输入维度（input_size）输出维数（output_size）、输出变量视为高斯分布后的协方差矩阵的逆（sigmas_matrix）、映射函数（func）、干预区间大小（L的取值）、以及蒙特卡罗积分的样本数（num_samples）。&lt;br /&gt;
&lt;br /&gt;
* 输出变量：&lt;br /&gt;
&lt;br /&gt;
维度平均EI（d_EI）、EI系数（eff）、EI值（EI）、确定性（term1）、简并性（term2）和[math]\ln L[/math]（-np.log(rho)）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def approx_ei(input_size, output_size, sigmas_matrix, func, num_samples, L, easy=True, device=None):&lt;br /&gt;
&lt;br /&gt;
    rho=1/(2*L)**input_size #the density of X even distribution&lt;br /&gt;
    &lt;br /&gt;
    #the first term of EI, the entropy of a gaussian distribution&lt;br /&gt;
    #sigmas_matrix_np=sigmas_matrix.cpu() if use_cuda else sigmas_matrix&lt;br /&gt;
    dett=1.0&lt;br /&gt;
    if easy:&lt;br /&gt;
        dd = torch.diag(sigmas_matrix)&lt;br /&gt;
        dett = torch.log(dd).sum()&lt;br /&gt;
    else:&lt;br /&gt;
        #dett = np.log(np.linalg.det(sigmas_matrix_np))&lt;br /&gt;
        dett = torch.log(torch.linalg.det(sigmas_matrix))&lt;br /&gt;
    term1 = - (output_size + output_size * np.log(2*np.pi) + dett)/2 &lt;br /&gt;
    &lt;br /&gt;
    #sampling x on the space [-L,L]^n, n is the number of samples&lt;br /&gt;
    xx=L*2*(torch.rand(num_samples, input_size, device=sigmas_matrix.device)-1/2)&lt;br /&gt;
    &lt;br /&gt;
    dets = 0&lt;br /&gt;
    logdets = 0&lt;br /&gt;
    &lt;br /&gt;
    #iterate all samples of x&lt;br /&gt;
    for i in range(xx.size()[0]):&lt;br /&gt;
        jac=jacobian(func, xx[i,:]) #use pytorch's jacobian function to obtain jacobian matrix&lt;br /&gt;
        det=torch.abs(torch.det(jac)) #calculate the determinate of the jacobian matrix&lt;br /&gt;
        dets += det.item()&lt;br /&gt;
        if det!=0:&lt;br /&gt;
            logdets+=torch.log(det).item() #log jacobian&lt;br /&gt;
        else:&lt;br /&gt;
            #if det==0 then, it becomes a gaussian integration&lt;br /&gt;
            logdet = -(output_size+output_size*np.log(2*np.pi)+dett)&lt;br /&gt;
            logdets+=logdet.item()&lt;br /&gt;
    &lt;br /&gt;
    int_jacobian = logdets / xx.size()[0] #take average of log jacobian&lt;br /&gt;
    &lt;br /&gt;
    term2 = -np.log(rho) + int_jacobian # derive the 2nd term&lt;br /&gt;
    &lt;br /&gt;
    if dets==0:&lt;br /&gt;
        term2 = - term1&lt;br /&gt;
    EI = max(term1 + term2, 0)&lt;br /&gt;
    if torch.is_tensor(EI):&lt;br /&gt;
        EI = EI.item()&lt;br /&gt;
    eff = -EI / np.log(rho)&lt;br /&gt;
    d_EI = EI/output_size&lt;br /&gt;
    &lt;br /&gt;
    return d_EI, eff, EI, term1, term2, -np.log(rho)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;对于随机迭代系统，由于是解析解，相对会简单许多。既可以直接计算，也可以作为上述神经网络计算结果的对照。输入的变量分别为参数矩阵和协方差矩阵。&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def EI_calculate_SIS(A,Sigma):&lt;br /&gt;
    n=A.shape[0]&lt;br /&gt;
    return math.log(abs(sl.det(A))/(np.sqrt(sl.det(Sigma))*math.pow(2*np.pi*np.e,n/2)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=EI与其它相关主题=&lt;br /&gt;
==EI与整合信息论==&lt;br /&gt;
&lt;br /&gt;
有效信息这一指标最早出现在文献Tononi等人(2003)的文章中&amp;lt;ref name=tononi_2003 /&amp;gt;，在这篇文章中，作者们定义了[[整合信息能力]]这一指标，并建立了[[整合信息理论]]，这一理论后来演化成意识理论的一个重要分支。而[[整合信息能力]]这一指标的定义是以有效信息为基础的。&lt;br /&gt;
&lt;br /&gt;
===EI与Φ===&lt;br /&gt;
整合信息能力（或者叫整合程度）&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;，可以被定义为系统的任意一个二划分两部分之间相互影响的有效信息最小值。假如系统是X，S是X的一个子集，它被划分为两个部分，分别是A和B。那么，A、B之间以及它们跟X中其余的部分都存在着相互作用和因果关系。&lt;br /&gt;
&lt;br /&gt;
[[文件:OriginalEI.png|350x350px|整合信息论中的划分|替代=|缩略图]]&lt;br /&gt;
&lt;br /&gt;
这时，我们可以度量这些因果关系的强弱。首先，我们来计算从A到B的有效信息。即干预A，使其服从最大熵分布，然后度量A和B之间的互信息：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(A\rightarrow B) = I(A^{H^{max}}: B)  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里&amp;lt;math&amp;gt;A^{H^{max}}&amp;lt;/math&amp;gt;表示A上的最大熵分布，也就是前文中的均匀分布。该式子中没有明确表示，但实际上暗含了一种从A到B的因果机制，即[math]Pr(B|A)[/math]。它在干预中始终保持不变。这样，如果A的不同状态会导致B有很不一样的变化，这个EI值会很高；反之，如果无论A怎么变，B都受到很少的影响，那么EI就会很低。显然，这种度量是有方向的，A对B的EI和B对A的EI可以很不同。我们可以把这两个方向的EI加在一起，得到S在某一个划分下的EI大小。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI(A\leftrightarrow B) = EI(A\rightarrow B) + EI(B\rightarrow A)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
遍历各种划分，如果存在某一个划分S，使得EI为0，说明这个S可以被看做是两个因果独立的部分，所以整合程度也应该是0。从这种特殊例子中我们可以看出，我们应该关注所有划分中有效信息最小的那个。当然，不同划分会导致A和B的状态空间就不一样，所以应该做一个归一化处理，即除以A和B最大熵值中较小的那一个。于是，我们可以有一个最小信息划分（minimum information bipartition，MIB）。整合程度&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;定义如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Phi(S) = EI(MIB(S)) &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这就是[[整合信息能力]]与有效信息的关系。&lt;br /&gt;
&lt;br /&gt;
===区别===&lt;br /&gt;
&lt;br /&gt;
值得注意的是，与马尔科夫链的EI计算不同，这里的EI更多衡量的是系统中两个部分彼此之间的因果联系。而马尔科夫链的EI衡量的是同一个系统在不同两个时刻之间的因果关联强度。&lt;br /&gt;
&lt;br /&gt;
==EI与其它因果度量指标==&lt;br /&gt;
&lt;br /&gt;
EI是一种度量因果机制中因果变量的因果联系强弱的一种指标。而在EI提出之前，已有多个因果度量指标被提出了。那么，EI和这些因果度量指标之间存在着什么样的联系呢？事实上，正如Comolatti与Hoel在2022年的文章中所指出的，包括EI在内的这些因果度量指标都可以统一表达为两个基本要素的组合&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;Comolatti, R., &amp;amp; Hoel, E. (2022). Causal emergence is widespread across measures of causation. ''arXiv preprint arXiv:2202.01854''.&amp;lt;/ref&amp;gt;。这两个基本要素被称为“因果元语”（Causal Primatives），分别代表了因果关系中的'''充分性'''和'''必要性'''。&lt;br /&gt;
&lt;br /&gt;
=== 因果元语的定义 ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
&lt;br /&gt;
\text{充分性：}~~~&amp;amp;suff(e,c) = P(e|c) \\&lt;br /&gt;
&lt;br /&gt;
\text{必要性：}~~~&amp;amp;nec(e,c) = 1 - P(e|C \backslash c)&lt;br /&gt;
&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;和&amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;分别表示因事件（cause）和果事件（effect），&amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;表示因事件的全部集合，&amp;lt;math&amp;gt;C \backslash c&amp;lt;/math&amp;gt;则为因事件&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;的补集，即&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;之外的事件，也可记作&amp;lt;math&amp;gt;\lnot c&amp;lt;/math&amp;gt;。'''充分性'''表明当因发生时，果发生的概率，当&amp;lt;math&amp;gt;suff = 1&amp;lt;/math&amp;gt;时，因发生确定导致果发生；而'''必要性'''则衡量当因不发生时，果也不发生的概率；当&amp;lt;math&amp;gt;nec = 1&amp;lt;/math&amp;gt;时，因不发生则果一定不发生。&lt;br /&gt;
&lt;br /&gt;
有些因果指标中的必要性表现为以下的变型形式，在此也给出定义：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
\text{必要性}'&lt;br /&gt;
 \text{：}~~~nec'(e) = 1 - P(e|C)&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
根据定义，当&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;为极小概率事件时，&amp;lt;math&amp;gt;nec(e,c) \approx nec'(e)&amp;lt;/math&amp;gt;。当&amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;为连续状态空间时，可认为两者等价。&lt;br /&gt;
&lt;br /&gt;
注意：&amp;lt;math&amp;gt;nec'(e)&amp;lt;/math&amp;gt;的定义与文献&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;中定义的&amp;lt;math&amp;gt;nec^\dagger(e) = P(e|C)&amp;lt;/math&amp;gt;不同，两者关系为&amp;lt;math&amp;gt;net'(e) = 1 - nec^\dagger(e)&amp;lt;/math&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 因果元语与确定性和简并性 ===&lt;br /&gt;
如前所述，EI可被分解为确定性与简并性两项，这两项分别对应充分性和必要性的因果元语表达：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
determinism &amp;amp;= \sum_{e \in E, c \in C}{P(e,c) det(e,c)}, ~~ \text{where} ~~ &amp;amp;det(e,c) &amp;amp;= 1 - \frac{\log_2{\frac{1}{suff(e,c)}}}{\log_2{N}} \\&lt;br /&gt;
degeneracy &amp;amp;= \sum_{e \in E}{P(e|c) deg(e)}, ~~ \text{where} ~~ &amp;amp;deg(e) &amp;amp;= 1 - \frac{\log_2{\frac{1}{1 - nec'(e)}}}{\log_2{N}}&lt;br /&gt;
\end{aligned}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以看到，充分性和确定性之间，以及必要性和简并性之间存在单调映射关系。充分性越高，确定性也越高；必要性越高，简并性则越小。&lt;br /&gt;
&lt;br /&gt;
=== 因果度量指标的因果元语表示 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
因果度量指标的因果元语表现形式&lt;br /&gt;
!因果指标&lt;br /&gt;
!概率定义&lt;br /&gt;
!因果元语定义&lt;br /&gt;
!参考文献&lt;br /&gt;
|-&lt;br /&gt;
|有效信息EI&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\log_2{\frac{P(e|c)}{P(e|C)}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\log_2\frac{suff}{1 - nec'}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;hoel_2013&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Galton度量&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(c)P(C\backslash c)(P(e|c) - P(e|C\backslash c))&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(c)P(C\backslash c)(suff + nec - 1)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref&amp;gt;Fitelson, B., &amp;amp; Hitchcock, C. (2011). ''Probabilistic measures of causal strength'' (pp. 600-627). na.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Suppes度量&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(e|c) - P(e|C)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
suff + nec' - 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref&amp;gt;Suppes, P. (1973). A probabilistic theory of causality. ''British Journal for the Philosophy of Science'', ''24''(4).&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Eells度量(等同于Judea Pearl的充要概率PNS)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
P(e|c) - P(e|C\backslash c)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
suff + nec - 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Eells, E. (1991). ''Probabilistic causality'' (Vol. 1). Cambridge University Press.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Cheng度量(等同于Judea Pearl的充分概率PS)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{P(e|c) - P(e|C\backslash c)}{1 - P(e|C\backslash c)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{suff + nec - 1}{nec}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Cheng, P. W., &amp;amp; Novick, L. R. (1991). Causes versus enabling conditions. ''Cognition'', ''40''(1-2), 83-120.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Lewis度量(等同于Judea Pearl的必要概率PN)&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{P(e|c) - P(e|C\backslash c)}{P(e|c)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{suff + nec - 1}{suff}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;ref name=&amp;quot;pearl_causality&amp;quot; /&amp;gt;&amp;lt;ref&amp;gt;Lewis, D. (1973). Causation. ''The journal of philosophy'', ''70''(17), 556-567.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==EI与动力学可逆性==&lt;br /&gt;
正如示例{{EquationNote|example}}中的马尔科夫链所示，当概率转移矩阵呈现为一种[[排列置换矩阵]]（Permutation matrix）的时候，EI会更大。&lt;br /&gt;
&lt;br /&gt;
可以证明，[[排列置换矩阵]]是唯一一种能同时满足如下两个条件的矩阵：&lt;br /&gt;
&lt;br /&gt;
1、矩阵是可逆的；&lt;br /&gt;
2、矩阵满足马尔科夫链的归一化条件，也就是对于任意的[math]i\in[1,N][/math]来说，[math]|P_i|_1=1[/math]&lt;br /&gt;
&lt;br /&gt;
我们将这一性质称为[[动力学可逆性]]。因此，从某种程度上说，EI衡量的是马尔科夫链的一种[[动力学可逆性]]。&lt;br /&gt;
&lt;br /&gt;
需要注意的是，这里所说的马尔科夫链的[[动力学可逆性]]与通常意义下的[[马尔科夫链的可逆性]]是不等同的。前者的可逆性体现为马尔科夫概率转移矩阵的可逆性，也就是它针对状态空间中的每一个确定性状态的运算都是可逆的，所以也称其为动力学可逆的。但是，文献中通常意义下的可逆的马尔科夫链并不要求转移矩阵是可逆的，而是要以稳态分布为时间反演对称轴，使得在动力学P作用构成的演化下的正向时间形成的状态分布序列和逆向状态分布序列完全相同。&lt;br /&gt;
&lt;br /&gt;
由于[[排列置换矩阵]]过于特殊，我们需要能够衡量一般的马尔科夫概率转移矩阵与排列置换矩阵的靠近程度，以度量其[[近似动力学可逆性]]。在文献&amp;lt;ref name=zhang_reversibility/&amp;gt;中，作者们提出了一种用矩阵的类[[Schatten范数]]来度量一个马尔科夫概率转移矩阵的[[近似动力学可逆性]]的方法，定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Gamma_{\alpha}\equiv \sum_{i=1}^N\sigma_i^{\alpha}=|P|_{\alpha}^{\alpha}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里，[math]|P|_{\alpha}[/math]为矩阵P的[[Schatten范数]]，[math]\Gamma_{\alpha}[/math]为[[近似动力学可逆性]]指标，[math]\sigma_i[/math]为概率转移矩阵P的奇异值，并且按照从大到小的顺序排列，[math]\alpha\in(0,2)[/math]为一个指定的参数，它起到让[math]\Gamma_{\alpha}[/math]能够更多地反映'''确定性'''还是'''简并性'''这样一种权重或倾向性。事实上，不难看出，如果让[math]\alpha\rightarrow 0[/math]，则[math]\Gamma_{\alpha}[/math]就退化成了矩阵P的秩，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
rank(P)=\sum_{i=1}^N\sigma_i^{0}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
而[[矩阵的秩]]衡量的是矩阵P非退化（也就是可逆）的程度，与Degeneracy有着类似的效果。&lt;br /&gt;
&lt;br /&gt;
而当[math]\alpha\rightarrow 2[/math]，则[math]\Gamma_{\alpha}[/math]就退化成了矩阵P的[[Frobinius范数]]的平方，即：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
||P||_F^2=\sum_{i=1}^N\sigma_i^{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
这一指标衡量的是矩阵P的确定性的程度，这是因为只有当矩阵P中的所有行向量都是[[独热向量]]（one-hot）的时候，[math]||P||_F[/math]才会最大，因此它与Determinism有着类似的衡量效果。&lt;br /&gt;
&lt;br /&gt;
所以，当[math]\alpha\in(0,2)[/math]连续变化的时候，[math]\Gamma_{\alpha}[/math]就可以在简并性与确定性二者之间切换了。通常情况下，我们取[math]\alpha=1[/math]，这可以让[math]\Gamma_{\alpha}[/math]能够在确定性与简并性之间达到一种平衡。&lt;br /&gt;
&lt;br /&gt;
在文献&amp;lt;ref name=zhang_reversibility/&amp;gt;中，作者们证明了EI与动力学可逆性[math]\Gamma_{\alpha}[/math]之间存在着一种近似的关系：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
EI\sim \log\Gamma_{\alpha}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
关于[[马尔科夫链的近似动力学可逆性]]的进一步讨论和说明，请参考词条：[[近似动力学可逆性]]，以及论文：&amp;lt;ref name=zhang_reversibility/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EI与JS散度==&lt;br /&gt;
根据{{EquationNote|2}}的表达式，我们知道，EI实际上是一种广义的[[JS散度]]，即[[Jensen-Shannon divergence]]。&lt;br /&gt;
&lt;br /&gt;
所谓的[[JS散度]]是一种度量两个定义在同一个支撑集上的概率分布之间差异的指标。设两个定义在支撑集[math]\mathcal{X}[/math]上的概率分布[math]P[/math]和[math]Q[/math]，它们之间的JS散度定义为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
JSD(P||Q)\equiv \frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中，[math]M=\frac{P+Q}{2}=\frac{1}{2}\sum_{x\in\mathcal{X}}\left[P(x)+Q(x)\right][/math]为P和Q的平均分布，[math]D_{KL}[/math]为[[KL散度]]。&lt;br /&gt;
&lt;br /&gt;
与[[KL散度]]相比，[[JS散度]]是一种对称的度量，即[math]JSD(P||Q)=JSD(Q||P)[/math]，而KL散度是非对称的。&lt;br /&gt;
&lt;br /&gt;
可以看出，该式与{{EquationNote|2}}式的相似之处。不难验证，当P和Q都是2维向量，且构成了一个马尔科夫转移矩阵K的时候，K的EI就是P、Q的JS散度。&lt;br /&gt;
&lt;br /&gt;
进一步，在文献&amp;lt;ref name=GJS_divergence&amp;gt;{{cite journal|author=Jianhua Lin|title=Divergence Measures Based on the Shannon Entropy|journal=IEEE TRANSACTIONS ON INFORMATION THEORY|volume=37|issue=1|page=145-151|year=1991}}&amp;lt;/ref&amp;gt;中，作者提出了[[广义的JS散度]]为：&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
JSD_{\pi}(P_1,P_2,\cdots,P_n)\equiv H(\sum_{i=1}^n\pi_iP_i)-\sum_{i=1}^n\pi_i H(P_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
|{{EquationRef|GJSD}}}}&lt;br /&gt;
&lt;br /&gt;
其中，[math]P_i,i\in[1,m][/math]为一组概率分布向量，m为它们的维度，而[math]\pi=(\pi_1,\pi_2,\cdots,\pi_n)[/math]为一组权重，并满足：[math]\pi_i\in[0,1],\forall i\in[1,n][/math]和[math]\sum_{i=1}^n\pi_i=1[/math]。&lt;br /&gt;
&lt;br /&gt;
通过与公式{{EquationNote|tow_terms}}比较，不难发现，当[math]\pi_i=\frac{1}{n}[/math]，则[math]JSD_{\pi}[/math]就退化为EI了。&lt;br /&gt;
&lt;br /&gt;
在文献&amp;lt;ref name=GJSD&amp;gt;{{cite conference|author1=Erik Englesson|author2=Hossein Azizpour|title=Generalized Jensen-Shannon Divergence Loss for Learning with Noisy Labels|conference=35th Conference on Neural Information Processing Systems (NeurIPS 2021)|year=2021}}&amp;lt;/ref&amp;gt;中，作者们讨论了广义JS散度在分类多样性度量方面的应用。因此，EI也可以理解为是对行向量多样化程度的一种度量。&lt;br /&gt;
&lt;br /&gt;
进一步，如果我们将[[Shannon熵]][math]H(P_i)[/math]看做一个函数，则不难验证，H是一个[[凹函数]]，那么公式{{EquationNote|GJSD}}实际上是H函数的[[Jensen差距]]，即[[Jensen Gap]]。关于这一差距的数学性质，包括它的上下界估计，有大量的论文进行讨论&amp;lt;ref name=&amp;quot;Gao et al.&amp;quot;&amp;gt;{{cite journal | last1 = Gao | first1 = Xiang | last2 = Sitharam | first2 = Meera | last3 = Roitberg | first3 = Adrian | year = 2019 | title = Bounds on the Jensen Gap, and Implications for Mean-Concentrated Distributions | journal=The Australian Journal of Mathematical Analysis and Applications | arxiv = 1712.05267 | url = https://ajmaa.org/searchroot/files/pdf/v16n2/v16i2p14.pdf | volume = 16 | issue = 2 }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=参考文献=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=编者推荐=&lt;br /&gt;
下面是一些链接能够帮助读者更好的了解因果涌现的相关信息： &lt;br /&gt;
&lt;br /&gt;
===因果涌现读书会===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[https://pattern.swarma.org/study_group_issue/490 因果涌现读书会第三季第一期：涌现、因果与人工智能]&lt;br /&gt;
&lt;br /&gt;
*[https://pattern.swarma.org/study_group_issue/645 因果涌现读书会第五季第二期：复杂系统中的因果与涌现综述]&lt;br /&gt;
&lt;br /&gt;
===文章推荐===&lt;br /&gt;
*Zhang, J.; Liu, K. [https://www.mdpi.com/1099-4300/25/1/26 Neural Information Squeezer for Causal Emergence]. ''Entropy'' 2023, ''25'', 26.&lt;br /&gt;
*Yuan, B.; Zhang, J. et al. [https://www.mdpi.com/1099-4300/26/2/108 Emergence and Causality in Complex Systems: A Survey of Causal Emergence and Related Quantitative Studies]. ''Entropy'' 2024, ''26'', 108.&lt;br /&gt;
&lt;br /&gt;
===路径推荐===&lt;br /&gt;
*张江老师根据因果涌现读书会第一季梳理的关于因果涌现的学习路径：https://pattern.swarma.org/article/153&lt;br /&gt;
*张江老师根据因果涌现前五季读书会整理的因果涌现入门路径：https://pattern.swarma.org/article/296&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
此词条由[[张江]]编写，[[张江]]、[[袁冰]]、[[刘凯威]]、[[杨明哲]]和[[王志鹏]]整理和审校。&lt;br /&gt;
&lt;br /&gt;
'''本词条内容源自wikipedia及公开资料，遵守 CC3.0协议。'''&lt;br /&gt;
&lt;br /&gt;
[[Category:因果涌现]]&lt;br /&gt;
[[Category:信息论]]&lt;br /&gt;
[[Category:因果度量]]&lt;/div&gt;</summary>
		<author><name>Aceyuan</name></author>
	</entry>
</feed>