みつよし手稿

ものづくりと観察が好きです


製作物
・人工生命をベースとしたジェネラティブアート: Gallery - ALifeLab
・人工生命分野関連のweb新聞: ALife Newsletter
Factorio Mods
・外部ブログ:
 ・note
 ・Zenn

第6回人工生命研究会

第6回人工生命研究会 人工生命研究会の6回目はリアルとオンラインのハイブリッドで、リアル会場はつくば駅前のco-enスペースで行われました。 Evolving soft robots in neighboring environments 提案するNeighbourhood Modelという手法が面白かったです。 これは共通祖先からさまざまな環境ニッチに適応したフィンチのように、人工生命のエージェントがどのように環境に適応するか・適応した形態がどのように近隣の環境に進出するかを観察できるモデルです。 このモデルの骨子は通常の遺伝的アルゴリズムです。 一般的な遺伝的アルゴリズムと異なるのは、異なる環境をグリッド状に並べて、遺伝的アルゴリズムによる個体評価をする際に、近隣のグリッドのエージェントを一定数混ぜて一緒に評価するという部分です。 それにより、近隣に異なる環境がある場合はひとつの形態の独占状態が生まれにくく、逆に近隣に同質の環境が多い場合はひとつの形態が多くのグリッドを寡占するという状態が生まれます。 面白いのは、エージェントの混合は隣り合ったグリッド間でしか起きないので、ある形質が広がるかどうかにはグリッドの配置が影響するという点です。 発表では適応困難な環境をロの字型に配置することにより、外側の環境に対して適応して複数のグリッドに広がった形質が、ブロックしているロの字部分を越えられずに中央グリッドに進出できない様子がありました(↓ 赤枠部分が同種の支配種) このモデルの特色としては、 大きな空間的広がりを使わずに、同等の効果を得られる 遺伝的アルゴリズムにかける内容は、それ自体が移動できなくても良い という部分になると思います。 特にエージェントそれ自体に移動能力がなくとも"移動"による影響を導入できるのは応用範囲を広くしてとても面白いですね。 ピクセル単位で年齢推定するニューラルセルオートマトンの考案 Neural CAと同じアーキテクチャを使用 ピクセル単位で推定が行われるため画像の欠けなどに対してロバスト 学習させると、与えられた顔画像の各部分(目元、口元など)に対してそれぞれ異なる年齢が推定されて、その後計算を進めるにつれてどれかが優勢になり全体に広がる 異なる推定年齢が衝突した際にどちらが優勢になるのか、そのプロセスはまだわかっていない EvoJAX Tutorial EvoJAXはPythonで書いた計算をJust In Time CompilerでCUDA実行形式に自動で直し、CPU/GPU/TPUで計算してくれるフレームワークです。 コードを適合させるための制約は副作用のない純粋関数にすることだけで、GPU利用の計算をとても簡単に書けるらしい。 We will also have a hands-on tutorial from Bert Chan, Yujin Tang and Yingtao Tian from Google Brain about EvoJax. EvoJax is a NeuroEvolution ToolKit improved by hardware acceleration technologies, that is also used for evolutionary computation and alife simulations....

2月 21, 2023

質量保存セルオートマトンの実装

セルオートマトン上で全体の量が保存されるような物理量を扱うにはどのような実装を行えば良いでしょうか。 セルオートマトンの系に存在するのはそれぞれのセルの状態のみであり、現実世界における"質量"のような、増減しない物理量というものは本来存在しません。 この性質のために、セルオートマトンのパターンはほんの小さな種から無限に大きく育つことができますが、一方で「増減しない」という制約の不在により、現実世界では当たり前に存在する現象を作りにくい部分があります。 物理量の保存 セルオートマトン系全体でなにかの量が保存されるということはグローバルな制約ですが、セルオートマトンの計算はローカルに行われるので、大局的な制約を局所的に実装するという、一見あべこべな仕組みを矛盾なくつくる必要があります。 これをセルオートマトン自体の仕組みと矛盾なく導入するには、ある量(以下、“質量"と呼ぶことにします)の移動の際に、移動先と移動元の増減が一致するような計算であれば良いことになります。 また、この要件を現行の計算機上で実現する際には浮動小数点の誤差が問題になりうるので、移動する質量は整数とするなどという制約を設けておく必要があります。 これらをまとめると以下の要件となります。 要件 セルの状態に、系全体で増減しない量を導入できること セルオートマトンの定義に従ったまま実装できること 現行の計算機で実現できる仕様であること 決定論的計算であること※ ※ これはわたしの趣味です。決定論的な計算ができないから乱数を導入するっていうのは、問題から逃げてないですか? 仕様 これらの要件から矛盾を含まない仕様を起こしました。 t+1に影響する近傍セルはノイマン近傍(上下左右の4近傍)とする これは決めの問題でムーア近傍(8近傍)でもなんでも良い とりあえず計算サイクルあたりの計算量が少ないので採用 一般的なセルオートマトンのようにセルに着目してt+1の状態を計算するのではなく、隣接するセルのペアに着目し、そこにどれだけの質量の移動があるのかを算出する → 微分的操作 の項で説明 移動する質量の量の算出は、移動元と移動先の状態から一意に定まるのであればなんでも良い ひとつのセルは複数のセルと隣接するので、計算方法によっては流出質量の合計量がセルに格納されている質量を超える、つまりセルの質量が負数となりうる。これは質量のメタファーとしては問題だが、今回はなんらかの物理量が保存されることそのものを目的とするので特に解決しない 解決したい場合は、1計算サイクル内で流出する質量が、現在セルに格納されている量に依存して決定されるような計算にすれば良い 実装 実際に質量が保存するセルオートマトンを実装しました。 これらのセルオートマトンのセルの状態は、ある"物質"の"質量"がどれだけ格納されているか、と言い表すことができます。 単一物質の質量保存 Mass Conservation CA 質量保存の最も単純な形です。 質量の移動は、単純に質量の多いセルから少ないセルへ移動するという計算を設定しています。 それぞれのセルがランダムな質量をもつ初期状態から開始すると、だんだん質量の偏りが解消されて最終的には全体で一様な状態で安定します。 これは流体シミュレーションそのものであり、例えば質量の移動を行えない"障害物"セルを用意して"流路"を制限したりすることでより複雑なふるまいを観察することができるでしょう。 複数物質の質量保存 Multi State Mass Conservation CA ふたつの"物質"を用意したうえで物質間の相互作用を設定しました。 相互作用はなんでもよかったのですが、わかりやすいように、チューリング波を参考にして相互に排斥し合うような作用を設定しました。 セルが物質の格納量を状態としてもつのは同じですが、この系ではふたつの物質(物質Aおよび物質Bと呼ぶことにします)が格納されており、例えば「物質Aが30, 物質Bが20格納されている」という状態をもちます。 これらの物質は、ふたつのセルの間で以下の圧力にしたがって移動します。 a. 同じ物質同士が同じ格納量になろうとする力 b. 異なる物質を排斥しようとする力 c. 全ての物質の格納量が等しくなろうとする力 大まかにまとめると格納量の濃淡を均一化しながら同じ物質同士で塊をつくるようなルールになっており、実際に計算させると縞状の模様でふたつの物質が交互に並ぶパターンで安定します。 今回は計算の容易さのために最小の近傍半径(= 隣のセルまでしか影響を及ぼさない)をとったために生まれるパターンが細かいものになりましたが、近傍半径を大きく(multiple neighbourhood)すればより大きな塊をつくるようになり、水と油を混ぜたようなパターンが生まれそうです。 実装に失敗した系 Cellular Atmosphere これは昔、質量保存セルオートマトンを実装しようとして失敗した系です。 この系の質量の総和はおおよそ一定ですが、仕様不備の条件に当たると少しずつ失われてしまい、保存されているとは言えません。 実装の不足ではなく仕様に不備があるのが原因です。 仕様の問題点は、各々のセルに1種類の物質しか格納できないという部分で、この仕様のため、セルが空(真空)になる直前に最後に残った質量の移し先がないという状態が存在し得ます。 この系は流体シミュレーションをセルオートマトンで実装することを目的として作成したので、周囲に流体が詰まっている中にほぼ空のセルが存在することが許容できず、質量の喪失を許容にしました。 質量保存セルオートマトン 制約と範囲 セルオートマトンの定義を引き継いだまま質量の総和を一定にするには、質量の移動時に移動元から失われる量と移動先に追加される量が釣り合っている必要があります。...

11月 27, 2022

春暮一康「モータルゲーム」

SFマガジン2022年8月号収録 春暮 康一「モータルゲーム」 恒星間生命探索プロジェクトが有機的なセルオートマトンを発見した。そのルールは決定論的で、近い将来全ての"セル"が消滅することが計算によって明らかになる。 セルオートマトンを環境から自発した自己複製子と見なせば生命的だが、一方で決定論的にふるまいを計算できる現象は生命とは扱い難い。 オートマトンの自然環境を乱さないために手を触れず"絶滅"するに任せるべきか、それとも"品種改良"を行い長周期のパターンを育めるルールに改変すべきか。 探査チームの出した結論は… この物語は人間が未知の現象を求めて異星に旅立ち、まさにその目的に叶う現象を発見し、そしてその既存の学問の枠組みで捉えられない物事を人間がどのように扱うかを描いた物語です。 有機的オートマトンが自然発生することは、生命が自然発生したことを考えれば十分にあり得るシナリオであり、そのような準生命体の生命性についてはまさに人工生命分野で議論されているところですね。 決定論的にふるまいが決定できる現象を生命と呼べるだろうか? それが生命であるのであれば、その現象を電子的にシミュレートしたパターンも生命と呼びうるだろうか? どのような手段でも生き延び、自らの滅びに抗う存在を生命と呼ぶのではないか? しかしこの物語の焦点は異星のセルオートマトンではなく、その生命性の議論でもなく、未知の物事に対する人間の想像力と創造性の発露です。 決定論的な系に非決定論的な要素を導入する、という結論は、まさにOpen-Endedな系を目指す人工生命制作のひとつの方向性でもあります。 この物語がどのような結末に至るのかその目で確かめてください。

11月 13, 2022

Screepsドキュメンテーション超訳

※ この記事で単にScreepsと記載しているゲームはScreeps: Worldのことです ※※ この記事が参照している情報は2022年8月時点のものです Screepsのチュートリアルを終えるといよいよゲーム世界にデプロイできるようになりますが、実サーバーでうごくbotを実装するためにはゲーム世界の非機能要件を知っている必要があります。 これはScreepsのドキュメンテーションに記載されているのですが、それを読めというヒントはどこにも出てこないうえに英語で記載されているので、初心者に必要な部分を抜粋して日本語でまとめておきます。 Docs - Screeps Overview botを実装するにあたって参考になるリンク集が載っています。 実装を安全に試したいプレイヤー向けのサンドボックス環境:Tutorial, Training, Custom Tutorial ステップバイステップでCreep, Spawn, Towerの使用方法とゲーム内エディタの使い方を学びます Training あらかじめ決められた地形で、実装したbotを検証するための環境です Custom 地形、RCL、Structureの数など、ほとんど全ての環境要因を自由にカスタムできる環境でbotの動作検証を行えます ドキュメンテーション https://docs.screeps.com ここでまとめているドキュメンテーション本体 https://docs.screeps.com/api/ ゲームが提供するAPIの仕様書 コミュニティチャット 運営がDiscordサーバーを提供しており、ゲームと実装に関する話題/質問についてチャットできます 招待リンク:https://discord.com/invite/RjSS5fQuFx 主なDiscordチャンネル rules Discordの使用ルールです。要するに大人としてふるまってくださいねということです。読んでください useful-links お役立ちリンク集です world-help 全般的な質問をする場所 cpu-clinic CPU使用時間に関する質問をする場所 languages and technologiesのチャンネル群 各プログラミング言語に関する話題を話す場所 japanese-日本語 日本語で質問ができる場所 Introduction Roomの外に広がるゲーム世界の説明です。 ゲーム世界は50 x 50セルで構成されるRoom, 9 x 9Roomで構成されるSector, Sectorの集合であるShardという単位で構成されています。 Room 50 x 50セルで構成される セルはそれぞれplain, swamp, wallのいづれかの状態をとり、これがRoomごと固有の地形をつくる Controllerをclaimすることで自分の支配下に置くことができ、Structureを設置できるようになる Roomは隣接するRoomと接続しており、Creepはその間を自由に移動できる Sector 9 x 9Roomで構成される Sectorの構造: 中心の3x3RoomはControllerをもたずclaim不可だが、資源の豊富なSource Keeper’s Room Source Keeper’s Room以外は通常のclaim可能なRoom Sectorの間はこれもControllerをもたないHighway Roomが区切っており、claimされず妨害が少ないのでCreepの長距離移動に用いられる Shard 12 x 12程度のSectorで構成される shard0, shard1, shard2, shard3の4つのshardがあり、それぞれ独立して実行されるためtick速度が異なる shard3のみCPUに上限がかかっているため、CPU unlockの課金の有無に関わらず、全員平等なCPU量でプレイができる 初心者プレイヤーはshard3にデプロイするのが良いでしょう。...

9月 3, 2022

MembraneAutomata

これは学生の頃、連休中に思い立って書き上げたMacアプリケーションです。 10年以上前の実装にも関わらず現行マシンで問題なくコンパイルできました。実装言語のObjective-CとCに大きな更新がなかったためかな? 当時はパターンが収束してしまうことがわかり触るのをやめてしまったのですが、モデルの筋はいい気がするのでパラメータを変えて自動探索にかけたらなにか生まれそうな気がします。 概要 生命現象の土台となる恒常性をもつパターンが現れうる系を作成しました。今回はモデルと計算の簡便さから、系の基本構造にはセルオートマトンを採用しました。セルオートマトンはConway’s Game of Life[^1]に代表されるように、単純なモデルを比較的少ない計算量で実行できる便利な計算モデルです。しかしパターンの恒常性の観点から考えると、ひとつのセルの状態が反転しただけで崩壊するような不安定なモデルに恒常性をもたせるのは困難です。MembraneAutomataでは近傍半径を増やす[^2]ことで頑強なパターン構築を可能にしました。そしてMNCAの上で、恒常性のある領域を外界から隔離するために、泡状の構造が生成される簡易化学モデルを実装しました。 ^1: Conway’s Game of Life - Wikipedia ^2: Multiple Neighbourhood Cellular Automata (MNCA)と呼ばれる。Understanding Multiple Neighbourhood Cellular Automata Motivation of Current Work 私は生命のもつ予測不能性を再現するというテーマを研究しており、この作品はそのテーマのうえで、恒常性の創発に主眼を置いて作ったものです。予測不能性という制約のもとで設計するためには、実現したい現象(ここでは恒常性)を直接実装するのではなく、下位の現象を実装することを介して、実現したい上位の現象を創発する、という手法をとる必要があります。本作ではセルオートマトンの状態遷移ルールを適切に設定することによりそれを実現しました。 要件 系の要件 a. 比較的単純かつ小規模な計算で実現できること b. 現れるパターンがConway’s Game of Lifeより安定していること a.モデルの単純さと計算しやすさの要件からセルオートマトンを選択し、b.パターン安定の要件から近傍半径を増やして近傍セルひとつあたりのパターンへの影響度を小さくすることにしました。 セルオートマトンのルール要件 c. 恒常性をもつパターンが発生しうること c1. 系全体では、自然な行いに任せていると秩序が失われること(現実世界でのエントロピーの増大則と同等の仕組み) c2. そのような系のなかで、外界に影響されない区画が存在すること c21. その区画の境界部分が外界の影響を打ち消し、内部に伝えない役割を果たすこと 現実の現象を参考にこれらの要件を満たすルールを考えると、水中の油滴、あるいは泡を抽象化することで理解しやすいモデルを作れそうに思えます。泡状のパターンの境界付近で外界の影響を打ち消し、内部に恒常性をつくる、という構造です。 実装仕様 実装: MembraneAutomata - GitHub MNCAの実装 MembraneAutomataで実装するMNCAは近傍半径を2以上に拡張したものです。自セルの次の状態に影響する近傍セル数 n 近傍半径を r と置いたとき n = (r * (r + 1)) * 4...

7月 30, 2022

Read it later

あれば更新します 全般 Self-Reproduction and Evolvability 人工生命とは https://scrapbox.io/ayu-mushi/ シミュレーション molcloud - GitHub Open-Endedness For AGI, we need better tasks. For better tasks, we need open-endedness. Minecraft Open-Endedness Challenge プレゼンテーション クレイグ・ベンター 人工生命に関する発表 Games and Artificial Life: Open Endedness as common ground? CoG 2021 Keynote 書籍・論文 http://www.standardinc.jp/books/ Conway’s Game of Life Textbook 認知、意図、推論 ベイトソン 精神と自然: 生きた世界の認識論 フランシスコ・ヴァレラ 身体化された心 ウムベルト 知恵の樹 ニクラス・ルーマン 自己言及性について Reward is enough ロルフ・ファイファー 知能の原理 Screeps Screeps #4: Hauling is (NP-)hard Automated planning and scheduling カンファレンス GECKO Newsletter AI 人工知能に関する断創録 言語 Heart of Swift Building the Fastest JS (De)serializer 事業 未踏 育成事業以外は年齢制限がない? 社会実装できること重視な印象 https://www....

7月 26, 2022

ALIFE2022 Day4

疲れたので適当に流していたがこの発表はおもしろかった 細胞のモデルの、同期的並列的に動作する部分と逐次直列で動作する部分をうまく分離してそれぞれ適した実装をしたという発表 String: a programming language for the evolution of ribozymes in a new computational protocell model Proceeding: https://direct.mit.edu/isal/proceedings/isal/54/112248 細胞の基本的な機能は遺伝子、代謝ネットワーク、細胞膜から成り、これをモデル化したミニマムなProtoCell Modelを生成したという研究 面白いのは’RNA’がコードする’タンパク質’が短いプログラミングコードになっており(タイトルに入っているString言語: 言語仕様はProceedingにある)、それがなんやかや実行されて周囲に作用をするというつくりになっているところ。 エンコードされているので組み替えも突然変異もできる。Proceedingには設計した’タンパク質’と進化後それぞれのコードが載っている。

7月 21, 2022

ALIFE2022 Day3

英語聴きすぎてよくわからなくなってきた 参加費にお菓子代が入ってれば経費なのに… Chemically fueled droplets; towards the synthesis of life ボトムアップで生命の理解を深める 生命の要素 Self-sustaining: 熱的平衡状態を保つ Compartment: ダーウィン進化: 自己複製と突然変異 self-sustaining compartmentをつくる エネルギーを取り込んでごみを排出する →化学サイクルを設計する Growing Isotropic Neural Cellular Automata growing neural CA + self organizing texture GNCAの問題点: anisotropy(異方性)があること:回転させると壊れる

7月 20, 2022

ALIFE2022 Day2

アブストの載っているプログラムを翻訳したのち聞くようにしたら多少わかるようになった…か?わからん オーストラリアのソフトウェアエンジニアの参加者に、Tierraで個体長を大きくする淘汰圧はどう実装するかやオートエンコーダで創発が検出できるのではといった話を聞いた。聞き返せると6割くらいはわかる Empathic Active Inference: Active Inference with Empathy Mechanism for Socially Behaved Artificial Agent 共感の認知機能を実装することでエージェントに利他的なふるまいをさせることを可能にしたという発表 そのようなエージェントも利己的な集団に突っ込むと利己的にふるまうようなので、単に他者の利益を評価してそのようにふるまっているわけではない Voluntary safety pledges overcome over-regulation dilemma in AI development: an evolutionary game analysis エージェントの行動を直接的に制限するのではなく、制約を設けることにより自発的にある行動を抑制するような仕組みを作ったという発表 Simulations of Vesicular Distanglement 細胞の小胞体間の接続をどのように切り離すかシミュレーションで研究したという発表 時間になっても発表者が現れなかったため昼休みになった。自由かよ 泡状の物体をどう分裂させるかという話なのだったら気になっていたので後で見直したい 泡のような形状を自律的につくる系をつくるのは簡単で、互いに接続しつつ体積あたりの表面積が最小になるような制約をかければすぐできる。 一方でこれを分裂させようとするのはその制約に反するため難しい。 より大きな制約をつくって、「今までの制約は大きな制約のひとつの側面でしかないんですよ、こういう条件では制約が緩くなりますよ」ということにするか、別の仕組みを導入して力技でなんとかするか、現実の生命はどうやっているんだろうね? Evolving Unbounded Neural Complexity in Pursuit-Evasion Games 共進化で個体の複雑さは増加する prior workに出ていた言語推測ゲームって立命館大学の谷口先生かな? Firefly-inspired vocabulary generator for communication in multi-agent systems 蛍が群れていると自分の点滅パターンが大勢に埋もれてしまい相手に届かないため、埋もれないような点滅パターンをどのように生成するかという発表 Alternative Comfortの研究と似てるかな その他に気になった発表 Testing the Efficiency of a Genome-Wide Association Study on a Computational Evolutionary Model 手法として取り入れたALifeモデルが面白そうだった

7月 19, 2022

ALIFE2022 Day1

今年はイタリアなのでCESTで時差は7時間 全て英語なので事前にアブストを読んで話の流れを掴んでおかないとだいたいわからない The evolution of adaptive phenotypic plasticity stabilizes populations against environmental fluctuations Phenotypic plasticity: which is the capacity for a single genotype to produce alternate phenotypes depending on environmental conditions. Adoptive phenotypic plasticity: 〜が個体の生存に有利であること digital organism(Avida)でモデルを検証 餌(reword)と毒(punish)をもつ環境 餌と毒が逆のふたつの環境を用意し、その環境を交互に切り替える みっつの実験 plastic 環境の変化を検出できる non-plastic 環境の変化を検出できない static 環境の変化がない(全て餌 non-plasticのみ突然変異率と表現型の変化率が桁幾つというレベルで高かった Evolving Programmable Computational Metamaterials ファジーな論理ゲートを生成するみたいなモデルが面白かった 粒子の運動がどのように伝播するか、入力の粒子と出力の粒子を用意して入力粒子を動かして出力の粒子の動きを出力として扱う その他に気になった発表 Is Prediction Required? Using Evolutionary Robotics to Investigate How Systems Cope with Self-Caused Stimuli Dirty Transmission Hypothesis: Increased Mutations During Horizontal Transmission Can Select for Increased Levels of Mutualism in Endosymbionts Finding Chemical Organisations in Matter-Conserving AChems

7月 18, 2022