人工生命 #3 DNAに学ぶ (1)

1K Views

February 25, 26

スライド概要

俺の勉強会 #5 発表資料

profile-image

フロントエンドエンジニア

Docswellを使いましょう

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

1 / 16 ºå˜} #3 DNAkfv (1) 2026/02/24 TAKE

2.

2 / 16 @logta15 / _QIto *ˆ>DIGGLE nµo¡ˆ˘ßgÕíóȨóÉh−n Jq™WfD~Y êñ9Ë

3.

3 / 16 ¦§ÃÈ ˜fÙü¹ ÏüÉ íÜÃÈÙü¹ ½ÕÈ Š_Ùü¹ ºå˜}ˆºfik‹cf-\ýU„_˜} hDFÎLB−'~Kk3dn˘ßkK„fD~Y ;k½ÕȺå˜}kdDf9ËW~W_ MÞnJq

4.

4 / 16 ˜Min(ø™\(n·ßåìü·çó Ant Colony Optimization BoidâÇë 2ûŠŒn·ßåìü·çó Tierra z˛—¢ë´êºà uzþa·ó×ëjëüëkfiF Sn¤„LÑj/‰˚D™˜•þa L-ÃnÎ ûn

5.

Ö−n/‰˚D™âÇêó°W_Ant Colony Optimization™9ËW~W_ MÞnJq

6.

ÊÞnJq 5 / 16 Tierra z˛—¢ë´êºà 進化・増殖のシミュレーションを紹介 コンピュータ上での仮想生物の進化 最適化問題への適

7.

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

8.

Tierraoin‹Fk2Y‰nK˜ 7 / 16 Tierra独自の仮想機械言語で構成されたコードを進化させている
 特徴 5bit 32個の命令 数値オペランドを持たずレジスタとビット反転、
 左シフトで数値を表現 テンプレートによるアドレス方

9.

Tierraoin‹Fk2Y‰nK˜ 8 / 16 数値オペランドを持たずレジスタとビット反転、左シフトで数値を表

10.

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˜

11.

ìênîó_°ž™in‹Fk2U[‰nK˜ 10 / 16 仮想CPUが処理する仮想機械語のコードをSoupという場所に配置
 配置されたコードが自己増殖を繰り返していく中で下記を発生させる 突然変異(Mutation):進化の要件の変異 コピー時やコード実行にbit反転をランダムに行う 個体の排除(Reaper):進化の要件の選択の一つの要素 複製ができなかったり、古い個体を
 見つけ出して排除す

12.

11 / 16 https://github.com/Logta/tierra (WIP) Tierran·ßåìü·çó

13.

ifij/‰˚DLuzY‰nK˜ 12 / 16 最初は80命令で自己複製する個体を与える 53命令などより小さい命令で自己複製する個体が現れる 他個体のテンプレートを利用して自己複製する個体が現れる(寄生型) 自己複製する個体(標準型)と寄生型は
 捕食/被捕食関係のように振る舞う 標準個体が減ると寄生型は
 利用するテンプレートがなくなり減る 標準個体が増えると寄生型は
 利用できるテンプレートが多くなり増える 寄生型が増えると標準個体の複製効率が
 低下し相対的に減少す

14.
[beta]
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

15.

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(