Prehľadávací potenciál – experiment¶
In [1]:
import random
import matplotlib.pyplot as plt
In [2]:
# vytvorenie rodicov
DLZKA = 100
R1 = [0] * DLZKA
R2 = [1] * DLZKA
In [3]:
# krizenie - DOPLNIT ZADANU KRIZIACU METODU
parameter_krizenia = [...TBD...] # zadane hodnoty parametrov
def cross(rodic1, rodic2, par):
...
TBD
...
return pot1, pot2
In [4]:
# vzdialenost potomka od rodicov
def hammingova_vzdialenost(a, b):
return sum(1 for x, y in zip(a, b) if x != y)
def vzdialenost(potomok, rodic1, rodic2):
v1 = hammingova_vzdialenost(potomok, rodic1)
v2 = hammingova_vzdialenost(potomok, rodic2)
return v1 if v1 < v2 else v2
In [5]:
# experiment pre jednu hodnotu parametra
OPAKOVANIA = 1000
def experiment(par):
vzdialenosti = []
for i in range(OPAKOVANIA):
p1, p2 = cross(R1, R2, par)
v1 = vzdialenost(p1, R1, R2)
v2 = vzdialenost(p2, R1, R2)
vzdialenosti.extend([v1, v2])
return min(vzdialenosti), sum(vzdialenosti)/len(vzdialenosti), max(vzdialenosti)
In [6]:
# experiment pre vsetky hodnoty parametra
minima = []
priemery = []
maxima = []
for par in parameter_krizenia:
a, b, c = experiment(par)
print(f"{par:4} min : {a:2} avg : {b} max : {c}")
minima.append(a)
priemery.append(b)
maxima.append(c)
In [7]:
plt.figure(figsize=(10, 6))
plt.plot(parameter_krizenia, minima, marker="o", label="min")
plt.plot(parameter_krizenia, priemery, marker="o", label="avg")
plt.plot(parameter_krizenia, maxima, marker="o", label="max")
plt.xlabel("Hodnoty parametra")
plt.ylabel("Vzdialenosť")
plt.xticks(parameter_krizenia)
plt.legend()
plt.grid(True)
plt.show()