OneMax問題(10ビット)を解く。
import numpy as np import matplotlib.pyplot as plt R = 500 N_bit = 10 x = [np.random.randint(100)%2 for _ in range(N_bit)] y = np.zeros_like(x) def evalOneMax(x): return sum(x) def mutate(x): idx = np.random.randint(N_bit) x[idx] = 1-x[idx] return x.copy() ys = [] for gen in range(R): x2 = mutate(x) x_val = evalOneMax(x2) y_val = evalOneMax(y) if x_val > y_val: y = x2.copy() print(gen,y_val,y) ys.append(y_val) plt.plot(ys) plt.show()