Revision: 192c3fc85119
Branch: dev
Author: François-Michel De Rainville <
f.dera...@gmail.com>
Date: Fri Apr 4 20:03:32 2014 UTC
Log: Added a constraint decorator using a feasible individual as delta.
http://code.google.com/p/deap/source/detail?r=192c3fc85119
Modified:
/deap/tools/constraint.py
=======================================
--- /deap/tools/constraint.py Fri Apr 4 17:44:47 2014 UTC
+++ /deap/tools/constraint.py Fri Apr 4 20:03:32 2014 UTC
@@ -33,10 +33,34 @@
dist = self.dist_fct(individual)
return self.delta + dist,
+ return wrapper
+
+class ClosestPenality(object):
+ def __init__(self, feasibility, feasible, alpha, distance=None):
+ self.fbty_fct = feasibility
+ self.fbl_fct = feasible
+ self.alpha = alpha
+ self.dist_fct = distance
+
+ def __call__(self, func):
+ @wraps(func)
+ def wrapper(individual, *args, **kwargs):
+ if self.fbty_fct(individual):
+ return func(individual, *args, **kwargs)
+
+ f_ind = self.fbl_fct(individual)
+ f_fbl = func(f_ind, *args, **kwargs)
+
+ dist = 0
+ if self.dist_fct is not None:
+ dist = self.dist_fct(f_ind, individual)
+
+ return tuple(f + self.alpha * dist for f in f_fbl)
+
return wrapper
# List of exported function names.
-__all__ = ['Penality']
+__all__ = ['Penality', 'ClosestPenality']
if __name__ == "__main__":
def feasible(individual):