本書は,前述しましたように,オブジェクト指向フレームワークを核として,各アプリケーションを構築しています。また,可能な限り本書のみで済むように,内容理解を助けるためのオブジェクト指向への入門を設けています。 本書は3部構成となっていて,第1部はオブジェクト指向からフレームワークへの展開について説明します。オブジェクト指向についてはその意味から解きほぐし,オブジェクト指向をまったく知らなくても,C++のプログラムが理解でき,書けるようになることを目指し,次のフレームワークの理解につなげられるようにしています。GAフレームワークとGPフレームワークの解説では,それぞれの特色からフレームワークがどのように構成されるかを解説します。また,フレームワークはGUI用とコンソールアプリケーション用を用意しています。 1 オブジェクト指向理解のポイント:オブジェクト指向の意味論 オブジェクト指向を、その意味からとらえなおしてみましょう。そうするとオブジェクト指向を理解するための土台ができます。 2 C++超入門:C++によるオブジェクト指向 GAとGPのフレームワークを使いこなすためには、オブジェクト指向とC++を理解していくことが必要です。ここでは、そのためのC++入門を用意しました。 3 オブジェクト指向分析・設計超入門:UMLの基礎 オブジェクト指向では、オブジェクトを単位としてシステムを構成します。オブジェクトの大きさはまちまちですが、それらオブジェクトが構成の基本単位となります。このような基本的な単位を見出したり、それらを組み合せるための方法論があると便利です。 4 フレームワークは快適な乗り物:オブジェクト指向フレームワーク オブジェクト指向フレームワークは、オブジェクト指向の継承と動的束縛をうまく組み合わせて、拡張性の高いプログラム構造を提供しています。GAとGPに適用したフレームワークを利用するために必要な内容について解説します。 5 GAフレームワークの構造:GAフレームワーク GAは遺伝のしくみを使って何らかの最適化を行う手法であり、その処理の大部分は適用問題とは独立の共通的な考え方となっています。したがって、各種のアプリケーションに適用する場合、処理の核となる部分は不変で、アプリケーションに固有な部分だけを書き換えることで対処できます。 6 GPフレームワークの構造:GPフレームワーク GPもGAと同様、遺伝のしくみを使って目的のプログラムを合成する手法で、その処理の大部分は適用問題とは独立の共通的な考え方となっています。特にプログラムのデータ構造とその解釈については共通にすることができます。 第2部は遺伝的アルゴリズムの応用で,GAフレームワークを適用した,4つのアプリケーションについての解説です。次の章から構成されます。 7 どの順序で作ろうか?:巡回セールスマン問題の応用 ひとつの機械に材料を流す最適な順序を決めます。小規模の玩具メーカにおける生産工程を例にして,コンソールアプリケーションとして実現します。 8 時間割は奥深い:時間割問題の解法 大学や短大における時間割の作成について,コンソールアプリケーションとして実現します。 9 後片づけはむずかしい?!:箱詰め問題の解法 GUI系としての応用で,箱詰め問題のGAによる解法を実現します。問題の例としては,Tetrixとペントミノをとりあげています。 10 遊びじゃないスケジュール:Job-Shop Scheduling問題(JSP)の解法 産業界で最も重要なスケジューリング問題のひとつであるJSPの解法を解説します。コンソールアプリケーションとして実現します。 第3部は遺伝的プログラミングの応用で,GPフレームワークを適用した,5つのアプリケーションについての解説です。次の章から構成されます。 11 まずは,多数決をとってみよう:多数決判定プログラムの合成 少数ビットを対象にし,過半数以上のビットがONになっているか否かを判定するプログラムを合成します。コンソールアプリケーションとして実現します。 12 この次に来る数はなんだろう:数列規則を見出す問題 1, 2, 4, 7, 11, 16, …, といった,数列の規則をあらわす漸化式を合成するような場合を取り扱います。コンソールアプリケーションとして実現します。 13 体積の差がわかるかい:体積差を計算するプログラムの合成 2つの立体のサイズと体積の差がデータとして,10例ほど与えられ,そこからそれらを説明できる体積差を求める式を合成します。ここでは,GPの効率的な手法として「自動定義関数(ADF)」という考え方を用いています。GPフレームワークは,ADFにも対応でき,コンソールアプリケーションとして実現します。 14 人工蟻を進化させる:Santa Fe trail問題の解法 32×32の領域に断片的に散らばっている餌をすべて集めるための行動ができる蟻を進化させる問題です。ここで用いた餌の散らばりパターンを「Santa Fe trail」と一般的に称しています。GUIとして実現します。 15 倉庫番はつらいかも:倉庫内荷物の片づけ問題 倉庫内にあるブロックを,倉庫の四隅と壁際に片づける行動を合成します。GUIとして実現します。 このような構成となっていますが,オブジェクト指向やC++をご存知の方は第1部のChapter1〜3をスキップされても,他の章を読むための支障にはなりません。したがって,他の章については,興味のある章から読まれると良いでしょう。ただ,無駄な重複を避けるため,後の章では,前章への参照を指示している部分もあります。 付録CD-ROMについて 本書では,全ソースプログラムをCD-ROMで提供しています。プログラムの開発環境はGUI系がC++Builderで,CUI(コンソールアプリケーション)系はCygnusのGNUのG++コンパイラを用いていますが,G++コンパイラについては,同CD-ROMに添付して,読者の便を図っています。したがって,CUI系のアプリケーションについては,本書のみで,実行までもっていくことが可能です。ただしG++バージョンのコンパイルリンクは,Cygnusの環境を立ち上げてから行ってください(CD-ROM参照)。また,VC++版については本文中では説明を加えていませんが,準備してあります。各アプリケーションに対する,これら3種の処理系の対応状況を次の表に示します。 表において,「○」はソースとしてCD-ROM中に含まれていることを示しています。 なお処理系のバージョンは以下で開発しました。この後のバージョンについては確認していません。 G++ C++Builder VC++ | | | B2.0(B2.01) 1.0,3.0 4.2,5.0 | また,「おまけ」として前著『Cでつくるニューラルネットワーク』と『応用事例でわかる遺伝的アルゴリズムプログラミング』に掲載したソースファイルもCD-ROMに収録していますので参考にしてください。 (※ CD-ROM の README はこちらをご覧ください) |