Note
Click here to download the full example code
Example for differential evolutionary regressionΒΆ
Example demonstrating the use of Cartesian genetic programming for a regression task that involves numeric constants. Local gradient-based search is used to determine numeric leaf values of the graph.
References:
Topchy, A., & Punch, W. F. (2001). Faster genetic programming based on local gradient search of numeric leaf values. In Proceedings of the genetic and evolutionary computation conference (GECCO-2001) (Vol. 155162). Morgan Kaufmann San Francisco, CA, USA.
Izzo, D., Biscani, F., & Mereta, A. (2017). Differentiable genetic programming. In European Conference on Genetic Programming (pp. 35-51). Springer, Cham.
# The docopt str is added explicitly to ensure compatibility with
# sphinx-gallery.
docopt_str = """
Usage:
example_differential_evo_regression.py [--max-generations=<N>]
Options:
-h --help
--max-generations=<N> Maximum number of generations [default: 500]
"""
import functools
import matplotlib.pyplot as plt
import numpy as np
import scipy.constants
import torch
from docopt import docopt
import cgp
args = docopt(docopt_str)
We first define the target function. Note that this function contains numeric values which are initially not available as constants to the search.
def f_target(x):
return x[:, 0] ** 2 + 1.0 + np.pi
Then we define the differentiable(!) objective function for the evolution. It consists of an inner objective which accepts a torch tensor as input variable and uses mean-squared error between the expression represented by a given individual and the target function evaluated on a set of random points. This inner objective is then used by actual objective function to update the fitness of the individual.
def inner_objective(f, seed):
"""Return a differentiable loss of the differentiable graph f. Used
for calculating the fitness of each individual and for the local
search of numeric leaf values.
"""
torch.manual_seed(seed)
batch_size = 500
x = torch.DoubleTensor(batch_size, 1).uniform_(-5, 5)
y = f(x)
return torch.nn.MSELoss()(f_target(x), y[:, 0])
def objective(individual, seed):
"""Objective function of the regression task."""
if not individual.fitness_is_None():
return individual
f = individual.to_torch()
loss = inner_objective(f, seed)
individual.fitness = -loss.item()
return individual
Next, we define the parameters for the population, the genome of individuals, the evolutionary algorithm, and the local search.
seed = 1234
genome_params = {"primitives": (cgp.Add, cgp.Sub, cgp.Mul, cgp.Parameter)}
# apply local search only to the top two individuals
ea_params = {"k_local_search": 2}
evolve_params = {"max_generations": int(args["--max-generations"]), "termination_fitness": -1e-8}
# use an uneven number of gradient steps so they can not easily
# average out for clipped values
local_search_params = {"lr": 1e-3, "gradient_steps": 9}
We then create a Population instance and instantiate the local search and evolutionary algorithm.
pop = cgp.Population(genome_params=genome_params)
# define the function for local search; parameters such as the
# learning rate and number of gradient steps are fixed via the use
# of `partial`; the `local_search` function should only receive a
# population of individuals as input
local_search = functools.partial(
cgp.local_search.gradient_based,
objective=functools.partial(inner_objective, seed=seed),
**local_search_params,
)
ea = cgp.ea.MuPlusLambda(**ea_params, local_search=local_search)
We define a recording callback closure for bookkeeping of the progression of the evolution.
history = {}
history["champion"] = []
history["fitness_parents"] = []
def recording_callback(pop):
history["champion"].append(pop.champion)
history["fitness_parents"].append(pop.fitness_parents())
obj = functools.partial(objective, seed=seed)
Finally, we call the evolve method to perform the evolutionary search.
cgp.evolve(obj, pop, ea, **evolve_params, print_progress=True, callback=recording_callback)
Out:
[2/500] max fitness: -186.49093806669683[K
[3/500] max fitness: -182.39212868561245[K
[4/500] max fitness: -178.42834902668957[K
[5/500] max fitness: -157.45432741168432[K
[6/500] max fitness: -150.548499777144[K
[7/500] max fitness: -144.12334156650218[K
[8/500] max fitness: -138.14539652986417[K
[9/500] max fitness: -132.58353708772972[K
[10/500] max fitness: -127.40880224750158[K
[11/500] max fitness: -122.59424680156346[K
[12/500] max fitness: -118.11480102169223[K
[13/500] max fitness: -113.94714011922306[K
[14/500] max fitness: -110.06956279123735[K
[15/500] max fitness: -106.46187822035469[K
[16/500] max fitness: -103.10530093972936[K
[17/500] max fitness: -99.9823530158055[K
[18/500] max fitness: -97.07677303949006[K
[19/500] max fitness: -82.80212012192032[K
[20/500] max fitness: -80.28021775037736[K
[21/500] max fitness: -78.01722486172258[K
[22/500] max fitness: -75.9865606806311[K
[23/500] max fitness: -74.16437332995879[K
[24/500] max fitness: -72.52925967016824[K
[25/500] max fitness: -0.3594506183109534[K
[26/500] max fitness: -0.3467280508371042[K
[27/500] max fitness: -0.0011398665748614178[K
[28/500] max fitness: -0.0010995215909579748[K
[29/500] max fitness: -0.0010606045967525026[K
[30/500] max fitness: -0.0010230650492935678[K
[31/500] max fitness: -0.0009868541945705538[K
[32/500] max fitness: -0.000951925004195846[K
[33/500] max fitness: -0.0009182321143273926[K
[34/500] max fitness: -0.0008857317667523377[K
[35/500] max fitness: -0.0008543817520571783[K
[36/500] max fitness: -0.0008241413548085907[K
[37/500] max fitness: -0.0007949713006747531[K
[38/500] max fitness: -0.0007668337054186063[K
[39/500] max fitness: -0.0007396920256956696[K
[40/500] max fitness: -0.0007135110115941772[K
[41/500] max fitness: -0.0006882566608545954[K
[42/500] max fitness: -0.0006638961747099739[K
[43/500] max fitness: -0.0006403979152883135[K
[44/500] max fitness: -0.0006177313645235944[K
[45/500] max fitness: -0.0005958670845209631[K
[46/500] max fitness: -0.0005747766793245963[K
[47/500] max fitness: -0.0005544327580386244[K
[48/500] max fitness: -0.0005348088992537972[K
[49/500] max fitness: -0.0005158796167327524[K
[50/500] max fitness: -0.000497620326310329[K
[51/500] max fitness: -0.00048000731396504[K
[52/500] max fitness: -0.00046301770502080674[K
[53/500] max fitness: -0.0004466294344388844[K
[54/500] max fitness: -0.00043082121816106014[K
[55/500] max fitness: -0.0004155725254672675[K
[56/500] max fitness: -0.00040086355231154887[K
[57/500] max fitness: -0.00038667519560192036[K
[58/500] max fitness: -0.0003729890283903399[K
[59/500] max fitness: -0.0003597872759410438[K
[60/500] max fitness: -0.00034705279264568876[K
[61/500] max fitness: -0.0003347690397558274[K
[62/500] max fitness: -0.0003229200639035999[K
[63/500] max fitness: -0.0003114904763820176[K
[64/500] max fitness: -0.0003004654331595359[K
[65/500] max fitness: -0.0002898306156012994[K
[66/500] max fitness: -0.00027957221187312306[K
[67/500] max fitness: -0.00026967689900347973[K
[68/500] max fitness: -0.0002601318255804957[K
[69/500] max fitness: -0.0002509245950613792[K
[70/500] max fitness: -0.00024204324967237422[K
[71/500] max fitness: -0.00023347625487898964[K
[72/500] max fitness: -0.0002252124844056456[K
[73/500] max fitness: -0.00021724120578529456[K
[74/500] max fitness: -0.0002095520664212394[K
[75/500] max fitness: -0.00020213508014126544[K
[76/500] max fitness: -0.00019498061422878324[K
[77/500] max fitness: -0.0001880793769120322[K
[78/500] max fitness: -0.00018142240529672688[K
[79/500] max fitness: -0.0001750010537255094[K
[80/500] max fitness: -0.0001688069825496508[K
[81/500] max fitness: -0.00016283214729791162[K
[82/500] max fitness: -0.00015706878822888747[K
[83/500] max fitness: -0.00015150942025319192[K
[84/500] max fitness: -0.0001461468232123277[K
[85/500] max fitness: -0.00014097403250145697[K
[86/500] max fitness: -0.0001359843300244043[K
[87/500] max fitness: -0.00013117123546845517[K
[88/500] max fitness: -0.00012652849788823717[K
[89/500] max fitness: -0.00012205008758725364[K
[90/500] max fitness: -0.00011773018828698943[K
[91/500] max fitness: -0.00011356318957314009[K
[92/500] max fitness: -0.00010954367960908581[K
[93/500] max fitness: -0.00010566643810730722[K
[94/500] max fitness: -0.00010192642954964454[K
[95/500] max fitness: -9.831879664749041e-05[K
[96/500] max fitness: -9.483885403347486e-05[K
[97/500] max fitness: -9.148208217630561e-05[K
[98/500] max fitness: -8.824412151120398e-05[K
[99/500] max fitness: -8.512076677786489e-05[K
[100/500] max fitness: -8.210796155903322e-05[K
[101/500] max fitness: -7.920179301220828e-05[K
[102/500] max fitness: -7.63984867878677e-05[K
[103/500] max fitness: -7.369440212773384e-05[K
[104/500] max fitness: -7.108602713614342e-05[K
[105/500] max fitness: -6.856997421921516e-05[K
[106/500] max fitness: -6.614297568522993e-05[K
[107/500] max fitness: -6.380187950064741e-05[K
[108/500] max fitness: -6.154364519651726e-05[K
[109/500] max fitness: -5.936533991974782e-05[K
[110/500] max fitness: -5.7264134624047796e-05[K
[111/500] max fitness: -5.5237300395725526e-05[K
[112/500] max fitness: -5.328220490955658e-05[K
[113/500] max fitness: -5.139630901012807e-05[K
[114/500] max fitness: -4.9577163414114587e-05[K
[115/500] max fitness: -4.782240552923447e-05[K
[116/500] max fitness: -4.6129756386022275e-05[K
[117/500] max fitness: -4.449701767789996e-05[K
[118/500] max fitness: -4.292206890620874e-05[K
[119/500] max fitness: -4.140286462624321e-05[K
[120/500] max fitness: -3.993743179072613e-05[K
[121/500] max fitness: -3.852386718739269e-05[K
[122/500] max fitness: -3.71603349671582e-05[K
[123/500] max fitness: -3.584506425991446e-05[K
[124/500] max fitness: -3.4576346874506226e-05[K
[125/500] max fitness: -3.335253508032116e-05[K
[126/500] max fitness: -3.217203946738959e-05[K
[127/500] max fitness: -3.1033326882005614e-05[K
[128/500] max fitness: -2.993491843567391e-05[K
[129/500] max fitness: -2.8875387584372102e-05[K
[130/500] max fitness: -2.7853358275865907e-05[K
[131/500] max fitness: -2.686750316257104e-05[K
[132/500] max fitness: -2.5916541877698288e-05[K
[133/500] max fitness: -2.499923937234209e-05[K
[134/500] max fitness: -2.4114404311559526e-05[K
[135/500] max fitness: -2.3260887527007786e-05[K
[136/500] max fitness: -2.2437580524635737e-05[K
[137/500] max fitness: -2.1643414044912738e-05[K
[138/500] max fitness: -2.0877356674241503e-05[K
[139/500] max fitness: -2.013841350532097e-05[K
[140/500] max fitness: -1.942562484510989e-05[K
[141/500] max fitness: -1.8738064968394314e-05[K
[142/500] max fitness: -1.8074840915505483e-05[K
[143/500] max fitness: -1.7435091332628646e-05[K
[144/500] max fitness: -1.681798535314479e-05[K
[145/500] max fitness: -1.6222721518492496e-05[K
[146/500] max fitness: -1.564852673729193e-05[K
[147/500] max fitness: -1.5094655281416275e-05[K
[148/500] max fitness: -1.4560387817332182e-05[K
[149/500] max fitness: -1.4045030471939493e-05[K
[150/500] max fitness: -1.3547913931455264e-05[K
[151/500] max fitness: -1.3068392572061726e-05[K
[152/500] max fitness: -1.2605843621513193e-05[K
[153/500] max fitness: -1.2159666350233736e-05[K
[154/500] max fitness: -1.1729281291138534e-05[K
[155/500] max fitness: -1.1314129487119508e-05[K
[156/500] max fitness: -1.0913671765038248e-05[K
[157/500] max fitness: -1.0527388035525274e-05[K
[158/500] max fitness: -1.0154776617490184e-05[K
[159/500] max fitness: -9.795353586579063e-06[K
[160/500] max fitness: -9.448652146692725e-06[K
[161/500] max fitness: -9.1142220237525e-06[K
[162/500] max fitness: -8.791628880873315e-06[K
[163/500] max fitness: -8.480453754321406e-06[K
[164/500] max fitness: -8.180292509352224e-06[K
[165/500] max fitness: -7.89075531535582e-06[K
[166/500] max fitness: -7.611466139588044e-06[K
[167/500] max fitness: -7.342062258772618e-06[K
[168/500] max fitness: -7.082193788042311e-06[K
[169/500] max fitness: -6.831523226522698e-06[K
[170/500] max fitness: -6.589725019003962e-06[K
[171/500] max fitness: -6.356485133134979e-06[K
[172/500] max fitness: -6.131500651588328e-06[K
[173/500] max fitness: -5.914479378610696e-06[K
[174/500] max fitness: -5.7051394606033655e-06[K
[175/500] max fitness: -5.503209019986504e-06[K
[176/500] max fitness: -5.308425802173062e-06[K
[177/500] max fitness: -5.120536834929872e-06[K
[178/500] max fitness: -4.939298099850169e-06[K
[179/500] max fitness: -4.764474215436513e-06[K
[180/500] max fitness: -4.59583813138229e-06[K
[181/500] max fitness: -4.433170833711874e-06[K
[182/500] max fitness: -4.276261060349364e-06[K
[183/500] max fitness: -4.124905026710703e-06[K
[184/500] max fitness: -3.978906161081043e-06[K
[185/500] max fitness: -3.8380748492735885e-06[K
[186/500] max fitness: -3.7022281884151013e-06[K
[187/500] max fitness: -3.571189749391951e-06[K
[188/500] max fitness: -3.444789347683948e-06[K
[189/500] max fitness: -3.322862822383966e-06[K
[190/500] max fitness: -3.205251822956401e-06[K
[191/500] max fitness: -3.0918036036170565e-06[K
[192/500] max fitness: -2.9823708249309897e-06[K
[193/500] max fitness: -2.8768113624642707e-06[K
[194/500] max fitness: -2.774988122207174e-06[K
[195/500] max fitness: -2.676768862519906e-06[K
[196/500] max fitness: -2.582026022389141e-06[K
[197/500] max fitness: -2.490636555751111e-06[K
[198/500] max fitness: -2.4024817716991706e-06[K
[199/500] max fitness: -2.3174471803303103e-06[K
[200/500] max fitness: -2.2354223440453133e-06[K
[201/500] max fitness: -2.1563007341355307e-06[K
[202/500] max fitness: -2.0799795924059355e-06[K
[203/500] max fitness: -2.006359797747887e-06[K
[204/500] max fitness: -1.935345737389024e-06[K
[205/500] max fitness: -1.8668451827206409e-06[K
[206/500] max fitness: -1.8007691695203165e-06[K
[207/500] max fitness: -1.7370318823983063e-06[K
[208/500] max fitness: -1.675550543372976e-06[K
[209/500] max fitness: -1.6162453043272206e-06[K
[210/500] max fitness: -1.5590391433388162e-06[K
[211/500] max fitness: -1.5038577646335358e-06[K
[212/500] max fitness: -1.4506295020916678e-06[K
[213/500] max fitness: -1.3992852261905425e-06[K
[214/500] max fitness: -1.3497582541993377e-06[K
[215/500] max fitness: -1.301984263590565e-06[K
[216/500] max fitness: -1.2559012085098567e-06[K
[217/500] max fitness: -1.21144923916672e-06[K
[218/500] max fitness: -1.168570624135276e-06[K
[219/500] max fitness: -1.1272096753527903e-06[K
[220/500] max fitness: -1.0873126758159882e-06[K
[221/500] max fitness: -1.0488278098044492e-06[K
[222/500] max fitness: -1.0117050955896162e-06[K
[223/500] max fitness: -9.758963205132251e-07[K
[224/500] max fitness: -9.413549783846545e-07[K
[225/500] max fitness: -9.08036209078633e-07[K
[226/500] max fitness: -8.758967402604833e-07[K
[227/500] max fitness: -8.448948312059377e-07[K
[228/500] max fitness: -8.149902185852457e-07[K
[229/500] max fitness: -7.861440641517546e-07[K
[230/500] max fitness: -7.583189043362982e-07[K
[231/500] max fitness: -7.31478601562884e-07[K
[232/500] max fitness: -7.05588297332947e-07[K
[233/500] max fitness: -6.80614366938983e-07[K
[234/500] max fitness: -6.565243758084212e-07[K
[235/500] max fitness: -6.332870373693061e-07[K
[236/500] max fitness: -6.108721724252055e-07[K
[237/500] max fitness: -5.892506699556786e-07[K
[238/500] max fitness: -5.683944493073574e-07[K
[239/500] max fitness: -5.482764237289396e-07[K
[240/500] max fitness: -5.288704651891891e-07[K
[241/500] max fitness: -5.101513704483518e-07[K
[242/500] max fitness: -4.92094828320447e-07[K
[243/500] max fitness: -4.7467738810056813e-07[K
[244/500] max fitness: -4.5787642910877537e-07[K
[245/500] max fitness: -4.4167013131081663e-07[K
[246/500] max fitness: -4.260374469862934e-07[K
[247/500] max fitness: -4.109580733816884e-07[K
[248/500] max fitness: -3.9641242635330755e-07[K
[249/500] max fitness: -3.823816149309154e-07[K
[250/500] max fitness: -3.688474167713294e-07[K
[251/500] max fitness: -3.557922545082884e-07[K
[252/500] max fitness: -3.431991729151782e-07[K
[253/500] max fitness: -3.3105181688925946e-07[K
[254/500] max fitness: -3.193344102051384e-07[K
[255/500] max fitness: -3.0803173502954205e-07[K
[256/500] max fitness: -2.971291121566563e-07[K
[257/500] max fitness: -2.866123819424254e-07[K
[258/500] max fitness: -2.764678859187891e-07[K
[259/500] max fitness: -2.6668244905015297e-07[K
[260/500] max fitness: -2.5724336262429516e-07[K
[261/500] max fitness: -2.481383677479561e-07[K
[262/500] max fitness: -2.3935563942420305e-07[K
[263/500] max fitness: -2.3088377119671804e-07[K
[264/500] max fitness: -2.2271176033313808e-07[K
[265/500] max fitness: -2.1482899353940853e-07[K
[266/500] max fitness: -2.0722523317109817e-07[K
[267/500] max fitness: -1.998906039427969e-07[K
[268/500] max fitness: -1.928155800962304e-07[K
[269/500] max fitness: -1.859909730351765e-07[K
[270/500] max fitness: -1.7940791938714868e-07[K
[271/500] max fitness: -1.730578694960282e-07[K
[272/500] max fitness: -1.6693257631427238e-07[K
[273/500] max fitness: -1.6102408469581527e-07[K
[274/500] max fitness: -1.5532472106099854e-07[K
[275/500] max fitness: -1.4982708343509077e-07[K
[276/500] max fitness: -1.4452403182936986e-07[K
[277/500] max fitness: -1.3940867897404874e-07[K
[278/500] max fitness: -1.344743813706512e-07[K
[279/500] max fitness: -1.2971473066053167e-07[K
[280/500] max fitness: -1.251235453108721e-07[K
[281/500] max fitness: -1.206948625740519e-07[K
[282/500] max fitness: -1.1642293075662726e-07[K
[283/500] max fitness: -1.1230220174382598e-07[K
[284/500] max fitness: -1.0832732378680725e-07[K
[285/500] max fitness: -1.0449313456574766e-07[K
[286/500] max fitness: -1.0079465447648152e-07[K
[287/500] max fitness: -9.722708016296129e-08[K
[288/500] max fitness: -9.378577828500747e-08[K
[289/500] max fitness: -9.046627949583837e-08[K
[290/500] max fitness: -8.726427263816023e-08[K
[291/500] max fitness: -8.417559914667144e-08[K
[292/500] max fitness: -8.119624764440177e-08[K
[293/500] max fitness: -7.832234873761663e-08[K
[294/500] max fitness: -7.555016998596561e-08[K
[295/500] max fitness: -7.28761110572314e-08[K
[296/500] max fitness: -7.029669905200073e-08[K
[297/500] max fitness: -6.780858399128113e-08[K
[298/500] max fitness: -6.540853446788041e-08[K
[299/500] max fitness: -6.309343344840829e-08[K
[300/500] max fitness: -6.086027422269288e-08[K
[301/500] max fitness: -5.870615650578865e-08[K
[302/500] max fitness: -5.662828266418225e-08[K
[303/500] max fitness: -5.462395408512762e-08[K
[304/500] max fitness: -5.269056767185315e-08[K
[305/500] max fitness: -5.0825612463984985e-08[K
[306/500] max fitness: -4.902666637450999e-08[K
[307/500] max fitness: -4.7291393046342906e-08[K
[308/500] max fitness: -4.561753881326509e-08[K
[309/500] max fitness: -4.400292977916426e-08[K
[310/500] max fitness: -4.244546899140444e-08[K
[311/500] max fitness: -4.0943133716671093e-08[K
[312/500] max fitness: -3.949397281738444e-08[K
[313/500] max fitness: -3.809610421365547e-08[K
[314/500] max fitness: -3.6747712441896936e-08[K
[315/500] max fitness: -3.544704629411852e-08[K
[316/500] max fitness: -3.419241654765119e-08[K
[317/500] max fitness: -3.2982193767720656e-08[K
[318/500] max fitness: -3.181480619244281e-08[K
[319/500] max fitness: -3.068873769305998e-08[K
[320/500] max fitness: -2.9602525801351234e-08[K
[321/500] max fitness: -2.855475981373822e-08[K
[322/500] max fitness: -2.7544078958369145e-08[K
[323/500] max fitness: -2.6569170625166675e-08[K
[324/500] max fitness: -2.5628768665122917e-08[K
[325/500] max fitness: -2.4721651743009356e-08[K
[326/500] max fitness: -2.3846641751825785e-08[K
[327/500] max fitness: -2.3002602284145275e-08[K
[328/500] max fitness: -2.2188437153512728e-08[K
[329/500] max fitness: -2.1403088973707116e-08[K
[330/500] max fitness: -2.0645537784073067e-08[K
[331/500] max fitness: -1.9914799724240227e-08[K
[332/500] max fitness: -1.9209925757812876e-08[K
[333/500] max fitness: -1.8530000437686807e-08[K
[334/500] max fitness: -1.787414072045158e-08[K
[335/500] max fitness: -1.724149481668558e-08[K
[336/500] max fitness: -1.6631241085397864e-08[K
[337/500] max fitness: -1.6042586966868727e-08[K
[338/500] max fitness: -1.547476795459699e-08[K
[339/500] max fitness: -1.492704660049747e-08[K
[340/500] max fitness: -1.439871155866749e-08[K
[341/500] max fitness: -1.388907666008206e-08[K
[342/500] max fitness: -1.3397480023367768e-08[K
[343/500] max fitness: -1.2923283194002717e-08[K
[344/500] max fitness: -1.2465870314433205e-08[K
[345/500] max fitness: -1.2024647325399223e-08[K
[346/500] max fitness: -1.1599041194707715e-08[K
[347/500] max fitness: -1.1188499171027739e-08[K
[348/500] max fitness: -1.079248806834865e-08[K
[349/500] max fitness: -1.0410493572649419e-08[K
[350/500] max fitness: -1.004201957348784e-08[K
<cgp.population.Population object at 0x7f7d35cc6340>
After finishing the evolution, we plot the result and log the final evolved expression.
width = 9.0
fig = plt.figure(figsize=(width, width / scipy.constants.golden))
ax_fitness = fig.add_subplot(121)
ax_fitness.set_xlabel("Generation")
ax_fitness.set_ylabel("Fitness")
ax_fitness.set_yscale("symlog")
ax_function = fig.add_subplot(122)
ax_function.set_ylabel(r"$f(x)$")
ax_function.set_xlabel(r"$x$")
print(f"Final expression {pop.champion.to_sympy()} with fitness {pop.champion.fitness}")
history_fitness = np.array(history["fitness_parents"])
ax_fitness.plot(np.max(history_fitness, axis=1), label="Champion")
ax_fitness.plot(np.mean(history_fitness, axis=1), label="Population mean")
x = np.linspace(-5.0, 5, 100).reshape(-1, 1)
f = pop.champion.to_func()
y = [f(xi) for xi in x]
ax_function.plot(x, f_target(x), lw=2, label="Target")
ax_function.plot(x, y, lw=1, label="Target", marker="x")
plt.savefig("example_differential_evo_regression.pdf", dpi=300)
Out:
Final expression x_0**2 + 4.141492443712169 with fitness -1.004201957348784e-08
Total running time of the script: ( 0 minutes 31.421 seconds)