Example #1
0
    def _setup_pset(self):
        if self.random_state is not None:
            random.seed(self.random_state)
            np.random.seed(self.random_state)

        self._pset = gp.PrimitiveSetTyped('MAIN', [np.ndarray], Output_Array)

        # Rename pipeline input to "input_df"
        self._pset.renameArguments(ARG0='input_matrix')

        # Add all operators to the primitive set
        for op in self.operators:

            if op.root:
                # We need to add rooted primitives twice so that they can
                # return both an Output_Array (and thus be the root of the tree),
                # and return a np.ndarray so they can exist elsewhere in the tree.
                p_types = (op.parameter_types()[0], Output_Array)
                self._pset.addPrimitive(op, *p_types)

            self._pset.addPrimitive(op, *op.parameter_types())

            # Import required modules into local namespace so that pipelines
            # may be evaluated directly
            for key in sorted(op.import_hash.keys()):
                module_list = ', '.join(sorted(op.import_hash[key]))

                if key.startswith('tpot.'):
                    exec('from {} import {}'.format(key[4:], module_list))
                else:
                    exec('from {} import {}'.format(key, module_list))

                for var in op.import_hash[key]:
                    self.operators_context[var] = eval(var)

        self._pset.addPrimitive(CombineDFs(), [np.ndarray, np.ndarray],
                                np.ndarray)

        # Terminals
        for _type in self.arguments:
            type_values = list(_type.values)
            if 'nthread' not in _type.__name__:
                type_values += ['DEFAULT']

            for val in type_values:
                terminal_name = _type.__name__ + "=" + str(val)
                self._pset.addTerminal(val, _type, name=terminal_name)

        if self.verbosity > 2:
            print('{} operators have been imported by TPOT.'.format(
                len(self.operators)))
Example #2
0
    def _setup_pset(self):
        self._pset = gp.PrimitiveSetTyped('MAIN', [np.ndarray], Output_DF)

        # Rename pipeline input to "input_df"
        self._pset.renameArguments(ARG0='input_matrix')

        # Add all operators to the primitive set
        for op in operators.Operator.inheritors():
            if op.root:
                # We need to add rooted primitives twice so that they can
                # return both an Output_DF (and thus be the root of the tree),
                # and return a np.ndarray so they can exist elsewhere in the
                # tree.
                p_types = (op.parameter_types()[0], Output_DF)
                self._pset.addPrimitive(op, *p_types)

            self._pset.addPrimitive(op, *op.parameter_types())

            # Import required modules into local namespace so that pipelines
            # may be evaluated directly
            for key in sorted(op.import_hash.keys()):
                module_list = ', '.join(sorted(op.import_hash[key]))

                if key.startswith("tpot."):
                    exec('from {} import {}'.format(key[4:], module_list))
                else:
                    exec('from {} import {}'.format(key, module_list))

                for var in op.import_hash[key]:
                    self.operators_context[var] = eval(var)

        self._pset.addPrimitive(CombineDFs(), [np.ndarray, np.ndarray],
                                np.ndarray)

        # Terminals
        int_terminals = np.concatenate((np.arange(0, 51,
                                                  1), np.arange(60, 110, 10)))

        for val in int_terminals:
            self._pset.addTerminal(val, int)

        float_terminals = np.concatenate(
            ([1e-6, 1e-5, 1e-4, 1e-3], np.arange(0., 1.01, 0.01),
             np.arange(2., 51., 1.), np.arange(60., 101., 10.)))

        for val in float_terminals:
            self._pset.addTerminal(val, float)

        self._pset.addTerminal(True, Bool)
        self._pset.addTerminal(False, Bool)
    def test_pickle_tree_ephemeral(self):
        pset = gp.PrimitiveSetTyped("MAIN", [], int, "IN")
        pset.addPrimitive(operator.add, [int, int], int)
        pset.addEphemeralConstant("E1", lambda: 2, int)

        expr = gp.genFull(pset, min_=1, max_=1)
        ind = creator.IndTree(expr)
        ind.fitness.values = (1.0,)
        ind_s = pickle.dumps(ind, pickle.HIGHEST_PROTOCOL)
        ind_l = pickle.loads(ind_s)
        msg = "Unpickled individual %s != pickled individual %s" % (str(ind), str(ind_l))
        self.assertEqual(ind, ind_l, msg)
        msg = "Unpickled fitness %s != pickled fitness %s" % (str(ind.fitness), str(ind_l.fitness))
        self.assertEqual(ind.fitness, ind_l.fitness, msg)
Example #4
0
 def __init__(self, n=50, threshold=0.75, reproduction_cost=0.25):
     self.queue = list()
     self.threshold = threshold
     self.reproduction_cost = reproduction_cost
     self.pset = gp.PrimitiveSetTyped("main", [], bool)
     self.pset.addPrimitive(operator.and_, [bool, bool], bool)
     self.pset.addPrimitive(operator.or_, [bool, bool], bool)
     self.pset.addPrimitive(operator.lt, [float, float], bool)
     self.pset.addPrimitive(operator.lt, [float, float], bool)
     self.pset.addPrimitive(operator.lt, [float, float], bool)
     self.pset.addPrimitive(operator.lt, [float, float], bool)
     self.pset.addEphemeralConstant("rand40",
                                    lambda: round(random.random() * 40, 2),
                                    float)
     self.pset.addTerminal('price', float)
     self.pset.addTerminal('price_old', float)
     self.pset.addTerminal('volume', float)
     self.pset.addTerminal('colourfulness', float)
     self.creator = creator
     self.creator.create("FitnessMin", base.Fitness, weights=(-1.0, ))
     self.creator.create("Individual",
                         gp.PrimitiveTree,
                         fitness=creator.FitnessMin,
                         pset=self.pset)
     self.toolbox = base.Toolbox()
     self.toolbox.register("expr",
                           genGrow,
                           pset=self.pset,
                           min_=0,
                           max_=6,
                           type_=bool)
     self.toolbox.register("individual", tools.initIterate,
                           creator.Individual, self.toolbox.expr)
     self.toolbox.register("population", tools.initRepeat, list,
                           self.toolbox.individual)
     self.toolbox.register("evaluate", self.fitness)
     self.toolbox.register("select", tools.selTournament, tournsize=3)
     self.toolbox.register("mate", gp.cxOnePoint)
     self.toolbox.register("expr_mut", genGrow, min_=0, max_=2)
     self.toolbox.register("mutate",
                           gp.mutUniform,
                           expr=self.toolbox.expr_mut,
                           pset=self.pset)
     self.mongo = MongoClient(os.environ['MONGO_1_PORT_27017_TCP_ADDR'],
                              27017)
     self.get_cursor(3)
     self.cursor.execute('SELECT id FROM gieters')
     self.all_ids = [value[0] for value in self.cursor.fetchall()]
     self.update_queue()
def create_pset(in_type, in_types_length, out_type):
  pset = gp.PrimitiveSetTyped("MAIN",
                             itertools.repeat(in_type, in_types_length),
                             out_type,
                             prefix="x")
  # basic operators 
  pset.addPrimitive(ops.addition, [float,float], float)
  pset.addPrimitive(ops.subtract, [float,float], float)
  pset.addPrimitive(ops.multiply, [float,float], float)
  pset.addPrimitive(ops.safediv, [float,float], float)
  pset.addPrimitive(ops.modulus, [float,float], float)
  pset.addPrimitive(ops.plus_mod_two, [float,float], float)
  # logic operators
  pset.addPrimitive(ops.equal, [float, float], float)
  pset.addPrimitive(ops.not_equal, [float, float], float)
  pset.addPrimitive(ops.gt, [float, float], float)
  pset.addPrimitive(ops.lt, [float, float], float)
  pset.addPrimitive(ops.AND, [float, float], float)
  pset.addPrimitive(ops.OR, [float, float], float)
  pset.addPrimitive(ops.xor, [float,float], float)
  # bitwise operators 
  pset.addPrimitive(ops.bitand, [float,float], float)
  pset.addPrimitive(ops.bitor, [float,float], float)
  pset.addPrimitive(ops.bitxor, [float,float], float)
  # unary operators 
  pset.addPrimitive(op.abs, [float], float)
  pset.addPrimitive(ops.NOT, [float], float)
  pset.addPrimitive(ops.factorial, [float], float)
  # large operators 
  pset.addPrimitive(ops.power, [float,float], float)
  pset.addPrimitive(ops.logAofB, [float,float], float)
  pset.addPrimitive(ops.permute, [float,float], float)
  pset.addPrimitive(ops.choose, [float,float], float)
  # misc operators 
  pset.addPrimitive(ops.left, [float,float], float)
  pset.addPrimitive(ops.right, [float,float], float)
  pset.addPrimitive(min, [float,float], float)
  pset.addPrimitive(max, [float,float], float)
  # terminals 
  randval = "rand" + str(random.random())[2:]  # so it can rerun from ipython
  pset.addEphemeralConstant(randval,
                            lambda: random.random() * 100,
                            float)
  pset.addTerminal(0.0, float)
  pset.addTerminal(1.0, float)
  return pset
Example #6
0
def CreatePrimitiveSet(window_size, code_size):
    """TODO:"""
    #About primitives:
    # input types requires length (use lists)
    # input types use list but arguments are seen as separate elements
    # return type must be a class.
    # return type must be hashable, so lists which are dynamic elements are not allowed.
    kCS = code_size
    kWS = window_size

    pset = gp.PrimitiveSetTyped("GP-criptor", itertools.repeat(float, kWS**2),
                                tuple, "P")
    pset.addPrimitive(codeFunction, [float] * kCS, tuple)
    pset.addPrimitive(operator.add, [float, float], float)
    pset.addPrimitive(operator.sub, [float, float], float)
    pset.addPrimitive(operator.mul, [float, float], float)
    pset.addPrimitive(protectedDiv, [float, float], float)

    return pset
Example #7
0
 def __init__(self, x_train, y_train, excludes, header, config_file):
     """
     https://deap.readthedocs.io/en/master/examples/gp_spambase.html
     inputing features indexes are given after removing the target feature
     """
     self.feature_names = update_indexes(original_list=config_file['inputing_features_gp'],
                                         excludes=excludes,
                                         header=header)
     self.x_train = x_train[:, self.feature_names]
     self.y_train = y_train
     self.position_target = numpy.size(self.x_train, 1)
     self.pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float, self.position_target), float, "IN")
     self.primitive_functions()
     # Minimizing the error between the response of the genetic formula and the true response. MSE
     creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
     creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMin)
     self.data = numpy.insert(self.x_train, numpy.size(self.x_train, 1), self.y_train, axis=1).tolist()
     self.toolbox = base.Toolbox()
     self.register_functions()
Example #8
0
    def build_primitive_set(self):
        ''' Define operators/terminals set. '''

        # setup evolution env.
        pset = gp.PrimitiveSetTyped(
            'MAIN',  # codename for the dataset
            itertools.repeat(float,
                             self.nfeatures),  # type and number of features
            bool,  # type of the target value
            'f_',  # a prefix to encode feature names
        )

        # boolean operators
        pset.addPrimitive(operator.and_, [bool, bool], bool)
        pset.addPrimitive(operator.or_, [bool, bool], bool)
        pset.addPrimitive(operator.not_, [bool], bool)

        # floating point operators
        pset.addPrimitive(np.add, [float, float], float)
        pset.addPrimitive(np.subtract, [float, float], float)
        pset.addPrimitive(np.multiply, [float, float], float)
        pset.addPrimitive(self.div, [float, float], float)
        pset.addPrimitive(np.exp, [float], float)
        pset.addPrimitive(np.sin, [float], float)
        pset.addPrimitive(np.cos, [float], float)
        pset.addPrimitive(np.log, [float], float)

        # logic operators
        pset.addPrimitive(operator.gt, [float, float], bool)
        pset.addPrimitive(operator.lt, [float, float], bool)
        pset.addPrimitive(operator.eq, [float, float], bool)
        pset.addPrimitive(self.ifelse, [float, float], float)

        # terminals
        pset.addEphemeralConstant(  # random constant
            'rand' + str(time.time()), lambda: random.random() * 100, float)

        pset.addTerminal(False, bool)
        pset.addTerminal(True, bool)

        return pset
Example #9
0
def GP_Definitions(nfeatures):
    # defined a new primitive set for strongly typed GP
    pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float, nfeatures),
                                bool, "IN")

    # boolean operators
    pset.addPrimitive(operator.and_, [bool, bool], bool)
    pset.addPrimitive(operator.or_, [bool, bool], bool)
    pset.addPrimitive(operator.not_, [bool], bool)

    # floating point operators
    # Define a safe division function
    def safeDiv(left, right):
        try:
            return left / right
        except ZeroDivisionError:
            return 0

    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)

    # logic operators
    # Define a new if-then-else function
    def if_then_else(input, output1, output2):
        if input: return output1
        else: return output2

    pset.addPrimitive(operator.lt, [float, float], bool)
    pset.addPrimitive(operator.eq, [float, float], bool)
    pset.addPrimitive(if_then_else, [bool, float, float], float)

    # terminals
    pset.addEphemeralConstant("rand100", lambda: random.random() * 100, float)
    pset.addTerminal(False, bool)
    pset.addTerminal(True, bool)

    return pset
Example #10
0
    def __init__(self, population_size=100, generations=100,
                 mutation_rate=0.9, crossover_rate=0.05,
                 random_state=0, verbosity=0):
        """Sets up the genetic programming algorithm for pipeline optimization."""
        self.population_size = population_size
        self.generations = generations
        self.mutation_rate = mutation_rate
        self.crossover_rate = crossover_rate
        self.verbosity = verbosity

        if random_state > 0:
            random.seed(random_state)
            np.random.seed(random_state)

        self.pset = gp.PrimitiveSetTyped('MAIN', [pd.DataFrame], pd.DataFrame)
        self.pset.addPrimitive(self.decision_tree, [pd.DataFrame, int, int], pd.DataFrame)
        self.pset.addPrimitive(self.random_forest, [pd.DataFrame, int, int], pd.DataFrame)
        self.pset.addPrimitive(self._combine_dfs, [pd.DataFrame, pd.DataFrame], pd.DataFrame)
        self.pset.addPrimitive(self._subset_df, [pd.DataFrame, int, int], pd.DataFrame)
        self.pset.addPrimitive(self._dt_feature_selection, [pd.DataFrame, int], pd.DataFrame)

        self.pset.addPrimitive(operator.add, [int, int], int)
        self.pset.addPrimitive(operator.sub, [int, int], int)
        self.pset.addPrimitive(operator.mul, [int, int], int)
        for val in range(0, 101):
            self.pset.addTerminal(val, int)

        creator.create('FitnessMax', base.Fitness, weights=(1.0,))
        creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMax)

        self.toolbox = base.Toolbox()
        self.toolbox.register('expr', gp.genHalfAndHalf, pset=self.pset, min_=1, max_=2)
        self.toolbox.register('individual', tools.initIterate, creator.Individual, self.toolbox.expr)
        self.toolbox.register('population', tools.initRepeat, list, self.toolbox.individual)
        self.toolbox.register('compile', gp.compile, pset=self.pset)
        self.toolbox.register('select', self._combined_selection_operator)
        self.toolbox.register('mate', gp.cxOnePoint)
        self.toolbox.register('expr_mut', gp.genFull, min_=0, max_=2)
        self.toolbox.register('mutate', self._random_mutation_operator)
Example #11
0
        else:
            label = False
        if bool(f(*feature[:9])) == label:
            result += 1
    return result,


# Initialise fitness and individual classes
creator.create("FitnessMax", base.Fitness, weights=(1.0, ))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax)

# Initialise toolbox
toolbox = base.Toolbox()

# set operators that can be used in tree.
pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float, 9), bool, "IN")
pset.addPrimitive(operator.add, [float, float], float)
pset.addPrimitive(operator.sub, [float, float], float)
pset.addPrimitive(operator.mul, [float, float], float)
pset.addPrimitive(protected_div, [float, float], float)
pset.addPrimitive(operator.abs, [float], float)
pset.addPrimitive(square, [float], float)
pset.addPrimitive(math.sin, [float], float)
pset.addPrimitive(math.cos, [float], float)


# logic operators
# Define a new if-then-else function
def if_then_else(input, output1, output2):
    if input:
        return output1
Example #12
0
"""
class Flag:
    def __init__(self, val): self.val = val
    #def __str__ (self): return str(self.val)
    def __repr__(self): #return 'Flag("%s")' % self.val if self.val else 'Flag(None)'
        return 'Flag(%s)' % self.val
"""


class Profiling:
    values = [None, 'autofdo', 'pgo']


profiling = Profiling()

pset = gp.PrimitiveSetTyped("MAIN", (), Profiling)

for value in profiling.values:
    pset.addTerminal(value, Profiling, name=str(value))

pset.addPrimitive(lambda x: x, (Profiling, ), Profiling, name="id")
"""

    def __init__(self, f**k):
        self.f**k = f**k
    def __repr__(self): return 'Profiling(%s)' % repr(self.f**k)

pset = gp.PrimitiveSetTyped("MAIN", (), Profiling)

#pset.addPrimitive(Profiling, (int,), Profiling)
pset.addPrimitive(lambda x: x, (Profiling,), Profiling, name="id")
Example #13
0
from deap import base, creator, gp, tools

from Tool import globalVars
from Tool.GeneralData import GeneralData
from GetData.loadData import load_data
from GeneticPogramming import scalarFunctions, singleDataFunctions, singleDataNFunctions, coupleDataFunctions

#%% initialize global vars

globalVars.initialize()
loadedData = load_data()
globalVars.list_vars()
#%% add primitives

pset = gp.PrimitiveSetTyped('main', [
    GeneralData, GeneralData, GeneralData, GeneralData, GeneralData,
    GeneralData
], GeneralData)

pset.renameArguments(ARG0='CLOSE')
pset.renameArguments(ARG1='OPEN')
pset.renameArguments(ARG2='HIGH')
pset.renameArguments(ARG3='LOW')
pset.renameArguments(ARG4='AMOUNT')
pset.renameArguments(ARG5='VOLUME')

for aName, primitive in [
        o for o in getmembers(singleDataFunctions) if isfunction(o[1])
]:
    print('add primitive from {:<20}: {}'.format('singleDataFunctions', aName))
    pset.addPrimitive(primitive, [GeneralData], GeneralData, aName)
    globalVars.logger.debug('prepare the pset......start')
except:
    from Tool import globalVars
    from GetData import load_all
    load_all()
    globalVars.logger.info('load gpMultiprocessWorker')
    globalVars.logger.debug('prepare the pset......start')
try:
    inputOfPset = list(
        itertools.repeat(GeneralData, len(globalVars.materialData.keys())))
except AttributeError as ae:
    print(ae)
    inputOfPset = list(
        itertools.repeat(GeneralData, len(globalVars.materialData.keys())))

pset = gp.PrimitiveSetTyped('main', inputOfPset, GeneralData)
for aName, primitive in [
        o for o in getmembers(singleDataFunctions) if isfunction(o[1])
]:
    # print('add primitive from {:<20}: {}'.format('singleDataFunctions', aName))
    pset.addPrimitive(primitive, [GeneralData], GeneralData, aName)

for aName, primitive in [
        o for o in getmembers(scalarFunctions) if isfunction(o[1])
]:
    # print('add primitive from {:<20}: {}'.format('scalarFunctions', aName))
    pset.addPrimitive(primitive, [GeneralData, int], GeneralData, aName)

for aName, primitive in [
        o for o in getmembers(singleDataNFunctions) if isfunction(o[1])
]:
    regression = 1
else:
    gpFrameworkHelper.set_regression(False)
    regression = 0

emade.create_representation(adfs=3, regression=regression)

emade.setObjectives(objectiveDict)
emade.setDatasets(datasetDict)
emade.setMemoryLimit(misc_dict['memoryLimit'])
emade.setCacheInfo(cache_dict)
emade.set_statistics(statisticsDict)
emade.buildClassifier()

# Initialize pset
pset = gp.PrimitiveSetTyped("MAIN", [EmadeDataPair], EmadeDataPair)
gpFrameworkHelper.addTerminals(pset)
gpFrameworkHelper.addPrimitives(pset)
terminals = {}
primitives = {}
ephemerals = {}
for item in pset.mapping:
    if isinstance(pset.mapping[item], gp.Terminal):
        terminals[item] = pset.mapping[item]
    elif isinstance(pset.mapping[item], gp.Primitive):
        primitives[item] = pset.mapping[item]
names = []
methods = dir(gp)
for method in methods:
    pointer = getattr(gp, method)
    if inspect.isclass(pointer) and issubclass(pointer, gp.Ephemeral):
Example #16
0
        return df_in
    else:
        return pd.rolling_min(df_in, abs(periods), min_periods=abs(periods))

def pd_std(df_in, periods):
    if abs(periods) < 2:
        return df_in
    else:
        return pd.rolling_std(df_in, abs(periods), min_periods=abs(periods))

    

pset = gp.PrimitiveSetTyped('MAIN', [pd_df_float, 
                                pd_df_float, 
                                pd_df_float, 
                                pd_df_float,
                                pd_df_float,
                                pd_df_bool,
                                pd_df_bool], 
                                pd_df_bool)

pset.renameArguments(ARG0='Open')
pset.renameArguments(ARG1='High')
pset.renameArguments(ARG2='Low')
pset.renameArguments(ARG3='Close')
pset.renameArguments(ARG4='Volume')
# need to have pd_df_bool terminals for GP to work
pset.renameArguments(ARG5='Ones')
pset.renameArguments(ARG6='Zeros')

pset.addPrimitive(sma, [pd_df_float, int], pd_df_float, name="sma")
pset.addPrimitive(ewma, [pd_df_float, int], pd_df_float, name="ewma")
    def __init__(self, info):

        # Extract agent info
        self.env_name = info["env_name"]
        self.pop_size = info["pop_size"]
        self.max_gens = info["max_gens"]
        self.num_eps = info["num_eps"]
        self.num_steps = info["num_time_steps"]
        self.term_fit = info["term_fit"]
        self.mut_rate = info["mutation_rate"]
        self.tour_size = info["tournament_size"]

        # Primitive set
        obs_types = [
            float, float, float, float, float, float, float, float, float,
            float, float, float, float, float, float, float, float, float,
            float, float, float, float, float, float
        ]
        self.pset = gp.PrimitiveSetTyped("main", obs_types, Action)
        self.pset.renameArguments(ARG0="hull_angle",
                                  ARG1="hul_angularVelocity",
                                  ARG2="vel_x",
                                  ARG3="vel_y",
                                  ARG4="hip_joint_1_angle",
                                  ARG5="hip_joint_1_speed",
                                  ARG6="knee_joint_1_angle",
                                  ARG7="knee_joint_1_speed",
                                  ARG8="leg_1_ground_contact_flag",
                                  ARG9="hip_joint_2_angle",
                                  ARG10="hip_joint_2_speed",
                                  ARG11="knee_joint_2_angle",
                                  ARG12="knee_joint_2_speed",
                                  ARG13="leg_2_ground_contact_flag",
                                  ARG14="lidar_reading_1",
                                  ARG15="lidar_reading_2",
                                  ARG16="lidar_reading_3",
                                  ARG17="lidar_reading_4",
                                  ARG18="lidar_reading_5",
                                  ARG19="lidar_reading_6",
                                  ARG20="lidar_reading_7",
                                  ARG21="lidar_reading_8",
                                  ARG22="lidar_reading_9",
                                  ARG23="lidar_reading_10")

        self.pset.addPrimitive(self.ACCUM, [float, float, float, float],
                               Action)
        self.pset.addPrimitive(self.IFLTE, [float, float, float, float], float)
        # self.pset.addPrimitive(operator.add, 2)
        # self.pset.addPrimitive(operator.sub, 2)
        # self.pset.addPrimitive(operator.mul, 2)
        # self.pset.addPrimitive(operator.neg, 1)

        self.pset.addTerminal(0.0, float)
        self.pset.addTerminal(0.25, float)
        self.pset.addTerminal(0.5, float)
        self.pset.addTerminal(1.0, float)
        self.pset.addTerminal(0, float)
        self.pset.addTerminal(1, float)
        self.pset.addTerminal(Action(
            np.random.uniform(low=-1.0, high=1.0, size=4)),
                              Action,
                              name="random_action")

        # Program generation functions
        creator.create("FitMax", base.Fitness, weights=(1.0, ))
        creator.create("Individual",
                       gp.PrimitiveTree,
                       fitness=creator.FitMax,
                       pset=self.pset)
        self.toolbox = base.Toolbox()
        method = gp.genGrow if info["method"] == "grow" else gp.genFull
        self.toolbox.register("gen_exp",
                              method,
                              pset=self.pset,
                              min_=1,
                              max_=info["max_depth"])
        self.toolbox.register("gen_program", tools.initIterate,
                              creator.Individual, self.toolbox.gen_exp)
        self.toolbox.register("gen_pop", tools.initRepeat, list,
                              self.toolbox.gen_program)

        # Fitness evaluation function
        self.toolbox.register("fit", self.fit)

        # Genetic operators
        self.toolbox.register("clone", self._clone)
        self.toolbox.register("select",
                              tools.selTournament,
                              tournsize=self.tour_size)
        self.toolbox.register("mut_gen_exp",
                              method,
                              pset=self.pset,
                              min_=0,
                              max_=info["max_depth"])
        self.toolbox.register("mutate",
                              gp.mutUniform,
                              expr=self.toolbox.mut_gen_exp,
                              pset=self.pset)

        # Statistics functions
        self.stats = tools.Statistics(key=lambda indiv: indiv.fitness.values)
        self.stats.register("avg", np.mean)
        self.logbook = tools.Logbook()
Example #18
0
def create_primitive_set(vectors_dimension):
    pset = gp.PrimitiveSetTyped(
        "gp_doc2vec_clusters",
        [WordsVectorsCluster, WordsVectorsCluster, WordsVectorsCluster], list,
        "x")

    pset.addEphemeralConstant("k", generate_random_number, float)
    #    pset.addEphemeralConstant("k2", generate_random_number, float)
    #    pset.addEphemeralConstant("k3", generate_random_number, float)
    #    pset.addEphemeralConstant("k4", generate_random_number, float)
    pset.addEphemeralConstant(
        "l", lambda:
        [generate_random_number() for i in range(0, vectors_dimension)], list)
    #    pset.addEphemeralConstant("t1", lambda: Type1([generate_random_number() for i in range(0, vectors_dimension)]), Type1)
    #    pset.addEphemeralConstant("t2", lambda: Type2([generate_random_number() for i in range(0, vectors_dimension)]), Type2)
    #    pset.addEphemeralConstant("t3", lambda: Type3([generate_random_number() for i in range(0, vectors_dimension)]), Type3)
    #    pset.addEphemeralConstant("t4", lambda: Type4([generate_random_number() for i in range(0, vectors_dimension)]), Type4)

    pset.addTerminal(
        Type1([generate_random_number() for i in range(0, vectors_dimension)]),
        Type1)
    pset.addTerminal(
        Type2([generate_random_number() for i in range(0, vectors_dimension)]),
        Type2)
    pset.addTerminal(
        Type3([generate_random_number() for i in range(0, vectors_dimension)]),
        Type3)
    pset.addTerminal(
        Type4([generate_random_number() for i in range(0, vectors_dimension)]),
        Type4)

    pset.addPrimitive(add_type1, [WordsVectorsCluster], Type1)
    pset.addPrimitive(sub_type1, [WordsVectorsCluster], Type1)
    pset.addPrimitive(mul_type1, [WordsVectorsCluster], Type1)
    pset.addPrimitive(div_type1, [WordsVectorsCluster], Type1)
    pset.addPrimitive(pow_type1, [WordsVectorsCluster], Type1)

    pset.addPrimitive(mul_type2, [float, Type1], Type2)

    pset.addPrimitive(add_type3, [Type2, Type2, Type2], Type3)
    pset.addPrimitive(sub_type3, [Type2, Type2, Type2], Type3)
    pset.addPrimitive(mul_type3, [Type2, Type2, Type2], Type3)
    pset.addPrimitive(div_type3, [Type2, Type2, Type2], Type3)
    pset.addPrimitive(pow_type3, [Type2, Type2, Type2], Type3)

    pset.addPrimitive(mul_type4, [float, Type3], Type4)

    pset.addPrimitive(ident_final, [Type4], list)

    #    pset.addPrimitive(add, [WordsVectorsCluster], list)
    #    pset.addPrimitive(add_external1, [list, list, list], list)
    #    pset.addPrimitive(add_external2, [list, list], list)
    #
    #    pset.addPrimitive(sub, [WordsVectorsCluster], list)
    #    pset.addPrimitive(sub_external1, [list, list, list], list)
    #    pset.addPrimitive(sub_external2, [list, list], list)
    #
    #    pset.addPrimitive(mul, [WordsVectorsCluster], list)
    #    pset.addPrimitive(mul_scalar, [list, float], list)
    #    pset.addPrimitive(mul_external1, [list, list, list], list)
    #    pset.addPrimitive(mul_external2, [list, list], list)
    #
    #    pset.addPrimitive(div, [WordsVectorsCluster], list)
    #    pset.addPrimitive(div_external1, [list, list, list], list)
    #    pset.addPrimitive(div_external2, [list, list], list)
    #
    #    pset.addPrimitive(my_pow, [WordsVectorsCluster], list)
    #    pset.addPrimitive(my_pow_external1, [list, list, list], list)
    #    pset.addPrimitive(my_pow_external2, [list, list], list)
    #
    #    pset.addPrimitive(norm_logistic, [list], list)
    #    pset.addPrimitive(norm_unit, [list], list)
    #    pset.addPrimitive(softmax, [list], list)
    #
    pset.addPrimitive(lambda x: x, [float], float, name="ident_float")
    pset.addPrimitive(lambda x: x, [WordsVectorsCluster],
                      WordsVectorsCluster,
                      name="ident_wv_cluster")

    return pset
Example #19
0
    try:
        ans = math.exp(x)
    except OverflowError:
        ans = 0.0
    return ans


def protectedSin(x):
    return math.sin(x) if math.fabs(x) != float('inf') else 0.0


def protectedCos(x):
    return math.cos(x) if math.fabs(x) != float('inf') else 1.0


pset = gp.PrimitiveSetTyped("main", [float], float)
pset.addPrimitive(operator.add, [float, float], float)
pset.addPrimitive(operator.sub, [float, float], float)
pset.addPrimitive(operator.mul, [float, float], float)
pset.addPrimitive(protectedDiv, [float, float], float)
pset.addPrimitive(operator.neg, [float], float)
pset.addPrimitive(protectedSin, [float], float)
pset.addPrimitive(protectedCos, [float], float)
pset.addPrimitive(protectedExp, [float], float)
pset.addPrimitive(logAbs, [float], float)
pset.addEphemeralConstant("randp1n1", lambda: 2.0 * random.random() - 1.0,
                          float)
pset.renameArguments(ARG0='x')

creator.create("FitnessMin", base.Fitness, weights=(-1.0, ))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMin)
Example #20
0
    def configure(self, dataframe, positive_indices):
        self.fitness_function = QueryDiscoveryFitnessFunction(dataframe, positive_indices)

        pset = gp.PrimitiveSetTyped("MAIN", [str for x in dataframe.columns], bool)
        pset.addPrimitive(operator.and_, [bool, bool], bool)
        pset.addPrimitive(operator.or_, [bool, bool], bool)
        pset.addPrimitive(operator.eq, [str, float], bool)
        pset.addPrimitive(operator.gt, [str, float], bool)
        pset.addPrimitive(operator.ge, [str, float], bool)
        pset.addPrimitive(operator.lt, [str, float], bool)
        pset.addPrimitive(operator.le, [str, float], bool)
        pset.addPrimitive(operator.ne, [str, float], bool)

        def notapplied(val):
            return val

        pset.addPrimitive(notapplied, [str], str)
        pset.addPrimitive(notapplied, [float], float)
        pset.addTerminal(True, bool)

        # Get all possible values in the dataframe and use them as terminals
        terminals = set()
        for col in dataframe.columns:
            for val in set(dataframe[col].values):
                terminals.add(val)

        for t in terminals:
            pset.addTerminal(t, float)

        col_names = {}
        for i in range(len(dataframe.columns)):
            arg = 'ARG' + str(i)
            col_names[arg] = dataframe.columns[i]
        
        pset.renameArguments(**col_names)

        # Define minimization problem
        creator.create('FitnessMin', base.Fitness, weights=(-1.0,))
        creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMin)

        min_depth = 2
        max_depth = 10

        toolbox = base.Toolbox()

        # Initialization strategy
        toolbox.register('expr', gp.genHalfAndHalf, pset=pset, min_=min_depth, max_=max_depth)

        toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.expr)
        toolbox.register('population', tools.initRepeat, list, toolbox.individual)
        toolbox.register("compile", gp.compile, pset=pset)

        # Register fitness function
        toolbox.register('evaluate', self.evaluate_fitness)
        # Selection strategy        
        toolbox.register("select", tools.selDoubleTournament, parsimony_size=1.4, fitness_size=6, fitness_first=True)
        # Crossover strategy
        toolbox.register("mate", gp.cxOnePointLeafBiased, termpb=0.1)
        # Mutation strategy
        toolbox.register("expr_mut", gp.genFull, min_=min_depth, max_=max_depth)
        toolbox.register("mutate", gp.mutUniform, expr=toolbox.expr_mut, pset=pset)

        # Restrict max individual size
        toolbox.decorate('mate', gp.staticLimit(operator.attrgetter('height'), max_value=max_depth))

        return toolbox
Example #21
0
def run(cxpb, mutpb, n, tour, termpb, popu, ngen):
    global run_i

    pset = gp.PrimitiveSetTyped("main", [array], float)
    pset.addPrimitive(SMA, [array, int, int], float)
    pset.addPrimitive(operator.add, [float, float], float)
    pset.addPrimitive(part, [array, int], float)
    pset.addPrimitive(shift, [array, int], float)
    pset.addEphemeralConstant("randI{i}".format(i=run_i),
                              lambda: random.randint(0, n - 1), int)
    pset.addEphemeralConstant("randF{i}".format(i=run_i),
                              lambda: random.uniform(-1, 1), float)
    pset.addPrimitive(operator.sub, [float, float], float)
    pset.addPrimitive(operator.mul, [float, float], float)
    pset.addPrimitive(protectedDiv, [float, float], float)
    pset.addPrimitive(IF2, [float, float, float, float], float)
    run_i += 1

    creator.create("FitnessMax", base.Fitness, weights=(1.0, ))
    creator.create("Individual",
                   gp.PrimitiveTree,
                   fitness=creator.FitnessMax,
                   pset=pset)

    toolbox.register("expr", genGrow_edit, pset=pset, min_=1, max_=15)
    toolbox.register("individual", tools.initIterate, creator.Individual,
                     toolbox.expr)
    toolbox.register("population", tools.initRepeat, list, toolbox.individual)
    toolbox.register("compile", gp.compile, pset=pset)

    toolbox.register("evaluate", fitness_predictor, arg=errors, n=n)

    toolbox.register("select", tools.selTournament, tournsize=tour)
    toolbox.register("mate", gp.cxOnePointLeafBiased, termpb=termpb)
    toolbox.register("expr_mut", genGrow_edit, min_=0, max_=5)
    toolbox.register("mutate", gp.mutUniform, expr=toolbox.expr_mut, pset=pset)
    toolbox.decorate(
        "mate", gp.staticLimit(key=operator.attrgetter("height"),
                               max_value=17))
    toolbox.decorate(
        "mutate",
        gp.staticLimit(key=operator.attrgetter("height"), max_value=17))

    #HISTORY
    #HISTORY
    #HISTORY
    history = tools.History()
    # Decorate the variation operators
    toolbox.decorate("mate", history.decorator)
    toolbox.decorate("mutate", history.decorator)

    stats_fit = tools.Statistics(lambda ind: ind.fitness.values)
    stats_size = tools.Statistics(len)
    mstats = tools.MultiStatistics(fitness=stats_fit, size=stats_size)
    mstats.register("avg", numpy.mean)
    mstats.register("std", numpy.std)
    mstats.register("min", numpy.min)
    mstats.register("max", numpy.max)

    if parallel == 1:
        from scoop import futures
        toolbox.register("map", futures.map)  #PARALLELIZATION
    elif parallel == 2:
        import multiprocessing
        pool = multiprocessing.Pool(6)
        toolbox.register("map", pool.map)  #PARALLELIZATION

    pop = toolbox.population(n=popu)

    #HISTORY
    #HISTORY
    #HISTORY
    history.update(pop)

    hof = tools.HallOfFame(1)
    pop, log = algorithms.eaSimple(pop,
                                   toolbox,
                                   cxpb,
                                   mutpb,
                                   ngen,
                                   stats=mstats,
                                   halloffame=hof,
                                   verbose=True)

    # return hof[0].fitness.values[0]   #FOR CMA-ES
    # return log                        #FOR PLOT
    return history  #FOR HISTORY
Example #22
0
    def __init__(self, context):

        # this is here for when you need to log for debugging
        self.context = context

        self.n_long_labels = 0
        self.n_short_labels = 0

        # len of hitory
        self.n_features = 10  #

        self.n_samples = 250

        self.warmup_count = self.n_features + self.n_samples + 1

        # persist the evolution, warning though you have to track when its run and on what data
        try_load_saved_pop = False

        # The primitive set defines what is possible in the program
        self.pset = gp.PrimitiveSetTyped("MAIN", [float] * (self.n_features),
                                         float)
        self.pset.addPrimitive(operator.add, [float, float], float)
        self.pset.addPrimitive(operator.sub, [float, float], float)
        self.pset.addPrimitive(operator.mul, [float, float], float)
        self.pset.addPrimitive(protectedDiv, [float, float], float)
        self.pset.addPrimitive(operator.neg, [float], float)
        self.pset.addPrimitive(operator.abs, [float], float)
        self.pset.addPrimitive(np.hypot, [float, float], float)
        self.pset.addPrimitive(np.absolute, [float], float)
        self.pset.addPrimitive(np.fmax, [float, float], float)
        self.pset.addPrimitive(np.fmin, [float, float], float)
        self.pset.addPrimitive(np.sign, [float], float)
        self.pset.addPrimitive(np.square, [float], float)
        self.pset.addPrimitive(math.cos, [float], float)
        self.pset.addPrimitive(math.sin, [float], float)

        self.pset.addPrimitive(operator.and_, [BOOL, BOOL], BOOL)
        self.pset.addPrimitive(operator.or_, [BOOL, BOOL], BOOL)
        self.pset.addPrimitive(operator.not_, [BOOL], BOOL)

        self.pset.addPrimitive(operator.lt, [float, float], BOOL)
        self.pset.addPrimitive(operator.le, [float, float], BOOL)
        self.pset.addPrimitive(operator.eq, [float, float], BOOL)
        self.pset.addPrimitive(operator.ne, [float, float], BOOL)
        self.pset.addPrimitive(operator.ge, [float, float], BOOL)
        self.pset.addPrimitive(operator.gt, [float, float], BOOL)

        self.pset.addPrimitive(if_then_else, [BOOL, float, float], float,
                               'ite_float')
        self.pset.addPrimitive(if_then_else, [BOOL, BOOL, BOOL], BOOL,
                               'ite_bool')

        self.pset.addEphemeralConstant("rand1", lambda: random.random(), float)
        self.pset.addEphemeralConstant("rand-1", lambda: -random.random(),
                                       float)

        self.pset.addTerminal(-0.5, float)
        self.pset.addTerminal(-1.0, float)
        self.pset.addTerminal(0.0, float)
        self.pset.addTerminal(0.5, float)
        self.pset.addTerminal(1.0, float)
        self.pset.addTerminal(False, BOOL)
        self.pset.addTerminal(True, BOOL)

        creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0, -1.0))
        creator.create("Individual",
                       gp.PrimitiveTree,
                       fitness=creator.FitnessMin)

        self.toolbox = base.Toolbox()
        self.toolbox.register("expr",
                              gp.genHalfAndHalf,
                              pset=self.pset,
                              min_=1,
                              max_=3)
        self.toolbox.register("individual", tools.initIterate,
                              creator.Individual, self.toolbox.expr)
        self.toolbox.register("population", tools.initRepeat, list,
                              self.toolbox.individual)
        self.toolbox.register("compile", gp.compile, pset=self.pset)

        self.toolbox.register("evaluate", self.evalSymbReg)
        self.toolbox.register("select", tools.selNSGA2)
        self.toolbox.register("mate", gp.cxOnePoint)
        self.toolbox.register("expr_mut", gp.genFull, min_=0, max_=2)
        self.toolbox.register("mutate",
                              gp.mutUniform,
                              expr=self.toolbox.expr_mut,
                              pset=self.pset)
        self.toolbox.decorate("mate",
                              gp.staticLimit(key=operator.attrgetter("height"),
                                             max_value=17))  #bloat control
        self.toolbox.decorate("mutate",
                              gp.staticLimit(key=operator.attrgetter("height"),
                                             max_value=17))  #bloat control

        self.stats_fit = tools.Statistics(lambda ind: ind.fitness.values)
        self.stats_size = tools.Statistics(len)
        self.stats = tools.MultiStatistics(fitness=self.stats_fit,
                                           size=self.stats_size)
        self.stats.register("avg", np.mean, axis=0)
        self.stats.register("std", np.std, axis=0)
        self.stats.register("min", np.min, axis=0)
        self.stats.register("max", np.max, axis=0)

        # persist the evolution, warning though you have to track when its run and on what data
        checkpoint = 'checkpoint.pkl'

        self.gen = 0
        self.halloffame = tools.ParetoFront()
        self.logbook = tools.Logbook()
        self.logbook.header = ['gen', 'nevals'
                               ] + (self.stats.fields if self.stats else [])
        self.population = self.toolbox.population(n=n_pop)
        self.selected_individuals = None
Example #23
0
def main():
    # Import data
    x_train, y_train = load_split_all()[0]
    x_test = load_split_all()[1][0]

    # x_largest_in_each_col = np.max(x_train, axis=0)
    # normalize(x_train, x_largest_in_each_col)

    data = x_train
    labels = y_train
    num_positives = np.count_nonzero(labels)
    num_negatives = len(labels) - num_positives
    # num_positives is max false negatives
    # num_negatives is max false positives - append these to fitness so we have reliable AuC
    fn_trivial_fitness = (0, num_positives)
    fp_trivial_fitness = (num_negatives, 0)

    print(x_train.shape)
    creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0))
    creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMin)

    # Arguments
    random.seed(25)
    crossover_rate = 0.5
    mutation_rate = 0.2
    samples = 10  # set to 10 when generating submission data
    calc_area = True  # set to true when generating submission data

    input_types = []
    for i in range(x_train.shape[1]):  # multiplication op doesn't work
        input_types.append(float)
    pset = gp.PrimitiveSetTyped("MAIN", input_types, bool)

    # Essential Primitives
    pset.addPrimitive(is_greater, [float, float], bool)
    pset.addPrimitive(is_equal_to, [float, float], bool)
    pset.addPrimitive(if_then_else, [bool, float, float], float)

    pset.addPrimitive(np.logical_not, [bool], bool)
    pset.addPrimitive(
        np.logical_and, [bool, bool],
        bool)  # Demorgan's rule says all logic ops can be made with not & and

    pset.addPrimitive(np.negative, [float], float)
    pset.addPrimitive(operator.mul, [float, float], float)
    pset.addPrimitive(operator.add, [float, float], float)
    pset.addPrimitive(operator.sub, [float, float], float)

    # constants
    # pset.addTerminal(2.0, float)  # added
    pset.addTerminal(10.0, float)
    # pset.addTerminal(25.0, float)  # added
    pset.addTerminal(1, bool)
    pset.addTerminal(0, bool)

    # More primitives (for fun/tinkering/reducing verbosity of tree)

    # Logic to float

    # Float to logic

    # Logic to logic
    pset.addPrimitive(operator.xor, [bool, bool], bool)

    # Float to float
    pset.addPrimitive(relu, [float], float)
    pset.addPrimitive(math.floor, [float], int)
    # pset.addPrimitive(absolute, [float], float)  # added
    # pset.addPrimitive(safe_division, [float, float], float)  # added

    toolbox = base.Toolbox()
    toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=2)
    toolbox.register("individual", tools.initIterate, creator.Individual,
                     toolbox.expr)
    toolbox.register("population", tools.initRepeat, list, toolbox.individual)
    toolbox.register("compile", gp.compile, pset=pset)

    toolbox.register("evaluate",
                     evalSymbReg,
                     pset=pset,
                     data=data,
                     labels=labels)
    # select
    # toolbox.register("select", tools.selTournament, tournsize=3)
    toolbox.register("select",
                     sim_aneal_select,
                     tourn_size=25,
                     anneal_rate=0.6)  # added
    # crossover
    toolbox.register("mate", gp.cxOnePoint)
    # mutate

    toolbox.register("expr_mut", gp.genFull, min_=1, max_=2)
    toolbox.register("mutate", gp.mutUniform, expr=toolbox.expr_mut, pset=pset)
    # toolbox.register("mutate", gp.mutNodeReplacement, pset=pset)  # added

    toolbox.decorate(
        "mate", gp.staticLimit(key=operator.attrgetter("height"),
                               max_value=17))
    toolbox.decorate(
        "mutate",
        gp.staticLimit(key=operator.attrgetter("height"), max_value=17))

    gen = range(40)
    avg_list = []
    max_list = []
    min_list = []

    avg_areas = [
        0 for g in gen
    ]  # contains sum of performances per generation (averaged later)
    best_pareto_front = (10**10, [])
    for i in range(samples):  # sample 10 times
        # reset population at the start of each trial
        pop = toolbox.population(n=300)
        fitnesses = list(map(toolbox.evaluate, pop))
        for ind, fit in zip(pop, fitnesses):
            ind.fitness.values = fit
        # Begin the evolution
        for g in gen:

            # Select the next generation individuals
            offspring = toolbox.select(pop, len(pop))
            # Clone the selected individuals
            offspring = list(map(toolbox.clone, offspring))

            # Apply crossover and mutation on the offspring
            for child1, child2 in zip(offspring[::2], offspring[1::2]):
                if random.random() < crossover_rate:
                    toolbox.mate(child1, child2)
                    del child1.fitness.values
                    del child2.fitness.values

            for mutant in offspring:
                if random.random() < mutation_rate:
                    toolbox.mutate(mutant)
                    del mutant.fitness.values

            # Evaluate the individuals with an invalid fitness .... define invalid???
            invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
            fitnesses = map(toolbox.evaluate, invalid_ind)
            for ind, fit in zip(invalid_ind, fitnesses):
                ind.fitness.values = fit

            # Replace population
            pop[:] = offspring

            # Gather all the fitnesses in one list and print the stats
            fits = [ind.fitness.values[0] for ind in pop]

            length = len(pop)
            mean = sum(fits) / length
            sum2 = sum(x * x for x in fits)
            std = abs(sum2 / length - mean**2)**0.5
            g_max = max(fits)
            g_min = min(fits)

            avg_list.append(mean)
            max_list.append(g_max)
            min_list.append(g_min)

            # print("  Min %s" % g_min)
            # print("  Max %s" % g_max)
            # print("  Avg %s" % mean)
            # print("  Std %s" % std)

            # find area under curve for population
            if calc_area:
                hof_pop = generate_min_front(pop)
                # Extract fitnesses and sort so HoF draws correctly
                hof = np.asarray([ind.fitness.values for ind in hof_pop])
                hof = np.insert(hof, 0,
                                [fp_trivial_fitness, fn_trivial_fitness], 0)
                hof = hof[np.argsort(hof[:, 0])]
                area = area_under_curve(hof)
                avg_areas[g] += area
                info = "\t\tAUC: %f" % area
                # update best pareto front
                if area < best_pareto_front[0]:
                    scores = [ind.fitness.values for ind in hof_pop]
                    best_pareto_front = (area, hof_pop, scores)
            else:
                info = ""
            print("-- Generation %i --%s" % (g, info))

        print("-- End of (successful) evolution  #%d of %d--" % (i, samples))
        print("best AUC: %f" % best_pareto_front[0])

    if calc_area:
        # average the areas
        avg_areas = [area / samples for area in avg_areas]
        """ Don't write useless data
        # write to csv
        file = open("results/driver_results.csv", 'w')
        header = ','
        driver_line = "Driver,"
        for g in gen:
            header += "%d," % g
            driver_line += "%f," % avg_areas[g]
        header += "\n"
        file.write(header)
        file.write(driver_line)
        file.close()"""
        # write submission data
        print("BEST AUC: %f" % best_pareto_front[0])
        util.write_pareto_guesses("results/submission.csv", x_test, pset,
                                  best_pareto_front[1], best_pareto_front[2])

    hof_pop = generate_min_front(pop)
    # Extract fitnesses and sort so HoF draws correctly
    hof = np.asarray([ind.fitness.values for ind in hof_pop])
    hof = np.insert(hof, 0, [fp_trivial_fitness, fn_trivial_fitness], 0)
    hof = hof[np.argsort(hof[:, 0])]

    # Charts
    pop_1 = [ind.fitness.values[0] for ind in pop]
    pop_2 = [ind.fitness.values[1] for ind in pop]

    plt.scatter(pop_1, pop_2, color='b')
    plt.scatter(hof[:, 0], hof[:, 1], color='r')
    plt.plot(hof[:, 0], hof[:, 1], color='r', drawstyle='steps-post')
    plt.xlabel("False Positives")
    plt.ylabel("False Negatives")
    plt.title("Pareto Front")
    if calc_area:
        print(avg_areas[-1])
    else:
        print(area_under_curve(hof))
    plt.show()
    if calc_area:
        plt.plot(gen, avg_areas, color='g')
        plt.xlabel("Generation")
        plt.ylabel("Area Under Curve")
        plt.title("AUC evolution")
        plt.show()
Example #24
0
import itertools

import numpy

from random import randint, getrandbits
from functools import reduce
from math import log

from deap import algorithms
from deap import base
from deap import creator
from deap import tools
from deap import gp

# defined a new primitive set for strongly typed GP
pset = gp.PrimitiveSetTyped("MAIN", (), list)

pset.addPrimitive(lambda l, e: l + [e], (list, int), list, name="append")
#pset.addPrimitive(operator.concat,      (list, list), list)

pset.addPrimitive(lambda x: x, (int, ), int, name="id")

pset.addEphemeralConstant("rand10", lambda: randint(-50, +50), int)
pset.addTerminal([], list)

creator.create("FitnessMax", base.Fitness, weights=(1.0, ))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax)

toolbox = base.Toolbox()
toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=2)
toolbox.register("individual", tools.initIterate, creator.Individual,
Example #25
0
            )]  # Maybe make this a variable that is explored by the algorithm
    dates = panda["Unnamed: 0"]
    dict1 = dict(zip(dates, SO))
    dict2 = dict(zip(dates, sig))
    so = dict1[date]
    sig1 = dict2[date]
    ans = so - sig1  # Check this is the right way round. It may not matter.
    return ans


def if_then_else(input, output1, output2):
    return output1 if input else output2


# defined a new primitive set for strongly typed GP
pset = gp.PrimitiveSetTyped("MAIN", [str, position_bool], pd_bool)
# boolean operators
pset.addPrimitive(if_then_else, [position_bool, rsi_gt, rsi_lt], pd_bool)
pset.addPrimitive(operator.and_, [pd_bool, pd_bool], pd_bool)
pset.addPrimitive(operator.or_, [pd_bool, pd_bool], pd_bool)
pset.addPrimitive(operator.not_, [pd_bool], pd_bool)
pset.addPrimitive(operator.lt, [pd_float, pd_float], pd_bool)
pset.addPrimitive(operator.gt, [pd_float, pd_float], pd_bool)
pset.addPrimitive(operator.lt, [rsi_ans, rsi_bounds], rsi_lt)
pset.addPrimitive(operator.gt, [rsi_ans, rsi_bounds], rsi_gt)
pset.addPrimitive(
    operator.lt, [macd_bounds, macd_ans], pd_bool
)  # for above or below zero, maybe make macd_bounds and so_bounds the same thing
pset.addPrimitive(operator.gt, [macd_bounds, macd_ans], pd_bool)
pset.addPrimitive(operator.lt, [so_bounds, so_ans], pd_bool)
pset.addPrimitive(operator.gt, [so_bounds, so_ans], pd_bool)
Example #26
0
# The dataset is from http://archive.ics.uci.edu/ml/datasets/Spambase
# This example is a copy of the OpenBEAGLE example :
# http://beagle.gel.ulaval.ca/refmanual/beagle/html/d2/dbe/group__Spambase.html
#with open("spambase/spambase.csv") as spambase:
#    spamReader = csv.reader(spambase)
#    spam = list(list(float(elem) for elem in row) for row in spamReader)

# defined a new primitive set for strongly typed GP
#pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float, 10), bool)


class Vector(object):
    pass


pset = gp.PrimitiveSetTyped("MAIN", (float, float, float, float, float, Vector,
                                     Vector, Vector, Vector, Vector), bool)
#pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float, 5), bool)

#pdb.set_trace()

# boolean operators
pset.addPrimitive(operator.and_, [bool, bool], bool)
pset.addPrimitive(operator.or_, [bool, bool], bool)
pset.addPrimitive(operator.not_, [bool], bool)


# floating point operators
# Define a protected division function
def protectedDiv(left, right):
    try:
        return left / right
Example #27
0
from deap import base, creator, tools, algorithms, gp
import pickle
from gp_operators import *

# A definir: num_centroids, D2, max_depth, crossover_method, dump_filename, logistic_regression_mode


def generate_random_number():
    return random.uniform(-1.0, 1.0)


def generate_random_tuple():
    return D2 * (generate_random_number(), )


pset = gp.PrimitiveSetTyped("evo_doc2vec", num_centroids * [list], tuple, "x")

pset.addEphemeralConstant("k1", generate_random_number, float)
pset.addEphemeralConstant("k2", generate_random_tuple, tuple)

pset.addPrimitive(ident, D2 * [float], tuple)
pset.addPrimitive(ident_unit, D2 * [float], tuple)
pset.addPrimitive(ident_softmax, D2 * [float], tuple)
pset.addPrimitive(neg, [list], list)
pset.addPrimitive(add1, [list, list], list)
pset.addPrimitive(add2, [list, float], list)
pset.addPrimitive(sub1, [list, list], list)
pset.addPrimitive(sub2, [list, float], list)
pset.addPrimitive(mul1, [list, list], list)
pset.addPrimitive(mul2, [list, list], float)
pset.addPrimitive(mul3, [list, float], list)
Example #28
0
def safeDiv(left,right):
    if(right==0):
        return 0
    try:
        return left/right
    except ZeroDivisionError:
        return 0

def clip2(num):
    return np.clip(num,-1,1)

def end(inp1,inp2,inp3,inp4):
    return [inp1,inp2,inp3,inp4]

pset = gp.PrimitiveSetTyped("MAIN", itertools.repeat(float,24),list,"ARG")
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(operator.neg,[float],float)
pset.addPrimitive(math.cos,[float],float)
pset.addPrimitive(math.sin,[float],float)
pset.addPrimitive(sigmoid,[float],float)
pset.addPrimitive(relu,[float],float)
pset.addPrimitive(clip2,[float],float)
pset.addPrimitive(end,[float,float,float,float],list)
pset.addEphemeralConstant("rand101", lambda:random.randint(-1,1)*100,float)

pset.renameArguments(ARG0='hull_angle')
pset.renameArguments(ARG1='hull_angularVelocity')
Example #29
0
pset = gp.PrimitiveSetTyped("MAIN", (), Ints)

##pset.addPrimitive(lambda x:    return x, (Ints,),      Ints)
#pset.addPrimitive(lambda x, y: Ints(x, y), (Ints, Ints), Ints)
#pset.addPrimitive(lambda x, y: Ints(x, y), (int,  int),  Ints)
#pset.addPrimitive(lambda x:    Ints(x),    (Int,),       Ints)
#pset.addPrimitive(lambda x:    Ints(x),    (int,),       Ints)

pset.addPrimitive(lambda x, y: Ints(x, y), (Ints, int), Ints, name='cons2')
pset.addPrimitive(lambda y:    Ints(y),    (int,),      Ints, name='cons1')

pset.addEphemeralConstant("rand10", lambda: randint(0, 11), int)
"""

# defined a new primitive set for strongly typed GP
pset = gp.PrimitiveSetTyped("MAIN", (), int)

# boolop = And | Or
#pset.addPrimitive(operator.and_, (bool, bool), bool)
#pset.addPrimitive(operator.or_,  (bool, bool), bool)

#operator = Add | Sub | Mult | Div | Mod | Pow | LShift
#                 | RShift | BitOr | BitXor | BitAnd | FloorDiv
pset.addPrimitive(operator.add, (int, int), int)
pset.addPrimitive(operator.sub, (int, int), int)
pset.addPrimitive(operator.mul, (int, int), int)
pset.addPrimitive(operator.floordiv, (int, int), int)
pset.addPrimitive(operator.mod, (int, int), int)
pset.addPrimitive(operator.lshift, (int, int), int)
pset.addPrimitive(operator.rshift, (int, int), int)
pset.addPrimitive(operator.xor, (int, int), int)
Example #30
0

envs = [Enviroment() for i in range(6)]
agents_one = [None for i in range(6)]
agents_two = [Stable_defensive_agent(2) for i in range(6)]
funcs = [None for i in range(6)]

env1 = Enviroment()
env2 = Enviroment()
env3 = Enviroment()
agent1_two = Stable_defensive_agent(2)
agent2_two = Stable_defensive_agent(2)
agent3_two = Stable_defensive_agent(2)
semi_result = [0, 0, 0, 0, 0, 0, 0]

pset = gp.PrimitiveSetTyped("main", [int, int, int, int, int], ActionPlanEnum)
pset.addPrimitive(if_then_else, [Bool, ActionPlanEnum, ActionPlanEnum],
                  ActionPlanEnum)
pset.addPrimitive(compare, [int, int], Bool)
pset.addPrimitive(operator.mul, [int, int], int)
pset.addPrimitive(operator.add, [int, int], int)
pset.addTerminal(100, int)
pset.addTerminal(10, int)
pset.addTerminal(5, int)
pset.addTerminal(3, int)
pset.addTerminal(1, int)
pset.addTerminal(-1, int)
pset.addTerminal(0, int)
pset.addTerminal(ret_attack, ActionPlanEnum)
pset.addTerminal(ret_deffense, ActionPlanEnum)
pset.addTerminal(ret_evade, ActionPlanEnum)