我想为人工智能创造一个行星大小的环境。它将模拟一个非常大的世界的地下生活。根据维基百科,地球的表面积为 510,072,000 Km^2,我想创建一个相似比例的正方形,也许更大。我将在每个位上存储一米,其中 0 表示污垢,1 表示污垢墙。
我们先计算一下如何存储这个正方形的单行。一条线是510072000000m,每个字节可以存储8米,所以一条线是59.38GB,整个世界是3.44PB。而且我想在每平方米中至少添加水和熔岩,这将使结果乘以 2。
我需要使用无损数据压缩算法压缩这些信息。我首先使用 7zip 尝试了一种非常直接的方法,然后我尝试了一个较小的世界,其中一行是 6375B。理论上世界应该是6375^2B = 38.76MB,但是当我尝试它时我得到一个155MB的文件,我不知道为什么会有这种差异。但是当我用 7Zip 压缩它时,我得到一个 40.1MB 的文件。这是一个巨大的差异,按照这个比例,我会将 3.44PB 的世界文件转换为 912.21GB 的文件。
我的第一个想法是,为什么我有这么大的文件,而数学告诉我它应该更小?也许问题是代码,也许问题是我在数学上有错误。代码如下:(C#)
// 510072000000m each line = 63759000000B
const long SIZE = 6375;
// Create the new, empty data file.
string fileName = tbFile.Text;
FileStream fs = new FileStream(fileName, FileMode.Create);
// Create the writer for data.
BinaryWriter w = new BinaryWriter(fs);
// Use random numbers to fill the data
Random random = new Random();
// Write data to the file.
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
w.Write(random.Next(0,256));
}
}
w.Close();
fs.Close();
数学是如此基础,以至于如果我做错了什么,我就看不到它。
你能给我什么建议吗?只关注数据压缩,人工智能不是问题,因为我有进化算法的经验,世界不需要是实时的,它可以占用它需要的所有时间。
谢谢大家的时间。