人工生命Tierraの作成等についてのブログ

人工生命Tierraや他の技術的な事柄、また日々の出来事などについても書いていきます。

人工生命Tierra11: 突然変異8の挙動について3

f:id:kkeiekk:20180128165203p:plain

f:id:kkeiekk:20180311204833p:plain

f:id:kkeiekk:20180311204851p:plain

f:id:kkeiekk:20180311204902p:plain

f:id:kkeiekk:20180311204916p:plain

f:id:kkeiekk:20180311204926p:plain

突然変異8について

・最初の突然変異8(=オリジナル)の挙動

・1体目のコピー

・2体目以降のコピーの挙動

[1]最初の突然変異8(=オリジナル)の挙動

先祖種と同様に、まず自分の体のコードを使ってコピー1体目を作成し始める。

突然変異により、callで予定よりも先に飛んでしまい、いくつかの命令を飛ばすことでレジスタの値がおかしくなる。

1体目のコピーを書き込んだ後、ret命令によりcall命令の次まで戻るはずだったが、レジスタの値がおかしくなっているため戻れず、ret命令を素通りする。

結局1体目のコピーに対するdivideは行われないため、1体目のコピーは活動しない。

 

オリジナルはret命令を素通りし、本来は進むはずのない隣の個体のコードを読み始めてしまう。

隣の個体のmal命令を実行し、2体目以降のコピーを作成し始める。

しかしながらスタックポインタの値がおかしくなっているため、次のcall命令は実行されず素通りする。

続いてdivide命令が実行され、2体目以降のコピー体にcpuや権限が付与され独立するが、callを素通りしたためコピーはされておらず、mal命令により確保された空っぽの領域が独立することとなる。

次のjmp命令によりmal命令まで戻ることになる。

こうしてmalとdivideを繰り返し、空っぽのコピー体を作成し続けることになる。

 

[2]1体目のコピー体

オリジナルによって、1体目用に確保された領域に命令のコピーは行われたが、divideが実行されなかったためcpuと権限が与えられず、独立しないままとなり、活動をすることはない。

作りかけのまま放置される。

 

[3]2体目以降のコピー体

オリジナルが隣の個体のmal命令とdivide命令を読み込んで実行することにより、2体目以降のコピー体に領域とcpuや権限が付与され独立はするが、コピーはされていないため中身は空っぽとなっている。

活動を開始しても中身が空っぽなので、実行するための命令は持たず、エラーのみを起こし続ける。

前:人工生命Tierra10_突然変異8の挙動について2