Scheme:将来のプログラミング
以下は、すぐにどうこうという話ではなくて、将来的なアイデアの話です。
hamayama(2016/04/24 07:11:22 UTC)(2016/04/26 03:14:10 UTC)
(2016/04/28 13:24:14 UTC)(2016/05/27 18:40:58 UTC)
(2017/01/12 16:17:59 UTC)
Lisp/Scheme のプログラムを勉強していくと、自分の書いていたプログラムが、すごく短くなることがある。
これを、AI 等で実現できないだろうか。
例えば、Google 翻訳のようなページに自分の書いたソースを貼り付けると、数十行が数行になるとしたら、
自分の実力以上のプログラマになることができる。
このとき、コンピュータ向けの コンパイラのような最適化ではなくて、人間向けの 可読性を含めた最適化がされてほしい。
そして、あたかも自分が作成したプログラムであるかのように、その後も改造や改善が自分で続けられるようなものであってほしい。
すなわち、人間の指示(入力)に対して、単に出力を求めるのではなく、入力自体を最適化する問題ということになる。
以前であれば、目標の設定が難しくて計算できない、ということになっただろうが、
最近の AI であれば、学習によって、対応できるのではないだろうか。
必要なものとしては、
(1) どのような形のソースに高得点を与えるかというような評価関数
(2) 計算結果が変わらないような、プログラムの変形を列挙する処理
(3) 一般ユーザが書いた普通のプログラムと、それをプロがリファクタリングした結果のセットのデータ
あたりだろうか。
単純に考えると、以下のような方法が思いつく。
(1) については、手続きの並びに点数を与えるようにして、学習によって、どの並びが高得点になるかを計算する。
(2) については、プログラムをランダムに変形して、実際に処理系に計算させ、結果が等しくなるものを抽出する。
(3) については、難しそうだが、例えば、競技プログラミングなどと連携して、データを継続的に収集していくようにすれば、集められるかもしれない。
上記(1)-(3)を元に、評価関数の値が最大となるように、プログラムの変形を繰り返せば、何らかの結果が得られると思う。
実際には、計算量とのバランスで、もっと効率の良い方法を考える必要がありそうだが。。。
<検討メモ>
- このような AI を作成しようとしたとして、どのくらい成功するものだろうか。
実際には、ほとんどの研究が失敗で、本当にごく一部のグループだけが成功する感じだろうか。
計算資源もかなり必要になるのだろうか。
- 前提条件によって最適なアルゴリズムが変わるケースにも、データ量が多ければ対応できるのだろうか。
例えば、多くの人が直面するような前提条件に対する結果が出力される、等。
人間どうしであれば、質問をすることで前提条件を確認すると思うが。。。
- プログラミング技術の進歩に、うまく適応していけるのか。
- 対象とする言語、ライブラリの範囲等。
- 評価関数(+学習部)、パターン生成(+探索部)、教師データ