Giter VIP home page Giter VIP logo

alifegamejam2019's People

Contributors

ayu-mushi avatar dependabot[bot] avatar iida-hayato avatar mitsuyoshi-yamazaki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

alifegamejam2019's Issues

Jupyter Notebook で実行する

  • 統計と可視化をPythonのコンポーネントに任せるようにする
  • TS -> Python のコンバータを作る
    • 環境が限定されていればそこまで苦労しないはず

Features

Features

ALife

  • Implement scale merit -> how?
  • Insert mutation rate into gene

Add taxis(走性)

Gene would be following three parts:

  • a) part representing its prey
  • b) part representing what it move for
  • c) part representing what it flee from

The gene that represent itself would be hash(a + b + c)

遺伝子型 vs 表現型

成り行きでふたつの形式で遺伝情報※が実装されているが、このふたつの形式のどちらが有利(とは?)か実験したらどうか

※ 捕食/被食関係と生命の大きさ:前者は遺伝子型であるのに対し、後者は表現型が連続的に変異する

それぞれの形式の遺伝情報に、同じ表現型を作り出す情報を入れておき、なんらかのスイッチ(これも遺伝情報に入れる)によってどちらを読み出すかを切り替えられるようにしたらどうか

Generative Art

  • Apply color palette
  • Create color palette from picture
  • 局所性をなくすため、リソースが撒かれた状態で開始する

色の近さと遺伝的な距離が異なる問題

現在の実装では、カラーコードに遺伝子にはない「桁」の概念が入っているため、上位桁の遺伝子ビットの方が影響が大きくなっている
遺伝的な距離を色の近さで表すことができないだろうか

遺伝子の bit 数の軸が必要になるので難しいのでは 🤔
実現できても、色の不協和音が起きそう

#1 (comment)

アイデア置き場

  • エネルギー効率の実装
    • pred_gene と prey_gene の組み合わせごとにエネルギー効率を算出できるようにする
    • エネルギー効率がマイナスなものは食べるほどエネルギーが減る(毒物
  • 遺伝子のbit長を変化させて系の性質が変化するか調べる

References

Application

  • Adjust canvas size to window size (or screen size, for mobile)
  • Stop taking screenshot when all lives die
  • Include parameter (and commit id) in screenshot
  • Add link to index.html

ALife as Game/Research/etc

  • [Advanced] 実験手法、結果、説明を統合的に扱えるフォーマットを用意できる(Kaggleのkernelのような

実装

Jupyter Notebookで実行する

  • 統計と可視化をPythonのコンポーネントに任せるようにする
  • TS -> Python のコンバータを作る
    • 環境が限定されていればそこまで苦労しないはず

TODO

  • droppings のHTML名を変える

リファクタ

今後さらに複雑な生物/世界を実装するにあたって、生物と世界のレイヤーを分離してインターフェースを定義する

  • 生物と世界のレイヤーを分離
    • 世界は常に一定のルール(物理法則)にもとづいて稼働する、生物は世界への働きかけのみを行う
    • ”エネルギー” などは生物がもつのか世界が管理するのがよいのか、難しい概念
  • ついでにコンパイラに仕事をさせるためTS化する

「ここからここまでが内部状態をもつ生命である」という部分を定義しているのがこのインターフェースにおける抽象化

// TS忘れたのでSwift

protocol World<T: Rule> {
  // 世界全ての状態
  // Objects がどれだけあるかもここに含まれる
  var state: T.State { get }

  // 世界開闢からの時刻
  var t: Int { get }

  // rule が型でなくインスタンスであるのは、各種パラメータを変更できるようにするため
  // 例:重力加速度を0.5m/s^2とする
  var rule: T { get } 

  // t+1 の世界の状態に進める:state が更新される
  func next()

  // state の状態を描画
  func draw()
}

protocol Rule {
  // このルールにおける状態
  associatedType State

  // 重量、サイズ等 物理演算に必要な属性
  associatedType Property

  // t+1 の状態を算出
  func next(state: State) -> State
}

protocol Object<T: Rule> {
  // 重量、サイズ等 物理演算に必要な属性
  var property: T.Property { get } 
}

class Life: Object {
}

  • 生物と世界を分離できれば、任意の組み合わせをパラメータで与えてホスティングに表示できるかもしれない
  • 生物のセンシングは、センサーのスペックを世界に渡して、それに対するセンシング結果を返してもらう形式にすればそれっぽくなるのではないか

拡大・縮小

画面(内容を含めて)の大きさを変える (動的・静的)

ページを分割する

概要

複数のロジックが実装されるようになったので、それぞれホスティングされるようにページを分割する

手法

index.html は目次として、そこから各ページにリンクする

memo

逆に、canvasタグを複数おけば一つのページで複数実行することができる

<script src="processing.js"></script>
<canvas data-processing-sources="main.pde"></canvas>
<canvas data-processing-sources="main.pde"></canvas>

アイデア等々

遺伝型と表現型の差異をもつ実装

  • 生命と恣意的に定義した定義の最小要件を実装すると何か面白いのではないか
    • 「遺伝型と表現型の差異をもつもの」の最小の実装としては、遺伝子がコーディングする情報が余分にあり、環境要因でどちらが発現するか切り替えられる、というものではないか
  • 表現型の表現は自己複製ではなく自己展開なのではないか

Blind Painter + 表現型

  • 卵の状態でブートストラップコードが展開し、それが環境を読んで呼び出す本体のコード(これが余分にある)を判別する、とか?
    • 遺伝情報を読み出す身体が必要(でなければ読み出す部分が世界に規定されていることになる)
    • Blind Painterも捕食者-被食者関連遺伝子が世界に規定されているので、最初は決め打ちでやってみる

L-Systemベース

L-Systemはルールと状態をもつ
ルール例(フィボナッチ):A->AB, B->A
状態例:

t 状態
0 A
1 AB
2 ABA
3 ABAAB

L-System + 遺伝型と表現型

  • L-Systemのルールと状態の関係は遺伝型と表現型の関係そのものではないか
    • 初期状態に応じてルールの使用頻度が変わる

L-System + GA

  • 遺伝的アルゴリズムでL-Systemのアーティスティックな模様を探索できるのではないか

L-System + Machines and Tapes

共進化

  • 宿主-寄生
  • 捕食者-被食者

BlindPainter

  • 捕食者-被食者の共進化
    • 再生産速度を遅くして形質による有利/不利が判定される時間を確保する

その他

遺伝子に履歴

  • 過去に体験した環境(に適応するための表現型を表す遺伝子)が種や個体に残る
    • 環境に対して適応するための見た目にわかりやすい身体的特徴が必要

過酷な生態系

  • 進化は入れるとしても重要な要素ではない
  • 人工生命系やゲームにおける生物はどうもリアルさを感じない
    • それは、現実の生命全てが普遍的にもっている、生に対する執着が感じられないためではないか
    • 現実の生命は、どんなに単純なものであっても、どのような刺激にも反応し、害されたと感じた場合はそれに抗う

Blind Painter に MEMEを入れる

  • 「どの色が捕食者か」などの情報を伝えられる
    • "擬態"を実装するには、RGBのうちいくつかを視覚から取り除けばいい

宗教戦争ゲーム

  • コンセプト:プレイヤーから見えないレイヤーにGame of Lifeが埋め込まれている
  • "十字軍(Game of Lifeレイヤーではグライダーにマッピングされる)" を適切な角度で設置してグライダーガンを作るなどすると勝てる

同盟

  • 異なる遺伝子同士で"同盟"を組めるようにしたらパターンが生まれて面白いのではないか
  • Evolution SwarmChemistryのように

memo

いつものダーウィニズムとラマルキズムの比較実験

動的環境下における学習と遺伝・進化 : ダーウィニズム とラマルキズムの比較
https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/96090/1/KJ00004755637.pdf
ラマ ル ク型 の 遺 伝 機 構 を持 つ 集 団 は , 静 的 な環 境 下 で は ダ ー ウ ィ ン型 の 集 団 に比 べ て 圧 倒 的 に有利であるが,環境が動的に変動するような状況においては,その変動に合わせて適応度 も大 き く振 動 し 極 め て 不 安 定 な 挙 動 を 示 す . 一 方 , ダ ー ウ ィ ン 型 の 集 団 は , 環 境 が 変 動 し て も ラ マ ル ク型 の 集 団 ほ ど 挙 動 が 不 安 定 に な る こ と は な い . こ の よ う な 動 的 な 状 況 下 で は , 個 体 の 学 習 と 集
団の進化の過程を明確に分離して,各個体のレベルでは学習によって詳細な規則に対応しつつ も, 集 団 全 体 と し て は あ る 程 度 の 汎 用 的 な 可 能 性 を 保 っ た ま ま徐 々 に 適 応 し て い くダ ー ウ ィ ン 型 の 遺 伝機構の方が安定性,頑健性の面で優れる.さらに特筆すべ きことは,ダーウィン型の集団は, 動 的 特 性 の 強 い 環 境 下 で 安 定 し た 挙 動 を 示 す だ け で な く, 世 代 が 進 む に つ れ て 適 応 度 を 上 昇 さ せ ている点である.つまりダーウィン型の集団は,動的な環境に対す る適応能力を備えている.

草食・肉食

geneLength = 1の場合、肉食が共食い(1, 1)で草食(1, 0)はそうでない(植物が(0, 0))というのはできるが、肉食が共食いでなく(1, 0) 草食が共食い(1, 1)とすると、植物は(*, 1)以外ありえないが、そうすると肉食も植物を食べることができてしまう。
また、肉食が共食いでないく 草食も共食いでないとすると(1, 0) (0, 1) または (0, 1) (1, 0)の組み合わせになり、相互捕食になる。
よって、肉食が共食いでないようなgeneLength=1の草食―肉食系は存在しない

拡張

具体的になったら独立issueにしてください


課題

  • ALife Core
    • 優勢な種がすぐ移り変わってしまい、安定しない
  • 遺伝子長を長くしたらより種の"分化"が進むのではないか

なんでも

具体的になってきたら独立issueにしてください

Blind Painterについて

どこかに置いておく BlindPainter 説明文の下書き


image001

はじめに

BlindPainterはALife Game Jam 2019で作成した人工生命系/ジェネラティブアートです。
作品のコンセプトを "収束しない進化" と設定し、常に移り変わって寡占にならない人工生命系を実装しました。

コンセプト

イベントの "ever changing -変わり続ける-" というテーマと "人工生命" というワードから、作品のコンセプトを "収束しない進化" と設定しました。
人工生命系の製作においては、自己複製の最適解におちいって変化しなくなってしまう問題がよく発生します。
"収束しない進化" というコンセプトはこの問題を回避して変化し続ける = 観察していて飽きない人工生命系を目指すものとして設定しました。

仕様

"収束しない進化" というコンセプトを実現し、さらに今回は試行錯誤の時間がとれないということを考えて、人工生命は凝った作りにせず、コンセプトの実現に注力した仕様を策定しました。

人工生命の仕様

簡単に実現できるように以下の仕様としました。

  • 各生命は遺伝子をもつ
  • 生殖するまで生き延びたものが子孫を残す
  • 無性生殖で、遺伝子をコピーする際に確率で突然変異する
  • 感覚器官、移動器官は実装せずランダムに動き回る

"収束しない進化" の実現

収束しない = 最適解におちいらない というコンセプトを実現するには以下の方法が考えられます。

  • a. 最適解が存在しない系を設定する
  • b. 現実的な時間で求められないような最適解を設定する
  • c. 最適解を移動させる

aは実現できるか不明なので除くとして、bとcのうち設計しやすいcの方針を採用しました。
具体的には「餌にできる種を遺伝子に設定することにより、周囲に存在する種によって最適戦略が変わる」という仕組みです。

実装

遺伝子

「餌にできる種を遺伝子に設定する」という仕様を実現するために、遺伝子には「自分自身を示す情報」と「餌がなんであるかを示す情報」を格納する必要があります。

Video 4 ja Copy

# コラム
面白いのは、現実の遺伝子は生命の表現型を表現する役割が第一であるのに対して、
この人工生命の遺伝子はそれ単体では何も表現せず他者との関係性のみを記述するものであるということですね。
他者のいない状況では何の情報ももたず何の役にも立ちません。

淘汰

淘汰を起こすために、リソースを奪い合うゼロサムゲームを設定します。
今回は各生命がエネルギーをもち、エネルギーは移動で減り捕食で奪えるという仕組みにしました。

また、それだけだと系全体のエネルギー量が減少する一方になるため、日光のメタファーである"餌"を出現させるようにしました。

エネルギーのサイクルは

  1. 餌の出現によって系にエネルギーが追加される
  2. 餌を捕食することで生命がエネルギーを獲得する
  3. 生命が別の生命を捕食することでエネルギーが移動する
  4. 生命の移動、繁殖によりエネルギーが系から失われる
    ということになります。

BlindPainter

狙い通り、ひとつの遺伝子(種)に収束しない進化系を実現できました。
一種類の種が繁栄すると、増えた種を捕食する種に有利な状況になる = 増えた種に不利な状況になるため、状況が安定せず収束しないようです。

Kapture 2021-01-11 at 18 51 32

また、生命の移動の軌跡を表示することで動く油絵のようなジェネラティブアートが生まれました。
人工生命をベースにしているため「収束しない」という基本属性を引き継いでおり、勢力が常に移り変わる様子が映し出されています。

Kapture 2021-01-11 at 18 51 44

課題

一見コンセプトと矛盾しますが、この作品には「安定した生態系が生まれない」という課題がありました。
BlindPainterは特定の種族が寡占することはありませんが、大局的に見ると「種族が常に移り変わる」という点は変化しません。
系としてのバリエーションが増えるためには、大局的には均一化しない一方で、局所的には安定した生態系が存在できる必要があり、今後はそちらの改善も行いたいところです。

まとめ

BlindPainterは生命同士の関係性を遺伝子で定義することにより、"収束しない進化" のコンセプトを実現しました。
また、人工生命を絵画に落とし込むことでジェネラティブアートとして表現しました。

ALife2020 Art Gallery

人工生命に関する国際会議 ALife2020 にて、シンプルな仕組みでありながら複雑なふるまいを創発できるアイデアを評価されて Art in the Science Award を受賞しました。
https://note.com/hogera/n/nf444f17d98cb


ここからめも

考察できること

  • 分析をする
    • 環境による淘汰圧はないが、相対的に有利な遺伝子配列はあるか
    • 遺伝子のbit長さを調節したらどうなるか

Future Work

  • 今回は関係性のみに着目して実装したため、環境からの淘汰圧を設定していない = 特に何もしなくとも生存し続けられるようになっている
    • 今後の制作では、生きるために進化が必要であるような厳しい環境を設定したうえでどのように関係性が変化するかを観察したい
  • 共進化が可能な実装にする
    • predator/preyそれぞれの戦略が遺伝するようにする
    • refs: Stephen Kelly Sustainable Open Endedness is Coevolving Artwork

人工生命製作について

  • 恣意的なルールを入れたくない
    • 今回恣意的なルールを入れたところ
    • 系全体のエネルギー量を一定に保つことで個体数に上限を設ける
      (別記事にまとめてもいいかもしれないが今回のことについてはここに書く

Cellular Atmosphere

  • 気圧が低下した際に真空になる条件を緩和する
  • Implement heat
  • Implement wall
  • Implement gravity
  • Make viscosity (粘性) customizable
  • Implement law of conservation of mass (質量保存則
    • Mass slightly lost when a cell changes its material from gas to vacuum: the remaining gas amount is indivisible.

観察結果を残す

概要

観察・実験結果を残し、再現できるようにしたい

課題

todo

  • .pde も同様に扱えるか調査する
  • 実行環境を埋め込むためのElementを作成する
  • 説明を埋め込むためのElementを作成する
  • とりあえずindex.htmlにリンクを入れる
  • (optional)ページ階層を決め、本体ページからアクセスできるようにする
  • (optional)乱数のシード値を固定できるようにする
  • (optional)実行環境の変数を変更できるようにする
  • (optional)フォーマットされた文章を書きやすくする https://www.npmjs.com/package/markdown-it

memo

JSDelivr URL変換 https://stackoverflow.com/a/18049842

http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js

http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js


https://raw.githubusercontent.com/mitsuyoshi-yamazaki/ALifeGameJam2019/0e7f4c5f63cdd010599f0c1c6fc09cd2ff05c68f/dist/machine.js
https://cdn.jsdelivr.net/gh/mitsuyoshi-yamazaki/ALifeGameJam2019@0e7f4c5f63cdd010599f0c1c6fc09cd2ff05c68f/dist/machine.js

.pde

ファイル自体は見えているためヘッダの問題が解決すればロードできそうだが

Request header field If-Modified-Since is not allowed by Access-Control-Allow-Headers.
XMLHttpRequest cannot load https://cdn.jsdelivr.net/gh/mitsuyoshi-yamazaki/ALifeGameJam2019/processingjs/main.pde due to access control checks.

https://raw.githubusercontent.com/mitsuyoshi-yamazaki/ALifeGameJam2019/5588cd8059cd48d44bd7e3904dd3f923fd45492c/processingjs/main.pde
https://cdn.jsdelivr.net/gh/mitsuyoshi-yamazaki/ALifeGameJam2019@5588cd8059cd48d44bd7e3904dd3f923fd45492c/processingjs/main.pde
https://cdn.jsdelivr.net/gh/mitsuyoshi-yamazaki/ALifeGameJam2019/processingjs/main.pde

絶滅

記録からは、絶滅前夜にはリソースが増加していないことが見て取れる。
単一種属が席巻したためにその種が餌とするリソースがなくなり、かつそれ以外のリソースは増加し続けたため、リソースの上限に達してリソースが増加しなくなり、単一種が滅びたのだと思われる。

1575309921__000879
1575309921__000881
1575309921__000884
1575309921__000888
1575309921__000891
1575309921__000898

Blind Painter 可視化

  • 生命同士の関係性に着目したのがALife Core
    • 関係を可視化できないか
      • 現在は捕食時のみ色を出しているが、カニバリズム/一方的な捕食/双方向の捕食 の関係性、また新種の発生などを可視化できれば
    • 種の集団を国境のような境界線で区切れば、種同士の関係性を境界線に表現することができる
  • 遠近感を出す
    • 時間により色の明度に差をつけ、生きている集団は明度を上げ(近くに見える)、死んだ集団は時間経過で明度を下げる
  • 領域の境界線を描画すると時間変化がわかりやすくなる

1594484443__00004714
種のカラーリングをグレースケールにし、捕食時に赤色で表示

PLシミュレータ

全然関係ないが、課金サービスのユーザーをモデル化したゲームを作って、利益の最大化を目指したら面白そう
課金体系を変更すると行動がどう変わるか


商品ラインナップと各アイテムごとの欲しがるユーザーの割合は一定とすれば、課金/ガチャ体系の変化のみの影響を追えそうである

参考

https://qiita.com/41semicolon/items/9d4d200c14b09cb28fd9
https://qiita.com/41semicolon/items/9f7a6a6ceef57d11884d

mutation_rate = 1

  • 特定の種が増えることはない
  • 満遍なく食べられるためかフィールド上のリソースは少ない
  • 連続値で変異する表現型の size がいい仕事をしている
  • size は大きくなるものと小さくなるもので二極化しているように見える
    • 常に周囲に捕食者がいるので、生存コストを減らす→極小化、捕食リスクを減らす→極大化 ?
  • 隠れられる場所もないのに、小さい個体が食い尽くされないのも不思議だ

この辺が綺麗

Untitled 2

TODO

  • このissueに寄せる
  • 適応度関数を一段計算を挟むようにする

適応度関数を一段計算を挟むようにする

ふたつの遺伝子から戦闘力的なものが算出されるようにするとか、それに地形が影響するようにするとか
直接求めるのとは質的に異なる生態系パターンが生まれるのではないか
あと複雑さを増やすための介入がしやすくなる

現実の生命は環境も適応度関数に入っており、また生命自身も環境を変える能力があるというフィードバック構成がある

Generative(n) Art

  • Generative^0 Art
    • 図形とか
  • Generative Art
    • ランダム
  • Generative^2 Art
    • 採用されるルールがランダムに決まる
  • Generative^3 Art
    • 採用されるルールがランダムに生成される
  • ...
  • Generative^n Art

  • nが大きくなるほど恣意性が薄れる
  • Generative^->∞ Artでは人間は「美的基準」のみを設定することになり、これが究極の純粋美術になる

めも

G(2) まではCasey ReasのProcessシリーズをそのまま使える

ref

https://note.com/hogera/n/n3bdff52bfd55

htmlの整備

  • 各ページにパン屑リストを入れる
  • 説明を強化する
    • 必要なら日本語化する
  • シェア機能
    • スクリーンショットと一緒に
    • 色変更など遊べる要素
  • デザインを更新する
    • 表示内容
      • タイトル
      • 解説
      • メニュー
      • 状況
        • timestamp
      • バージョン情報
      • 表示の見方のヒント
  • メニューを追加する
    • 一時停止/再開/最初から
    • スクリーンショットを保存
    • パラメータを編集(テキストでいいのでは)
    • 現在の状態を保存
    • 保存した状態を読み込み
    • フルスクリーン
      • 展示用に時刻表示してフルスクリーンにできるようにしたら
  • OGPの追加
  • (optional) 現在の状態を保存して再開できるようにする
  • (optional) UIでパラメータを変更できるようにする
  • (optional) フルスクリーン化できるようにするう
  • (optional) SPA化する

TODO

  • Art in the Science Awardの説明を書く
  • issueのリンクを貼る
  • パラメータの変更機能、説明

MEMO

https://twitter.com/ALifeConf/status/1284633511949983744

ページのデザインに関して参考になりそうなリンク集

MTML/CSS/JS

デザイン案

Windowed

Windowed

Fullscreen

Fullscreen

Fullscreen(UI)

Fullscreen UI

ALIFE 2020 Award

Hello, this is not an issue, but I am trying to get a hold of you, so I can send you your ALIFE award for "Art in the Science" from 2020.

If you get this, please contact me at [email protected] with a mailing address!

突然変異しない設定下でエサを投入した場合

それなりに種族の移り変わりが観察できる。
突然変異による新種族は出てこないが、最初にエサの塊を食べた種が大繁殖して周囲に広がり、それを他の種が捕食して群れを席巻する

BlindPainter集計

  • 「収束しない」の明示化
    • 構造上、単一種が長期間生き延びることはできないのでは?
  • 遺伝子プールの変化を集計する
  • 遺伝子のbit長ごとに結果はどう変わるか

案)物質をセルオートマトンで実装

Oxygen not Included のような挙動で比較的簡単に実装できるのではないか

  • 気体、流体は混ざらない
  • 同じ気体が隣接するセルで気圧が異なる場合、tick ごとに平均していく
    • 変化量で"粘性"等のパラメータが表現される
  • 質量は(不動小数点で表現できる限り)保存される

ESLint移行

何かTSLintにした理由があったと思ったのだが忘れたのでもう一度調べる
移行するならする

やること TODO

  • jest を取り込み
  • React化
  • 内容を文章で説明
  • ReadmeにArt in Science載せる
  • Screenshotを動画に変換
    • 動画でダウンロードできるよう実装

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.