项目0:元胞自动机

这只是一个热身运动,以确保您可以编写一些代码,编译,运行,并提交的东西。

模板解决方案:https://docs.google.com/document/d/1XfuSZoOJqSgL_hP7vCQFfOfQAJBNMqMz6Bc9wS3Nxm8/edit?usp=sharing

引用


元胞自动机

在物理学中,你有一个状态宇宙的,你有一些规则更新国家所有。在经典物理学中,规则总是本地(即使在机电,你可以写东西的地方字段)。

如果你的目标是写出一个模型捕获这些简单的原则,元胞自动机是最简单的方法来做到这一点。在元胞自动机有一堆网格点(比如在广场或蜂窝)和你有一些当地的规则更新这些细胞。


格子气自动机

格子气自动机,你有两种颜色(黑色和白色)。你可以把黑色的气体和白色的颜色空间。

我们的状态,然后,将气体和空的空间。

规则然后是:

你应该使用开放边界条件(即顶部和底部不包装)。你必须小心一点的边界。你不想访问内存而不是数组。
编写一个c++代码,这配置快照并将其打印出来。工作在100×100点阵。

存储你的状态
来存储您的状态一个很好的选择
矢量< < int > >状态;

然后你可以intialize呢

state.resize (100);(int i = 0;我< state.size();我+ +){状态[我].resize (100);/ /这下面设置为零。/ /你可能想做一些更漂亮的/ /初始化半黑半白。std::填补(国家[我].begin(),状态(我)指标(),最终0);}

然后,您可以访问[我][j];

随机数
为随机数要使用c++ 11随机数。看看这个堆栈交换条。关于那篇文章,总的原则是:

每个程序调用这些一次

std:: random_device rd;std:: mt19937 mt (rd ());

称之为一次或多次(它很便宜和不重置随机性):

std:: uniform_real_distribution <双> dist (1.0, 10.0);

然后使用

dist(太)

真正的随机数。

你将需要包括# include <随机>与c++编译(即11。化c++ 11)。

熵是衡量“随机”状态。随机状态越多,它应该更多的熵。“气”的状态是随机放置最高熵。
ae各种方式然后测量熵。一种方法是采取一个配置,问是多么容易压缩。如果它然后压缩高效低熵。如果是完全“随机”
然后很难压缩和有很高的一致性。在你生产配置在c++中,继续加载配置使用python,压缩状态,并测量其大小作为时间的函数。这将是我们heurestic熵的状态(如果很无序状态,它应该是难以描述简洁)可以使用

进口gzip gzip.compress (字节(一个“utf - 8”))

在哪里一个是一个长字符串。

运行您的长时间自动机equilbrate看到它。图作为清洁工的函数(其中每个扫描是100 x 100步)。

分级
这个任务的分级方面是提交一个图有扫描的函数以及一系列的快照每500扫描(包括扫描0)。将这些图到你的文档和提交你的文档和代码。
一个图应该如下:
平衡
这张图我使用pylab。请确认你的轴标签。生产您可能希望使用类似快照pylab.matshow (myArray)

这里是(对你的教诲)其他笔记有趣的自动机