2015年5月26日火曜日

オブジェクト指向プログラミングと人工知能

 オブジェクト指向プログラミングと人工知能

CPUの動作、構造

コンピュータの計算はCPUが担当しています。

CPUはどのように、動作するかご存じでしょうか、

CPUは、レジスタ、フラッグと呼ばれるもの、プログラムカウンタと呼ばれるもので構成さ

れています。
 












 
 レジスタは AXレジスタ EAXレジスタ、BXレジスタ、EBXレジスタなど
 
 かなりの多くある。
 
 レジスタの役割は数学の変数と同じです

   変数に数値を取り込んで、演算します。最近のCPUは多変数で整数以外も、

   取り込めると聞いています。以前は、整数型、文字型のみでした。

 
 フラグ


 これは直訳すると、旗ですが、演算が終了して時、終了の合図など

 フラグが使われる。


 
プログラムカウンタ

 現在どの命令を実行しているか、記憶しているもの。通常は、値を変えませんが
 
 変えることもできる。


 これらが、主なCPUの機能になります。

 最近では短縮命令や、いろいろな機能をもったCPUがあります


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 実際の動作


レジスタに数値を取り込み、それから演算です。足したり、

引いたり数値を演算します。

その流れは直線的です。複数のCPUがあっても1CPUの動作は直線的です。

 ノイマン型コンピュータでは、それしか出来ません。

 CPUの動作が速くなれば、処理スピードも上がります。よって速い周波数のCPUは

 処理速度となります。

  ノイマン型コンピュータの特徴です。

 プログラミングした順序に従って、値読み込み、演算して結果を出力します。

 演算した結果は、記憶装置や、出力装置に出力されます


 もっと具体的にプログラムの動作を考えます


  コンソールに文字を出力するプログラムを考えます

   CPUは計算して、
 
  画面に文字を表示するには、出力する文字コードを取り込みます、

 その後にコンソール出力メモリエリアに出力します。

 そうすると、画面に出力されます。

  
 Hello Worldを考えます
 
  ・「H」のキャラクタコードのデータを取り込みます
   ・ コンソールエリアに「H」のコードを書き込みます
    これで、コンソールにHが出ました

   ・次に「e」のキャラクタコードを取得します
   ・コンソールに「e」のコードを出力します

   ・・・・・・

   この繰り返しで、 「Hello Wrold」が画面に出力されます

   短い文はこれで、すみますが、長い長文ですと、こんな
 
   1文字ずつ、出力していたのでは、とんでもないことになります

   そこで

   
    そこで、ルーチンを考えます

    あるメモリエリアに格納されいるデータを

    ・文字コードが入っているアドレスの先頭値

    ・文字コードの最後を知らせる決まり

     ・キャラクタコードを表示する

 
    そして、これを繰り返す

  そうすると、何文字で一括して処理できる。


  これが、オブジェクト指向の最も簡単な例です。


   このように構造化することによる、プログラミング効率がかなり上昇します

    複雑になればなるほど、プログラム効率が上昇する


  いろいろな、パラメーターを設定して、構造化すると

  複雑な振る舞いをするプログラムを構造化して、ある決まったパターンで

  プログラミングすることができるようになる。

 
   プログラム全体を構造化して、構築することにより、すっきりした

   全体構造になります


   しかし

  しかし、このオブジェクト指向は落としし穴があり、途中で構造を変更することができ

   ない。

    柔軟性に欠ける

 これでは人工知能には、不向きであると考える。

 自然は、複雑な複合で出来ていて出力結果を途中で取り込む必要が出てくる

 学習である。プログラムを途中で書き換えるプログラムが出来ないと学習できない

 オブジェクト指向は、プログラミングの効率は上昇するが、柔軟性に欠ける

 究極のプログラミングパラダイムではないと思われる。

 プログラムをつくる立場とすれば、楽ですが、これだけでは無理なことが出てきます

 量子コンピュータはどうでしょうか、

 非ノイマン型コンピュータも作られていたと思いますが、どうなっているのでしょうか


 非ノイマン型コンピュータは、学習できる反面、非常に複雑になる恐れがある。

 これを乗り越えないと、コンピュータの未来が見えてこない。
 
    
   逆にこれを、克服すると、コンピュータが人類を超えるかもしれない

 もし、人工知能に成功していれば、1年で人間を超えらルに、ちがいない

 それほど、コンピューターは速度が速く、時間を短縮してくれる

 
  

 LISPは人工知能に向いている言語といえる

  プログラムとリストの違いがないからだ。
 
  プログラミングの結果がリストに反映されて、フィードバックがかかる。

  この機能は他の言語にはない。

  オブジェクト指向では、複雑な構造化を使いやすくするが、フィードバックは

  かからない。多少時間はかかるが、停止させなければ パフォーマンスは高いと思われる

 しかし、可視性がわるい。C++よりも、わかんないねー。

  読みにくいの 何とか ならないのかしら