Biogeography-based optimization (BBO) is an evolutionary algorithm (EA) that optimizes a function by stochastically and iteratively improving candidate solutions with regard to a given measure of quality, or fitness function. BBO belongs to the class of metaheuristics since it includes many variations, and since it does not make any assumptions about the problem and can therefore be applied to a wide class of problems.
BBO is typically used to optimize multidimensional real-valued functions, but it does not use the gradient of the function, which means that it does not require the function to be differentiable as required by classic optimization methods such as gradient descent and quasi-newton methods. BBO can therefore be used on discontinuous functions.
BBO optimizes a problem by maintaining a population of candidate solutions, and creating new candidate solutions by combining existing ones according to a simple formula. In this way the objective function is treated as a black box that merely provides a measure of quality given a candidate solution, and the function's gradient is not needed.
Like many EAs, BBO was motivated by a natural process; in particular, BBO was motivated by biogeography, which is the study of the distribution of biological species through time and space. BBO was originally introduced by Dan Simon in 2008.
Underlying principles.
Mathematical models of biogeography describe speciation (the evolution of new species), the migration of species (animals, fish, birds, or insects) between islands, and the extinction of species. Islands that are friendly to life are said to have a high habitat suitability index (HSI). Features that correlate with HSI include rainfall, vegetative diversity, topographic diversity, land area, temperature, and others. The features that determine are called suitability index variables (SIVs). In terms of habitability, SIVs are the independent variables and HSI is the dependent variable.
Islands with a high HSI can support many species, and islands with a low HSI can support only a few species. Islands with a high HSI have many species that emigrate to nearby habitats because of the large populations and the large numbers of species that they host. Note that emigration from an island with a high HSI does not occur because species "want" to leave their home; after all, their home island is an attractive place to live. Emigration occurs because of the accumulation of random effects on a large number of species with large populations. Emigration occurs as animals ride flotsam, swim, fly, or ride the wind to neighboring islands. When a species emigrates from an island, it does not mean that the species completely disappears from its original island; only a few representatives emigrate, so an emigrating species remains present on its original island while at the same time migrating to a neighboring island. However, in BBO it is assumed that emigration from an island results in extinction from that island. This assumption is necessary in BBO because species represent the independent variables of a function, and each island represents a candidate solution to a function optimization problem.
Islands with a high HSI not only have a high emigration rate, but they also have a low immigration rate because they already support many species. Species that migrate to such islands will tend to die in spite of the island's high HSI, because there is too much competition for resources from other species.
Islands with a low HSI have a high immigration rate because of their low populations. Again, this is not because species "want" to immigrate to such islands; after all, these islands are undesirable places to live. The reason that immigration occurs to these islands is because there is a lot of room for additional species. Whether or not the immigrating species can survive in its new home, and for how long, is another question. However, species diversity is correlated with HSI, so when more species arrive at a low HSI island, the island's HSI will tend to increase.
The figure on the right illustrates an island migration model. The immigration rate formula_1 and the emigration rate formula_2 are functions of the number of species on the island. The maximum possible immigration rate formula_3 occurs when there are zero species on the island. As the number of species increases, the island becomes more crowded, fewer species are able to survive immigration, and the immigration rate decreases. The largest possible number of species that the habitat can support is formula_4, at which point the immigration rate is zero. If there are no species on the island, then the emigration rate is zero. As the number of species on the island increases, it becomes more crowded, more species representatives are able to leave the island, and the emigration rate increases. When the island contains the largest number of possible species formula_4, the emigration rate reaches its maximum possible value formula_6.
In BBO, formula_7 is the probability that a given independent variable in the formula_8-th candidate solution will be replaced; that is, formula_7 is the immigration probability of formula_10. If an independent variable is to be replaced, then the emigrating candidate solution is chosen with a probability that is proportional to the emigration probability formula_11. This is usually performed using roulette wheel selection.
 formula_12
for formula_13, where formula_14 is the number of candidate solutions in the population.
Algorithm.
Like most other EAs, BBO includes mutation. A basic BBO algorithm with a population size of formula_15 for optimizing an formula_16-dimensional function can be described as follows.
 Initialize a population of formula_14 candidate solutions formula_18 
 While not(termination criterion)
 For each formula_10, set emigration probability formula_20 fitness of formula_10, do
 with formula_22
 For each formula_10, set immigration probability formula_24 do
 formula_25
 For each individual formula_26 do
 For each independent variable index formula_27 do
 Use formula_7 to probabilistically decide whether to immigrate to formula_29
 If immigrating then
 Use formula_30 to probabilistically select the emigrating individual formula_31
 formula_32
 End if
 Next independent variable index: formula_33
 Probabilistically mutate formula_34
 Next individual: formula_35
 formula_36
 Next generation
Algorithmic variations.
Many variations have been proposed to the basic BBO algorithm, among which are the following.
 formula_52
 where formula_53, and formula_54 corresponds to standard migration as shown in the algorithm above. Blended BBO is based on blended crossover in genetic algorithms, and has been shown to outperform standard BBO.
Software.
MATLAB.
function BBO
% Biogeography-based optimization (BBO) to minimize a continuous function
% This program was tested with MATLAB R2012b
GenerationLimit = 50; % generation count limit 
PopulationSize = 50; % population size
ProblemDimension = 20; % number of variables in each solution (i.e., problem dimension)
MutationProbability = 0.04; % mutation probability per solution per independent variable
NumberOfElites = 2; % how many of the best solutions to keep from one generation to the next
MinDomain = -2.048; % lower bound of each element of the function domain
MaxDomain = +2.048; % upper bound of each element of the function domain
% Initialize the population
rng(round(sum(100*clock))); % initialize the random number generator
x = zeros(PopulationSize, ProblemDimension); % allocate memory for the population
for index = 1 : PopulationSize % randomly initialize the population
 x(index, :) = MinDomain + (MaxDomain - MinDomain) * rand(1, ProblemDimension);
end
Cost = RosenbrockCost(x); % compute the cost of each individual 
[x, Cost] = PopulationSort(x, Cost); % sort the population from best to worst
MinimumCost = zeros(GenerationLimit, 1); % allocate memory
MinimumCost(1) = Cost(1); % save the best cost at each generation in the MinimumCost array
disp(['Generation 0 min cost = ', num2str(MinimumCost(1))]);
z = zeros(PopulationSize, ProblemDimension); % allocate memory for the temporary population
% Compute migration rates, assuming the population is sorted from most fit to least fit
mu = (PopulationSize + 1 - (1:PopulationSize)) / (PopulationSize + 1); % emigration rate
lambda = 1 - mu; % immigration rate
for Generation = 1 : GenerationLimit
 % Save the best solutions and costs in the elite arrays
 EliteSolutions = x(1 : NumberOfElites, :);
 EliteCosts = Cost(1 : NumberOfElites);
 % Use migration rates to decide how much information to share between solutions
 for k = 1 : PopulationSize
 % Probabilistic migration to the k-th solution
 for j = 1 : ProblemDimension
 if rand ; lambda(k) % Should we immigrate?
 % Yes - Pick a solution from which to emigrate (roulette wheel selection)
 RandomNum = rand * sum(mu);
 Select = mu(1);
 SelectIndex = 1;
 while (RandomNum ; Select) &amp;&amp; (SelectIndex ; PopulationSize)
 SelectIndex = SelectIndex + 1;
 Select = Select + mu(SelectIndex);
 end
 z(k, j) = x(SelectIndex, j); % this is the migration step
 else
 z(k, j) = x(k, j); % no migration for this independent variable
 end
 end
 end
 % Mutation
 for k = 1 : PopulationSize
 for ParameterIndex = 1 : ProblemDimension
 if rand ; MutationProbability
 z(k, ParameterIndex) = MinDomain + (MaxDomain - MinDomain) * rand;
 end
 end
 end
 x = z; % replace the solutions with their new migrated and mutated versions
 Cost = RosenbrockCost(x); % calculate cost
 [x, Cost] = PopulationSort(x, Cost); % sort the population and costs from best to worst
 for k = 1 : NumberOfElites % replace the worst individuals with the previous generation's elites
 x(PopulationSize-k+1, :) = EliteSolutions(k, :);
 Cost(PopulationSize-k+1) = EliteCosts(k);
 end
 [x, Cost] = PopulationSort(x, Cost); % sort the population and costs from best to worst
 MinimumCost(Generation+1) = Cost(1);
 disp(['Generation ', num2str(Generation), ' min cost = ', num2str(MinimumCost(Generation+1))])
end
% Wrap it up by displaying the best solution and by plotting the results
disp(['Best solution found = ', num2str(x(1, :))])
close all
plot(0:GenerationLimit, MinimumCost);
xlabel('Generation')
ylabel('Minimum Cost')
return
function [x, Cost] = PopulationSort(x, Cost)
% Sort the population and costs from best to worst
[Cost, indices] = sort(Cost, 'ascend');
x = x(indices, :);
return
function [Cost] = RosenbrockCost(x)
% Compute the Rosenbrock function value of each element in x
NumberOfDimensions = size(x, 2);
Cost = zeros(size(x, 1), 1); % allocate memory for the Cost array
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
return
Extensions.
BBO has been extended to noisy functions (that is, functions whose fitness evaluation is corrupted by noise); constrained functions; combinatorial functions; and multi-objective functions.
Moreover, a micro biogeography-inspired multi-objective optimization algorithm (μBiMO) was implemented: it is suitable for solving multi-objective optimisations in the field of industrial design because it is based on a small number of islands (hence the name μBiMO), i.e. few objective function calls are required.
Mathematical analyses.
BBO has been mathematically analyzed using Markov models and dynamic system models.
Applications.
Scholars have applied BBO into various academic and industrial applications. They found BBO performed better than state-of-the-art global optimization methods. 
For example, Wang et al. proved BBO performed equal performance with FSCABC but with simpler codes.
Yang et al. showed BBO was superior to GA, PSO, and ABC.
References.
 ;templatestyles src="Reflist/styles.css" / ;