• 締切済み

高次元多峰性目的関数の数値最適化アルゴリズム

高次元多峰性目的関数の数値最適化アルゴリズム 高次元で多峰性のある微分不可能な目的関数を ある制約条件の下で最大化するためのアルゴリズムを 調べていますが、たくさんあり過ぎて、結局どれが もっとも有効な手法なのかがわからないままです。 学会でのコンセンサスがどうなっているのか教えて 頂けないでしょうか? ※以下、補足的な内容です。 ちなみに、アルゴリズムとしては Artificial Bee Colony (ABC) Algorithm Bacterial Foraging Optimization (BFO) Differential Evolution (DE) Method 微分進化法 Downhill Simplex Method 滑降シンプレックス法 Genetic Alogorithm (GA) 遺伝的アルゴリズム Particle Swarm Optimization (PSO) 粒子群最適化 Simulated Anneling 焼なめし法 などがあるようです。ABCアルゴリズムの開発者の論文 Karaboga and Basturk (2007) ``A powerful and efficient algorithm for numerical function optimization: artificial bee colony (ABC) algorithm,'' J. Global Optimization 39, pp. 459-471. http://sci2s.ugr.es/EAMHCO/pdfs/ABC-algorithm-numerical-function-2007.pdf によると、ABCはGA、PSOよりも優れているという結果を 得ています(といってもGAとPSOのパラメータの設定等に 恣意性があるのでなんとも言えません)。ただ、自分で 書いた、Karaboga and Basturk (2007)が扱ったのよりも もっと複雑なGAでも同じように高次元になってくると 早熟収束が簡単に起きてしまうのでGAは信頼してません。 まだまだ発展分野というか何でも有りの研究分野っぽいので 次から次へと新しいアルゴリズムが提案されてすべてを カバーするのは不可能に近いと思います。既に認知されている 物の中でも高次元多峰性関数の最適化に適していると 考えられているアルゴリズムは一体どれなのでしょうか。 専門外の人間でただ数値最適化を行いたいだけなので、 あまりサーベイに時間をかけていられなくて、みなさんの お力をお借りしたいと思っています。 どうぞよろしくお願いします!

  • qweel
  • お礼率100% (1/1)

みんなの回答

  • ur2c
  • ベストアンサー率63% (264/416)
回答No.1

主に simulated annealing を使った者で、専門家ではありません。 > どれがもっとも有効な手法なのか > 学会でのコンセンサスがどうなっているのか 「まだ決定打はない」が共通認識と思います。 「特効薬のある病気なら、誰がやっても同じ治療法になる。いろんな対処法があるということは、何を試してもなかなかうまく行かないということだ。」と先生から聞きました。高次元多峰の最適化法にいろんな流派があるのは、それと同じでしょう。論文を比較しても、あまり参考になりません。舞台裏で問題に合わせた調整をさんざんやって、最高の性能がうまく出た例だけを紹介してますので。 だから手法を選択するには「有効性」の評価に番外の基準を用いるべきと思います。たとえば説明や実装が簡単とか、調整が楽とか。

qweel
質問者

お礼

ご回答ありがとうございます。 その方の仰ってることは鋭いですね。 確かに、そういうことなんでしょうね。 問題に合わせて試行錯誤するしかないと。 あまり最適化に時間を掛けたくない者としては 嬉しくないですが・・・ アルゴリズムの比較について。 いろいろと調べているとわかったのですが、 アルゴリズムの評価の際に使われる関数は 大体決まっているようですね。 http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page364.htm ただ、多峰性関数にもいろいろあるので、 その中でどれを使うか、というのに恣意性があるようです。 個人的には、その恣意性をなくして、すべての 関数でテストするというルールを作るべきではないかと。 多峰性関数でも特徴Aを持つ関数にはこのアルゴリズムが、 特徴Bを持つ関数にはあのアルゴリズムが、という 議論ができると思うので。 あと、比較として用いられるアルゴリズムの ベンチマークを学会で決めるとか。例えば、GAと 比較するなら、このGAを使わないといけない、とか。 ur2cさんが仰られる「有効性」(実装が簡単か否か等)も もちろん大切だと思います。ただ、いくら簡単でも 結局解けなければ意味がないというのがあるので、 まずは上記に書いたように恣意性を無くしてほしいです。

関連するQ&A

  • 三次元形状曲面の導出法

    数学板でも質問したことなのですが、アドバイスもあってこちらに流れてきました。 質問番号3464667 に関連した質問なのですが 格子点上に並んでいない(x,y)と(dz/dx,dz/dy つまり各方向の傾き)がわかっている条件で三次元曲面形状を導出するアルゴリズムを作成しました。最小二乗法を基本としたアルゴリズムをフォートランで作成したのですが、なぜスプライン関数を使わないのかという指摘を受けました。 スプライン関数は曲線では非常に有力な補間法であることは理解しているのですが、格子点上に並んでいないデータでスプライン曲面を作るのは境界のつなぎ合わせや、パラメトリック曲線をどう作ればいいのかよくわからなくて敬遠したのですが、実際スプライン関数を用いて三次元形状を導出することは可能なのでしょうか? また近似曲面としてβスプライン関数やナーブス曲面は近似関数として適当なのでしょうか?(コンピュータグラフィックスの世界でしか使わない??) よろしくお願いします。

  • 解探索について

    はじめまして、現在大学でレイアウト技法について学んでいるものです。 現在レイアウトの解探索にPSO(粒子群最適化)、GA(遺伝的アルゴリズム)、SA(焼きなまし法)のうちどれか一つを用いる予定なのですがもしこれらの技法についてわかりやすく説明している本、もしくはサイトを知っている方いらっしゃいましたらご教授願えないでしょうか。 よろしくお願いします。

  • 二次元配列のアルゴリズム

    いま研修でアルゴリズムの基礎を勉強しています。あるテキストで「品目ごとの合計金額と総合計を表示するアルゴリズムを作成せよ」というお題がでたのですが、二次元配列が絡んでくると、どうも分かりません。誰か似たような問題をご存知でしたら、教えて頂けませんか?お願いします。

  • 数値計算での無次元化

    数値計算を行なおうと思っているのですが、無次元化がうまくいってないらしく計算もうまくいきません。このような場合、どのように無次元化すればよいでしょうか? 地上から、水平方向の距離 x,y, 鉛直方向の距離 z をそれぞれ50メートルとします。 この、50メートルを1、気温15℃での大気の密度1.225(kg/m^2)を1 とします。 このとき、 乾燥空気の気体定数 R = 287.04 J/K・kg 動粘性係数 ν = 1.54×10^-5 m^2 s K=ケルビン をどのような値にすればよいでしょうか?

  • 球の二次元衝突のアルゴリズム?

    ボールとボールが衝突したときの反射のさせ方がわかりません!! 自分では一応、「衝突したとき、互いのボールの速度ベクトルを交換させる」をやってみたのですが これだと明らかに物理的に変な動きをする時があったので、今度は「線形変換(?)を使って速度ベクトルいじって元に戻す」みたいなことをやってみたのですが、今度は若干物理的な動きになってきたと思いきや、 止まったボールに衝突したら互いに動きが止まったり、段々と速くなっていったり、ボールがボールをすり抜けたりする場合があったりして、もうお手上げです… ごく一般的なボールの衝突のアルゴリズムというか反射ベクトルの簡単な計算の仕方、または便利なクラス・メソッドなど教えていただけませんか お願いします。。。

    • ベストアンサー
    • Java
  • excel 2003 数値の1次元配置を2次元へ

    質問します! 下表(1)のように並んでいる数字を,下表(2)のようにするにはどうすればいいですか? 宜しくお願いします!! <表の説明> 表(1)はある生徒の,ある季節の,ある科目のスコアを表すものとします。 A~Cは春,D~Fは夏,G~Iは秋とします。 A,D,Gは英語,B,E,Hは数学,C,F,Iは国語とします。 1,2,3,4,・・・は生徒それぞれ(出席番号とします)を表し,各生徒の春,夏,秋における英語,数学,国語のスコアが表(1)中に記載されています。 例えば,C3は出席番号3番の,春における国語のスコアとなります。 この表(1)を,生徒それぞれについて,春夏秋での英数国のグラフを作りたいのです。 そのために表(2)が必要と考えています。 すなわち,表(2)の「1,2,3」行は出席番号1番のデータを表しており,A列は英語,B列は数学,C列は国語で,1行目は春,2行目は夏,3行目は秋です。 続いて4,5,6行目は出席番号2番のデータ,7,8,9行目は出席番号3番のデータとなります。 例えば,C7は出席番号3番の,春における国語のスコアとなります。 このように,1行でまとめられていたデータを3行ごとに変換したいのです。 コピペで対応できるかもしれませんが,データの数が膨大なので,関数とかオートフィルを使って自動でできる方法を探しています。 <表(1)>   A B C D E F G H I 1  2 3 1 4 5 6 3 2 2 2  4 3 2 2 3 2 1 5 6 3  3 4 6 6 3 2 1 2 3 4     (以下同様) <表(2)>   A B C D E F G H I 1  2 3 1 2  4 5 6 3  3 2 2 4  4 3 2 5  2 3 2 6  1 5 6 7  3 4 6 8  6 3 2 9  1 2 3 10 (以下同様)

  • 目的関数

    母集団薬物動態解析などで出てくる目的関数とは具体的にどのようなものなのでしょうか? 実際にはNOMMEMというソフトを使用してそれぞれの薬物動態パラメータにある要因が関与するかを目的関数の低下の程度をみて判断しています。

  • 目的関数

    目的関数z=0.4x+0.6yはyの式に変形するとy=(-2/3)x+(5/3)z になるんですよね?それを詳しく教えてくださる方よろしくお願いします。

  • ある数値が何個目にあるか調べる関数ありますでしょうか?

    タイトルにありますとおり ある数値が何個目にあるか調べる方法 または関数がないか悩んでおります^^; 文章だけではわかりにくいので以下に例を示します。   A B C D  1 2 2 0 3 1 4 8 5 2 6 9 7 5 8 3   このような表があったとします。 A列に適当な数字が並んでいます。 A列で3が何個目にあるか?という場合は MATCH関数でMATCH(3,A1:A8)で8と表示されると思います。 調べたい数値が1個だけしか存在しない場合はいいのですが 複数ある場合、MATCH関数だとうまくいきません。 例えば、A列の2を調べる場合は1行目と5行目にあるため使えません。 このような場合、使えそうな関数、またはMATCH関数でも便利な活用方法など ご存知の方いらっしゃいましたら、ご教示いただけませんでしょうか^^;

  • 数値を読み込む関数?

    javaで数値読み込みする関数ってなんていうのがありますか? また、VISUALSTADIOでいうMSDNみたいなのは JAVAにはありますか? 教えてください。