8-laboratoriya mashg’uloti. Matematik funksiylarning optimal qiymatini genetik algoritmlar yordamida aniqlashning dasturiy ta’minoti Klassik genetik algoritm va uning asosiy bosqichlari
Pythonda genetik algoritmni amalga oshirish
Download 0.57 Mb. Pdf ko'rish
|
8-Lab.mash. (Genetik algoritm) (1)
Pythonda genetik algoritmni amalga oshirish. Ushbu laboratotiya ishi
Pythonda GAni optimallashtirish masalasiga qo’llash, ya’ni funksiyaning optimal qiymatini GA yordamida qidirish jarayonining dasturiy ta’minotini ishlab chiqishga bag’ishlanadi. laboratoriya ishida genlar, bir nuqtada chatishtiruv va bir xil mutatsiya uchun o'nli belgidan foydalanadi. Bu ishni bajarishda 8.1-rasmda keltirilgan GA blok sxemasidan foydalanamiz. Laboratoriya ishida genlardan, bir nuqtali chatishtiruv va bir xil mutatsiyalar uchun o'nli ko'rinishdagi sonlardan foydalaniladi. Misol. Laboratoriya ishi biz amalga oshirmoqchi bo'lgan tenglamani taqdim etishdan boshlanadi. Tenglama quyida ko'rsatilgan: Y = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 + w 6 x 6 Tenglamada ko'rsatilgandek 6 ta o’zgaruvchi (x 1 dan x 6 gacha) va 6 ta koeffitsent (w 1 dan w 6 gacha) mavjud va o’zgaruvchilar qiymatlar (x 1 , x 2 , x 3 , x 4 , x 5 , x 6 ) = (4, -2, 7, 5, 11, 1). Biz ushbu tenglamani maksimal qiymatga keltiradigan koeffitsentlarni qidiramiz. Bunday tenglamani maksimallashtirish g'oyasi oddiy ko'rinadi. Musbat qiymat mumkin bo'lgan eng katta musbat songa ko'paytirilishi kerak, manfiy son esa mumkin bo'lgan eng kichik manfiy songa ko'paytirilishi kerak. Ammo biz izlayotgan g'oya GAni mustaqil ravishda musbat o’zgaruvchilarning musbat koeffitsenti yoki manfiy o’zgaruvchilarning manfiy koeffitsenti bilan ishlash yaxshiroq ekanligini amalga oshirish kerakligini bilishini aniqlashdir. GAni amalga oshirishni ko’rib chiqamiz. Birinchidan, 6 ta o’zgaruvchi ro'yxatini va shunga o'xshash koeffitsentlar sonini saqlash uchun o'zgaruvchini yarataylik: # Tenglama o’zgaruvchilarining koeffitsentlari. 3 equation_inputs = [4,-2,3.5,5,-11,-4.7] # Biz optimallashtirmoqchi bo'lgan koeffitsentlar soni. num_weights = Navbatdagi qadam dastlabki populyatsiyani aniqlashdir. Koeffitsentlar soniga qarab, populyatsiyadagi har bir xromosoma (individ) har bir koeffitsent uchun bittadan 6 ta genga ega bo'ladi. Ammo savol tug‘iladi: aholiga qancha qaror to‘g‘ri keladi? Buning uchun qat'iy qiymat yo'q va biz muammomizga mos keladigan qiymatni tanlashimiz mumkin. Lekin biz uni umumiy qoldirishimiz mumkin, shunda uni kodda o'zgartirish mumkin. Keyin biz har bir populyatsiya uchun yechimlar sonini o'z ichiga olgan o'zgaruvchini, populyatsiya hajmini ushlab turish uchun boshqasini va nihoyat, haqiqiy boshlang'ich populyatsiyani o'z ichiga olgan o'zgaruvchini yaratamiz: import numpysol_per_pop = 8 # Populyatsiya sonini aniqlash. pop_size = (sol_per_pop, num_weights) #Populyatsiyada sol_per_pop xromosomasi bo'ladi, bunda har bir xromosomada sonli vaznli genlar mavjud. #Boshlang'ich populyatsiyani yaratish. new_population = numpy.random.uniform(low(quyi)=-4.0, high(yuqori)=4.0, size(hajmi)=pop_size) Numpy kutubxonasini import qilgandan so'ng, biz numpy.random.uniform funksiyasidan foydalanib tasodifiy boshlang'ich populyatsiyani yaratishimiz mumkin. Tanlangan koeffitsentlarga ko'ra, u (8, 6) shaklga ega bo'ladi. Bular 8 ta xromosoma bo'lib, har birida har bir koeffitsent uchun bittadan 6 ta gen mavjud. Ushbu kodni ishga tushirgandan so'ng, populyatsiya quyidagicha ko'rinadi: [[-2.19134006 -2.88907857 2.02365737 -3.97346034 3.45160502 2.05773249] [1.81098962 0.35130155 1.03049548 -0.33163294 3.52586421 2.53845644] [-2.12480298 2.97122243 3.60375452 3.78571392 0.28776565 3.5170347] [0.63698911 -2.8638447 2.93392615 -1.40103767 -1.20313655 0.30567304] [-1.48998583 -1.53845766 1.11905299 -3.67541087 1.33225142 2.86073836] [1.14159503 2.88160332 1.74877772 -3.45854293 0.96125878 2.99178241] [1.96561297 0.51030292 0.52852716 -1.56909315 -2.35855588 2.29682254] [1.96561297 0.51030292 0.52852716 -1.56909315 -2.35855588 2.29682254] [ 3.00912373 -2.745417 3.27131287 -0.72163167 0.7516408 0.00677938]] Bu populyarsiya tasodifiy yaratilgan va shuning uchun uni qayta ishga tushirganingizda albatta o'zgaradi. Populyatsiyani tayyorlagandan so'ng, 8.1-rasmdagi sxema bo'yicha bajariladi. Fitness(MosF)dan kelib chiqib, biz hozirgi populyatsiyadan eng yaxshi odamlarni juftlashuvchi ota-onalar sifatida tanlaymiz. Keyingi qadam - navbatdagi avlod vakillarini olish uchun GA variantlarini (chatishtiruv va mutatsiya) qo'llash, ikkala ota- onani ham, avlodni ham qo'shish orqali yangi populyatsiyani yaratish va bu bosqichlarni bir necha iteratsiya/avlod uchun takrorlashdan iborat. Quyidagi kod ushbu qadamlarni bajaradi: import ganum_generations = 5 num_parents_mating (ota-onalar_soni) = 4 Download 0.57 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling