You are on page 1of 27

CSE-3002 Artificial Intelligence

BY: U. Shruthika
REG NO:21MIC7074
Assignment-11
1: Write a program to evaluate the optimization problem where
a fitness function is maximized. Based on the analysis of fitness
values generate the roulette wheel with slot sized according to
fitness. Furthermore, obtain the fitness value, select, expected
count and actual count from Roulette Wheel for randomly
generated initial population. Also, show the cross oversite and
mutation with obtained new population and updated fitness
function. Print the averagechange in the fitness values and
maximum fitness values of the selected population after cross
over and mutation.

2. (a) The fitness function if f(x)= x^2, on the integer interval [0,
31].
Code:
import matplotlib.pyplot as plt
import numpy as np
import random
import operator
def decimalToBinary(n):
return "{0:b}".format(int(n))
def binaryToDecimal(binary):
decimal, i = 0, 0
while(binary != 0):
dec = binary % 10
decimal = decimal + dec * pow(2, i)
binary = binary//10
i += 1
return decimal
n=int(input())
w=int(input())
l=[]
for i in range(n):
l.append(i)
a=random.choice(l)
#print(a)
b=random.choice(l)
#print(b)
c=random.choice(l)
#print(c)
d=random.choice(l)
#print(d)
fa=a^w
fb=b^w
fc=c^w
fd=d^w
l1=[fa,fb,fc,fd]
fmax=max(l1)
fs=0
for i in l1:
fs=fs+i
favg=fs/4
fpa=fa/fs
fpb=fb/fs
fpc=fc/fs
fpd=fc/fs
x = np.array([fpa, fpb, fpc, fpd])
plt.pie(x)
plt.show()
pa=fa/fs
pb=fb/fs
pc=fc/fs
pd=fc/fs
ea=round(fa/fs)
eb=round(fb/fs)
ec=round(fc/fs)
ed=round(fd/fs)
ba=decimalToBinary(a)
bb=decimalToBinary(b)
bc=decimalToBinary(c)
bd=decimalToBinary(d)
s1=str(ba)
s2=str(bb)
s3=str(bc)
s4=str(bd)
d={s1:ea,s2:eb,s3:ec,s4:ed}
sd = dict( sorted(d.items(),
key=operator.itemgetter(1),reverse=True))
q=list(sd.keys())
s1=q[1]
s2=q[0]
s3=q[0]
s4=q[2]
s11=s1[:4]
s12=s1[4:]
s21=s2[:4]
s22=s2[4:]
s31=s3[:2]
s32=s3[2:]
s41=s4[:2]
s42=s4[2:]
s1=s11+s22
s2=s21+s12
s3=s41+s32
s4=s31+s42
ba=int(s1, 2)
bb=int(s2, 2)
bc=int(s3, 2)
bd=int(s4, 2)
a=binaryToDecimal(ba)
b=binaryToDecimal(bb)
c=binaryToDecimal(bc)
d=binaryToDecimal(bd)
fa=a^w
fb=b^w
fc=c^w
fd=d^w
l1=[fa,fb,fc,fd]
fmax=max(l1)
fs=0
for i in l1:
fs=fs+i
favg=fs/4
fpa=fa/fs
fpb=fb/fs
fpc=fc/fs
fpd=fc/fs
x = np.array([fpa, fpb, fpc, fpd])
plt.pie(x)
plt.show()
ea=round(fa/fs)
eb=round(fb/fs)
ec=round(fc/fs)
ed=round(fd/fs)
ba=decimalToBinary(a)
bb=decimalToBinary(b)
bc=decimalToBinary(c)
bd=decimalToBinary(d)
s1=str(ba)
s2=str(bb)
s3=str(bc)
s4=str(bd)
d={s1:ea,s2:eb,s3:ec,s4:ed}
sd = dict( sorted(d.items(),
key=operator.itemgetter(1),reverse=True))
q=list(sd.keys())
s1=q[1]
s2=q[0]
s3=q[0]
s4=q[2]
s11=s1[:4]
s12=s1[4:]
s21=s2[:4]
s22=s2[4:]
s31=s3[:2]
s32=s3[2:]
s41=s4[:2]
s42=s4[2:]
s1=s11+s22
s2=s21+s12
s3=s41+s32
s4=s31+s42
ba=int(s1, 2)
bb=int(s2, 2)
bc=int(s3, 2)
bd=int(s4, 2)
a=binaryToDecimal(ba)
b=binaryToDecimal(bb)
c=binaryToDecimal(bc)
d=binaryToDecimal(bd)
fa=a^w
fb=b^w
fc=c^w
fd=d^w
l1=[fa,fb,fc,fd]
fmax=max(l1)
fs=0
for i in l1:
fs=fs+i
favg=fs/4
fpa=fa/fs
fpb=fb/fs
fpc=fc/fs
fpd=fc/fs
x = np.array([fpa, fpb, fpc, fpd])
plt.pie(x)
plt.show()

Output:
2. The fitness function if f(x)= x^2, on the integer interval [0.63].
Code:
import matplotlib.pyplot as plt import numpy as np
import random
x1 = random.randrange(0,63)
print("Random decimal numbers from the range: ")
print(x1)
x2 = random.randrange(0,63)
print(x2)
x3 = random.randrange(0,63)
print(x3)
x4 = random.randrange(0,63)
print(x4)
def convertToBinary(x):
if x > 1:
convertToBinary(x//2)
print(x % 2,end = '')
print("Decimal to binary conversions: ")
a1 = convertToBinary(x1)
print(" ")
a2 = convertToBinary(x2)
print(" ")
a3 = convertToBinary(x3)
print(" ")
a4 = convertToBinary(x4)
print(" ")
f =[x1*x1, x2*x2, x3*x3, x4*x4]
print("Fitness: ",f)
sumf = sum(f)
print('sumf',sumf)
avgf = sumf/4
print('avgf',avgf)
m = max(f) print('maxf',m)
y1 = f[0]/sumf
y2 = f[1]/sumf
y3 = f[2]/sumf
y4 = f[3]/sumf
yy = [y1, y2, y3, y4]
print("P-Select: ",yy)
sumyy = sum(yy)
print('sumyy',sumyy)
avgyy = sumyy/4
print('avgyy',avgyy)
m1 = max(yy)
print("max",m1)
ff1 = f[0]/avgf
ff2 = f[1]/avgf
ff3 = f[2]/avgf
ff4 = f[3]/avgf
ff = [ff1, ff2, ff3, ff4]
print("Expected count: ",ff)
sumff = sum(ff) print('sumff',sumff)
avgff = sumff/4
print('avgff',avgff)
m2 = max(ff)
print("maxff",m2)
c1 = round(ff1)
c2 = round(ff2)
c3 = round(ff3)
c4 = round(ff4)
c = (c1,c2,c3,c4)
print("Actual values: ",c)
sumc = sum(c)

print("sumc",sumc)
avgc = sumc/4
print("avgc",avgc)
m3 = max(c)
print('maxc',m3)
plt.pie(yy)
plt.title("Simple Roulette Wheel of fitness")
plt.show()

Output:
(b) MUTATION:

INPUT:
import matplotlib.pyplot as plt import numpy as np

x1 = 28 x2 = 58 x3 = 51 x4 = 7

a1=bin(x1).replace("0b","")
print(a1)
a2=bin(x2).replace("0b","")
print(a2)
a3=bin(x3).replace("0b","")
print(a3)
a4 = bin(x4).replace("0b","")
print(a4)

RX = int(a1) % 10
RY = int(a2) % 10

X1 = int(a1) - RX + RY
X2 = int(a2) - RY + RX
print('New Population X1: ',X1)
print("New Population X2: ",X2)

FX = int(a3) % 1000
FY = int(a4) % 1000

X3 = int(a3) - FX + FY
X4 = int(a4) - FY + FX
print('New Population X3: ',X3)
print('New Population X4: ',X4)

d1 = int(str(X1),2)
d2 = int(str(X2),2)
d3 = int(str(X3),2)
d4 = int(str(X4),2)
d = (d1,d2,d3,d4)
print("New population values in decimal: ",d)
f = [d1*d1,d2*d2,d3*d3,d4*d4]
print("new fitness values: ",f)
sumf=sum(f)
print("sumf",sumf)
avgf=sumf/4
print("avgf",avgf)
maxf = max(f)
print("maxf",maxf)
y1 = f[0]/sumf
y2 = f[1]/sumf
y3 = f[2]/sumf
y4 = f[3]/sumf
yy = [y1, y2, y3, y4]
print("P-Select: ",yy)

plt.pie(yy)
plt.title("Simple Roulette Wheel of new fitness")
plt.show()

Output:

(c). The fitness function if f(x)= x^3, on the integer interval [0,
31].
(a) Simple roulette wheel and crossover site.
Input:
import matplotlib.pyplot as plt
import numpy as np import random

x1 = random.randrange(0,31)
print("Random decimal numbers from the range: ")
print(x1)
x2 = random.randrange(0,31)
print(x2)
x3 = random.randrange(0,31)
print(x3)
x4 = random.randrange(0,31)
print(x4)

def convertToBinary(x):
if x > 1:
convertToBinary(x//2)
print(x % 2,end = '')

print("Decimal to binary conversions: ")


a1 = convertToBinary(x1)
print(" ")
a2 = convertToBinary(x2)
print(" ")
a3 = convertToBinary(x3)
print(" ")
a4 = convertToBinary(x4)
print(" ")
f =[x1*x1*x1, x2*x2*x2, x3*x3*x3, x4*x4*x4]
print("Fitness: ",f)
sumf = sum(f)
print('sumf',sumf)
avgf = sumf/4
print('avgf',avgf)
m = max(f)
print('maxf',m)
y1 = f[0]/sumf
y2 = f[1]/sumf
y3 = f[2]/sumf
y4 = f[3]/sumf
yy = [y1, y2, y3, y4]
print("P-Select: ",yy)
sumyy = sum(yy)
print('sumyy',sumyy)
avgyy = sumyy/4
print('avgyy',avgyy)
m1 = max(yy) print("max",m1)

ff1 = f[0]/avgf
ff2 = f[1]/avgf
ff3 = f[2]/avgf
ff4 = f[3]/avgf
ff = [ff1, ff2, ff3, ff4]
print("Expected count: ",ff)
sumff = sum(ff)
print('sumff',sumff)
avgff = sumff/4
print('avgff',avgff)
m2 = max(ff)
print("maxff",m2)
c1 = round(ff1)
c2 = round(ff2)
c3 = round(ff3)
c4 = round(ff4)
c = (c1,c2,c3,c4)
print("Actual values: ",c)
sumc = sum(c)
print("sumc",sumc)
avgc = sumc/4
print("avgc",avgc)
m3 = max(c)
print('maxc',m3)
plt.pie(yy)
plt.title("Simple Roulette Wheel of fitness") plt.show()
Output:
(b)Mutation:
Input:
import matplotlib.pyplot as plt
import numpy as np

x1 = 25 x2 =
24 x3 = 13 x4
= 20 a1 =
bin(x1).replac
e("0b","")
print(a1) a2 =
bin(x2).replac
e("0b","")
print(a2) a3 =
bin(x3).replac
e("0b","")
print(a3) a4 =
bin(x4).replac
e("0b","")
print(a4)

RX = int(a1) % 10
RY = int(a2) % 10

X1 = int(a1) - RX + RY X2 =
int(a2) - RY + RX print('New
Population X1: ',X1) print("New
Population X2: ",X2)

FX = int(a3) % 1000
FY = int(a4) % 1000

X3 = int(a3) - FX + FY
X4 = int(a4) - FY + FX
print('New Population X3: ',X3)
print('New Population X4: ',X4)

d1 = int(str(X1),2) d2 = int(str(X2),2) d3 =
int(str(X3),2) d4 = int(str(X4),2) d =
(d1,d2,d3,d4) print("New population
values in decimal: ",d)

f=
[d1*d1*d1,d2*d2*d2,d3*d3*d3,d4*d4*d4
] print("new fitness values: ",f) sumf =
sum(f) print("sumf",sumf) avgf = sumf/4
print("avgf",avgf) maxf = max(f)
print("maxf",maxf) y1 = f[0]/sumf y2 =
f[1]/sumf y3 = f[2]/sumf y4 = f[3]/sumf
yy = [y1, y2, y3, y4] print("P-
Select: ",yy)

plt.pie(yy) plt.title("Simple Roulette Wheel


of new fitness") plt.show()

Output:
(d) The fitness function if f(x)= x^3, on the integer interval [0,
64].

(a) Simple roulette wheel and crossover site

INPUT:
import
matplotlib.p
yplot as plt
import
numpy as
np import
random
x1 = random.randrange(0,64) print("Random
decimal numbers from the range: ") print(x1) x2 =
random.randrange(0,64) print(x2) x3 =
random.randrange(0,64) print(x3) x4 =
random.randrange(0,64) print(x4) def
convertToBinary(x): if x > 1:
convertToBinary(x//2) print(x %
2,end = '') print("Decimal to binary
conversions: ") a1 =
convertToBinary(x1) print(" ") a2 =
convertToBinary(x2) print(" ") a3 =
convertToBinary(x3) print(" ") a4 =
convertToBinary(x4) print(" ")

f =[x1*x1*x1, x2*x2*x2, x3*x3*x3, x4*x4*x4]


print("Fitness: ",f) sumf = sum(f)
print('sumf',sumf) avgf = sumf/4
print('avgf',avgf) m = max(f) print('maxf',m)

y1 = f[0]/sumf y2 =
f[1]/sumf y3 =
f[2]/sumf y4 =
f[3]/sumf yy = [y1, y2,
y3, y4] print("P-Select:
",yy) sumyy = sum(yy)
print('sumyy',sumyy)
avgyy = sumyy/4
print('avgyy',avgyy)
m1 = max(yy)
print("max",m1)
ff1 = f[0]/avgf ff2 = f[1]/avgf
ff3 = f[2]/avgf ff4 = f[3]/avgf ff
= [ff1, ff2, ff3, ff4]
print("Expected count: ",ff)
sumff = sum(ff)
print('sumff',sumff) avgff =
sumff/4 print('avgff',avgff) m2
= max(ff) print("maxff",m2) c1
= round(ff1)
c2 = round(ff2) c3 =
round(ff3) c4 = round(ff4) c =
(c1,c2,c3,c4) print("Actual
values: ",c) sumc = sum(c)
print("sumc",sumc) avgc =
sumc/4 print("avgc",avgc)
m3 = max(c) print('maxc',m3)

plt.pie(yy) plt.title("Simple Roulette Wheel of


fitness") plt.show()

OUTPUT:
(b) Mutation

INPUT:
import matplotlib.pyplot as plt
import numpy as np

x1 = 60 x2 = 12
x3 = 36 x4 = 58

a1 = bin(x1).replace("0b","")
print(a1) a2 =
bin(x2).replace("0b","")
print(a2) a3 =
bin(x3).replace("0b","")
print(a3) a4 =
bin(x4).replace("0b","")
print(a4)

RX = int(a1) % 10
RY = int(a2) % 10

X1 = int(a1) - RX + RY X2 = int(a2) -
RY + RX print('New Population X1:
',X1) print("New Population X2:
",X2)

FX = int(a3) % 1000
FY = int(a4) % 1000

X3 = int(a3) - FX + FY X4 = int(a4) -
FY + FX print('New Population X3:
',X3) print('New Population X4:
',X4)
d1 = int(str(X1),2) d2 = int(str(X2),2) d3 =
int(str(X3),2) d4 = int(str(X4),2) d =
(d1,d2,d3,d4) print("New population values in
decimal: ",d)

f = [d1*d1*d1,d2*d2*d2,d3*d3*d3,d4*d4*d4]
print("new fitness values: ",f)
sumf = sum(f)
print("sumf",sumf) avgf =
sumf/4 print("avgf",avgf)
maxf = max(f)
print("maxf",maxf) y1 =
f[0]/sumf y2 = f[1]/sumf
y3 = f[2]/sumf y4 =
f[3]/sumf yy = [y1, y2, y3,
y4] print("P-Select: ",yy)

plt.pie(yy) plt.title("Simple Roulette Wheel of


new fitness") plt.show()

OUTPUT:
THANK
YOU

You might also like