5

地球規模の人工知能の環境を作りたい。非常に大きな世界で地下生活をシミュレートします。ウィキペディアによると、地球の表面積は 5 億 1007 万 2000 Km^2 です。同様の比率の正方形を作成したいと考えています。各ビットに 1 メートルを格納します。0 は汚れを意味し、1 は汚れの壁を意味します。

まず、この正方形の 1 行を格納する方法を計算してみましょう。1 行は 510072000000m で、各バイトは 8 メートルを格納できるため、1 行は 59.38GB で、全世界は 3.44PB になります。そして、少なくとも水と溶岩を各平方メートルに追加したいと思います。これにより、結果が 2 倍になります。

ロスレス データ圧縮アルゴリズムを使用して、この情報を圧縮する必要があります。私は最初に 7zip で非常に直接的なアプローチを試み、1 行が 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();

そして、数学は非常に基本的なので、何か間違ったことをしたとしても、それを見ることはできません.

何かアドバイスをいただけますか?私は進化的アルゴリズムの経験があり、世界はリアルタイムである必要はなく、必要なだけ時間がかかる可能性があるため、データ圧縮だけに集中してください。人工知能は問題ではありません。

ありがとうございました。

4

2 に答える 2

3

についてはわかりませんがC#、現在、毎回 4 バイトを書き込んでいるようです (6375 * 6375 * MB 単位の 4 バイト = 155 MB)。したがって、Write メソッドは現在 32 ビット整数を書き込んでいると思います。

于 2012-07-06T10:02:17.827 に答える
2

@Scharronはあなたの質問の詳細に正しく答えましたが、もっと根本的な問題があると思います:

ランダム データを大幅に圧縮することは、理論的には不可能です。実際、ほとんどの圧縮アルゴリズムは、ランダムな入力データが与えられるとストレージ サイズを増やします。AI アルゴリズムの仕様によって、圧縮できないパターンがいくつか導入される可能性がありますが、完全にランダムな入力データから開始する場合は、それらの複数の PB を保存する必要があります。

@Scharronが指摘したように、大幅な圧縮が見られた理由は、データのバイトごとに3つのゼロバイトを書き込んでいたため、データをより簡単に圧縮できるようになったためです。

于 2012-07-06T10:11:17.290 に答える