Skip to content

Commit d36166b

Browse files
chore(opytimizer): Adds Walrus Optimization Algorithm
1 parent 7326a88 commit d36166b

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from opytimizer.optimizers.swarm import WAOA
2+
3+
# Creates a WAOA optimizer
4+
o = WAOA()

opytimizer/optimizers/swarm/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@
2929
from opytimizer.optimizers.swarm.ssa import SSA
3030
from opytimizer.optimizers.swarm.sso import SSO
3131
from opytimizer.optimizers.swarm.stoa import STOA
32+
from opytimizer.optimizers.swarm.waoa import WAOA
3233
from opytimizer.optimizers.swarm.woa import WOA
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
"""Walrus Optimization Algorithm.
2+
"""
3+
4+
import copy
5+
from typing import Any, Dict, Optional
6+
7+
import numpy as np
8+
9+
import opytimizer.math.random as r
10+
import opytimizer.utils.logging as l
11+
from opytimizer.core.optimizer import Optimizer
12+
from opytimizer.core.space import Space
13+
14+
logger = l.get_logger(__name__)
15+
16+
class WAOA(Optimizer):
17+
"""A WAOA class, inherited from Optimizer.
18+
19+
This is the designed class to dife WAOA-related
20+
variables and methods.
21+
22+
References:
23+
P. Trojovský and M. Dehghani. A new bio-inspired metaheuristic algorithm for
24+
solving optimization problems based on walruses behavior. Scientific Reports (2023).
25+
26+
"""
27+
28+
def __init__(self, params: Optional[Dict[str, Any]] = None) -> None:
29+
"""Initialization method.
30+
31+
Args:
32+
params (str): Contains key-value parameters to the meta-heuristics.
33+
"""
34+
35+
logger.info('Overriding class: Optimizer -> SSA')
36+
37+
super(WAOA, self).__init__()
38+
39+
self.build(params)
40+
41+
logger.info('Class overrided.')
42+
43+
def update(self, space: Space) -> None:
44+
"""Wraps Walrus Optimization Algorithm over all agents and variables.
45+
46+
Args:
47+
space: Space containing agents and update-related information.
48+
49+
"""
50+
51+
for agent in space.agents:
52+
a = copy.deepcopy(agent)
53+
54+
for j in range(space.n_variables):
55+
56+
k = r.generate_integer_random_number(1, 2)
57+
r1 = r.generate_uniform_random_number()
58+
59+
a.position[j] = agent.position[j] + r1 * (space.best_agent.position[j] - k * agent.position[j])
60+
61+
a.clip_by_bound()
62+
63+
a.fit = function(a.position)
64+
if a.fit < agent.fit:
65+
agent.position = copy.deepcopy(a.position)
66+
agent.fit = copy.deepcopy(a.fit)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import numpy as np
2+
3+
from opytimizer.optimizers.swarm import waoa
4+
from opytimizer.spaces import search
5+
6+
def test_waoa_update():
7+
def square(x):
8+
return np.sum(x**2)
9+
10+
new_waoa = waoa.WAOA()
11+
12+
search_space = search.SearchSpace(
13+
n_agents=20, n_variables=2, lower_bound=[0, 0], upper_bound=[10, 10]
14+
)
15+
16+
new_waoa.update(search_space, square)

0 commit comments

Comments
 (0)