生物地理学に基づく最適化(BBO)は、与えられた品質尺度、すなわち適合度関数に関して、候補解を確率的かつ反復的に改善することで関数を最適化する進化アルゴリズム(EA)です。BBOは多くのバリエーションを含み、問題に関する仮定を一切行わないため、幅広い問題に適用できることから、メタヒューリスティクスに分類されます。
BBOは通常、多次元実数値関数の最適化に用いられますが、関数の勾配を用いないため、勾配降下法や準ニュートン法といった古典的な最適化手法のように、関数が微分可能である必要はありません。したがって、BBOは不連続関数にも適用可能です。
BBOは、候補解の集合を維持し、既存の候補解を単純な数式に基づいて組み合わせることで新しい候補解を生成することにより、問題を最適化します。このように、目的関数は候補解が与えられた場合の品質の尺度を提供するだけのブラックボックスとして扱われ、関数の勾配は必要ありません。
多くのEAと同様に、BBOは自然プロセスに触発されたものであり、特に、生物種の時間と空間における分布を研究する生物地理学に触発されたものである。 [ 1 ] BBOはもともと2008年にダン・サイモンによって導入された。[ 2 ]
生物地理学の数理モデルは、種分化(新種の進化)、島間の種(動物、魚、鳥、昆虫)の移動、および種の絶滅を記述します。[ 3 ]生命にとって好ましい島は、高い生息地適合性指数(HSI)を持つと言われています。[ 4 ] HSIと相関する特徴には、降雨量、植生の多様性、地形の多様性、陸地面積、気温などがあります。決定要因となる特徴は、適合性指数変数(SIV)と呼ばれます。居住可能性の観点から、SIVは独立変数であり、HSIは従属変数です。
HSIが高い島は多くの種を支えることができ、HSIが低い島は少数の種しか支えることができません。HSIが高い島には、個体数が多く、生息する種の数も多いため、近隣の生息地へ移動する種が多くいます。HSIが高い島からの移住は、種が故郷を離れたいから起こるわけではないことに注意してください。結局のところ、故郷の島は魅力的な居住地なのです。移住は、個体数の多い多数の種にランダムな影響が蓄積されることによって起こります。動物は漂流物に乗ったり、泳いだり、飛んだり、風に乗って近隣の島へ移動します。ある種が島から移住しても、その種が元の島から完全に姿を消すわけではありません。ごく少数の個体だけが移住するため、移住する種は元の島に留まりながら、同時に近隣の島へ移動します。しかし、BBOでは、島からの移住はその島からの絶滅につながると想定されています。 BBOでは、種は関数の独立変数を表し、各島は関数最適化問題の候補解を表すため、この仮定は必要不可欠である。
HSI値の高い島々は、移住率が高いだけでなく、既に多くの種が生息しているため、移住率も低い。このような島々に移住してきた種は、島のHSI値が高いにもかかわらず、他の種との資源をめぐる競争が激しすぎるため、死滅する傾向がある。
HSIが低い島々は、人口が少ないため、移住率が高い。これもまた、種がそのような島々に移住したがっているからではない。結局のところ、これらの島々は住むには好ましくない場所なのだ。これらの島々に移住が起こる理由は、追加の種を受け入れる余地がたくさんあるからである。移住してきた種が新しい場所で生き残れるかどうか、またどれくらいの期間生き残れるかは別の問題である。しかし、種の多様性はHSIと相関関係にあるため、HSIの低い島に多くの種がやってくると、島のHSIは増加する傾向がある。[ 4 ]
右の図は島嶼移住モデルを示している。[ 3 ]移民率そして移住率島に生息する種の数に依存する関数である。最大可能な移民率島に種がゼロの場合に発生します。種の数が増えるにつれて、島はより混雑し、移住を生き残れる種は少なくなり、移住率は低下します。生息地が支えることができる種の最大数は島に種が存在しない場合、移出率はゼロになります。島に種の数が増えるにつれて、島は混雑し、より多くの種の代表が島を離れることができ、移出率が上昇します。島に可能な限り最大の数の種が存在する場合、移住率は最大可能値に達する。

BBOでは、は、第 番目の候補解が置き換えられます。つまり、移民の確率は独立変数を置き換える場合、移住候補解は移住確率に比例する確率で選択される。これは通常、ルーレットホイールの選択を使用して行われます。
のために、 どここれは、母集団における候補解の数です。
他のほとんどのEAと同様に、BBOには突然変異が含まれています。個体群サイズが最適化のために次元関数は次のように記述できます。
集団を初期化する候補ソリューション終了条件を 満たさない間、各移住確率を設定するフィットネスする 各移民確率を設定するする各個人について各独立変数インデックスについて 使用してください移住するかどうかを確率的に決定する移民する 場合は、移住する個人を確率的に選択するEnd if 次の独立変数インデックス: 確率的に突然変異する 次の人物: 次世代
基本的なBBOアルゴリズムには多くのバリエーションが提案されており、その中には以下のようなものがある。
function BBO % 連続関数を最小化するための生物地理学ベース最適化 (BBO) % このプログラムは MATLAB R2012b でテスト済みですGenerationLimit = 50 ; % 世代数の制限PopulationSize = 50 ; % 個体群のサイズProblemDimension = 20 ; % 各解の変数の数 (つまり、問題の次元) MutationProbability = 0.04 ; % 独立変数ごとの解ごとの突然変異確率NumberOfElites = 2 ; % 1 世代から次の世代に保持する最良の解の数MinDomain = - 2.048 ; % 関数ドメインの各要素の下限MaxDomain = + 2.048 ; % 関数ドメインの各要素の上限% 個体群を初期化しますrng ( round ( sum ( 100 * clock ))); % 乱数生成器を初期化しますx = zeros ( PopulationSize , ProblemDimension ); % 個体群のメモリを割り当てますfor index = 1 : PopulationSize % 個体群をランダムに初期化しますx ( index , :) = MinDomain + ( MaxDomain - MinDomain ) * rand ( 1 , ProblemDimension ); end Cost = RosenbrockCost ( x ); % 各個体のコストを計算します [ x , Cost ] = PopulationSort ( x , Cost ); % 個体群を最良のものから最悪のものへとソートしますMinimumCost = zeros ( GenerationLimit , 1 ); % メモリを割り当てますMinimumCost ( 1 ) = Cost ( 1 ); % 各世代の最良のコストを MinimumCost 配列に保存しますdisp ([ 'Generation 0 min cost = ' , num2str ( MinimumCost ( 1 ))]); z = zeros ( PopulationSize , ProblemDimension ); % 一時的な個体群のためにメモリを割り当てる% 人口が適応度の高い順から低い順に並べられていると仮定して、移住率を計算します。mu = ( PopulationSize + 1 - ( 1 : PopulationSize )) / ( PopulationSize + 1 ); % 出国率lambda = 1 - mu ; % 入国率for Generation = 1 : GenerationLimit % 最良の解とコストをエリート配列に保存しますEliteSolutions = x ( 1 : NumberOfElites , :); EliteCosts = Cost ( 1 : NumberOfElites );% 移行率を使用して、 k = 1の場合のソリューション間で共有する情報の量を決定します。 : PopulationSize % k 番目のソリューションへの確率的移行j = 1の場合のProblemDimensionif rand < lambda ( k ) % 移住すべきか?% はい - 移住する解を選択する (ルーレット選択) RandomNum = rand * sum ( mu ); Select = mu ( 1 ); SelectIndex = 1 ; while ( RandomNum > Select ) && ( SelectIndex < PopulationSize ) SelectIndex = SelectIndex + 1 ; Select = Select + mu ( SelectIndex ); end z ( k , j ) = x ( SelectIndex , j ); % これが移住ステップですelse z ( k , j ) = x ( k , j ); % この独立変数では移住は行われませんend終わり終わりk = 1の場合の% Mutation : ParameterIndex = 1のPopulationSize : rand < MutationProbabilityの場合の問題次元z ( k , ParameterIndex ) = MinDomain + ( MaxDomain - MinDomain ) * rand ;終わり終わり終わりx = z ; % 移行および変異後の新しい解に置き換えますCost = RosenbrockCost ( x ); % コストを計算します[ x , Cost ] = PopulationSort ( x , Cost ); % 人口とコストを最良のものから最悪のものへとソートしますfor k = 1 : NumberOfElites % 最下位個体を前世代のエリート個体で置き換えるx ( PopulationSize - k + 1 , :) = EliteSolutions ( k , :); Cost ( PopulationSize - k + 1 ) = EliteCosts ( k ); end[ x , Cost ] = PopulationSort ( x , Cost ); % 人口とコストを最良の順から最悪の順にソートするMinimumCost ( Generation + 1 ) = Cost ( 1 ); disp ([ 'Generation ' , num2str ( Generation ), ' min cost = ' , num2str ( MinimumCost ( Generation + 1 ))]) end% 最良の解を表示し、結果をプロットして締めくくりますdisp ([ '見つかった最良の解 = ' , num2str ( x ( 1 , :))]) close all plot ( 0 : GenerationLimit , MinimumCost ); xlabel ( 'Generation' ) ylabel ( 'Minimum Cost' ) return%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [x, Cost] = PopulationSort ( x, Cost ) % 人口とコストを最良の順から最悪の順にソートします[ Cost , indices ] = sort ( Cost , 'ascend' ); x = x ( indices , :); return%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [Cost] = RosenbrockCost ( x ) % x の各要素の Rosenbrock 関数値を計算しますNumberOfDimensions = size ( x , 2 ); Cost = zeros ( size ( x , 1 ), 1 ); % Cost 配列のメモリを割り当てますfor PopulationIndex = 1 : length ( x ) Cost ( PopulationIndex ) = 0 ; for i = 1 : NumberOfDimensions - 1 Temp1 = x ( PopulationIndex , i ); Temp2 = x ( PopulationIndex , i + 1 ); Cost ( PopulationIndex ) = Cost ( PopulationIndex ) + 100 * ( Temp2 - Temp1 ^ 2 ) ^ 2 + ( Temp1 - 1 ) ^ 2 ; end end returnBBOは、ノイズのある関数(つまり、適合度評価がノイズによって損なわれる関数)[ 21 ] 、制約付き関数[ 22 ]、組み合わせ関数[ 23 ]、および多目的関数[24][25]に拡張されています。さらに、マイクロバイオジオグラフィーに 着想を得た多目的最適化アルゴリズム(μBiMO)が実装されました。これは、少数の島に基づいているため(そのためμBiMOという名前が付けられています)、つまり目的関数の呼び出しが少なくて済むため、工業デザインの分野での多目的最適化の解決に適しています。[ 26 ]
BBOはマルコフモデル[ 27 ]および動的システムモデル[ 28 ]を用いて数学的に解析されている。
研究者たちはBBOを様々な学術的および産業的応用分野に適用してきた。その結果、BBOは最先端のグローバル最適化手法よりも優れた性能を発揮することがわかった。
例えば、Wangらは、BBOがFSCABCと同等の性能を発揮するが、より単純なコードで済むことを証明した。[ 29 ]
Yangらは、BBOがGA、PSO、ABCよりも優れていることを示した。[ 30 ]