Revision: 891d003bebe7
Branch: dev
Author: felix.antoine.fortin
Date: Wed Apr 2 13:04:09 2014 UTC
Log: Replaced safeDiv by protectedDiv which returns 1 instead of 0
when the denominator is 0 in GP examples.
See issue 35.
http://code.google.com/p/deap/source/detail?r=891d003bebe7
Modified:
/examples/gp/adf_symbreg.py
/examples/gp/spambase.py
/examples/gp/symbreg.py
/examples/gp/symbreg_numpy.py
=======================================
--- /examples/gp/adf_symbreg.py Fri Feb 14 16:38:34 2014 UTC
+++ /examples/gp/adf_symbreg.py Wed Apr 2 13:04:09 2014 UTC
@@ -25,17 +25,17 @@
from deap import tools
# Define new functions
-def safeDiv(left, right):
+def protectedDiv(left, right):
try:
return left / right
except ZeroDivisionError:
- return 0
+ return 1
adfset2 = gp.PrimitiveSet("ADF2", 2)
adfset2.addPrimitive(operator.add, 2)
adfset2.addPrimitive(operator.sub, 2)
adfset2.addPrimitive(operator.mul, 2)
-adfset2.addPrimitive(safeDiv, 2)
+adfset2.addPrimitive(protectedDiv, 2)
adfset2.addPrimitive(operator.neg, 1)
adfset2.addPrimitive(math.cos, 1)
adfset2.addPrimitive(math.sin, 1)
@@ -44,7 +44,7 @@
adfset1.addPrimitive(operator.add, 2)
adfset1.addPrimitive(operator.sub, 2)
adfset1.addPrimitive(operator.mul, 2)
-adfset1.addPrimitive(safeDiv, 2)
+adfset1.addPrimitive(protectedDiv, 2)
adfset1.addPrimitive(operator.neg, 1)
adfset1.addPrimitive(math.cos, 1)
adfset1.addPrimitive(math.sin, 1)
@@ -54,7 +54,7 @@
adfset0.addPrimitive(operator.add, 2)
adfset0.addPrimitive(operator.sub, 2)
adfset0.addPrimitive(operator.mul, 2)
-adfset0.addPrimitive(safeDiv, 2)
+adfset0.addPrimitive(protectedDiv, 2)
adfset0.addPrimitive(operator.neg, 1)
adfset0.addPrimitive(math.cos, 1)
adfset0.addPrimitive(math.sin, 1)
@@ -65,7 +65,7 @@
pset.addPrimitive(operator.add, 2)
pset.addPrimitive(operator.sub, 2)
pset.addPrimitive(operator.mul, 2)
-pset.addPrimitive(safeDiv, 2)
+pset.addPrimitive(protectedDiv, 2)
pset.addPrimitive(operator.neg, 1)
pset.addPrimitive(math.cos, 1)
pset.addPrimitive(math.sin, 1)
=======================================
--- /examples/gp/spambase.py Fri Feb 14 16:38:34 2014 UTC
+++ /examples/gp/spambase.py Wed Apr 2 13:04:09 2014 UTC
@@ -42,15 +42,15 @@
pset.addPrimitive(operator.not_, [bool], bool)
# floating point operators
-# Define a safe division function
-def safeDiv(left, right):
+# Define a protected division function
+def protectedDiv(left, right):
try: return left / right
- except ZeroDivisionError: return 0
+ except ZeroDivisionError: return 1
pset.addPrimitive(operator.add, [float,float], float)
pset.addPrimitive(operator.sub, [float,float], float)
pset.addPrimitive(operator.mul, [float,float], float)
-pset.addPrimitive(safeDiv, [float,float], float)
+pset.addPrimitive(protectedDiv, [float,float], float)
# logic operators
# Define a new if-then-else function
=======================================
--- /examples/gp/symbreg.py Fri Feb 14 16:38:34 2014 UTC
+++ /examples/gp/symbreg.py Wed Apr 2 13:04:09 2014 UTC
@@ -26,17 +26,17 @@
from deap import gp
# Define new functions
-def safeDiv(left, right):
+def protectedDiv(left, right):
try:
return left / right
except ZeroDivisionError:
- return 0
+ return 1
pset = gp.PrimitiveSet("MAIN", 1)
pset.addPrimitive(operator.add, 2)
pset.addPrimitive(operator.sub, 2)
pset.addPrimitive(operator.mul, 2)
-pset.addPrimitive(safeDiv, 2)
+pset.addPrimitive(protectedDiv, 2)
pset.addPrimitive(operator.neg, 1)
pset.addPrimitive(math.cos, 1)
pset.addPrimitive(math.sin, 1)
=======================================
--- /examples/gp/symbreg_numpy.py Mon Feb 17 00:39:38 2014 UTC
+++ /examples/gp/symbreg_numpy.py Wed Apr 2 13:04:09 2014 UTC
@@ -26,21 +26,21 @@
from deap import gp
# Define new functions
-def safeDiv(left, right):
+def protectedDiv(left, right):
with numpy.errstate(divide='ignore',invalid='ignore'):
x = numpy.divide(left, right)
if isinstance(x, numpy.ndarray):
- x[numpy.isinf(x)] = 0
- x[numpy.isnan(x)] = 0
+ x[numpy.isinf(x)] = 1
+ x[numpy.isnan(x)] = 1
elif numpy.isinf(x) or numpy.isnan(x):
- x = 0
+ x = 1
return x
pset = gp.PrimitiveSet("MAIN", 1)
pset.addPrimitive(numpy.add, 2, name="vadd")
pset.addPrimitive(numpy.subtract, 2, name="vsub")
pset.addPrimitive(numpy.multiply, 2, name="vmul")
-pset.addPrimitive(safeDiv, 2)
+pset.addPrimitive(protectedDiv, 2)
pset.addPrimitive(numpy.negative, 1, name="vneg")
pset.addPrimitive(numpy.cos, 1, name="vcos")
pset.addPrimitive(numpy.sin, 1, name="vsin")