Source code for pyJaya.solution

# -*- coding: utf-8 -*-
"""
Solution class
"""
import numpy as np


[docs]class Solution(): """Solution class Args: listVars (list): Range list. functionToEvaluate (funtion): Function to minimize or maximize. listConstraints (list, optional): Constraint list. Defaults to []. """ def __repr__(self): """Represent Returns: str: Solution represent. """ return self.__str__() def __str__(self): """Str Returns: str: Solution represent. """ return str(self.solution) def __init__( self, listVars, functionToEvaluate, listConstraints=[]): self.cantVars = len(listVars) self.listVars = listVars self.listConstraints = listConstraints self.functionToEvaluate = functionToEvaluate self.solution = np.zeros(self.cantVars) self.value = None
[docs] def generate(self): """Generate a solution""" while True: solution = np.zeros(self.cantVars) for item in range(self.cantVars): solution[item] = self.listVars[item].get() if self.constraintsOK(solution): self.solution = solution break self.value = self.evaluate()
[docs] def constraintsOK(self, solution): """Check that the solution satisfies the constraints Args: solution (Solution): Solution to check. Returns: Bool: True if it satisfies the constraints, False if not. """ for constraints in self.listConstraints: if not constraints(*[solution]): return False return True
[docs] def evaluate(self): """Evaluate the solution Returns: Float: Result when evaluating the solution. """ return self.functionToEvaluate(tuple(*[self.solution]))
[docs] def setSolution(self, solution): """Set solution Args: solution (list or np.array): Solution to be assigned. """ self.solution = solution self.value = self.evaluate()