structural constantsΒΆ

Out:

/home/docs/checkouts/readthedocs.org/user_builds/glyph/envs/latest/lib/python3.6/site-packages/deap/tools/emo.py:138: ComplexWarning: Casting complex values to real discards the imaginary part
  norm = nobj * float(crowd[-1][0][i] - crowd[0][0][i])
/home/docs/checkouts/readthedocs.org/user_builds/glyph/envs/latest/lib/python3.6/site-packages/deap/tools/emo.py:140: RuntimeWarning: invalid value encountered in double_scalars
  distances[cur[1]] += (next[0][i] - prev[0][i]) / norm
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.7884573603642701 + I*pi ((0.028662213987980155-3.127158238984308j), 2.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)
-0.5*log(2*x_0) - 0.5877866649021189 + I*pi ((0.005502350949910848-3.0735536742862175j), 9.0)

from functools import partial

import deap.gp
import deap.tools
import numpy as np

from glyph import gp
from glyph.utils import Memoize
from glyph.utils.numeric import nrmse, silent_numpy

pset = gp.numpy_primitive_set(arity=1, categories=["algebraic", "trigonometric", "exponential"])
pset = gp.individual.add_sc(pset, gp.individual.sc_mmqout)
Individual = gp.Individual(pset=pset)


@Memoize
@silent_numpy
def measure(ind):
    g = lambda x: x ** 2 - 1.1
    points = np.linspace(-1, 1, 100, endpoint=True)
    y = g(points)
    f = gp.individual.numpy_phenotype(ind)
    try:
        yhat = f(points)
    except TypeError:
        yhat = np.infty
    if np.isscalar(yhat):
        yhat = np.ones_like(y) * yhat
    return nrmse(y, yhat), len(ind.resolve_sc())


def update_fitness(population, map=map):
    invalid = [p for p in population if not p.fitness.valid]
    fitnesses = map(measure, invalid)
    for ind, fit in zip(invalid, fitnesses):
        ind.fitness.values = fit
    return population


def main():
    pop_size = 400

    mate = deap.gp.cxOnePoint
    expr_mut = partial(deap.gp.genFull, min_=0, max_=2)
    mutate = partial(deap.gp.mutUniform, expr=expr_mut, pset=Individual.pset)

    algorithm = gp.algorithms.AgeFitness(mate, mutate, deap.tools.selNSGA2, Individual.create_population)

    pop = update_fitness(Individual.create_population(pop_size))

    for gen in range(50):
        pop = algorithm.evolve(pop)
        pop = update_fitness(pop)
        best = deap.tools.selBest(pop, 1)[0]
        print(gp.individual.simplify_this(best), best.fitness.values)

        if best.fitness.values[0] <= 1e-3:
            break


if __name__ == "__main__":
    main()

Total running time of the script: ( 0 minutes 14.235 seconds)

Gallery generated by Sphinx-Gallery