記事を検索

toragijr.cqpub.co.jp

トラ技Jr.

【GENES】プログラム改造計画① 遺伝子に寿命を持たせる!

【GENES】プログラム改造計画① 遺伝子に寿命を持たせる!

白井 優樹

 加藤 隆志氏が開発した仮想生物進化シミュレーション・ゲーム「GENES」を題材に,読者参加型のプロジェクト「GENESプロジェクト」を実施しています.本稿は,GENESのプログラム改造についての寄稿記事です.

※GENESプロジェクトについて:詳しくはこちら

 GENEはegが0になるまではいつまでも生き続けます.セル数が1のものなどはエネルギの消費量が少ないため,分裂するほどのエネルギが無くてもしぶとく存在し続けたりします.ですが寿命があるとしたらどうなるでしょう?(このとき,分裂すると寿命がリセットされるものとします)

 まずは単純に一律同じ寿命をセットすることにします.

寿命の設定の追加

 タイマ・イベント1回で寿命の1単位が消費されるとします.そして固体ごとにあと何単位の寿命があるか保持する変数をSt.age[ ]で管理します(リスト1).

 

リスト1 寿命を保持する変数を追加する

 

 寿命の有効/無効とその値を設定できるようにFormに部品を追加します.チェック・ボックスとNumericUpDownコントロールを設定します(図1).checkBox3とnumericUpDown3として設定しました.numericUpDown3の最小値は100,最大値は100000,初期値は6000にしてみました.

 


図1 Formに寿命を設定するための部品を追加する

 

個体ごとの寿命のセット

 まずは初めの10個の個体の寿命設定です(リスト2).画面で入力された値を設定しています.

 

リスト2 初めの10個の個体に寿命の初期値を設定する

 

 分裂するときにも同じように寿命設定を行います(リスト3).

 

リスト3 分裂したら寿命を再設定する

 

 そして,個体ごとの処理の最後にカウントダウンと寿命が尽きていればエネルギSt.eg[ ]を0とします.これはチェック・ボックスにチェックされているときのみに実施します(リスト4).

 

リスト4 寿命が尽きたらエネルギを0にする

 

 寿命チェックをしていないときの30分後ぐらいのようすを図2に,寿命チェックをしたときの30分後ぐらいのようすを図3に示します.特に寿命があると設定によっては絶滅しやすくなってしまいますが,セル数が多いものばかりになりやすい場合もあったりします.

 


図2 寿命チェックをしていないときの30分後ぐらいのようす

 


図3 寿命チェックをしたときの30分後ぐらいのようす

 

 比較的単純な改造で寿命要素を入れてみましたが,個体ごとに寿命をばらつかせたり,残りの寿命の割合によって分裂閾値やエネルギ消費割合を変えるなど,他にもいろいろ手を加えられそうです.さらに改造をトライしてみたいです.

※改造したプログラム(Form1.cs)の全文はこちら