mitsuyoshi-yamazaki / alifegamejam2019 Goto Github PK
View Code? Open in Web Editor NEWALife Art "BlindPainter"
Home Page: https://mitsuyoshi-yamazaki.github.io/ALifeGameJam2019/
License: MIT License
ALife Art "BlindPainter"
Home Page: https://mitsuyoshi-yamazaki.github.io/ALifeGameJam2019/
License: MIT License
フーリエ変換、移動平均など?
Gene would be following three parts:
The gene that represent itself would be hash(a + b + c)
成り行きでふたつの形式で遺伝情報※が実装されているが、このふたつの形式のどちらが有利(とは?)か実験したらどうか
※ 捕食/被食関係と生命の大きさ:前者は遺伝子型であるのに対し、後者は表現型が連続的に変異する
それぞれの形式の遺伝情報に、同じ表現型を作り出す情報を入れておき、なんらかのスイッチ(これも遺伝情報に入れる)によってどちらを読み出すかを切り替えられるようにしたらどうか
現在の実装では、カラーコードに遺伝子にはない「桁」の概念が入っているため、上位桁の遺伝子ビットの方が影響が大きくなっている
遺伝的な距離を色の近さで表すことができないだろうか
遺伝子の bit 数の軸が必要になるので難しいのでは 🤔
実現できても、色の不協和音が起きそう
遺伝子型ではなく家系で色分けをする
今後さらに複雑な生物/世界を実装するにあたって、生物と世界のレイヤーを分離してインターフェースを定義する
「ここからここまでが内部状態をもつ生命である」という部分を定義しているのがこのインターフェースにおける抽象化
// 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 {
}
canvasの一部をインスペクタ表示領域とすれば良さそう
画面(内容を含めて)の大きさを変える (動的・静的)
複数のロジックが実装されるようになったので、それぞれホスティングされるようにページを分割する
index.html は目次として、そこから各ページにリンクする
逆に、canvasタグを複数おけば一つのページで複数実行することができる
<script src="processing.js"></script>
<canvas data-processing-sources="main.pde"></canvas>
<canvas data-processing-sources="main.pde"></canvas>
L-Systemはルールと状態をもつ
ルール例(フィボナッチ):A->AB, B->A
状態例:
t | 状態 |
---|---|
0 | A |
1 | AB |
2 | ABA |
3 | ABAAB |
動的環境下における学習と遺伝・進化 : ダーウィニズム とラマルキズムの比較
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にしてください
具体的になってきたら独立issueにしてください
X軸だけでよい
どこかに置いておく BlindPainter 説明文の下書き
BlindPainterはALife Game Jam 2019で作成した人工生命系/ジェネラティブアートです。
作品のコンセプトを "収束しない進化" と設定し、常に移り変わって寡占にならない人工生命系を実装しました。
イベントの "ever changing -変わり続ける-" というテーマと "人工生命" というワードから、作品のコンセプトを "収束しない進化" と設定しました。
人工生命系の製作においては、自己複製の最適解におちいって変化しなくなってしまう問題がよく発生します。
"収束しない進化" というコンセプトはこの問題を回避して変化し続ける = 観察していて飽きない人工生命系を目指すものとして設定しました。
"収束しない進化" というコンセプトを実現し、さらに今回は試行錯誤の時間がとれないということを考えて、人工生命は凝った作りにせず、コンセプトの実現に注力した仕様を策定しました。
簡単に実現できるように以下の仕様としました。
収束しない = 最適解におちいらない というコンセプトを実現するには以下の方法が考えられます。
aは実現できるか不明なので除くとして、bとcのうち設計しやすいcの方針を採用しました。
具体的には「餌にできる種を遺伝子に設定することにより、周囲に存在する種によって最適戦略が変わる」という仕組みです。
「餌にできる種を遺伝子に設定する」という仕様を実現するために、遺伝子には「自分自身を示す情報」と「餌がなんであるかを示す情報」を格納する必要があります。
# コラム
面白いのは、現実の遺伝子は生命の表現型を表現する役割が第一であるのに対して、
この人工生命の遺伝子はそれ単体では何も表現せず他者との関係性のみを記述するものであるということですね。
他者のいない状況では何の情報ももたず何の役にも立ちません。
淘汰を起こすために、リソースを奪い合うゼロサムゲームを設定します。
今回は各生命がエネルギーをもち、エネルギーは移動で減り捕食で奪えるという仕組みにしました。
また、それだけだと系全体のエネルギー量が減少する一方になるため、日光のメタファーである"餌"を出現させるようにしました。
エネルギーのサイクルは
狙い通り、ひとつの遺伝子(種)に収束しない進化系を実現できました。
一種類の種が繁栄すると、増えた種を捕食する種に有利な状況になる = 増えた種に不利な状況になるため、状況が安定せず収束しないようです。
また、生命の移動の軌跡を表示することで動く油絵のようなジェネラティブアートが生まれました。
人工生命をベースにしているため「収束しない」という基本属性を引き継いでおり、勢力が常に移り変わる様子が映し出されています。
一見コンセプトと矛盾しますが、この作品には「安定した生態系が生まれない」という課題がありました。
BlindPainterは特定の種族が寡占することはありませんが、大局的に見ると「種族が常に移り変わる」という点は変化しません。
系としてのバリエーションが増えるためには、大局的には均一化しない一方で、局所的には安定した生態系が存在できる必要があり、今後はそちらの改善も行いたいところです。
BlindPainterは生命同士の関係性を遺伝子で定義することにより、"収束しない進化" のコンセプトを実現しました。
また、人工生命を絵画に落とし込むことでジェネラティブアートとして表現しました。
人工生命に関する国際会議 ALife2020 にて、シンプルな仕組みでありながら複雑なふるまいを創発できるアイデアを評価されて Art in the Science Award を受賞しました。
https://note.com/hogera/n/nf444f17d98cb
ここからめも
観察・実験結果を残し、再現できるようにしたい
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
ファイル自体は見えているためヘッダの問題が解決すればロードできそうだが
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
領域の境界線を描画すると時間変化がわかりやすくなる
volonoi diagramを使ったらいい感じになるのでは
https://nekodigi.hatenablog.com/entry/2020/01/05/【Processing】ドロネー三角形分割からボロノイ図を作る
全然関係ないが、課金サービスのユーザーをモデル化したゲームを作って、利益の最大化を目指したら面白そう
課金体系を変更すると行動がどう変わるか
商品ラインナップと各アイテムごとの欲しがるユーザーの割合は一定とすれば、課金/ガチャ体系の変化のみの影響を追えそうである
https://qiita.com/41semicolon/items/9d4d200c14b09cb28fd9
https://qiita.com/41semicolon/items/9f7a6a6ceef57d11884d
画像を餌にマッピングして与えたらどうか?
解像度をとても高くしたら油絵フィルターになるのでは
ふたつの遺伝子から戦闘力的なものが算出されるようにするとか、それに地形が影響するようにするとか
直接求めるのとは質的に異なる生態系パターンが生まれるのではないか
あと複雑さを増やすための介入がしやすくなる
現実の生命は環境も適応度関数に入っており、また生命自身も環境を変える能力があるというフィードバック構成がある
$ yarn build
doesn't look "incremental": true
in tsconfig.json
(it doesn't create tsconfig.tsbuildinfo
)
$ tsc
does (it creates tsconfig.tsbuildinfo
)
G(2) まではCasey ReasのProcessシリーズをそのまま使える
https://twitter.com/ALifeConf/status/1284633511949983744
ページのデザインに関して参考になりそうなリンク集
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!
それなりに種族の移り変わりが観察できる。
突然変異による新種族は出てこないが、最初にエサの塊を食べた種が大繁殖して周囲に広がり、それを他の種が捕食して群れを席巻する
https://mitsuyoshi-yamazaki.github.io/ALifeGameJam2019/pages/gravitational_field.html
の発展
現在の位置、速度だけではなく、過去の状態を保存しておくことで海月のような見た目を作れそう
海月の傘や触手は、能動的に動いた位置、速度を保ったまま受動的に漂うので、あながち間違いでもなさそう
Oxygen not Included のような挙動で比較的簡単に実装できるのではないか
何かTSLintにした理由があったと思ったのだが忘れたのでもう一度調べる
移行するならする
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.