Source code for pyJaya.variants.binary
# -*- coding: utf-8 -*-
from .base import JayaBase
from pyJaya.population import Solution
import numpy as np
import math
[docs]class JayaBinary(JayaBase):
"""Jaya binary class
Args:
numSolutions (int): Number of solutions of population.
listVars (list): Range list.
functionToEvaluate (funtion): Function to minimize or maximize.
listConstraints (list, optional): Constraint list. Defaults to [].
population (Population, optional): Population. Defaults to None.
"""
[docs] def run(self, number_iterations):
"""Run method
Args:
number_iterations (int): Number of iterations.
Returns:
Population: Final population.
"""
for i in range(number_iterations):
result = self.population.getBestAndWorst()
np.random.seed()
r1 = np.random.rand(self.cantVars)
r2 = np.random.rand(self.cantVars)
for solution in self.population.solutions:
solt = []
for v_item, v_value in enumerate(solution.solution):
v = v_value + r1[v_item] *\
(result['best_solution'][v_item] - abs(v_value)) -\
r2[v_item] *\
(result['worst_solution'][v_item]-abs(v_value))
if math.tanh(abs(v)) > 0.5:
solt.append(1.0)
else:
solt.append(0.0)
auxSolution = Solution(
self.listVars, self.functionToEvaluate,
self.listConstraints)
auxSolution.setSolution(np.asarray(solt))
if self.minimax:
if (auxSolution.value > solution.value) and \
(auxSolution.constraintsOK(np.asarray(solt))):
solution.setSolution(auxSolution.solution)
else:
if (auxSolution.value < solution.value) and \
(auxSolution.constraintsOK(np.asarray(solt))):
solution.setSolution(auxSolution.solution)
return self.population