Genetik algoritm nima?



Yüklə 0,76 Mb.
səhifə5/6
tarix03.04.2023
ölçüsü0,76 Mb.
#104159
1   2   3   4   5   6
Genetik algoritm nima

4. Mutatsiya
Mutatsiya - bu genlarni replikatsiya qilish yoki nusxalashda xatolik tufayli yuzaga keladigan tabiiy jarayon. Krossoverni amalga oshirayotganda, biz ikkala ota-onaning genlarini aralashtirib, ota-ona xromosomalarini takrorladik. Ota-ona genini nusxalash 100% aniqligiga kafolat yo'q. Har doim xatolik yuzaga keladi, bu esa tadqiqot doirasiga olib keladi. Misol uchun, agar sizning ota-onangizning ikkalasi ham jigarrang ko'zlari va ko'k ko'zlari bo'lsa, bu, ehtimol, ota-onangizning genlarini nusxalashda xatolik tufayli yuzaga kelgan mutatsiyaga bog'liq va sizning keyingi avlodingiz bu xususiyatni davom ettirishi mumkin.
Genetik algoritmda xromosomani o'zgartirish zarur, chunki bu bizning muammomizni yanada samarali hal qilishga yordam beradigan inqilobiy natijalarga olib kelishi mumkin. Shunday qilib, bizda uchta parametr mavjud: bola xromosomasi ( c ), mutatsiya tezligi ( mu ) va qadam hajmi ( sigma ). Mutatsiya darajasi ( mu ) mutatsiyaga uchragan bola xromosomasining foizini aniqlaydi.
Qaysi genlar mutatsiyaga uchraganligini aniqlash uchun biz tasodifiy sonlarni hosil qilamiz va ularni mutatsiya tezligi bilan solishtiramiz, so‘ngra argwhere () funksiyasi yordamida mutatsiya tezligidan kamroq qiymatlarga ega bo‘lgan bola xromosomasi ( pozitsiyasi ) indekslarini topamiz . Ushbu indekslarni qadam o'lchamini ( sigma ) tasodifiy yaratilgan qiymatga ko'paytirish va uni asl genga qo'shish orqali yangi (mutatsiyalangan) genlar bilan almashtiring.
def mutate(c, mu, sigma):
# mu - mutatsiya tezligi. O'zgartirilishi kerak bo'lgan genning % i
# sigma - mutatsiyaning qadam o'lchami
# mutatsiya = asl gen + (qadam hajmi * tasodifiy raqam) y = copy.deepcopy(c) # True va Flase massivi, mutatsiya pozitsiyasini ko'rsatuvchi
bayroq = np.random.rand(*(c['position'].shape)) <= mu
ind = np.argwhere(flag)
y['position'][ind ] += sigma * np.random.randn(*ind.shape) qaytish y
5. Nasllarni baholash
Nasl mutatsiyaga uchragach, ularning mosligini aniqlash uchun ularni xarajat funktsiyasi bilan baholashimiz kerak. Bundan tashqari, har bir avlod/iteratsiyada eng yaxshi yechimni almashtiring.
# Birinchi bahorni baholang
# 1-bolaning xarajat funksiyasini hisoblang
c1['cost'] = costfunc(c1['position'])if type(bestsol_cost) == float:
# har bir avlod/iteratsiyada eng yaxshi yechimni almashtirish
if c1['cost'] < bestsol_cost:
bestsol_cost = copy.deepcopy(c1)else: # agar c1['cost'] < bestsol_cost['cost'] bo'lsa,
har bir avlod/iteratsiyada eng yaxshi yechimni almashtirish : bestsol_cost = copy.deepcopy(c1)

# Agar c2['cost'] < bestsol_cost['cost'] bo'lsa, ikkinchi bahorni baholang
:
bestsol_cost = copy.deepcopy(c2)

Yüklə 0,76 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə