-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBreading_Room.py
More file actions
124 lines (90 loc) · 4.36 KB
/
Copy pathBreading_Room.py
File metadata and controls
124 lines (90 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import numpy as np
from Full_Snake import Full_Snake
import random
class Breading_Room:
OFFSPRINGS = 2
def __init__(self, snak_len):
self.snak_len = snak_len
print("Breading_Room is reqdy")
def make_love(self,mates_array):
print("MAking love total MAtes:",len(mates_array))
male_Snaks = []
female_Snaks= []
topHalfs = []
lowHalf = []
newBread = []
sortedByFitness = sorted(mates_array,key=lambda x:x.fitness, reverse=True)
topHalfs = sortedByFitness[:len(mates_array)/2]
lowHalf = sortedByFitness[len(mates_array)/2:]
print("topHalfs size :",len(topHalfs))
# for i in xrange(0,len(topHalfs)):
# print("\nSorted by fitness",sortedByFitness[i].fitness)
# if i%2 == 0:
# male_Snaks.append(topHalfs[abs(len(topHalfs)-i)])
# else:
# female_Snaks.append(topHalfs[abs(len(topHalfs)-i)])
female_Snaks = topHalfs
male_Snaks = topHalfs[::-1]
print("Total Femals :",len(female_Snaks))
print("Total Males :",len(male_Snaks))
pair = len(male_Snaks) if(len(female_Snaks)>len(male_Snaks)) else len(female_Snaks)
for j in xrange(0,len(topHalfs)):
weight_H_female = female_Snaks[j].nural_Net.weight_matrix_hidden
weight_H_male = male_Snaks[j].nural_Net.weight_matrix_hidden
weight_O_female = female_Snaks[j].nural_Net.weight_matrix_output
weight_O_male = male_Snaks[j].nural_Net.weight_matrix_output
# print("\n Femals H:",weight_H_female)
# print("\n Femals O:",weight_O_female)
# print("\n Mals H:",weight_H_male)
# print("\n Mals O:",weight_O_male)
# print("\n Split::",np.array_split(weight_H_female,2))
w_h_F_UpearHELF = np.array_split(weight_H_female,2)[0] #4*2
w_h_F_LowerHELF = np.array_split(weight_H_female,2)[1] #4*3
w_h_M_UpearHELF = np.array_split(weight_H_male,2)[0] #4*2
w_h_M_LowerHELF = np.array_split(weight_H_male,2)[1] #4*3
w_o_F_UpearHELF = np.array_split(weight_O_female,2)[0] #5*2
w_o_F_LowerHELF = np.array_split(weight_O_female,2)[1] #5*2
w_o_M_UpearHELF = np.array_split(weight_O_female,2)[0] #5*2
w_o_M_LowerHELF = np.array_split(weight_O_female,2)[1] #5*2
#Boy
w_h_B = np.vstack((w_h_M_UpearHELF, w_h_F_LowerHELF))
w_o_B = np.vstack((w_o_M_UpearHELF, w_o_F_LowerHELF))
#mutation
r = (w_h_B.shape[0])-1
c = (w_h_B.shape[1])-1
m1 = 1 / (1 + np.e ** -w_h_B[random.randint(0,r),random.randint(0,c)])
# print('Mutation b1 by:',m1)
w_h_B[random.randint(0,r),random.randint(0,c)] = m1
r = (w_o_B.shape[0])-1
c = (w_o_B.shape[1])-1
m2 = 1 / (1 + np.e ** -w_o_B[random.randint(0,r),random.randint(0,c)])
# print('Mutation b2 by:',m2)
w_o_B[random.randint(0,r),random.randint(0,c)] = m2
newSnak = Full_Snake(self.snak_len)
newSnak.nural_Net.weight_matrix_hidden = w_h_B
newSnak.nural_Net.weight_matrix_output = w_o_B
newBread.append(newSnak)
#Girl
w_h_G = np.vstack((w_h_M_UpearHELF, w_h_F_LowerHELF))
w_o_G = np.vstack((w_o_M_UpearHELF, w_o_F_LowerHELF))
#mutation
r = (w_h_G.shape[0])-1
c = (w_h_G.shape[1])-1
m3 = 1 / (1 + np.e ** -w_h_G[random.randint(0,r),random.randint(0,c)])
# print('Mutation g1 by:',m3)
w_h_G[random.randint(0,r),random.randint(0,c)] = m3
r = (w_o_G.shape[0])-1
c = (w_o_G.shape[1])-1
m4 = 1 / (1 + np.e ** -w_o_G[random.randint(0,r),random.randint(0,c)])
# print('Mutation G2 by:',m4)
w_o_G[random.randint(0,r),random.randint(0,c)] = m4
newSnak = Full_Snake(self.snak_len)
newSnak.nural_Net.weight_matrix_hidden = w_h_G
newSnak.nural_Net.weight_matrix_output = w_o_G
# print("\n BOY H:",w_h_B)
# print("\n BOY O:",w_o_B)
# print("\n GIRL H:",w_h_G)
# print("\n GIRL O:",w_o_G)
newBread.append(newSnak)
print("new Bread popolation :",len(newBread))
return newBread