1 / 16 ºå˜} #3 DNAkfv (1) 2026/02/24 TAKE
2 / 16 @logta15 / _QIto *ˆ>DIGGLE nµo¡ˆ˘ßgÕíóȨóÉh−n Jq™WfD~Y êñ9Ë
3 / 16 ¦§ÃÈ ˜fÙü¹ ÏüÉ íÜÃÈÙü¹ ½ÕÈ Š_Ùü¹ ºå˜}ˆºfik‹cf-\ýU„_˜} hDFÎLB−'~Kk3dn˘ßkK„fD~Y ;k½ÕȺå˜}kdDf9ËW~W_ MÞnJq
4 / 16 ˜Min(ø™\(n·ßåìü·çó Ant Colony Optimization BoidâÇë 2ûŠŒn·ßåìü·çó Tierra z˛—¢ë´êºà uzþa·ó×ëjëüëkfiFSn¤„LÑj/‰˚D™˜•þa L-ÃnÎ ûn
Ö−n/‰˚D™âÇêó°W_Ant Colony Optimization™9ËW~W_ MÞnJq
ÊÞnJq 5 / 16 Tierra z˛—¢ë´êºà 進化・増殖のシミュレーションを紹介 コンピュータ上での仮想生物の進化 最適化問題への適
6 / 16 ; h 2 = ˜} hı©eQ‰ngB„p˜}n †öL ˘nˆ−kj−~Y(]n4⁄o˜}jnK˜hDFODLz˜W~YD‘ƒ‰⁄—z˛Pßüàmeme 2n †ö Maynard Smith, Richard Dawkins( êñý p xž Thomas S. Rayによって考案されたシステム 進化するための最小要件をシミュレーションによって明らかにしたモデル Core War※ をアイデアのもとにしてい https://ja.wikipedia.org/wiki/%E3%82%B3%E3%82%A2%E6%88%A6%E4%BA%8 Tierra kdDf
Tierraoin‹Fk2Y‰nK˜ 7 / 16 Tierra独自の仮想機械言語で構成されたコードを進化させている 特徴 5bit 32個の命令 数値オペランドを持たずレジスタとビット反転、 左シフトで数値を表現 テンプレートによるアドレス方
Tierraoin‹Fk2Y‰nK˜ 8 / 16 数値オペランドを持たずレジスタとビット反転、左シフトで数値を表
9 / 16 ;ˆ¢Éì¹j÷¹`h1bit pg¸ãó×HLhO%n4@kj‰LÆó×ìüȹ`hnopÑ¿üóLW ‘cf‡Ñ“™¢"Y‰_†Ê„kOD Æó×ìüÈÞÃÁó°oDNAnøÜ—iúþ™!WfJ− Æó×ìüÈÞÃÁó°k‹cf�LY‰æLz~‰Ë o ³ÉóhøÜ—jiúMnD�‘[g¢ßÎxLz~‰Ë h<fD‰ テンプレートによるアドレス方式 一般の機械語ではデータ参照やジャンプ時にアドレス番号を用いる Tierraではテンプレート方式にすることで変異に対して頑健な※アドレス方式を実 Tierraoin‹Fk2Y‰nK˜
ìênîó_°ž™in‹Fk2U[‰nK˜ 10 / 16 仮想CPUが処理する仮想機械語のコードをSoupという場所に配置 配置されたコードが自己増殖を繰り返していく中で下記を発生させる 突然変異(Mutation):進化の要件の変異 コピー時やコード実行にbit反転をランダムに行う 個体の排除(Reaper):進化の要件の選択の一つの要素 複製ができなかったり、古い個体を 見つけ出して排除す
11 / 16 https://github.com/Logta/tierra (WIP) Tierran·ßåìü·çó
ifij/‰˚DLuzY‰nK˜ 12 / 16 最初は80命令で自己複製する個体を与える 53命令などより小さい命令で自己複製する個体が現れる 他個体のテンプレートを利用して自己複製する個体が現れる(寄生型) 自己複製する個体(標準型)と寄生型は 捕食/被捕食関係のように振る舞う 標準個体が減ると寄生型は 利用するテンプレートがなくなり減る 標準個体が増えると寄生型は 利用できるテンプレートが多くなり増える 寄生型が増えると標準個体の複製効率が 低下し相対的に減少す
13 / 16
ifij/‰˚DLuzY‰nK˜
// ---- ˇŒ‰n‚<³üÉ ----
void ancestor() {
int size = adrb() - adrf();
void* daughter = mal(size);
copy(self, daughter, size); // ’ êMn'MjcopyÆó×ìüÈ™|v
divide(daughter);
while (true) {}
}
// ---- ʉn‚<³üÉ ----
void parasite() {
int size = adrb() - adrf();
void* daughter = mal(size);
find_template(COPY_TEMPLATE)(self, daughter, size); // ’ ¿;ncopy™jF
divide(daughter);
while (true) {}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
14 / 16 SnÀ¤Ê߯¹™)(W_ iKÕhWfz˛—¢ë´êºàGA (LB−~Y ºå˜}ÎkJDf0n˜};Õou†f͆ Tierran 4jëüëØQk‹‰Uß/«Ußq2nzþo'Mj© LotkaVolterra¹nµ¤¯ëk^<W_h˜Ë ‡³ßgM‰((½a—jëüëK›þ�k^<W_À¤Ê߯¹LuzW_ 2n½a(
2o˜iy n‡ngojOÅ1Ë nÀ¤Ê߯¹gB‰ Tierran©