Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

So. again, another genetic algorithm python question. Here is the code I have. I

ID: 3581554 • Letter: S

Question

So. again, another genetic algorithm python question. Here is the code I have. I am having trouble having it do multiple iterations, so it does initial() once initial() returns generation, which goes to fitness(), fitness() returns scores, which goes to pairing(), which creates a new generation, that needs to go back to fitness, then fitness creates new scores for that generation, which then goes to pairing, etc. If possible, maybe I can have the user input the number of iterations? Or whatever I just want it to loop and go between functions properly. Thanks in advance for help!

from pylab import *
import numpy as np
d = np.array([
[0,2,6,4,3,2,1,4,5],
[2,0,3,4,5,10,2,3,1],
[6,3,0,2,3,10,2,4,8],
[4,4,2,0,12,7,3,2,6],
[3,5,3,12,0,2,8,4,1],
[2,10,10,7,2,0,9,2,5],
[1,2,2,3,8,9,0,10,2],
[4,3,4,2,4,2,10,0,4],
[5,1,8,6,1,5,2,4,0]])
c1 = d[0]
c2 = d[1]
sh = np.shape(d) ## returns shape of matrix rows by columns
h = sh[0]-2 #number of nodes to be clustered
def initial():
global organisms, organisms1
organisms = []
organisms1 = []

i = 0
for i in range(2*h):
o = [[0 for j in range(h)]for j in range(h)]
for k in range(h):
if rand()>.5:
o[k]=1
else:
o[k]=0
organisms.append(o)
# print(o)

  
for i in range(2*h):
g = [[0 for j in range(h)]for j in range(h)]
for k in range(h):
if organisms[i][k] == 1:
g[k] = 0
else:
g[k] = 1
organisms.append(g)   

  
for i in range(h):
no = organisms[0+i]+organisms[2*h+i]
organisms1.append(no)
  

return(organisms1)
def fitness():
organisms = initial()
m2 = np.delete(d,(0),axis =0)
m2 = np.delete(m2,(0),axis = 0)
m2= np.delete(m2,(0),axis = 1)
m2 = np.delete(m2,(0),axis = 1)
scores = []
for y in range(h):
s1 = organisms[y][:h]
s2 = organisms[y][h:]
s1_l1 = []
s2_l2 = []
s1_d1 = []
s2_d2 = []
count2 = 0
for i in range(1,8):
if s1[i-1] ==1:
s1_d1.append(i)
if s2[i-1]==1:
s2_d2.append(i)
for i in range(7):
count1 = 0
count2 = 0
for j in s1_d1:
count1 += m2[i][j-1]
s1_l1.append((count1,i))
for j in s2_d2:
count2 += m2[i][j-1]
s2_l2.append((count2,i))
s1_l1 = sorted(s1_l1)
s2_l2 = sorted(s2_l2)
scores.append(s1_l1[0][0]+s2_l2[0][0])
print(scores)
return(scores)


def pairing():
global scores, generation, newgeneration, choseran
generation = initial()
newgeneration = []
choseran = []
scores = fitness()
scores1 = scores.copy()
scores = [int(x) for x in scores]
scores.sort()
w = scores1.index(scores[0])
w1 = scores1.index(scores[1])
newgeneration.append(generation[w])
newgeneration.append(generation[w1])
g = [[0 for j in range(h)]for j in range(h)]
a = [[0 for j in range(h)]for j in range(h)]
o = [[0 for j in range(h)]for j in range(h)]
v = [[0 for j in range(h)]for j in range(h)]
for i in range(h):
if generation[w][i]!=generation[w1][i]:
if rand()<.5:
g[i] = 0
a[i] = 1
else:
g[i] = 1
a[i] = 0
else:
g[i]=generation[w][i]
a[i]=generation[w][i]
for i in range(h):
if g[i]==1:
o[i]=0
else:
o[i]=1
for i in range(h):
if a[i]==1:
v[i]=0
else:
v[i]=1

q = v+a
n = g+o
newgeneration.append(q)
newgeneration.append(n)
i1 = 1
count = 0
count1 = 0
while i1<h:
if rand()<1*i1/(h):
ran1 = generation[count]
choseran.append(ran1)
break
else:
count+=1
i1+=1
  
u=1
e1=1
while u<h:
if rand()<1*u/(h):
ran2 = generation[count1]
choseran.append(ran2)
break
else:
count1+=1
u+=1
while e1<h:
if rand()<1*e1/(h):
ran3 = generation[count1]
choseran.append(ran3)
break
else:
count1+=1
e1+=1
  
g1 = [[0 for j in range(h)]for j in range(h)]
a1 = [[0 for j in range(h)]for j in range(h)]
t1 = [[0 for j in range(h)]for j in range(h)]
bn1 = [[0 for j in range(h)]for j in range(h)]
for v2 in range(h):
if ran1[v2]!=ran2[v2]:
if rand()<.5:
t1[v2] = 0
else:
t1[v2] = 1
else:
t1[v2]=ran1[v2]

for ui in range(h):
if t1[ui]==1:
bn1[ui]=0
else:
bn1[ui]=1
newgeneration.append(t1+bn1)

for p in range(h):
if ran1[p]!=ran2[p]:
if rand()<.5:
g1[p] = 0
a1[p] = 1
else:
g1[p] = 1
a1[p] = 0
else:
g1[p]=ran1[p]
a1[p]=ran1[p]
  
o1 = [[0 for j in range(h)]for j in range(h)]
for a2 in range(h):
if g1[a2]==1:
o1[a2]=0
else:
o1[a2]=1
v1 = [[0 for j in range(h)]for j in range(h)]
for i in range(h):
if a1[i]==1:
v1[i]=0
else:
v1[i]=1
q1 = o1+g1
n1 = v1+a1
newgeneration.append(q1)
newgeneration.append(n1)
return newgeneration


iterations = int(input("Enter the number of iterations you want to run for: "))
initial();
for i in range(iterations):
fitness()
pairing()
print("done")

Explanation / Answer

for i in range(2*h):
g = [[0 for j in range(h)]for j in range(h)]
for k in range(h):
if organisms[i][k] == 1:
g[k] = 0
else:
g[k] = 1
organisms.append(g)   

  
for i in range(h):
no = organisms[0+i]+organisms[2*h+i]
organisms1.append(no)
  

return(organisms1)
def fitness():
organisms = initial()
m2 = np.delete(d,(0),axis =0)
m2 = np.delete(m2,(0),axis = 0)
m2= np.delete(m2,(0),axis = 1)
m2 = np.delete(m2,(0),axis = 1)
scores = []
for y in range(h):
s1 = organisms[y][:h]
s2 = organisms[y][h:]
s1_l1 = []
s2_l2 = []
s1_d1 = []
s2_d2 = []
count2 = 0
for i in range(1,8):
if s1[i-1] ==1:
s1_d1.append(i)
if s2[i-1]==1:
s2_d2.append(i)
for i in range(7):
count1 = 0
count2 = 0
for j in s1_d1:
count1 += m2[i][j-1]
s1_l1.append((count1,i))
for j in s2_d2:
count2 += m2[i][j-1]
s2_l2.append((count2,i))
s1_l1 = sorted(s1_l1)
s2_l2 = sorted(s2_l2)
scores.append(s1_l1[0][0]+s2_l2[0][0])
print(scores)
return(scores)


def pairing():
global scores, generation, newgeneration, choseran
generation = initial()
newgeneration = []
choseran = []
scores = fitness()
scores1 = scores.copy()
scores = [int(x) for x in scores]
scores.sort()
w = scores1.index(scores[0])
w1 = scores1.index(scores[1])
newgeneration.append(generation[w])
newgeneration.append(generation[w1])
g = [[0 for j in range(h)]for j in range(h)]
a = [[0 for j in range(h)]for j in range(h)]
o = [[0 for j in range(h)]for j in range(h)]
v = [[0 for j in range(h)]for j in range(h)]
for i in range(h):
if generation[w][i]!=generation[w1][i]:
if rand()<.5:
g[i] = 0
a[i] = 1
else:
g[i] = 1
a[i] = 0
else:
g[i]=generation[w][i]
a[i]=generation[w][i]
for i in range(h):
if g[i]==1:
o[i]=0
else:
o[i]=1
for i in range(h):
if a[i]==1:
v[i]=0
else:
v[i]=1

q = v+a
n = g+o
newgeneration.append(q)
newgeneration.append(n)
i1 = 1
count = 0
count1 = 0
while i1<h:
if rand()<1*i1/(h):
ran1 = generation[count]
choseran.append(ran1)
break
else:
count+=1
i1+=1
  
u=1
e1=1
while u<h:
if rand()<1*u/(h):
ran2 = generation[count1]
choseran.append(ran2)
break
else:
count1+=1
u+=1
while e1<h:
if rand()<1*e1/(h):
ran3 = generation[count1]
choseran.append(ran3)
break
else:
count1+=1
e1+=1
  
g1 = [[0 for j in range(h)]for j in range(h)]
a1 = [[0 for j in range(h)]for j in range(h)]
t1 = [[0 for j in range(h)]for j in range(h)]
bn1 = [[0 for j in range(h)]for j in range(h)]
for v2 in range(h):
if ran1[v2]!=ran2[v2]:
if rand()<.5:
t1[v2] = 0
else:
t1[v2] = 1
else:
t1[v2]=ran1[v2]

for ui in range(h):
if t1[ui]==1:
bn1[ui]=0
else:
bn1[ui]=1
newgeneration.append(t1+bn1)

for p in range(h):
if ran1[p]!=ran2[p]:
if rand()<.5:
g1[p] = 0
a1[p] = 1
else:
g1[p] = 1
a1[p] = 0
else:
g1[p]=ran1[p]
a1[p]=ran1[p]
  
o1 = [[0 for j in range(h)]for j in range(h)]
for a2 in range(h):
if g1[a2]==1:
o1[a2]=0
else:
o1[a2]=1
v1 = [[0 for j in range(h)]for j in range(h)]
for i in range(h):
if a1[i]==1:
v1[i]=0
else:
v1[i]=1
q1 = o1+g1
n1 = v1+a1
newgeneration.append(q1)
newgeneration.append(n1)
return newgeneration


iterations = int(input("Enter the number of iterations you want to run for: "))
initial();
for i in range(iterations):
fitness()
pairing()
print("done")

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote