ChatGPTとは高性能なラバーダックである
いきなりまとめ
アルゴリズムで悩んでいるところがあったのでChatGPT-3を使用してみました。相談した結果としては事前の情報通り知ったかぶりが多く、ChatGPTが話すアルゴリズムやコードというのは使い物にはなりませんでした。しかしながら、ChatGPTとの会話は問題解決のアイディア生み出すきっかけとなり、これはまさにラバーダック・デバッキング法の上位互換と言え、また単純なweb検索の弱点を補えることが分かりました。
ChatGPTをどのように使ったのか
相談内容
作成しているゲームの2D当たり判定に関して悩んでいました。今回は仮にビリヤードのゲームを作っていると想像してください。問題は玉と壁の当たり判定です。
- Aは移動前のボールの位置
- Bは壁との交点
- Cは壁がなかった場合の移動後の位置
- Dは壁と反射した移動後の位置
ここでやりたいことはAからDの位置を求めることです。
シンプルに考えると以下のように求まります。
1. カプセルACと壁との交差判定を行いBを求める
2. 反射後の移動ベクトルを求めてカプセルBDを作る
3. 再度壁との当たり判定をこない、何も衝突してなければ終わり
4. また衝突していればまた1と同様の処理をする
※カプセルとは2つの円を結んだ形のことです。線分から等距離で表せる形なので当たり判定の処理コストが低くよく使われる形です。
悩んでいるのは、3のところです。カプセルBDで当たり判定すると位置Bはすでに壁と衝突しているため「衝突している」と判定されてしまいます。Bが当たっていることはわかっていてるのでその交点は無視してほしいです。
安易な考えとして「すでにあたった壁は除外する」というのがあるのですが壁と壁で構成される角ではボールが同じ壁に2度以上ぶつかる可能性があるし、カプセルと線分の衝突判定という関数に対して中途半端で採用したくありません。またBを極少量だけ移動させ壁に衝突していない位置B’を作りカプセルB’Dで当たり判定をするというのもありますが、これも移動させることによって壁を突き抜ける原因にあるので採用できません。
なんとなく球の向きを使えば出来そうだという感覚はあれどこれをうまく具現化することが悩んでいました。
ちなみにGoogleでWeb検索をしたものの、上記のような在り来りな問題であろうにも限らず検索結果としては単純なカプセルと線分の当たり判定に関することしかできずほしい答えはもらえませんでした。正直検索単語も何が正しいかよくわからない。ここらへんはニッチなものを求めようとした時により単純な問題が上位に来てしまうのはweb検索の弱点である気がします。
ということでここらへんをChatGPTに相談することにしました。
実際に相談してみた
まずはざっくり聞いてみます。
この時点でボールを矩形として扱っているので指摘します。ちなみにPythonコードも出力してくれていますがここは説明の補足程度に読むという感じで進めています。
今回は壁は矩形ではなく線分なのでそこも指摘します。
もう少し具体的にお願い。
そして本題。
さて、本題を質問しましたが当たった壁と当たる前の壁を識別している時点でほしい処理とは違いますし、そもそも処理の有効性も怪しい気がしました。コードは正直見にくいのでほとんど読んでません。しかし、「壁の法線を使って判定」というアイディアによって「壁に向きを持たせ、ボールベクトルと壁の法線が同じ方向だったらボールは壁から離れていっているので、その壁は除外することができる」というアイディアに自分でたどり着くことが出来たため、ここでChatGPTは終了しました。
使ってみて:ChatGPTはラバーダックの代わり
終わってから振り返ると、反射計算の時点で法線の計算してたしなんでこれが今まで出てこなかったんだろうというものでした。考え込みすぎて答えにたどり着けなくなっているというのはプログラマあるあるで、諦めて問題を人に相談する際に現状を説明すると自分の中で整理ができて、「~っていう状況で相談に来ました。でも今思ったんですけどこうすればいいですよね。ありがとうございました」と勝手に来て勝手に帰るのもまたあるあるだと思います。
これを利用したラバーダッキングという手法があります。人の代わりにアヒルのおもちゃ(ラバーダック)に問題を説明して状況を整理して問題を解決する手法です。ちなみに私はラバーダックが手元にないので代わりにダンボーのフィギュアに相談しています。
ダンボーは相談してもなにも答えてくれませんが、ChatGPTは内容は知ったかぶりで適当なことを喋るものの対話形式で問題を深掘りしていくことが可能です。ChatGPTにまるっと問題の解決をしてもらおうと思うのは時期尚早ではありますが、考えの整理のための相談相手としては十分に使えるというのがChatGPT-3の評価です。
なお、私が試したのはChatGPT-3で、最新のChatGPT-4では全然違う感覚になるかもしれません。
Discussion