IDA Session Records

井田 昌之の日々の記録。自己紹介等。

Archive for 8月, 2018

タブコンプの話

関数の呼び出し、もっと単純に言えばある特定機能の呼び出し、これは状況の変化すなわち副作用がなければ同じパラメータを与えれば同じ答えを返してくれる。パラメータが一つでも、仮に1万あったとしてもこれは同じ理屈になる。そして、ほぼ直感的に1秒もかからないで答えがでるような簡単な場合でも、100時間とかかかって計算しないと答えが出ないような場合でも同じ理屈になる。

経験則の活用ということがある。これは、ここでの話の延長で言えば、膨大な数のパラメータを与えればおそらく正しい答えがでるかもしれない機能に対して、過去の経験の蓄積に学んで、そこではあらためて論理的に結論を出さずに、さっと答えをだし、行動することといえる。

これらのことに着目して、後藤英一先生はassoccompそしてtabcompというアイデアの実現に向かった。1970年代中期のことである。最初に書かれたメモをちょうだいして、これは面白いと思った。それまでに学んだ力づく計算のまったく逆を行こうとする話だったから。私にとって、いわばコペルニクス的転回である。「ソフトウェアアルゴリズムの改良は1000倍、1万倍の速度向上をもたらす、ハードウェアの速度向上は、せいぜい2倍3倍というオーダーだ」がすっと理解できた。で、おそまきながら79年までに作っていた私のシステムにその機能を組み込んだ。

簡単な導入的な例の一つとして階乗の計算が語られた。n!である。100!は99!の値に100を掛けたものである。ならば、その時までに計算した階乗の値を覚えておけば、そこからのかけ算をすれば答えがでる。計算をしたら、その結果とパラメータの組み合わせを記憶しておく。新たな計算をする前に、その組み合わせをしたことがあるかをチェックし、あればその結果を利用し、そこからはじめれば、すばやく答に到達できる。

どうするかというと、階乗の例で言えば、n!=n・(n-1)! だからfactorial(x)=if x=0 then 1 else n × factorial(n-1)をそのままプログラムにして計算するようにしておき、計算しながらそこまでに計算した値を記憶するようにしていけば、この定義のままで作る方がループを使ってプログラムにするよりも、多数回の利用の総計算時間を考えると、速くなる。つまり、factorial(x)の計算の最初のステップに、「factorial(x)はすでに計算したことがあるか?そうであれば、その値を返す」ということと、最後の脱出のステップに「factorial(x)の値はyになることを記憶させる」を入れる。すでに計算したことがあるか、は、ソフト的ならハッシング等を利用し、ハード的なら連想メモリを利用することでいける。私はこれでハッシングの良いアルゴリズムの追求へ深入りした。これは一段落するところまで行った。80年代後半に入り、連想メモリをNTTの研究所からもらってこれるようになり、ロジックを作り、後輩の専門家に回路図にしてもらい、自分で半田をし、試作の学会発表まで行った。しかし、実用化まで至らなかった。

階乗の計算のようにパラメータが1つだけではなくて、複数あるいは多数あっても同じことになる。また、階乗のような帰納的定義でなくとも、今までに計算されたことがある、ということしかないから、活用の範囲は広い。経済現象や経営意志決定に使えると今でも思っている。

状況が変化する場合には、この純関数的な定義はダメになる。しかし、上記の仕組みに対して、覚えている答をフラッシュして無くすようにすれば、そうしたタブは無効になり、再計算をするだけになり、ちゃんと機能する。

どうかな、面白いと思ってもらえたかな。

コメントする

Written by masa-ida

8月 28th, 2018 at 10:12 am

Posted in IT

戦略を書き出すこと、プログラムにすること

経営戦略の成功は、その策定と運用にかかわる個人の能力と大きく関係がある、という立場に居る。そして自然科学的に最適解を決定できるようにするには、Givenのパラメータがとてつもなくすくなく、そして外乱要因が多く、とても普通の意味で戦略のコンピュータ化はできない。状況は刻一刻変わる、考慮すべきパラメータは広がる。
しかし、ビジネスロジックをそのまますなおにプログラムに書き込む方法は存在する。そのためのツールを開発し、それを利用することだ。

以下は、Facebookへの2018年8月25日の書き込みから。トランプゲームの話。

ここではカルキュレーション(Calculation、カリキュレーション)の話をしよう。最初に出会ったのは、1970年代後半、情報処理学会記号処理研究会で、竹内郁雄さんの話から。GPCCはそれから誕生していく。人工知能へつながっていく遊びだと。トランプで遊んでみた。3回に1回くらいしかできない。出来る人は2回に1回以上出来ると聞く。そんなことあるかなぁと思っていた。40年前、若かったなぁ、今考えてみると、当時の頭の中の戦略はずいぶんと単線だった。90年に入るともうやらないし、忘れていた。
4年くらい前、なんとなくぼちぼちゲームでも入れてみるかとスマホのアプリをあさっていたとき、遊べるゲームリストの中に、「カルキュレーション」と書いてあるアプリを見つけた。その言葉に反応した。ダウンロードして遊んでみた。昔の感覚を思い出した。同時に遊びながら自分の戦略感が大きく変わっていることに気がついた。「役割はどんどん変わる」である。4つある山(捨て場、スタック)にすぐに並べられないカードを置いていくが、その時に、置くカードの役割の想定を考えておくが、それが硬直的だった気がする。今は柔軟になった。状況の進行にあわせて、たとえばこの5のカードがすぐに使われる確率はそこまでの状況より少なくなった。なら、最後の5-9-13でもいいかも、ということでその上に別のカードを載せてしまう、とか。
これで自分で驚くくらいに、成功確率が上がった。今朝も2回やってみて、どちらも成功、所要時間もそれぞれ3分程度。山が4つだと100%できることはなく、完全に成功させるには山が11必要という論文(?)を読んだ記憶がある。感覚的には80%くらいは自分では出来ると思う。特に最初の5枚くらいが不運な並びでなければ、あとはできるように感じている。

トランプゲームを遊んでみませんか?そしてそれが成功する確率が増えたら、それをルールに書き出してみませんか?

コメントする

Written by masa-ida

8月 28th, 2018 at 9:26 am

Posted in IT

Page:123