🦠ライフゲームの域 人工生命とゲームのちがい p5.js
コンウェイは「生きたセルの数が無限に増えつづけるパターンはありうるか」という問題に50ドルの懸賞金をかけた。コンウェイ自身は、そのようなパターンとして「周期的だが次々にグライダーを打ち出すもの」や「移動しながら通過した後に破片を残すもの」の存在を予想し、前者を「グライダー銃」、後者を「シュシュポッポ列車」と呼んだ。
w=9;l=_=>{for(z=w*w;z--;){
i=z%w;j=floor(z/w);
_(i,j);}};
setup=_=>{A=Array;c=_=>[...A(_)].map(() => A(_));b=c(w);n=c(w);;I();}
draw=_=>{g();
l((i,j)=>{fill((b[i][j])?0:255);
circle(i*w,j*w,w);
});};
mousePressed=_=>I();
I=_=>{l((i,j)=>{
b[i][j]=(i==0||j== 0||i==w-1||j==w-1)?0:random([0,1]);n[i][j] = 0;});}
g=_=>{
for (let x = 1; x < w - 1; x++) {
for (let y = 1; y < w - 1; y++) {
let o = 0;
for (let i = -1; i <= 1; i++) {
for (let j = -1; j <= 1; j++) {
o += b[x+i][y+j];
}
}
o -= b[x][y];
if ((b[x][y] == 1) && (o < 2)) n[x][y] = 0; // Loneliness
else if ((b[x][y] == 1) && (o > 3)) n[x][y] = 0; // Overpopulation
else if ((b[x][y] == 0) && (o == 3)) n[x][y] = 1; // Reproduction
else n[x][y] = b[x][y]; // Stasis
}
}
let temp = b;
b = n;
n = temp;
}
「ライフゲーム」は、数学者ジョン・コンウェイによって1970年に考案されたセル・オートマトンの一種です。これは、無限の格子に配置されたセルが、あらかじめ定められた簡単なルールに従って進化する、シミュレーションゲームあるいは数学的な実験です。
基本的なルールは以下のとおりです:
誕生: 死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代でそのセルは「生」になる。
生存: 生きているセルに隣接する生きたセルが2つか3つあれば、次の世代でもそのセルは「生」であり続ける。
過疎: 生きているセルに隣接する生きたセルが1つ以下であれば、次の世代でそのセルは「死」になる。
過密: 生きているセルに隣接する生きたセルが4つ以上であれば、次の世代でそのセルは「死」になる。
「ライフゲーム」と「ゲーム理論」は、名前に「ゲーム」という言葉が入っているものの、基本的な概念や目的は異なります。しかし、両者の間には一定の関連性があります。以下に、それぞれの概念とその関連性について説明します。
ライフゲーム:
ライフゲームは、イギリスの数学者ジョン・ホートン・コンウェイが1970年に考案したセルオートマトンの一つです。
二次元の格子上で、各セルが「生」または「死」の2つの状態を取り得ます。
その進行はシンプルなルールに基づきますが、非常に複雑なパターンや振る舞いを示すことが知られています。
一般的に、計算の視覧化や人工生命、複雑系の研究の一環として使用されます。
ゲーム理論:
ゲーム理論は、戦略的な状況での合理的な意思決定を研究する数学的な方法論です。
複数のプレイヤー(意思決定者)が存在し、各プレイヤーは他者の選択を考慮しながら最適な戦略を選びます。
経済学、政治学、心理学、生物学など、多岐にわたる分野での応用があります。
関連性:
両者は、独立して発展した理論やフレームワークを持っていますが、両者は「複雑系」という広いカテゴリの下で一定の関連性を持ち得ます。
両者ともに、シンプルなルールや原則から複雑な動態や振る舞いが生まれるプロセスを研究します。
たとえば、ゲーム理論の中にも、生物の進化や共生関係を解析するためのモデルが存在します。このようなモデルは、ライフゲームのような人工生命の研究と共通点を持つ場合があります。