Version: 0.6.0

# $$\epsilon$$-Constraint Handling¶

Instead of directly redefining the problem, one can also redefine an algorithm that changes its conclusion, whether a solution is feasible given the constraint violation over time. One common way is to allow an $$\epsilon$$ amount of infeasibility to still consider a solution as feasible. Now, one can decrease the $$\epsilon$$ over time and thus finally fall back to a feasibility first algorithm. The $$\epsilon$$ has reached zero depending on perc_eps_until. For example, if perc_eps_until=0.5 then after 50% of the run has been completed $$\epsilon=0$$.

Info

This constraint handling method has been added recently and is still experimental. Please let us know if it has or has not worked for your problem.

Such a method can be especially useful for equality constraints which are difficult to satisfy. See the example below:

[2]:

from pymoo.algorithms.soo.nonconvex.de import DE
from pymoo.optimize import minimize
from pymoo.problems.single import G1

problem = ConstrainedProblemWithEquality()

res = minimize(problem,
algorithm,
('n_gen', 200),
seed=1,
verbose=False)

print("Best solution found: \nX = %s\nF = %s\nCV = %s" % (res.X, res.F, res.CV))

Best solution found:
X = [0.25000074 0.75002313]
F = [1.00002387]
CV = [0.]