プロが教える店舗&オフィスのセキュリティ対策術

素人ですが、遺伝子的アルゴリズムを考える上で、大きな問題に直面しています。
1)最適化の対象を如何にコーディングするか?
2)交叉点を如何に設けるか?
これらは組合せの対象の要素間に何らかの曖昧な複数の相関関係がある場合に難しくなります。

そこで、
1)「遺伝子的アルゴリズム」をタイトルにした一般の技術系の和書に書かれている以外に、実例を調べる手段?
2)社会人が遺伝子的アルゴリズムの開発の実際を学ぶための公共の機関、例えば聴講生として学べる場所?
3)遺伝子的アルゴリズムを組み込んだソフトを作る上で、普段使用しているC++などの汎用プログラム言語と、SchemaやLISPなどの知能プログラミング言語とでは、どちらが便利なのでしょうか? これらの人工知能プログラム言語には、コーディングや交叉のための専用のコマンドが提供されているのでしょうか?

自分は、情報工学の出身ではないため、C++言語と「遺伝子的アルゴリズム」の技術書籍以外には、バックグラウンドがありません。よろしくお願いいたします。

A 回答 (1件)

実は私も素人ですが・・・・



>1)最適化の対象を如何にコーディングするか?
>2)交叉点を如何に設けるか?
いわゆるモデリング(コーディング)手法ですね。

ここは、誰もが必ずぶつかるところだと思います。
もっとも根本的なことでありながら、きちんと(論理的に)説明されている書籍・論文、あるいは、きちんと整理できている人・技術者・学者先生に、お目にかかったことがありません。
ある大学教授にいたっては、堂々と「GAのコーディングは、カンと経験」と明言しておられます。

#私の考えでは決してそれに賛成していませんが・・・私自身、整理して説明ができるわけではないので、表立って反論はできません。
#ただ、「根本的にできないこと」ではなく、「まだ、やり方が整っていない」だけだと思っています。

前置きはこれくらいにして・・・
>1)・・(略)・・・以外に、実例を調べる手段?
 コーディングに関しては、3~4年前のシステム制御関係の学会誌、あるいは、Cマガジンはじめ、ちょいと硬派なプログラマ向け雑誌などで解説を見つけることができます。
 巡回セールスマンとか、パズルに関しては、おっしゃるような「技術系書籍」がいいと思います。
 (確か、北先生のがわかりやすかったと思います)
  ただ、「実例」となると、企業での利用が多いでしょうから、具体的内容を詳しく知るのは難しいかも・・・・
  また、逆に、「あ~、これとこれで、こうやっているのね」と容易に推定できるものもあります。
  たとえば、離散系シミュレータの「Witness」というソフトの求解に使われていますが、カタログに出ている画面イメージからでもおよそのコーディングと組み込まれ方が想像つきます。
  ただ、「こうなんですね」と聞いても、正確に答えてくれる人はいないようです。

>2)社会人が・・・(略)・・・・学べる場所?
 おそらくお仕事で利用しようとされているかと思いますので、学求的に高度な(実践的でないような)ことではないですね。
 数年前から比べるとずいぶん聞かなくなったような気がします。(いい意味で定着したのか、絶滅したのか)
 あまり、詳しくないので推測ですが、大阪の場合、産業技術研究所でかなり以前やっていたと思います。
 公的機関なので、無料で開催されたりするようですし、関係の学会などで、先生とお友達になって、(個人的に)講義に混ぜてもらうという手もあるかもしれません。

>3)・・・・・C++などの汎用プログラム言語と、SchemaやLISPなどの知能プログラミング言語とでは、どちらが便利なのでしょうか?
>  これらの人工知能プログラム言語には、コーディングや交叉のための専用のコマンドが提供されているのでしょうか?
 私としては、遺伝アルゴリズム自体を研究するのでなく、利用する立場でしたので、C言語がよいと思います。
 Schemaは知りませんし、LISPもここ10年くらい遠ざかってます。
 処理系の入手性の問題、参考書・解説書(時にはサンプルプログラム)の多さからして、C、C++、VB、Javaでしょう。
  また、LISPには、専用コマンドというわけではありませんが、遺伝子をインプリメントしやすい線形リストが言語仕様のベースですし、リストをあれこれいじりまわす命令は充実していますので、その部分に限っては便利と思います。
 #リストがベースだから”LISP”、ってのはご存知のとおり。

 が、しか~し、Cでもリスト構造は比較的簡単に実現できますし、特に遺伝子を配列で表現してもいいわけなので、その点はそんなに重要ではありません。
 実践で利用するなら、入出力やコンパイラ自体の扱いやすさ、入手性、メンテ性、周辺システムとのインターフェースで、通常のプログラム言語のほうが、(あなた自身が使い慣れているもののほうが)格段に勝ります。LISPなどには、ガベジコレクションやメモリ消費などの問題もありますね。

>これらは組合せの対象の要素間に何らかの曖昧な複数の相関関係がある場合に難しくなります。
冒頭に書いたとおり、私は素人ですが、遺伝子コーディングするときは、「曖昧な複数の相関関係」など悩まずに、素直に(何も考えずに)やって、進化過程で、制約として淘汰して殺すという方法でも、まずまず準最適結果(らしきもの)が得られています。
 ↑こんな考え方は、アルゴリズムをギンギンにチューニングして、限界最適値を超高速で求めようという場合には、ダメなんでしょうが、結果を程よく収束できればいいや、くらいでは、十分です。

実際の問題をインプリメントすると、ほんの数100行になったりします。そのプログラムがそれらしい結果を出してくれると、なんか神がかりのような気分を味わえます。

「なんで、これで解が出るんだ~!!」って感じ。

がんばってくださひ。
では・・
    • good
    • 0
この回答へのお礼

悩んでいることに対して、的確にアドバイスしていただき有難う御座います。書店での情報収集やネットサーフィンでは指針が立てられず、何方かのアドバイスをお待ちしておりました。

自分は電子系のエンジニアで、技術の空洞化の時勢に逆らって、何とか欧米の技術力に追従しようと、ある分野の最適化設計に努力してきましたが、先日、欧米製の遺伝子的アルゴリズムを使用した商品を紹介され、技術力向上の限界を感じました。下手をすると、日々の設計の試行錯誤の過程を、遺伝子的アルゴリズムに取って代わられてしまうようにも思いました。

このお返事の中は、プログラム開発の実情がみえたように思います。普段使いなれているC言語を使って、あまり神経質にならずにコーディングしても結果が出るという力強いアドバイスもありましたし、チャレンジしてみたいと思います。これをやらないと、自分の会社の技術の空洞化が決定的なものになってしまいます。

それにしても、良い最適化設計の特徴(良い遺伝子配列の特徴)を見つけるのっ難しそうですね!
本日いただいたお返事は、一字一句大切にしたいと思います。有難う御座いました。

お礼日時:2002/09/16 22:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!