added schaffer2 function

added output for improvement of fitness
added CMAES algorithm, that requires further testing
This commit is contained in:
Daniel Lukats
2019-09-23 14:11:46 +02:00
parent 93e9234ce6
commit 14c7756802
4 changed files with 97 additions and 42 deletions

43
main.py Normal file
View File

@@ -0,0 +1,43 @@
import functions
import numpy as np
import solvers
from matplotlib import pyplot as plt
def main():
plot_rest = True
f = functions.Rastrigin()
# f = functions.Sphere()
# s = solvers.SimpleEvolutionStrategy(f, np.array([2, 2]))
s = solvers.CMAEvolutionStrategy(f, np.array([2.0, 2.0]), np.array([[2.0, 0.0], [0.0, 2.0]]))
old_fitness = 100
fitness = old_fitness * 0.9
old = None
plt.set_cmap('Spectral')
while abs(old_fitness - fitness) > 0.001:
old_fitness = fitness
samples = s.sample(2000)
elite, fitness = s.rank(samples, 150)
s.update(elite)
if plot_rest:
rest = np.setdiff1d(samples, elite, assume_unique=True)
rest = rest.reshape((int(rest.shape[0]/2), 2))
plt.pcolormesh(*f.grid())
if plot_rest:
plt.scatter(*rest.transpose(), color="dimgrey")
if old is not None:
plt.scatter(*old.transpose(), color="orange")
plt.scatter(*elite.transpose(), color="yellow")
# plt.scatter(*elite[0].transpose(), color="green")
print('old fitness: {}\nnew fitness: {}\nimprovement: {}\n'.format(old_fitness, fitness,
old_fitness - fitness))
plt.show()
old = elite
if __name__ == '__main__':
main()