遺伝的アルゴリズムと遺伝的プログラミング
オブジェクト指向フレームワークによる構成と応用

遺伝的アルゴリズムと遺伝的プログラミング

平野 廣美 著

本体価格 3,800円+税

ISBN 978-4-89362-173-3

A5判 並製

384 頁

CD-ROM付き

2000年2月21日 発売

オブジェクト指向、C++プログラムの入門から、フレームワークの理解へとつながる入門者に最適な実用解説書。遺伝的アルゴリズム、遺伝的プログラミングの応用として、フレームワークを適用した合計9個の具体的なプログラム例を挙げてわかりやすく解説。

正誤表


書籍版

本体 3,800円+税

電子書店版

本体 3,040円+税

Smooth Reader専用版

税込価格 2,400 円



  • 内容紹介
  • 目次
  • CD-ROM
  • ダウンロード
  • 追加情報
  • FAQ
  • 書評・紹介
著者:平野廣美(ひらの ひろみ)
昭和51年、京都大学工学部航空工学科卒業後、(株)日本CAD、(株)新日鉄ソリューションズ等を経て、現在、楽天株式会社 楽天技術研究所在籍。
大学卒業後まもなくして人工知能に興味を持ち始め、LispやPrologの処理系の開発に従事する。また、日本語によるデータベースの検索システムの開発や工場等の生産計画の最適化、テキストマイニングなどの知識処理などを行ってきた。
(※著者紹介は、2008年のものです。)

関連図書
  • はじめに

  • 第1部 オブジェクト指向とフレームワーク
    • Chapter 1 オブジェクト指向理解のポイント
    • Chapter 2 C++超入門
    • Chapter 3 オブジェクト指向分析・設計超入門
    • Chapter 4 フレームワークは快適な乗り物
    • Chapter 5 GAフレームワークの構造
    • Chapter 6 GPフレームワークの構造

  • 第2部 遺伝的アルゴリズムの応用
    • Chapter 7 どの順序で作ろうか?
    • Chapter 8 時間割は奥深い
    • Chapter 9 後片づけはむずかしい!?
    • Chapter 10 遊びじゃないスケジュール

  • 第3部 遺伝的プログラミングの応用
    • Chapter 11 まずは多数決をとってみよう
    • Chapter 12 この次にくる数はなんだろう
    • Chapter 13 体積の差がわかるかい
    • Chapter 14 人工蟻を進化させる
    • Chapter 15 倉庫番はつらいかも

  • 参考文献
  • あとがき
  • 索引
  • 付録CD-ROMについて
付録CD-ROMについて

本書では,全ソースプログラムをCD-ROMで提供しています。
プログラムの開発環境はGUI系がC++Builderで,CUI(コンソールアプリケーション)系はCygnusのGNUのG++コンパイラを用いていますが,G++コンパイラについては,同CD-ROMに添付して,読者の便を図っています。
したがって,CUI系のアプリケーションについては,本書のみで,実行までもっていくことが可能です。ただしG++バージョンのコンパイルリンクは, Cygnusの環境を立ち上げてから行ってください(CD-ROM参照)。また,VC++版については本文中では説明を加えていませんが,準備してあります。
各アプリケーションに対する,これら3種の処理系の対応状況を次の表に示します。
表において,「○」はソースとしてCD-ROM中に含まれていることを示しています。
なお処理系のバージョンは以下で開発しました。この後のバージョンについては確認していません。
G++B2.0(B2.01)
C++Builder1.0,3.0
VC++4.2,5.0
また,「おまけ」として前著『Cでつくるニューラルネットワーク』と『応用事例でわかる遺伝的アルゴリズムプログラミング』に掲載したソースファイルもCD-ROMに収録していますので参考にしてください。
※付録CD-ROMの詳細はREADMEをご覧ください。
  付録CD-ROM README
README更新履歴

2000/01/25 初版
2000/09/01 「VC++6.0におけるコンパイル等」、「VC++6.0でのコンパイルエラー」、「g++Tips」の項目を追加
2001/02/16 「VC++バージョン修正について」を追加
2003/06/04 「VC++ .NETスタンダード版におけるコンパイル」を追加

LINK

付録CD-ROMに収録してあるプログラムの最新版は、以下のサイトから入手できます。

ダウンロードサービスのご案内

『遺伝的アルゴリズムと遺伝的プログラミング (電子書店版/Smooth Reader専用版)』をご利用の方は、本文掲載のソースファイルがダウンロードできます。
ソースファイルをダウンロードする (zipファイル)
※圧縮ファイルの解凍には、電子書店版/Smooth Reader専用版の本文に掲載されてあるパスワードが必要です。

処理系のバージョンは以下で開発しました。この後のバージョンについては確認していません。
G++B2.0(B2.01)
C++Builder1.0,3.0
VC++4.2,5.0
その他、収録ソースファイルについては、「CD-ROM」タブの記載内容を参照してください。

付録CD-ROMとは以下の収録物に違いがございます。あらかじめご了承ください。


紙書籍版付録CD-ROMに収録されている『Cでつくるニューラルネットワーク』『応用事例でわかる遺伝的アルゴリズムプログラミング』(平野廣美著 パーソナルメディア刊)のソースファイル,Cygwinおよび関連のプログラムなどのツール類は,本ダウンロードファイルには含まれません.

本書掲載のプログラムのソースファイルは,紙書籍版付録CD-ROMと同じ内容ですべてダウンロードファイル内に収録しております.

ご注意

  • 本ダウンロードファイルをご利用になる前に,必ず収録の「Readme.htm」をお読みください。
  • 収録内容については本書16ページをご覧ください.
  • ご使用上のご質問,および収録ソフトに関するお問い合わせについては,各ソフトの開発元,著者およびパーソナルメディア株式会社ではお答えできませんのでご了承ください.
  • 収録するプログラムは,使用者の責任において実行するものとし,プログラムの性能もしくは運用結果に関連して発生する直接的,間接的損害について,著者およびパーソナルメディア株式会社は一切の責任を負わないものとします.
  • 収録するプログラムの営利目的での使用は禁止します.また,収録するプログラムやその他のコンテンツの,ネットワークなどへの配布はできません.
  • 本書についてのお問い合わせは,E-mailもしくは郵送でお受けいたします。回答にはお時間をいただく場合がございます。またご回答できない場合もございます。
  • 掲載されている商品名や会社名は,各社の登録商標または商標です.また収録する各プログラムの著作権は各著作者が保有します.

 「遺伝的アルゴリズムと遺伝的プログラミング」付録CD-ROM内容への追加情報


(2003/06/04追加情報)
VC++ .NETスタンダード版におけるコンパイル

VC++ .NET に関しては,スタンダード版でのみで確認しました.
VC++ .NET のコンパイラはVC++6.0と同等ということです.したがって,コンパイル要領はVC++6.0と同じです.
VC++ .NET のプロフェッショナル版も,コンパイル要領はVC++6.0と同じだと推測できます.
アカデミック版については, 確認していません.

なお,詳細な修正箇所は,VC++6.0におけるコンパイル等を参照してください.

※ご注意:すべてのプロジェクトについて「.NET版」を確認したわけではありませんので、ご了承ください.
(2001/02/16追加情報)
VC++バージョンの修正について

ここでは,VC++バージョンの各プログラムについて,これまでに判明したバグについてその修正個所をまとめておきます.

  • 【ご注意】
  • 本書初版第1刷(2000/02/29発行)に付属のCD-ROMのVC++バージョンが対象となります.
  • 本書初版第2刷(2001/02/28発行)に付属のCD-ROMに含まれるVC++バージョンの各プログラムについては,これらの修正は済んでいます.


なお,これらの修正については,すべて以下のバグについてのものです.

●現象
多くの繰り返し処理を行っていると,「リソースが足りない」といったメッセージや特定メモリからリードできないなど,あるいは表示がおかしくなるなどの不都合が起こります. Windows2000では,実行中にマウスのボタンクリックなどイベントが発生すると,動きがおかしくなることもあります.

●原因
すべて,メモリーを解放すべき個所でそれを行っていなかったため,処理を繰り返していくうちにメモリが使えなくなったためです.以下の場合があります. new演算子でオブジェクトを確保し,役目を果たした後.この場合はdelete演算子でオブジェクトを削除しておかねばなりません.一部これを行っていない個所がありました. GetDC()を使いデバイスコンテキストを獲得したら,処理を行った後は,それを解放しなければなりません.

●対処法
以下の変更点を参照してください.


(2000/11/17追加情報)
VC++バージョンで,各アプリケーションフォルダのFrameWorkフォルダ内のStaGrpDlg.cpp が対象となる不具合があります.

各アプリケーションフォルダのFrameWorkフォルダ内の StaGrpDlg.cpp が対象です.


  • ●不具合現象
    実行の繰り返し回数を大きく取った場合、途中でリソースを獲得できないといった
    エラーダイアログが表示される.

  • ●原因
    FrameWorkフォルダ内のStaGrpDlg.cppに含まれているメソッドDrawStateで
    背景の塗りつぶし処理を行ったあと、生成したブラシを解放していなかった.

  • ●対応
    描画処理の後に、以下の1行のコードを追加する.

    • delete cB;

(2000/09/01追加情報)
■VC++6.0におけるコンパイル等

コンパイル要領はVC++5.0と同じです.
 目的のフォルダ中の,*.dsw をダブルクリックするなどして環境を立ち上げます.

  1 [ビルド]-[ビルド]で実行形式を作ります.
  2 何事もなければ,リンク終了します.
  3 以降は,上記VC++4.2を参照してください.

 なお,VC++6.0でも,GaAppTpl.h中の以下のVC++5.0と同様,コメント化を解除してください.

  • // VC++4.2では以下のnamespaceをコメント化するが,VC++5.0では有効にする.
  • using namespace std;


なお,プロジェクトの中には,GaAppTpl.hがFileタグで開かれるウインドウに出てこない場合があります.このときには,[プロジェクト]―[プロジェクトへの追加]―[ファイル]により,そのファイルを指定して追加してください.

 詳しくは,VC++4.2とVC++5.0の互換ソースを参照してください.


■cgaframe.cppのVC++6.0でのコンパイルエラー

 cgaframe.cppのコンパイル時以下のコンパイルエラーがでることがあります.

  • 構文エラー : ';' が '--' の前に必要です。

●対応
前の行のコメント行が長すぎて,改行された結果です.この余計な行を削除してください.


■g++Tips

本書を出版したあと,g++について判明したことを以下に記述します.

コンパイルエラーがなかなかとれない

本CD-ROMにふくまれているCygnus B20.1(gcc ver. egcs-2.91.57 199801(egcs-1.1 release)) で下記の現象がありました.

●現象
 class TRoomTApplication : public TSubject
{
protected:
.....

//何かのコメント

Period rm;
.....

};

struct Period { ..... }; は,このクラス定義の前に存在している.
このとき,あるメソッド内で,rmを参照すると,そこで未定義のコンパイルエラーとなる.


●原因
 「//何かのコメント」に起因していることが判明.
●対策
 コメントを/* .... */形式に代える,コメント行を削除する.

付録CD-ROM FAQ


お寄せいただきました御質問等よりお答えいたします。


VC++.NETで利用するのには、どのようにプログラムを修正すればいいですか。
各フォルダのFrameフォルダまたはFrameWorkフォルダの中のGaAppTpl.h や GpAppTpl.h の70行目付近に以下のコメント行があります。

・・・・・・
// VC++4.2では以下のnamespaceをコメント化するが,VC++5.0では有効にする.
//using namespace std;
・・・・・・

ここの using namespace std; の行のコメントをはずして有効にして試みてください。
つまり、それら2行は以下のようになります。

・・・・・・
// VC++4.2では以下のnamespaceをコメント化するが,VC++5.0では有効にする.
using namespace std;
・・・・・・

GAGPに関するVC++版のソースコードは、VC++4.2をデフォールトとしています。
したがって VC++5.0 や VC++6.0 でコンパイルリンクするときは、ともに、以上のようなコメント化はずしを行ってもらう必要があります。

.NETのVC++はVC++6.0なので,この修正が必要です.

なお、これらについては、CD-ROM中の README.HTM を起動して、「VC++バージョンへの変更について」→ 「VC++5.0におけるコンパイル等」をたどっていただけると説明を加えています。
先のコメント化以外に,修正が必要な部分もありますので、README.HTMをご参照ください。

必要なメモリサイズは?
VC++のツールの上で、デバッグして走らせる場合、GAGPのプログラムで必要とするメモリとVC++ツールで必要とするメモリがあります。OSの種類やご利用の環境等によっても異なってくるはずなので、明確にお答えができません。
ただ,Windows NT、2000、XPなどは仮想メモリで、ハードディスクをスワップ領域として使っているので、原理的には、メモリの制約は考えなくていいと思われます。
どのテーマかによりますが、実際に走らせて見た範囲では、VC++ツールも含めて、384Mだとすべて問題ありません。
それ未満の状況では、スワップが発生して、実行速度が落ちるくらいかと考えられます。

CD-ROMをVC++で実行したときエラーが出てしまいました。
VC++のバージョンの違いだと思われますので、まずはヴァージョンをご確認ください。CD-ROMに格納してあるVC++対応のソースは、Ver4.2 となっております。これをVer5.0でそのままコンパイルすると、エラーが発生します。対応方法につきましては、付属のHTMLファイルに記述されておりますので、そちらをご覧ください。関連する部分は次のとおりです。

VC++におけるプロジェクト
VC++5.0におけるコンパイル等
VC++4.2とVC++5.0の互換ソース

また、同HTMLファイル(README.HTM)の「ご注意」記述事項もご参照ください

omakeに収録してある「遺伝的アルゴリズムプログラミング」のプログラムのVC++ヴァージョンの公開はしていないのでしょうか?
恐れ入りますが、現在のところ予定はありません。

omakeに収録されている「遺伝的アルゴリズムプログラミング」のヴァージョンは?
「遺伝的アルゴリズムプログラミング」は C++6.0、VC++とDelphiです。
BCB対応版はありません。VC++は4.2、Delphiは1.0と2.0です。

omake\NNbookの中にあるソースを VC++ を使ってコンパイルするにはどうしたらよいのでしょうか?
残念ながらVC++ではコンパイルできません。 MSCのVer6.0では確認されております。
なぜ不可能かは、MSCではグラフィックやマウスをほぼネイティブに呼び出しているということと、それに対してWindowsの環境でそのようなリソースを使うには専用のAPIを介する必要があるためです。
この書き換えについては、本文に動きが説明されていますのでご参照ください。

「Cでつくるニューラルネットワーク」omake\NNbookについてです。graph.hなどのヘッダーファイルを手に入れる方法をお教え願います。
Cのコンパイラに付属しているものです。
またCコンパイラは、マイクロソフトのMSC前提ですから、VC++や他の処理系には対応していません。本書では、MSCのC/C++を使ったコーディングとなっています。
なお、graph.hはプログラム中に使用しているグラフィック描画のための関数を定義したものです。
それぞれの関数の機能は、単純なものしか使っていませんので、現在のコンパイラに対応して書き換えることは可能でしょう。

「Cでつくるニューラルネットワーク」についてです。
プログラムがMSCのためコンパイラできずにいます。ほかの方法で、コンパイラが可能であれば教えてください。
何度か調べてみたのですが、有効な手段がありません。問題を整理すると以下の2つになります。

1 プログラムの構造に起因する問題
Windows の環境下では、イベント駆動のため、以前のコンソールが1つであった時代のプログラム構造とは、異なっている。したがって、そのままでは動作できない。コンソールアプリケーションとして、以前の環境をシミュレートできるようなプログラムについて調べたが、満足できるものを見つけることができなかった。

2 コンパイル不可の問題
コンパイラの問題ではない。グラフィックやマウスのライブラリを使用しているため、それを呼び出すためのヘッダーファイルが必要となる。しかしながら、今のコンパイラには、それらが存在していない。つまりヘッダーファイルが存在しないというコンパイルエラーが出る。

これらを回避するために、C++Builder版のプログラムをディスクサービス(CD-ROM)の中に同梱しています。「WinNN」というフォルダになります。

本書が各雑誌等で紹介されています。(敬称略。一部引用)


UNIX MAGAZINE
  • SD BOOK FORUM
  • Bookshelf
  • 「生物進化のメカニズムをコンピュータによる情報処理に応用した遺伝的アルゴリズム/プログラミングとオブジェクト指向言語を用いたアプリケーション構築について解説。オブジェクト指向とフレームワーク、遺伝的アルゴリズムの応用の3部に分かれる。……」

Linux magazine 2000年6月号 (アスキー)
  • Bookshelf
  • 「近頃ヒトゲノムという言葉が巷で騒がしい。本書はタイトルに「遺伝子」という言葉を含んではいるが、直接の関係はない。遺伝的アルゴリズムとは、……」

日経バイト 2000年5月号 (日経BP)
  • 新刊
  • 「C++を使って遺伝的アルゴリズム(GA)や遺伝的プログラミング(GP)を解説している。GAは最適化応用問題の解法の一つである。……」

Linux Japan 2000年5月号 (アイティメディア)
  • BOOKS "本の虫~bookworm
  • 「遺伝的アルゴリズムと遺伝的プログラミングを、オブジェクト指向フレームワークを使って実装する方法を解説した本です。C++とオブジェクト指向設計、……【平】」




本書をお読みになった方々にブログやweb上のコラムでご紹介いただいております。



トップ > コンピュータ書 > 遺伝的アルゴリズムと遺伝的プログラミング