見出し画像

序章: 非エンジニアがChatGPTと協力したら何かが産まれた

Chat GPTすごいですね。日々ものすごい速度で進化していて、情報を追うのでやっとです。
個人的にも色々と触ってみていて、賢人の方々がシェアしてくれているプロンプトを試してみたり、自分なりのプロンプトを研究してみたりと、どっぷりハマっています。

非エンジニアだけど何か作りたい

かろうじてHTMLが少々わかるくらいで、javascriptやCSSなどはさっぱりです。幸いにもウェブサービス関連の業界にはいるのでワードプレスやランディングページくらいなら、どんな仕組みで出来ていて、どこをいじれば何が変わるか。それくらいはなんとなーく理解できているくらい。

それでも、Chat GPTと会話をしているとなんか自分でも作れるんじゃないか?と思わずにはいられず、実践してみることにしました。

とはいえ、ホームページとかサービスとか、プロダクトみたいなものには正直全く興味がないので、何か自己表現というか好奇心を満たすための"何か"を自分なりに模索しながら追求していきたいと思います。

一応私は絵を描いたり音楽を作ったりするのが好きなので、アート的表現をベースに哲学や人文学的解釈で創作し、メディアアートと言わないまでも(あくまで趣味なので)、問題提起のような解釈ができるモノを作ってみたいと思います。

人工生命との出会い

そんな意気込みだけはあっても、プログラミングの知識や学がない私ではできることは今のところ限られている。
私に今あるのは有り余る知的好奇心とChat GPTだ。ということで、チャッピーと会話しながらその"何か"について議論していたところ出てきたのが【人工生命】というやつ。ALIFE?とも言うらしいですね。

聞いたことがあるようなないような。
自分なりに調べてみましたが、これがぶっ飛ぶくらい難しい。論文とか、まったく意味わからん。

兎にも角にも人工生命にはいくつか種類があるようだが、なんとなく『セルオートマトン』というのが自分にはしっくりくる。

セルオートマトン

セルオートマトン(Cellular Automaton, CA)とは、空間に格子状に敷き詰められた多数のセルが、近隣のセルと相互作用をする中で自らの状態を時間的に変化させていく「自動機械(オートマトン)」です。各セルの状態が離散的な値(「0」「1」「2」など)を取る点、各セルは周囲一定範囲内(近傍)のセルと局所的な相互作用を行う点、次期のセルの状態は自身と近傍のセルの今期の状態から決定論的に決められる点などが特徴です。このようにCAは抽象的なモデルですが、様々な物理現象や生命現象のエッセンスを捉えたモデルとして古くから研究されてきました。たとえば、乱流、結晶の成長や細胞の自己増殖といった現象が、CAを使ってモデル化できます。また、セルの値の並び(「01000101…」など)が、計算機が処理するデータやプログラムを表していると考えると、CAは単純で抽象化された計算機のモデルにもなります。よく知られているCAとして、二次元空間上で展開するコンウェイの「ライフ・ゲーム(Game of Life)」が有名です。

https://mas.kke.co.jp/model/auto_model/#:~:text=%E3%82%BB%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3%EF%BC%88Cellular%20Automaton%2C%20CA,%E6%A9%9F%E6%A2%B0%EF%BC%88%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3%EF%BC%89%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82

やベぇ、かっけぇ。
動機はこれで充分。
なのですが、別にこれが作りたいわけじゃないので、セルフブレインストーミングをstep by stepにて脳内で実行。
以下に導き出された要件を出力

Worldの実装について

要件

ーworldの定義
・インターネットブラウザ上で稼働。名前をsilence_wと呼ぶ
・1000×1000のドットで表現された四角いエリアを表示。これをworldと呼ぶ
・worldはモノクロームで表現されており、スクリーンセーバーのように絶えず変化する
・各座標のドットそれぞれは、黒色=null、白色=ex、水色=hxの3つの状態のみが存在する
・worldは1秒を1ターンとして毎秒変化を起こす。これをdayと呼ぶ。2秒以上であればdaysである

ーhxの定義
・hxは水色のドットで表現する
・hxは1dayにいずれかのnullの座標にランダムに同時に15個出現する
・hxは12000daysで消滅する

ーexの定義
・worldには1daysに一回、いずれかのnullにexが1個出現する
・exの寿命は初期設定で3000daysである

ーexの移動
・exは誕生から100日経過後、上下左右、左上、左下、右上、右下(8方向)のいずれかにランダムで1dayに1ドットづつ移動をし続ける
・移動先がworld外である場合は、そちらには移動をしない。別の方向へ移動する

ーexの捕食
・移動先にhxが存在する場合は、その座標に移動し、hxを食べ、hxは消滅。exは寿命が500日延長される
・ex同士が接触すると両方のexの寿命が半分になる

ーexの自己複製
・exは寿命が15000daysを超えると、次のdaysにexを複製する
・複製されたexは、複製元のexに隣接するいずれかのマスに出現する
・複製されたexは、複製元のexと同じ寿命を初期値として持つ
・複製されたexと複製したexは、誕生から10daysは自己複製できない

ーStatus monitorについて
・worldエリア外に現在のworldの状態を表示する

status monitor
days = [現在のdays数]
null = [現在のnull数]
ex = [現在のex数]
hx = [現在のhx数]
max life ex = [現存する最大寿命をもつexの寿命]

何かが産まれた

どうしてもアートをやっていると、命とか宇宙とか、自然、機械、思想、死、肉体、夢とか大きなテーマへ回帰していく思考が流れる。
人工生命を作りたいわけではないが(それはもっと頭の良い人たちが研究してくれる。リスペクト)、自らの存在や集合体、抽象と具体、偶発と必然、進化、時間、移動、それらが創発し合った状態を俯瞰してみたくなる。俯瞰して初めて気づくことに期待したい。期待したいよね。

まぁ正直、web上に公開できるまで1週間くらいかかりました。
ドメインを取得したりサーバーを契約してみたり、初めてのことって楽しいよね。楽しいけど、チャッピーは言うこと聞いてくれないし、途中で要件を忘れられたりして、しばらくチャッピーとの仲が険悪になったりしたけど、やり遂げたよ!

※DNS設定ってのがあるんだね。知らなかった。表示されねーじゃねーか!ってサーバーのご担当の方にメールしました。とっても親切に教えていただきました。ありがとう。

何コレ


world

白と青のドットがうじゃうじゃ動いてます。
世界創生から23,600日後の世界
ex(生命)は20,000匹ほど
hx(エネルギー源)は6000
現在の最高寿命は14,000daysほど

現在は、hxがexの養分となりexの寿命が延長、自己複製を開始し数回の人口爆発が起こったが養分が不足し収束に向かっているところ

なんだかキレイだね。

チャッピーと戯れたことがある方ならお分かりかと思いますが、タスクの多い目標を達成する時の苦労ってありますよね。
ソースコード出してくれるけど、全然動かねーの。何これ。動かねー。
とにかく解決方法が自分ではわからない。動かして!ってお願いしても、また別のソースコードを吐き出してくるだけ。気が狂うかと思いましたがなんとか正気を保ちました。

で、、私はチャッピーから吐き出された何となく今動いているプログラムが何故動いているのか。要件どうりに動いているのか。バグがあるのかがわかりません。
プログラムが実行され、フロント側で稼働しているシミュレーションを直接目で見ることでしか確認できません。
ソースコード見てもさっぱりわからんので(もちろん多少はわかります

やっていこう

と言うわけですが、非エンジニアはチャッピーと和解し引き続きいろんなものを作っていきたいのであたたかく見守っていてください。
世界の更新因子は私が握っている。いくらでも。

浅はかな希望としては、アドバイスやヒント、バグを見つけたら教えて欲しいです。

人口爆発が起こる瞬間。なぜ四角?

↓ここで最新版を公開しています。

SSL化してないので、保護されていない通信ってでます。これ大丈夫?だめだよねきっと。教えてチャッピー。
 ※4/14無事SSL化完了

いいなと思ったら応援しよう!