2023年11月21日火曜日

数を数えるということ

 各テクノロジーのバックグランドが異なるので、実は、数え方は一つではありません。

正確には、アルゴリズム1,2,3毎に違う数え方をしています。数を数えるということは、組み合わせ最適化において、本質的なことではありますが、数理的な数え方と、論理的な数え方の違いということがあります。本質的には、数理的な数え方と論理的な数え方は、同じはずですが、算法的には、違います。汎用問題を考えたとき、有利なのは、数理的解法になります。一方、数が少ないときの組み合わせ最適化を考えたときは、論理的解法の方が有利なような気がします。従い、数が少ない場合の組み合わせ最適化問題、ナーススケジューリング問題では、論理的解法であるアルゴリズム1が一般的には優勢になるのだ、という理解をしています。しかし、問題規模が大きくなってくると、論理的に扱うには、複雑になりすぎ、その場合は、数理解法が有利になってくる、ということではないでしょうか?

それでは、一体、数理解法と論理解法では何が違うか?ということについて考えてみましょう。一番の違いは、論理解法の場合は、何進法を使うか?ということが効いてきます。ところが、数理解法の場合は、それが明示されずに意識されることはほぼありません。論理解法の場合、コンピュータ上のハードウェア資源である乗算器を使うことはほぼないのですが、数理解法の場合は、無しでは考えられません。つまり、ハードウェア資源である乗算器の使用の有無が、大いに関係しています。

乗算器をブール代数でグラフ化したものを見たことがあるでしょうか?16x16bitでさえ、トンでもない規模のグラフとなります。乗算器というのは、組わせ回路の塊であり、AND/OR/INVの回路からのみ成りますが、大きな数を表すといることは、それだけ多くの組み合わせがある、ということの裏返しということでしょう。そういう場合には、直接にPC資源を利用した方がよい、ということではないかと思います。(昨今の人口知能における機械学習において、この乗算器の存在は必須です。)

論理的解法と数理解法について言及しましたが、もう少し正確に言うと、論理解法は、アルゴリズム1、数理解法は、アルゴリズム2、両者のハイブリッド解法が、アルゴリズム3/4ということになります。最初に説明した通り、各々、数の数え方が違うので、「半人前」の実装において違いを見ていきたいと思います。

https://schedule-nurse.blogspot.com/2023/11/unarycounter.html



0 件のコメント:

コメントを投稿