Bricolage

デジタル原始スープにおける自己複製と機能の共進化

Francesco Cicala, Eyvind Niklasson, Ettore Randazzo, Sami Boukortt, Alessio Basti, Mayalen Etcheverry, Rif A. Saurous, Ben Laurie, James Manyika, Blaise Aguera-Arcas, Blake Richards2026arXiv:2607.09211
Co-evolution of self-replication and function in a digital primordial soup

デジタルな原始スープにおける自己複製と機能の共進化

要旨

従来の進化計算アルゴリズムでは複製がハードコードされる一方、デジタルな「原始スープ」内では自己複製が自発的に生じ得る。本稿では、この創発的な自己複製と問題解決能力の共進化を調査する。我々はランダムな32バイトのZ80アセンブリプログラム群を初期化し、アセンブリレベルの突然変異とプログラム間の相互作用のみを通じて自己複製を発生させる。これらの挙動を関連付けるため、タスクに基づく検証ステップを導入した。多項式を正しく評価することで、プログラムの相互作用確率が基準値以上に上昇する仕組みである。実験から四つの主要な知見が得られた。第一に、自己複製と数学的問題解決が初期のランダムな状態から首尾よく共進化すること。第二に、計算への圧力が、タスク実行のためのメモリを保持する小型かつ堅牢な複製アーキテクチャの出現を加速させること。第三に、代謝的制約を課すことで、プログラムが条件付き停止を進化させる可能性が高まること。検証時には早期終了しつつ、相互作用時には停止を回避してブロックコピーによる複製を実行する。最後に、プログラムを空間的なタスクニッチに分割すると、自発的な自己複製が創発的な学習カリキュラムを生成し、単純な解を複雑な多項式への足掛かりとして利用することである。総じて、これらの結果は相互的なフィードバックループを実証している。環境的なタスク要求が自己複製の物理的構造を能動的に形成し、一方で自発的な複製が機能的な問題解決の進化軌道を変化させるのである。

キーワード:人工生命 $\cdot$ 自発的複製 $\cdot$ 計算進化 $\cdot$ 自動化カリキュラム

1 はじめに

生命の起源に関する研究では、無生物から生命が誕生するために必要な根本的要因について長年議論が交わされてきた(Preiner et al., 2020)。遺伝子先行説は、自己複製する情報保持分子から生命が始まったとし(Gilbert, 1986)、代謝先行説は、エネルギーを利用する自己触媒ネットワークが遺伝的複製に先行したと主張する(Wächtershäuser, 1997; Lancet et al., 2018; Kauffman, 1986; Hordijk and Steel, 2018; Kauffman, 2000)。これらを補完する伝統的な考え方では、両者が共に不可欠であると見なされ、ガンティのケモトン(Gánti, 2003)やダイソンの二重起源仮説(Dyson, 1999)といった枠組みが、最小限の生命システムは代謝と複製を結合させねばならないと提唱している。この探究は、抽象的な計算基盤上で生命システムの普遍的原理を解明しようとする人工生命(ALife)へと自然に拡張される(Scharf et al., 2015; Fontana, 1990; Hutton, 2002; Kruszewski and Mikolov, 2022)。生物学的領域とデジタル領域の双方において、自己複製の自発的出現は、進化前段階の相互作用からダーウィン的進化への決定的な相転移を画する(Nowak and Ohtsuki, 2008; Agüera y Arcas et al., 2024; Spiegelman et al., 1965)。しかし、セル・オートマトン、エージェント・シミュレーター、あるいはアセンブリ言語プログラムなどを通じて複雑な行動の進化を研究するプラットフォームは、通常、複製をハードコードしたり、手作業で作成した祖先的複製子を環境に配置したりすることで、この転移に伴う確率的な障壁を回避している(Neumann and Burks, 1966; Langton, 1984; Sayama, 1999; Oros and Nehaniv, 2007; Schmickl et al., 2016; Mordvintsev et al., 2020; Sinapayen, 2023; Chang and Lipson, 2018; Randazzo et al., 2021; Goldberg, 1989; Randazzo and Mordvintsev, 2023; Lu et al., 2024; Lenski et al., 2003; Ofria and Wilke, 2004; Kumawat et al., 2025; Ray, 1991, 1994)。

生命誕生前の出現と生命時代の進化との間の溝を埋めるには、複製が公理として保証されていない環境を研究することが極めて重要である。初期のALifeモデル(Rasmussen et al., 1990, 1991; Pargellis, 1996)や近年の研究(Agüera y Arcas et al., 2024)は、明示的な適応度地形なしに、ランダムで未シードの初期化状態から自己複製プログラムが自発的に出現し得ることを実証してきたが、これらの研究は一般に、不可欠な次のステップである複雑な問題解決の進化を探究していない。本稿では、Agüera y Arcas et al. (2024) によるデジタル原始スープの基礎的枠組みを直接発展させ、複製の自発的出現と複雑なアルゴリズム的行動の進化とを連結させる。具体的には、ますます複雑化する数学的課題を解決する能力が、複製そのものの自発的起源とどのように共進化するのかを調査する。

我々はこれを調査するため、空間グリッド上にランダムなプログラム群を配置する。各実体は、エミュレートされたマイクロプロセッサで実行されるZ80アセンブリプログラムである。ここでは、複製はシステムレベルのコマンドではなく、アセンブリ命令の実行を通じて発見されねばならない行動である。原始的な複製と複雑な問題解決との関係を調べるため、我々は能力制約付き相互作用ルールを導入する。この体制下では、プログラムが実行され、複製する可能性を得るには、検証ステップを通過する必要がある。すなわち、特定の数学的多項式を評価する課題が課される。命令セットにはネイティブな乗算命令が存在しないため、多項式評価を行うには複雑な反復ループを進化させる必要があり、これが険しいアルゴリズム探索空間を提示する。この設定は、Avida(Lenski et al., 2003; Ofria and Wilke, 2004; Kumawat et al., 2025)のようなプラットフォームとは大きく異なる。Avidaでは、課題の解決は計算代謝の一形態(Adami, 1998)と見なされ、組み込みのコピーコマンド実行という報酬が与えられることで、能力と複製が明示的に結び付けられている。重要なことに、我々のシステムはこれら二つを切り離している。多項式の評価に成功しても、プログラムが近傍と相互作用する機会を得る可能性が高まるだけであり、複製が促進されたり誘発されたりすることはない。したがって、我々のモデルにおいて系統が存続するためには、プログラムが検証ステップを通過することと、自己複製のための独自の進化メカニズムを保持することという、二つの独立した条件を満たさねばならない。つまり、プログラムが利用可能なメモリ空間へ自身をコピーするために必要な命令を同時にコード化していなければ、課題を解決するだけでは伝播には不十分なのである。

我々の実験は、創発的な複製と課題解決の進化との相互作用を浮き彫りにする4つの主要な知見をもたらす。第一に、自己複製と課題解決が個々のプログラム内で共進化することを見出した。複製は伝播の厳格な前提条件であり、課題解決策はそれを保持するプログラムが自らをコピーできなければ集団内に拡散し得ない。課題解決は複製に必須ではないが、選択的優位性をもたらす。なぜなら、課題を解くプログラムは解かないものより相互作用のために選ばれる可能性がはるかに高いためである。この複合的な圧力下で、堅牢かつ効率的な生殖アーキテクチャがランダムなノイズから確実に創発し、同時に数学的課題を解く能力を獲得する。この共同創発が、続く3つの知見の基盤を確立する。

第二に、課題解決への圧力が生殖機構自体の進化のあり方を再形成することを見出した。最初に出現する複製子は、プログラムのほぼ全体を複製操作に費やして自己をコピーするため、課題解決に必要な命令を置く余地がない。よりコンパクトな複製メカニズムは数バイトを占めるのみで、残りのテープを空けておくため、同一プログラムが複製と計算の両方を行える。これらのコンパクトな複製子は両立可能なため、課題解決の要求が集団の移行を加速させる。要するに、課題解決の圧力がプログラムの複製アーキテクチャにフィードバックされるのである。

第三に、課題解決策に代謝的制約(Kempes他、2017)を適用した場合、すなわち課題解決に用いる操作数に基づいてプログラムの相互作用確率を低下させると、プログラムは課題解決実行と相互作用実行を区別する条件付き操作を進化させることを示す。

最後に、複製の力学が課題解決の進化に影響を及ぼすことを見出した。具体的には、プログラムが他のあらゆるプログラムと自由に相互作用する非構造化(パンミクティック)環境では、集団は高次多項式の計算に一貫して失敗する。この失敗は目的のパラドックス(StanleyおよびLehman、2015;LehmanおよびStanley、2011)の一例であり、進歩を明示的に報酬化することが探索を欺き、平滑化された適応度地形が発見を助けない理由を説明する。むしろ、高次多項式を計算するプログラムの出現は、グリッドが明確な課題ニッチに分割され、かつ疎な移動(Wright、1932;RaineyおよびTravisano、1998)と組み合わされた場合にのみ確実に観察されることを実証する。この空間構造が、以前に解決された単純な課題をより複雑な課題への遺伝的踏み石として利用する、創発的なカリキュラムを生み出すことを示す。

総じて、これらの結果は自己複製と複雑性を増す課題を解く能力が共進化することを実証する。また、複雑な課題を解く圧力は自発的な複製の出現とメカニズムに影響を与え、ひいては複製のニッチの存在が創発的なカリキュラムを通じて課題解決を形成する一助となり得る。

2 結果

2.1 モデルの概要

自己複製と課題解決の共起を研究するため、我々は異なる数学的課題を割り当てた複数のニッチにまたがるランダムなプログラム群を作成する。進化は反復的なエポックを経て進行し、プログラムは変異し、ニッチの課題で試験され、相互作用のためにペアリングされる。課題の解決はプログラムが相互作用に選ばれる確率を高め、二つのプログラムが相互作用する際、一方が自身のバイトを他方にコピーする命令を実行し得る。相互作用は結果で両者を上書きするため、自己複製するプログラムは基質全体に広がり、そうでないものは前者に置換される。

具体的には、個体群を32のニッチに分割し、各ニッチを1セル1プログラムの二次元格子とする。プログラムは$\ell=32$バイトの列であり、「テープ」とも呼ぶ(図1A)。ニッチ内では位置が重要で、プログラムは主に隣接セルと相互作用する。ニッチ間に空間的配置はなく、独立した個体群の集合として機能する。各ニッチには32の多項式関数の一つが割り当てられ、プログラムの課題はその多項式の評価である。全ニッチの個体数は計$2^{19}$で、全てランダムなバイト列として初期化される。

各エポックは変異ステップで始まり、全てのプログラムにおいてランダムな1バイトが再初期化される確率がわずかに存在する(図1B)。その後、プログラムを評価し、次述の通りペアでの相互作用に向けたサブセットを選択する。

プログラム評価は「検証」と呼ぶ能力試験である。Z80エミュレータ(詳細は手法参照)でプログラムを単独実行し、ランダム抽出した入力に対しニッチの多項式を正しく評価するか確認する。この検証は二値の成否信号を返し、全入力で正解した場合のみ合格となる。実行により最終メモリ状態がセルに書き戻されるため、検証中に自身のバイトへ加えた変更は、相互作用時と同様に維持される。

検証合格プログラムは相互作用に選ばれる確率が大幅に高まるが、検証に要したステップ数に応じて増大する代謝ペナルティにより、その確率は低下する(図1C)。不合格プログラムも低頻度だが選択される(正確な規則は手法参照)。

選択されたプログラムはパートナーとペアになる。大半の確率$0.95$で、パートナーは同一ニッチ内の隣接プログラムである。残りは全個体群から一様に抽出される(図1D)。この時折発生する遠距離ペアリングを「ニッチ間受粉(CNP)」と呼び、あるニッチで見つかった解を他へ拡散させる。これは難度の高い課題の解決に不可欠であることを後述する。

相互作用では、二つのプログラムのテープを連結した$2\ell$バイトのメモリ空間で、最初のプログラムの先頭バイトから実行を開始する。複製はシステムが強制するものではなく、実行コードが自律的に一方のバイトを他方のメモリ領域へコピーする場合のみ発生する。固定命令予算終了時の結合テープの内容は、二つの32バイト半分に分割され、元のセルへ書き戻され、結果が次エポックへ持ち越される。

2.2 原始スープから生じる自己複製と課題解決

100万エポックを超える進化の過程で、完全にランダムな初期プログラムから、堅牢な自己複製能力とタスク解決能力が一貫して共創され、自己複製に成功した系統がグリッドを支配するに至った(図1E)。この結果は、自発的な複製と複雑化するタスクを解決する能力が共進化し得ることを示している。実際、これら二つの能力は互いを強化し合う。複製できないプログラムは、タスク解決能力の有無にかかわらず、複製可能なものによって必然的に上書きされる。逆に、複製を行うプログラムの中では、そのニッチの多項式をうまく解くものが、より高い頻度で相互作用するように選択される。時が経つにつれ、ニッチを支配する系統は両方の振る舞いを統合するようになる。

標準的な進化アルゴリズムとは対照的に、我々のシステムはプログラムをコピーしたり複製したりすることはない。提供されるのはランダムな初期化、突然変異、そしてプログラムの相互作用頻度を偏らせる検証ステップのみである。この偏りが適応度地形を誘発するが、システム自体はそれを登る手段を直接提供してはおらず、複製は実行されるコードによって発見されなければならない。したがって、進化のメカニズムはあらかじめ供給されるのではなく、ランダムなバイト列から問題解決能力とともに創発する。

2.3 タスクは創発的な自己複製のダイナミクスを変化させる

複製とタスク解決の共創は、「進化が進むにつれて両者はどのように相互作用するのか」という自然な問いを投げかける。複製子が発見され、個体群を支配するまで増殖し、その後に初めてタスクを解決するように進化するという単純な順序を予想するかもしれない。しかし、我々が発見したのは、タスク解決への圧力と複製のアーキテクチャが互いを形作る、より複雑な結合であった。異なるエポックにおいて、二種類の複製子が個体群を支配するようになった。第一の単純な複製子「Load-Push」は、「Load」と「Push」命令バイトの対の文字列で構成される。Z80のPUSH命令は16ビットレジスタで動作するため、各ペアはプログラムを一度に2バイトずつ隣接するパートナープログラムのメモリ空間へコピーする(図2A)。ループを持たないため、完全な複製にはこれらのペアの長い連鎖が必要であり、Load-Push複製子は32バイトのテープ全体を消費する。

第二の複製子である「Load Increment Repeat」(LDIR)複製子は、後に確実に取って代わった。これは、メモリ内のバイトシーケンスをある場所から別の場所へ自動的にループコピーする、特殊なZ80ブロックコピー命令(LDIR)を利用する。長く反復的な命令シーケンスを必要とせず、コピーパラメータを初期化してP1からP2へ一度コピーするだけで、単一の命令がコピー全体を実行する。これにより、プログラムはわずか数バイトで複製を達成でき(図2B)、残りのメモリをタスク解決コードのために空けておける(正確なレジスタマッピングについては手法を参照)。

前述の通り、Load-Push複製子が最初に現れてグリッドを支配したが(図2D、緑の実線)、最終的にはLDIR複製子に取って代わられた(図2D、紫の実線)。解決されたタスク数はこの交代と連動していた(図2D、青の実線)。具体的には、Load-Push複製子が広がるにつれて解決されたタスク数は減少し、LDIR複製子が取って代わるにつれて回復・増加した。このダイナミクスの理由は、Load-Push複製子がテープ全体を自己複製に使用してタスク解決コードの余地をなくすため、その拡散がタスクを解決するプログラムを排除してしまうからである。対照的にLDIR複製子は数バイトしか必要とせず、プログラムの残りを自由にできる。したがって、その出現は常にタスク解決プログラムの増加に先行しており、複製とタスク解決の両立能力を解放したことを示している。これと一致して、タスクベースの相互作用のゲート制御を削除しても(詳細は手法を参照)、Load-PushからLDIRへの移行は遅延したものの阻止はされなかった(図2D、点線)。この移行は本質的に複製子間の突然変異に対する堅牢性の違い(後述)によって駆動されており、タスクはその加速に寄与している。

タスク圧力の加速効果がLDIR命令に特有のものかを判断するため、言語からLDIRおよびその近縁種(LDIおよびLDDR)を除去した対照実験を行った。それらがない場合、LDD命令に基づく別の複製メカニズムが一貫して出現するが、LDIRの場合よりもはるかにゆっくりと個体群を支配する(図2E、実線)。この移行はタスク圧力下でのみ一貫して発生し、それがない場合、Load-Pushからの移行は極めて遅く、100万エポック以内には完了しない(図2E、破線)。LDIRにはパラメータ初期化後にプログラム全体をコピーする組み込みの反復メカニズムがあるが、LDDは一度に1バイトしかコピーしない。そのため、LDDベースの複製子はP1からP2へのコピーパラメータを初期化するだけでなく、複製を達成するために明示的なマルチバイトループを実装しなければならず(図2C)、より複雑な生殖アーキテクチャを必要とする。これらの結果は、一つの複製ソリューションが遮断されると別のソリューションが見つかること、そしてタスク圧力が再び変化を加速させることを示している。LDIR複製子が自然に支配的になるのは複製子間に堅牢性の階層があるためだという仮説を検証するため、各生殖アーキテクチャが複製エラーをどの程度許容するかを定量化した(手法を参照)。測定の結果、明確な堅牢性の階層(LDIR $>$ LDD $>$ Load-Push)が明らかになり、LDIRプログラムは連続的な突然変異の後もLDDループより有意に高い頻度で機能し続け、LDDループはLoad-Pushシーケンスを上回った(図2F)。

これらの実験を総合すると、自己複製が最初に現れた後も、プログラムの複製方法は進化し続けることが示される。突然変異に対する頑健性は、それ自体で集団をよりコンパクトな複製子へと向かわせるが、数学的課題を解決する圧力はその移行を加速させる。なぜなら、コンパクトな複製子はテープ内に課題解決用コードのための余地を残すからである。課題によって作り出される適応度地形は、複製機構を再形成し、プログラムの計算方法と複製方法が共に進化する。

2.4 代謝制約が効率的かつ条件付きの実行を促進する

生物学的システムにおいて、計算は無料ではない。生物は情報処理に費やすエネルギーと、複製に必要な資源とのバランスを取らねばならない。このような効率性の制約がアルゴリズムの進化をどのように形作るかを研究するため、我々は検証フェーズに「代謝コスト」を導入し、課題解決に要する実行ステップ数に比例してプログラムの相互作用確率を割り引いた(手法を参照)。この制約がより効率的なプログラムの進化を促すか、また制約が適用されない複製フェーズにどのような影響を与えるかを調査した。

代謝制約は課題解決の出現率全体には変化をもたらさなかったが、それらの解決策が実装される方法を大きく変えた。代謝ペナルティ係数が高まるにつれ、検証中に費やされる平均実行ステップ数は大幅に減少した(図3A)。この効率性は、進化したプログラムが正しい出力を計算した直後に実行を終了させるHALT命令を一貫して組み込むようになったことで達成された。

少数のシミュレーションでは、プログラムはさらに進化し、レジスタDを検証フェーズと相互作用フェーズを区別するための感覚的手がかりとして転用することで、文脈依存的な行動を獲得した。我々の実行プロトコルでは、エミュレートされた環境は検証中にタスク入力 $x\in\{0,\ldots,15\}$ を渡すためにレジスタDを使用しており、これは16回中15回は非ゼロの値が含まれることを意味する。しかし、相互作用フェーズでは、環境は常にDをゼロに初期化する。進化したプログラムは時折この違いを流用し、Dの値が非ゼロの時のみHALT命令をトリガーする条件分岐を実行した。この条件付き停止は絶対数としては少数派の戦略にとどまったが、代謝ペナルティが厳しくなるにつれてその出現確率は有意に上昇した(図3B)。

この行動は、一つの進化した配列が環境の文脈に応じて二つの異なる役割を果たす事例を表している。検証と相互作用の両方で同じプログラムが実行されるため、計算(課題解決フェーズ)に対する代謝圧力は、複製ステップ自体には代謝ペナルティがないにもかかわらず、複製中(相互作用フェーズ)のプログラムの振る舞いを形作ることができる。これは、計算と複製がいかに単一の短いプログラム内で結合され得るかを示すさらなる例である。

2.5 ニッチ間受粉が創発的なカリキュラムを生み出す

複製と問題解決が共進化するシステムの学習能力を評価するため、我々は複雑さを増す課題を解決する能力をテストした。我々のシステムにおいて、高次多項式の解決は集団の空間的構成に決定的に依存していた。プログラムがニッチ間受粉を通じて希に物質を交換するニッチに構造化されている場合、より単純な課題の解決策が、より困難な課題に取り組むニッチの種となり得た。この空間構造により、集団は中間的な問題の連鎖を経て前進し、複雑な目標へと導く創発的なカリキュラムを形成した。このようなカリキュラムは通常、進化探索を導くために実験者が手作業で設計するものだが、我々のシステムでは、複製プロセスがグリッド全体に解決策を伝播させる方法から自然発生的に生じた。

この創発的カリキュラムの有効性は、ニッチ間のプログラム相互作用率に決定的に依存する。クロスニッチ受粉(CNP)率(プログラムの相互作用相手が局所的な近傍ではなく全集団から一様に選ばれる確率。手法を参照)を変化させると、高次タスクの解決には適度なCNP率が不可欠であることが明らかになった(図4A)。極端な例として、完全に分離されたニッチ(率がゼロ)では一次多項式を超えるものは何も解決できず、もう一方の極端な高率では高次多項式の解の進化が阻害された。

適応度関数を他の手段で明示的に平滑化することで、適度なCNP率を適用する利点を再現できるか検証した。そのため、二値の成功/失敗シグナルを段階的なものに置き換え、検証入力に対するプログラム出力の正解からの乖離度に応じて相互作用確率を線形にスケーリングした(正確な定式化は手法を参照)。各タスクを完全に隔離して進化させる対照設定(「単一タスク」設定)を実行した。これらの実行では、CNPシステムと全く同じ総計算予算と$512 imes 1024$のグリッド構造を維持した。その結果、単一タスクに割り当てられた集団($524,288$プログラム)は、CNP設定における$128 imes 128$の単一ニッチの32倍の規模となった。タスクあたりの集団規模が32倍であるにもかかわらず、これらの隔離された集団は進展せず、全セットのうち最も単純なタスクを最大15個解決するにとどまった(図4B)。対照的に、同じ全体集団を32個の小さな相互接続されたニッチに分割したCNPシステムは、それらを大幅に凌駕した。この差異は、アルゴリズム進化における目的のパラドックスに関連する動態を明らかにしている。これは、複雑な目標目的を直接最適化することがしばしばその発見を妨げ、中間的な足がかりを最適化する方が成功するという現象である。複雑な論理(多項式評価のための入れ子状の累積ループなど)を組み立てるには、個別の不連続なアルゴリズムモジュールが必要であり、CNPシステムの空間構造はこれらのモジュールをニッチ間で組み合わせることを可能にしたが、単一タスク集団ではそれらが発生する可能性は低かった。

3 考察

本稿では、デジタル原始スープ内における自己複製と問題解決の共進化を検証した(図1)。Agüera y Arcas et al. (2024)に基づき、自己複製とタスク解決の両方がランダムなノイズから確実に創発することを見出した。複製が固定された背景ルールである従来の進化システムとは異なり、ここでは複製と問題解決のメカニズムが共進化し、32バイトのメモリを共有した。(ただし、地球上の生命の起源とは異なり、我々のプログラムはあらかじめ定義された計算意味論を持つ要素で初期化されたことに留意されたい。)進化前段階の確率性からダーウィン的進化への移行は、タスクによって加えられる圧力によって形成された。この計算上の圧力は、タスク解決の要求が遺伝のメカニズムそのものを能動的に再形成し、テープを独占する単純なコピーメカニズムから集団を遠ざけ、タスク解決コードのための余地を残すLDIRやLDDループのような、よりコンパクトで堅牢な複製アーキテクチャの出現を加速させるフィードバックループを駆動する(図2)。このように、プログラムが何を計算するかという要求は、それがどのように複製されるかというアーキテクチャにフィードバックされる。同様に、代謝的制約は、実行予算を最適化するために適切なタイミングで停止するプログラムの進化を促した。注目すべきは、これらの停止行動が条件付きで機能するように進化し、プログラムが検証実行と相互作用実行を区別できるようになったことである(図3)。

我々は空間的に構造化されたタスクニッチを枠組みとして活用し、この共進化システムの学習能力を調査した。実験において、孤立して作業する個体群は非自明な多項式の解法を一貫して見出せなかった。この失敗は、困難な目標への直接的な最適化が、この環境下では根本的に不十分であることを示している。対照的に、個体群を疎な交配で結ばれた別々のニッチに分割することで、システムは進化のカリキュラムを自己組織化できた。そこでは単純な課題が、より複雑な解を導くための不可欠な足掛かりとして機能した(図4)。この自己組織化プロセスを、段階的に複雑さを増す手動設計のカリキュラムと比較したところ、後者は失敗した。この対比は、空間的なニッチ構造が進化の経路を発見するための分散型エンジンとして作用することを強調している(図5)。

本研究の限界の一つは、組換えや共生発生といった遺伝的多様化の創発に関わる相互作用ダイナミクスを体系的に調査しなかった点にある。我々の相互作用プロトコルは遺伝的混合を排除するものではなく、偶発的な組換えが進化の転換点に寄与した可能性がある。これは、交叉が事前に固定されている従来の遺伝的アルゴリズムとは対照的である(Goldberg, 1989; Eiben and Smith, 2015)。しかし、我々が手動で検査した主要な複製子のほとんどは無性生殖を採用していた。プログラムが相互的な遺伝子交換を自発的に発見できるかを探ることは、今後の重要な研究課題である。

本研究のもう一つの限界は、使用した課題(多項式の計算)が、Z80に乗算命令がないとはいえ比較的単純であり、同一のクラスから抽出されていた点である。単純な課題と限定的なドメインの使用は人工生命におけるアルゴリズム進化の先行研究に沿うものだが(Ofria and Wilke, 2004; Kumawat et al., 2025)、今後の研究では、課題とそのドメインがより広範で実世界に関連する集合から抽出された場合に、自己複製と課題がどのように共進化するかを探求できるだろう。最後に、32バイトというプログラム長の厳格な制限と、プログラムが協力して課題を解決するメカニズムの欠如の両面から、発見可能なアルゴリズム解の複雑さには上限があった。将来の研究では、より複雑でマルチエージェント的な解決策が可能な状況下で、自己複製と課題がどのように共進化するかを調査すべきである。

本研究は、遺伝と適応度最適化のメカニズムが相互に影響し合いながら共進化し得ることを示し、生命の起源や進化計算の研究において、進化を単なる静的な探索アルゴリズムとしてではなく、オープンエンドな学習システムの動的かつ可塑的な特性として捉えるべきだという視点を支持する。

4 手法

4.1 相互作用の能力制限と代謝制約

プログラム間の相互作用は、各々のニッチに割り当てられた多項式タスクを解く能力によって左右される(図1 C)。選択されたプログラム $P_{1}$ は、相互作用を許可される前に検証フェーズを経る。我々は $P_{1}$ を $2\ell$ バイトメモリの前半に配置し、後半をゼロで埋め、最大 $B=512$ 命令の予算でテープを実行する。この検証実行において、Z80レジスタは次のように初期化される。レジスタ HL、BC、E、およびプログラムカウンタ PC はゼロに設定され、レジスタ A とスタックポインタは 0xFF に設定され、レジスタ D はタスク入力 $x$ で初期化される。エミュレートされたアドレス空間は $2\ell$ バイトに制限され、すべてのメモリアクセスは $2\ell$ を法として行われるため、スタックポインタ値 0xFF はテープの最終バイトを指し、スタックへの書き込みはメモリ末尾から逆方向に増加する。出力はレジスタ E から読み取られる(8ビットレジスタであるため、結果は暗黙的に $2^{8}$ を法として格納される)。その後の相互作用フェーズでは、レジスタ D がタスク入力ではなくゼロに初期化される点を除き、レジスタの初期化は同一である。

検証を通過するためには、$P_{1}$ は $\{0,\ldots,15\}$ から非復元抽出された3つの入力に対して $\mathtt{E}=f(x)mod 2^{8}$ を満たす必要がある。ここで $f$ は $P_{1}$ のニッチに関連付けられた多項式である。3つの入力のサブセットを評価することは、誤ったプログラムが偶然成功する確率を極めて低くするために十分である。通過したプログラムは $p_{\mathrm{succ}}=1.0$ の高い相互作用確率を得るが、失敗したプログラムは基準となる $p_{\mathrm{base}}=0.3$ を維持する。

代謝制約をシミュレートするため、検証済みプログラムの相互作用確率を、検証中に費やした実行ステップ数に比例して割り引く。相互作用確率は以下の通りである。

ここで $k$ は3回の検証実行における平均実行ステップ数、$B=512$ は最大命令予算、$C$ は代謝ペナルティ係数である。このペナルティは検証済みプログラムにのみ適用され、失敗したプログラムの確率は実行コストに関わらず $p_{\mathrm{base}}=0.3$ に固定される。特に断りのない限り $C=0.3$ とし、図3のスイープでは $C$ を $[0,0.7]$ の範囲で変化させている。

検証はタスクの解決とは異なる。検証は相互作用を制限するものであり、3つのサンプリングされた入力に基づいて決定されるのに対し、タスクの解決は全入力範囲に基づいて報告される。具体的には、本稿を通じて、あるニッチがタスクを解決したとみなすのは、そのニッチのプログラムの少なくとも $10\%$ が、検証用の3つの抽出だけでなく、すべての $x\in\{0,\ldots,15\}$ に対して $f(x)mod 2^{8}$ を正しく生成した場合である。

4.2 滑らかな適応度地形の制御

滑らかな適応度地形の影響を評価する対照実験では、二値的な成功・失敗による検証を、段階的な相互作用確率に置き換えた。確率は、検証入力全体におけるプログラムの出力と目標値との間の数値的な平均距離に応じて線形にスケーリングされた。

ここで $\operatorname{mod}(a,b)$ は $a$ と $b$ の256を法とする距離を指し、$X=\{x_{1},x_{2},x_{3}\}$ は検証用入力セット、$y=f(X)$ は多項式関数 $f$ の目標出力セット、$\hat{y}$ は各入力に対するプログラムの出力セットである。

4.3 シミュレーションプロトコル

シミュレーションは一様にランダムなバイト列から開始し、$T_{\max}=10^{6}$ エポック実行される。パラメータは表1に要約されている。

アルゴリズム1のペアワイズ相互作用ループを重複や順序の偏りなく実装するため、各エポックでグリッド上の全位置をランダムにシャッフルし、選択された各プログラムに対してパートナーを抽出することで候補ペアを生成する。候補ペアリングにおいてプログラムが複数回抽出される可能性があるため、実行前に重複するプログラム割り当てを含むペアはすべて除外され、各ステップでセルが一度を超えて評価または上書きされないようにする。このフィルタリングステップのため、ペアリングアルゴリズムは確率的であり、ステップごとにランダムに変動する数のプログラム(平均して個体群の約56%)が検証と相互作用のために選択される。

4.4 タスクの有無におけるレプリケーター個体群動態

To understand the extent to which imposing task validation influences the underlying methods of replication, we compared replicator population dynamics with and without tasks being applied. We present the results of this investigation in Figs. 2 D and 2 E. To calculate the population counts, we used a byte-matching search to count known replicators of each type. Specifically, we scanned for the following consecutive byte sequences corresponding to key instructions for each replicator, which rely on the Z80’s core block-copy registers ( HL for source address, DE for destination address, and BC for copy length):

LDIR ( [0xED, 0xB0] ): The repeating block-copy instruction. Setting $\mathtt{HL}$ to the start of parent $P_{1}$ , $\mathtt{DE}$ to the start of partner $P_{2}$ , and $\mathtt{BC}$ to 32 copies the entire program automatically in a single step as pointers increment and $\mathtt{BC}$ decrements to zero.

LDDR ( [0xED, 0xB8] ): A close relative of LDIR that decrements the pointers instead of incrementing.

LDI ( [0xED, 0xA0] ): A non-repeating variant of LDIR that increments pointers and decrements $\mathtt{BC}$ but does not loop automatically.

LDD ( [0xED, 0xA8] ): A non-repeating variant that decrements pointers and decrements $\mathtt{BC}$ but does not loop automatically, requiring an explicit external loop to achieve replication.

LoadPush families : Rely on a sequence of paired load and stack-push instructions (e.g., loading bytes into a register and pushing them onto the stack). We tracked four variants based on the registers used:

LoadPush (BC): [0x01, 0xC5, 0x01, 0xC5]

LoadPush (DE): [0x11, 0xD5, 0x11, 0xD5]

LoadPush (HL): [0x21, 0xE5, 0x21, 0xE5]

LoadPush (HL_2): [0xE5, 0x2A, 0xE5, 0x2A]

We identified these key instructions by manually inspecting our runs and looking at execution traces to see what elements of tape were responsible for replication.

A tape was counted if it contained the target sequence at least once. Formally, for a set of tapes $T$ and a byte pattern $p$ , the population count $C_{p}$ is given by:

where $\mathbb{I}$ is the indicator function returning 1 if the pattern $p$ exists as a contiguous subsequence in tape $t$ , and 0 otherwise. The overall counts for the LDIR and LoadPush families were calculated as the sum of these unique tape counts across their respective variants ( $v$ ):

We note that this is not an exhaustive list of possible replicators, and likewise not a perfect search for replicators of this type (for instance, a NO-OP instruction could easily exist between the bytes of an LDIR, and it would functionally behave the same, but wouldn’t be picked up by our search). However, in all cases the sum of all replicator families closely matches the total tape population size, so we expect the figures to be a sufficiently faithful count of the majority of replicator tapes.

To generate Fig. 2 D, we initialized 100 runs with different random seeds for each of the two experiment types: with task validation applied, and without it. In both settings, the number of niches and the number of tapes remained the same. For the experiments without task validation, we simply skipped the validation step (including penalizing execution length), and every tape proceeds to interaction. We then computed the average population counts of the replicators across these 100 seeds every 1000 steps.

図2Eを作成するため、図2Dと同様の実験を繰り返したが、今回は使用していたZ80エミュレータをカスタマイズし、LDDを除くLDIR系レプリケータの主要命令バイト対をNO-OP相当に置換した。言い換えれば、LDD以外のLDIR系命令をすべて無効化した。その後、図2Dと同じ方法で個体数を算出した。

いずれの場合も、「解決済みタスク」は、入力ドメイン全体で$\geq 10\%$のテープがタスクを正常に解決したニッチの数と定義される。

4.5 突然変異に対するレプリケータの堅牢性

3種類のレプリケータアーキテクチャがどの程度突然変異に耐えられるかを比較するため(図2F)、一定数の突然変異イベント後も自己複製能力を保持しているかを測定した。各試験には、該当する型の標準的なレプリケータをシードとして用いた。LDIRレプリケータは、レジスタEを32に設定し、デフォルトの初期化$\mathtt{HL}=\mathtt{BC}=0$に依存してLDIR命令を実行する4バイト[0x1E, 0x20, 0xED, 0xB0]と、試行ごとに独立して抽出された28個の均一ランダムバイトで構成され、テープを32バイトで埋めた。LDIR命令は全32バイトをそのままコピーするため、この後続領域の内容は複製に影響せず、機能的な接頭辞と共に忠実に再現される。LDDレプリケータは、レジスタL、E、Cを初期化し、条件付き相対ジャンプで閉じられたループ内でLDD命令を実行し、HALTで終了する11バイト[0x2E, 0x1F, 0x1E, 0x3F, 0x0E, 0x20, 0xED, 0xA8, 0x28, 0xFC, 0x76]で構成され、同様にゼロで32バイトまで埋められた。Load-Pushレプリケータは、ロードとそれに続くスタックプッシュのバイト対[0x01, 0xC5]を16回繰り返して32バイトのテープを埋めた。

各堅牢性試験は、$n\in\{1,4,8\}$とした$n$回の連続する突然変異および複製サイクルで構成した。毎サイクル、シミュレーションの突然変異演算子と全く同様に、32箇所の位置から1つをランダムに選択し、$\{0,\ldots,255\}$の範囲の均一ランダムバイトに置換することで現在のゲノムを突然変異させた。各位置は毎回新たに抽出されるため、置換が元のバイトと一致したり、同じ位置が複数回選択されたりする場合がある。次に、突然変異したゲノムを$2\ell$バイトのテープの前半に配置し、後半をゼロに設定し、相互作用時と同じレジスタ初期化の下で最大$B=512$命令までテープを実行した。プログラム自体を保持する結果のテープ前半が、次のサイクルへ持ち越されるゲノムとなった。最終サイクルにおいて、ゼロから始まったテープ後半が前半とバイト単位で完全に一致し、突然変異したプログラムが自身の全32バイトを空のパートナーへコピーできたことを示す場合、その試行を成功と分類した。

各レプリケータ型および各$n$の値について100回の独立した試行を行い、成功した割合を報告した。誤差棒は95%ウィルソンスコア区間を用いた。各突然変異レベルにおけるレプリケータ型間のペアごとの差異は、比較全体でボンフェローニ補正を用いた片側二比率$Z$検定で評価した。

4.6 代謝ペナルティのスイープと停止挙動

代謝制約が進化プログラムをどのように形成するかを調査するため(図3)、ペナルティ係数$C$を$0.0,0.1,\ldots,0.7$の8つの値にわたってスイープした。各値につき100回の独立したシミュレーションを実行し、合計$N=800$回の実行を行った。すべての実行で、32ニッチとニッチ間交配を用いた標準構成を$10^{6}$エポック使用した。以下の全量は、各グリッドの最終状態で測定した。

平均実行長(図3A)については、最終グリッド内の全プログラムに対して単一の検証実行を行った。各プログラムに対し、レジスタDを$\{0,\ldots,15\}$から一様にサンプリングした入力$x$に設定し、プログラムを$2\ell$バイトのテープの前半に配置して後半をゼロで埋め、最大$B=512$命令まで実行した。その際、実行命令数を記録したが、これはプログラムが停止しない場合は$B$に等しい。このプログラムごとのカウントが、図3Aにプロットされた検証実行ステップ数$k$である。このカウントをグリッド内の全プログラムで平均し、実行ごとに1つの値を得た。各係数における100個の値を箱ひげ図で示し、中央値、四分位範囲、および四分位範囲の$1.5 imes$のひげを描き、個別の実行結果を重ね合わせた。$C$と実行ごとの平均値との関連性は、$N=800$回の実行にわたるスピアマンの順位相関で定量化した。

停止挙動(図3B)については、単一のサンプリング入力で正しい出力を生成したプログラム、すなわち上記の検証実行で$\mathtt{E}=f(x)mod 2^{8}$を返したプログラムのみを対象とした。これら各プログラムを、レジスタDの値のみが異なる2つの環境で実行した。いずれの場合もテープの対となる半分はゼロに設定し、$B=512$命令の予算を設けた。検証環境ではレジスタDにサンプリングされた入力$x$を保持し、相互作用環境では通常の相互作用時と同様にレジスタDをゼロとした。各環境において、予算内でHALTに到達したか、あるいは停止せずに予算まで実行されたかを記録し、プログラムを「両方(Both)」、「検証のみ(Validation)」、「相互作用のみ(Interaction)」、「いずれでもない(Neither)」という4つの排他的なカテゴリのいずれかに分類した。

各実行内において、これらのカウントをフィルタリングされたプログラム集合に対するパーセンテージに正規化し、4つのカテゴリの合計が$100\%$となるようにした。これにより、プログラム数に関わらず各実行が等しい重みを持つ。図3Bの各サブプロットは1つのカテゴリに対応しており、棒の高さはその係数における実行全体の中央値パーセンテージである。エラーバーは、1000回の再サンプリングによるノンパラメトリック・ブートストラップで得られた中央値の$95\%$信頼区間であり、得られた中央値分布の2.5パーセンタイルと97.5パーセンタイルに上下のキャップを描いた。「検証のみ」カテゴリは本文で述べた条件付き停止に対応しており、プログラムは検証中に停止するが相互作用中は停止をスキップする。これと$C$との関連性は、$N=800$回の実行にわたるスピアマンの順位相関で定量化した。

4.7 祖先寄与行列の計算

創発プログラムの系統学的履歴を辿り、進化経路(図5A)を明らかにするため、シミュレーション全体を通じて全系統の起源ニッチを追跡した。初期化時(エポック0)、グリッド内の全プログラムに、自身のニッチ$j\in\{0,\dots,L-1\}$($L=32$は全ニッチ数)と等しい祖先ニッチIDをラベル付けした。このラベルは相互作用を通じて引き継がれ、各系統が素材を受け取った最新の解決済みニッチを記録した。検証済みプログラム$P_{1}$が自身のニッチ内で隣接する$P_{2}$と相互作用した際、元の場所に書き戻された両プログラムは$P_{1}$の祖先ニッチIDを引き継いだ。一方、ニッチ間交配イベントで$P_{1}$が異なるニッチから選ばれたパートナー$P_{2}$と対になった場合、$P_{2}$の場所に書き戻されたプログラムは、$P_{1}$のニッチが既にタスクを解決済みとマークされている場合に限り、$P_{1}$の現在のニッチインデックスを祖先ニッチIDとして採用した。したがって、プログラムの祖先ニッチIDは、その活性複製系統が素材を受け取った最新の解決済みニッチを特定するものであり、デフォルトでは起源ニッチとなる。

ニッチ$i$が割り当てられたタスク$i$を正常に解決したと定義するのは、入力ドメイン全体(16種類の入力)にわたってタスクを解決するニッチ内のプログラムの割合が少なくとも$10\%$($128 imes 128$サブグリッドにおいて$\geq 1,639$プログラムに相当)に達した最初のエポック$t$である。このエポックにおいて、ニッチ$i$内の全プログラムの祖先ニッチIDのスナップショットを記録した。具体的には、ニッチ$i$に対する生の祖先寄与ベクトルを計算した。ここで、$j$番目の成分$A_{i,j}$は、ニッチ$j$を起源とする系統に属するニッチ$i$内のプログラム数を表す:

このデータを複数の独立した実行にわたって集計するため、以下の正規化ステップを実行した。まず、各シミュレーション実行$g\in\{1,\dots,G\}$($G=2000$は乱数シードの総数)について、生のカウントを正規化し、タスク$i$の解決に対する各ソースニッチの相対的寄与を得た:

当該実行でタスクが解決されたことを条件とし( $\sum_{k}A^{(g)}_{i,k}>0$ )、それ以外の場合は $N^{(g)}_{i,j}=0$ と設定した。次に、タスク $i$ が正常に解決された全実行にわたり、これらの相対的寄与の条件付き平均を算出した。

行列 $V$ は、タスク $i$ が解決されたという条件下で、その解決時にニッチ $j$ から発生したニッチ $i$ 内の個体群の平均割合を表す。最後に、統合ヒートマップ(図5A)を作成するため、行ごとの最小・最大正規化を適用し、寄与の絶対量とは無関係に、各ターゲットタスクに対する異なるソースニッチの相対的重要性を強調した。

ここで $W_{i,j}\in[0,1]$ は、ソースタスク $j$ からターゲットタスク $i$ への正規化された相対的寄与である。

4.8 カリキュラム学習

カリキュラム学習を調査するため、CNP構成と同じ空間トポロジーを維持する。すなわち、$N_{p}=524,288$ 個のプログラムからなる個体群を、$L=32$ 個の独立したニッチ($128 imes 128$ プログラムのサブグリッド)に分割されたグリッド上に配置し、局所的な近傍ペアリングと $\pi=0.05$ のグローバルなニッチ間交配率を設定する。ただし、各ニッチがタスクライブラリから個別の静的タスクを評価するのではなく、個体群内の全 $L$ 個のニッチが、任意のエポックにおいて同一のターゲットタスク $T_{i}$ で評価される。このターゲットタスクは、個体群が線形カリキュラムシーケンス $\mathcal{C}=\langle t_{1},t_{2},\dots,t_{K} angle$ を辿るにつれて動的に更新される。これは $\mathcal{C}_{ ext{optimal}}=\langle 2n,\ n^{2}+n,\ 2n^{2}+n,\ n^{3}+n^{2}+n,\ n^{3}+n^{2}+n+3 angle$ または $\mathcal{C}_{ ext{simple}}=\langle n,\ n^{2},\ n^{3},\ n^{3}+n,\ n^{3}+n^{2}+n,\ n^{3}+n^{2}+n+3 angle$ のいずれかとして定義される。

進化的足場形成を可能にし、前段階で獲得した能力の喪失を防ぐため、相互作用確率は以下の通りである:

ここで $T_{i}$ はアクティブなタスク、$T_{i-1}$ はカリキュラムにおける直前のタスク($T_{0}$ は検証なしと見なす)、$k$ は3回の検証実行で要した平均実行ステップ数、$B=512$ は最大命令予算、$C$ は代謝ペナルティ係数である。

アクティブなカリキュラムタスクは、いずれかのニッチ内の少なくとも1つのプログラムがアクティブなタスクをその完全なドメインで正常に解決した場合、ログ記録バッチの終了時に $T_{i}$ から $T_{i+1}$ へとグローバルに進行する(全ニッチのターゲットタスクを $T_{i+1}$ に設定する)。総計算予算はCNPベンチマーク実行と同一に保たれる。

著者貢献

F.C.、E.N.、E.R.、B.R.が研究を設計し、F.C.、E.N.、E.R.、S.B.が研究を実施し、F.C.、E.N.、A.B.がデータを分析し、F.C.、E.N.、E.R.、S.B.、A.B.、M.E.、R.S.、C.K.、B.L.、J.M.、B.A.A.、B.R.が論文を執筆した。

この訳文は CC BY 4.0 の原著論文からの機械翻訳です。原著: Francesco Cicala, Eyvind Niklasson, Ettore Randazzo, Sami Boukortt, Alessio Basti, Mayalen Etcheverry, Rif A. Saurous, Ben Laurie, James Manyika, Blaise Aguera-Arcas, Blake Richards (2026) · arXiv:2607.09211 · CC BY 4.0
訳文の正確さは保証されません。引用は必ず原著から。 原文と並べて読む →
中文Españolहिन्दीالعربيةFrançaisPortuguêsРусскийDeutsch한국어IndonesiaItalianoTürkçeTiếng Việt