Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Implementation of Whale Optimization Algorithm
Introduction
Whale Optimization Algorithm is a technique for solving optimization problems in Mathematics and Machine Learning. It is based on the behavior of humpback whales which uses operators like prey searching, encircling the prey, and forging bubble net behavior of humpback whales in the ocean. It was given by Mirjalili and Lewis in 2016.
In this article, we are going to look into the different phases of the WOA algorithm
A History of Humpback Whales
Humpback whales are one of the largest mammals on Earth. They have a special type of hunting mechanism known as the bubble?net hunting mechanism. They are very intelligent as they have brains containing spindle cells and fibers. They hunt in three steps ?
The whale which is the leader creates a spiral?shaped bubble around the prey by diving down 12 meters and finding the prey.
A supporting whale who is quite experienced makes the other whale synchronize.
All the other whales make a formation and try to attack the prey.
WAO Algorithm
WAO algorithm inspired by the hunting behavior of humpback whales has below phases.
1. The phase of Exploration: Searching the Model
In this phase, the agent ( humpback whale) first randomly searches for the best solution based on each agent's position. The search agent's position is updated using a randomly selected search agent. The mathematic equation of this can be given as
$$\mathrm{?\: =\: |\: m \: *\:Y_{rand}\:-\:Y\: |}$$
$$\mathrm{ Y\:(t+1) \: =\:Y_{rand}\:-\:a\:*\:W |}$$
where Yrand is the random position vector from the current population.
[a,m] are the coefficients. if r is a random vector between ranges [0,1] b decreases linearly from 2 to 0 dimensions as given below
$$\mathrm{ a \:= \:2 * b * r - b}$$
$$\mathrm{ m \:= \:2 * r}$$
2. Model encircle
Whales encircle their while hunting. The current best agent is taken as the best solution, close to the optimal solution. Through this encircling behavior, the position of other agents are updated.
$$\mathrm{?\: =\: |\: m \: *\:Y'_{(t)}\:-\:Y(t)\: |}$$
$$\mathrm{ Y\:(t+1) \: =\:Y'_{(t)}\:-\:a\:*\:W }$$
3. Bubble Net and Exploitation
There are two approaches in this phase.
Shrink Encircle ? The value of a is a random value between [-n,n], and the value of decreases from 2 to 0 over iterations. For any pair of a such as [-2,2] a new position of the search agent is defined between the current best position and the original position.
Spiral Update ? In this mechanism, we calculate the distance between the whale and prey. The movement of the whale is given as a helix or spiral equation.
$$\mathrm{ X\:(t+1) \: = ???*\:e^{pq}\:*\:2\pi\:r\:+\:X'}$$
where p is a random number between [?1,2] and p is the radius of the spiral.
Implementation in Python
Example
<div class="code-mirror language-python" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;">!pip install pyMetaheuristic
<span class="token keyword">from</span> pyMetaheuristic<span class="token punctuation">.</span>algorithm <span class="token keyword">import</span> whale_optimization_algorithm <span class="token keyword">as</span> woa
<span class="token keyword">from</span> pyMetaheuristic<span class="token punctuation">.</span>utils <span class="token keyword">import</span> graphs
<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token comment"># Easom Function - target func</span>
<span class="token keyword">def</span> <span class="token function">easy_om</span><span class="token punctuation">(</span>var_values <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
x_1<span class="token punctuation">,</span> x_2 <span class="token operator">=</span> var_values
function_value <span class="token operator">=</span> <span class="token operator">-</span>np<span class="token punctuation">.</span>cos<span class="token punctuation">(</span>x_1<span class="token punctuation">)</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>cos<span class="token punctuation">(</span>x_2<span class="token punctuation">)</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>exp<span class="token punctuation">(</span><span class="token operator">-</span><span class="token punctuation">(</span>x_1 <span class="token operator">-</span> np<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token operator">**</span> <span class="token number">2</span> <span class="token operator">-</span> <span class="token punctuation">(</span>x_2 <span class="token operator">-</span> np<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token operator">**</span> <span class="token number">2</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> function_value
plot_parameters <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">'min_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'max_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'step'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token number">0.1</span><span class="token punctuation">,</span> <span class="token number">0.1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'solution'</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">'proj_view'</span><span class="token punctuation">:</span> <span class="token string">'3D'</span><span class="token punctuation">,</span>
<span class="token string">'view'</span><span class="token punctuation">:</span> <span class="token string">'notebook'</span>
<span class="token punctuation">}</span>
graphs<span class="token punctuation">.</span>plot_single_function<span class="token punctuation">(</span>target_function <span class="token operator">=</span> easy_om<span class="token punctuation">,</span> <span class="token operator">**</span>plot_parameters<span class="token punctuation">)</span>
<span class="token comment"># Parameter of woa algorithm</span>
parameters <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">'hunting_party'</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token punctuation">,</span>
<span class="token string">'min_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'max_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'iterations'</span><span class="token punctuation">:</span> <span class="token number">20</span><span class="token punctuation">,</span>
<span class="token string">'spiral_param'</span><span class="token punctuation">:</span> <span class="token number">0.4</span><span class="token punctuation">,</span>
<span class="token string">'verbose'</span><span class="token punctuation">:</span> <span class="token boolean">True</span>
<span class="token punctuation">}</span>
woa_value <span class="token operator">=</span> woa<span class="token punctuation">(</span>target_function <span class="token operator">=</span> easy_om<span class="token punctuation">,</span> <span class="token operator">**</span>parameters<span class="token punctuation">)</span>
variab <span class="token operator">=</span> woa_value<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span>
<span class="token builtin">min</span> <span class="token operator">=</span> woa_value<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Variables in the woa: '</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>around<span class="token punctuation">(</span>variab<span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token string">' Minimum Value Found: '</span><span class="token punctuation">,</span> <span class="token builtin">round</span><span class="token punctuation">(</span><span class="token builtin">min</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">)</span>
<span class="token comment"># Solution plotting woa</span>
plot_parameters <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">'min_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'max_values'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'step'</span><span class="token punctuation">:</span> <span class="token punctuation">(</span><span class="token number">0.1</span><span class="token punctuation">,</span> <span class="token number">0.1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'solution'</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>variab<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">'proj_view'</span><span class="token punctuation">:</span> <span class="token string">'3D'</span><span class="token punctuation">,</span>
<span class="token string">'view'</span><span class="token punctuation">:</span> <span class="token string">'notebook'</span>
<span class="token punctuation">}</span>
graphs<span class="token punctuation">.</span>plot_single_function<span class="token punctuation">(</span>target_function <span class="token operator">=</span> easy_om<span class="token punctuation">,</span> <span class="token operator">**</span>plot_parameters<span class="token punctuation">)</span>
</div>
Output
Iteration = 0 f(x) = -2.675287991074243e-09 Iteration = 1 f(x) = -0.5463250054450847 Iteration = 2 f(x) = -0.9616666553027987 Iteration = 3 f(x) = -0.9997741596613828 Iteration = 4 f(x) = -0.9997741596613828 Iteration = 5 f(x) = -0.9997741596613828 Iteration = 6 f(x) = -0.9997741596613828 Iteration = 7 f(x) = -0.9997741596613828 Iteration = 8 f(x) = -0.9997741596613828 Iteration = 9 f(x) = -0.9997741596613828 Iteration = 10 f(x) = -0.9997741596613828 Iteration = 11 f(x) = -0.9997741596613828 Iteration = 12 f(x) = -0.9998973527853484 Iteration = 13 f(x) = -0.9998973527853484 Iteration = 14 f(x) = -0.9999426874370445 Iteration = 15 f(x) = -0.9999426874370445 Iteration = 16 f(x) = -0.9999820386300734 Iteration = 17 f(x) = -0.9999860799836825 Iteration = 18 f(x) = -0.9999903470458049 Iteration = 19 f(x) = -0.9999966229369239 Iteration = 20 f(x) = -0.9999984095434976 Variables in the woa: [3.1414 3.142 ] Minimum Value Found: -1.0
Conclusion
Whale Optimization Algorithm is a novel approach to solving optimization problems in Machine Learning or Mathematics and Science in General. Inspired by humpback whales and their hunting habits this optimization technique is very useful in solving modern problems.
