Bu calisma 5 ve 6 mart 2018 tarihlerinde Süleyman Demirel Üniversitesi Robotik ve İnovasyon Topluluğu'na sunulmak üzere Uzay Cetin tarafindan hazirlanmistir. Ayrica bu calisma Sariyer Akademi'de duzenlenen Liseler için Yapay Zekaya Giriş Eğitimi'nde ve Istanbul Bilgi Universitesi CMPE373 Agent-Based Modeling dersinde kullanılacaktır.

Evrim ve Genetik Algoritma

In [1]:
from IPython.display import HTML
# Youtube
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/NGtzSd3wFY4" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>')
Out[1]:
In [2]:
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/XcinBPhgT7M" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>')
Out[2]:
In [3]:
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/uwz8JzrEwWY" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>')
Out[3]:
In [4]:
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/cP035M_w82s" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>')
Out[4]:

Kod hazirligi

rationality is relative to performance measure. A rational agent tries to maximize its perfomance measure.

In [5]:
import numpy as np
kisi1 = [np.random.choice([0,1]) for i in range(5)]
kisi1
Out[5]:
[0, 1, 0, 0, 0]
In [6]:
kisi2 = [np.random.choice([0,1]) for i in range(5)]
kisi2
Out[6]:
[1, 1, 0, 0, 1]
In [7]:
def kisi(n):
    return [np.random.choice([0,1]) for i in range(n)]

kisi(4)
Out[7]:
[1, 0, 1, 1]
In [8]:
def uyum(kisi):
    return np.mean(kisi)

uyum(kisi1)
Out[8]:
0.20000000000000001
In [9]:
toplum = np.array([kisi(5)  for i in range(10)])
toplum
Out[9]:
array([[0, 1, 0, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 0, 1, 0, 1],
       [1, 0, 1, 1, 0],
       [1, 1, 1, 0, 1],
       [0, 1, 1, 1, 1],
       [0, 1, 0, 1, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0],
       [1, 0, 1, 1, 0]])
In [10]:
toplum[1]
Out[10]:
array([0, 0, 0, 1, 0])
In [11]:
uyumlar = np.array([uyum(toplum[i])  for i in range(10)])
uyumlar
Out[11]:
array([ 0.2,  0.2,  0.4,  0.6,  0.8,  0.8,  0.4,  0.2,  0.2,  0.6])
In [12]:
olasiliklar = uyumlar / uyumlar.sum()
olasiliklar
Out[12]:
array([ 0.04545455,  0.04545455,  0.09090909,  0.13636364,  0.18181818,
        0.18181818,  0.09090909,  0.04545455,  0.04545455,  0.13636364])
In [13]:
print(olasiliklar.argsort())
[0 1 7 8 2 6 3 9 4 5]
In [14]:
eniyi = olasiliklar.argsort()[-1]
eniyi
Out[14]:
5
In [15]:
toplum[eniyi]
Out[15]:
array([0, 1, 1, 1, 1])
In [16]:
secim = np.random.choice(10, 2, replace= False, p=olasiliklar)
secim
Out[16]:
array([3, 6])
In [17]:
toplum[secim]
Out[17]:
array([[1, 0, 1, 1, 0],
       [0, 1, 0, 1, 0]])
In [18]:
kisi0 = toplum[secim[0]]
print("kisi0: ", kisi0)
kisi1 = toplum[secim[1]]
print("kisi1: ", kisi1)
kisi0:  [1 0 1 1 0]
kisi1:  [0 1 0 1 0]
In [19]:
n = len(kisi0)//2
print("Kesim noktasi: ",n)
Kesim noktasi:  2
In [20]:
print(kisi0[:n], kisi1[n:])
[1 0] [0 1 0]
In [21]:
# birlestir
np.hstack((kisi0[:n],kisi1[n:]))
Out[21]:
array([1, 0, 0, 1, 0])
In [22]:
help(np.random.rand)
Help on built-in function rand:

rand(...) method of mtrand.RandomState instance
    rand(d0, d1, ..., dn)
    
    Random values in a given shape.
    
    Create an array of the given shape and populate it with
    random samples from a uniform distribution
    over ``[0, 1)``.
    
    Parameters
    ----------
    d0, d1, ..., dn : int, optional
        The dimensions of the returned array, should all be positive.
        If no argument is given a single Python float is returned.
    
    Returns
    -------
    out : ndarray, shape ``(d0, d1, ..., dn)``
        Random values.
    
    See Also
    --------
    random
    
    Notes
    -----
    This is a convenience function. If you want an interface that
    takes a shape-tuple as the first argument, refer to
    np.random.random_sample .
    
    Examples
    --------
    >>> np.random.rand(3,2)
    array([[ 0.14022471,  0.96360618],  #random
           [ 0.37601032,  0.25528411],  #random
           [ 0.49313049,  0.94909878]]) #random

In [23]:
print(toplum.shape)
print(toplum.shape[1])
(10, 5)
5
In [24]:
z = np.zeros((3,5))
z
Out[24]:
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])
In [25]:
z[1] = np.array([1,1,1,1,1])
z
Out[25]:
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  0.,  0.]])
In [26]:
z[[0,2]] = np.array(
            [[2,2,2,2,2],
             [2,2,2,2,2]])
z
Out[26]:
array([[ 2.,  2.,  2.,  2.,  2.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.]])
In [27]:
# global array degeri fonksiyon icinden degisiyor
a = np.array([1,1,1,1])
def degisim(a):
    a[0] = 4
degisim(a)
a
Out[27]:
array([4, 1, 1, 1])
In [28]:
# global int degeri fonksiyon icinden degisMIYOR
a = 0
def my_function(a):
    a = 3
my_function(a)
print(a)
0

Genetik Algoritma Kodu

In [29]:
# hizli matris ve vektor islemleri icin,
# Numpy kutuphanesinden yararlaniyoruz
import numpy as np

#################################################################
def kisi1(n):
    """ n uzunlugunda 0-1'lerden olusan genotip
        ornek: kisi(4) >> [1, 0, 1, 1]
    """
    return [np.random.choice([0,1]) for i in range(n)]

def uyum1(kisi):
    """ probleme gore uyum degisir. 
    Burada maksimizasyon probleminde, ne kadar cok bire sahipseniz o kadar uyumlusunuz."""
    return np.mean(kisi)

def mutasyon1(kisi, p):
    """ p olasilikla kisinin bir biti degistirilir."""
    if np.random.rand() < p:
        m = np.random.choice(len(kisi))
        if(kisi[m] == 0): 
            kisi[m] = 1
        else:
            kisi[m] = 0
            
#################################################################            
def olasilik(toplum, uyum = uyum1, elitist = True):
    """her bireyin uyum degeri hesaplanip, olasilik degerine dondurulur.
    (uyumlar) [0.2, 0.2, 0.4, 0.4, 0.8] >> (olasiliklar) [0.1, 0.1, 0.2, 0.2, 0.4]
    
    if elitist == True
        [0.2, 0.2, 0.4, 0.4, 0.8] >>[ 0.10225857,  0.10225857,  0.16859588,  0.16859588,  0.45829111]
    """
    uyumlar = np.array([uyum(toplum[i])  for i in range(len(toplum))])
    if elitist:
        uyumlar = np.exp(uyumlar / uyumlar.mean()) # ortalamadan kucuk degerler iyice kuculur
    olasiliklar = uyumlar / uyumlar.sum()
    return olasiliklar

def secim(olasiliklar):
    """p=olasiliklara gore bireyler secilir. Olasiligi yuksek olan daha fazla secilir."""
    secim = np.random.choice(len(olasiliklar), 2, replace= False, p=olasiliklar)
    return secim

def caprazlama(toplum, secim):
    """Basarili 2 birey kisi0 ve kisi1 secilip caprazlanir."""
    kisi0 = toplum[secim[0]]
    kisi1 = toplum[secim[1]]
    n = len(toplum[secim[0]])//2
    return np.hstack((kisi0[:n],kisi1[n:]))


def yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon1, p = 0.05):
    """ Toplumun (basarisiz) yarisi emekli edilip,
    basarili bireylerin cocuklari topluma eklenecek.
    """
    k = len(toplum)//2
    emekli = olasiliklar.argsort()[:k] # basarisizlar
    #yeniler = np.zeros((k,toplum.shape[1]))
    for i in range(k):
        s = secim(olasiliklar)
        yeni_kisi = caprazlama(toplum, s)
        mutasyon(yeni_kisi, p) 
        #yeniler[i] = yeni_kisi
        toplum[emekli[i]]= yeni_kisi
        
    #toplum[emekli] = yeniler
    return toplum
    
def en_iyi(toplum, olasiliklar):
    eniyi = olasiliklar.argsort()[-1]
    return toplum[eniyi]
In [30]:
N = 20 # Toplumdaki kisi sayisi N
n = 20  # kisilerin bit uzunlugu
toplum = np.array([kisi1(n)  for i in range(N)])
olasiliklar = olasilik(toplum)

if N < 40:
    print(toplum)
    print(olasiliklar)
print(en_iyi(toplum, olasiliklar))
[[0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1]
 [1 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1]
 [1 1 0 0 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1]
 [0 0 1 1 1 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1]
 [1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 1 0 1 1 0]
 [1 1 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 1 0 0]
 [1 1 0 0 1 0 1 0 0 0 0 0 1 1 0 1 0 1 0 0]
 [1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 1]
 [0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0]
 [1 0 1 1 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 1]
 [1 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 0 0 0 0]
 [1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1]
 [1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1]
 [1 1 1 0 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1]
 [0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 0 0 1 0 1]
 [1 0 1 1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1]
 [1 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1 0]
 [1 0 1 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 0 1]
 [1 1 0 0 0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1]
 [1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0]]
[ 0.04679138  0.05144358  0.03871106  0.04679138  0.05655832  0.05655832
  0.03871106  0.04679138  0.03871106  0.0621816   0.04679138  0.06836396
  0.05655832  0.05655832  0.03871106  0.04255989  0.04679138  0.04679138
  0.05144358  0.0621816 ]
[1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1]
In [31]:
for i in range(1000):
    toplum = yeni_toplum(toplum, olasiliklar) 
    olasiliklar = olasilik(toplum)

if N < 40:
    print(toplum)
    print(olasiliklar)
print(en_iyi(toplum, olasiliklar))
[[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]]
[ 0.05012252  0.05012252  0.05012252  0.05012252  0.05012252  0.05012252
  0.05012252  0.05012252  0.05012252  0.05012252  0.05012252  0.05012252
  0.04767205  0.05012252  0.05012252  0.05012252  0.05012252  0.05012252
  0.05012252  0.05012252]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

Evrim

Pedro Domingos Master Algoritma kitabindan,

In [32]:
import matplotlib.pyplot as plt
plt.plot([2.25,3.75], [5,5], 'go', markersize=40)
plt.plot([3], [3], 'r^', markersize=60)
plt.plot([2.5,3,3.5], [1.15,1,1.15], 'b', linewidth=8)
plt.axis((1,5,0,6))
plt.show()
In [33]:
gozler = [2.25,3.75,5,5,4] # 40 yerine 4 yazdim, butun degerler 1-10 arasinda olsun
burun = [3,3,6]# ayni nedenle 60 yerine 6 yazdim,
agiz = [2.5,3,3.5, 1.15,1,1.15,8]
adam = np.array(gozler + burun + agiz)

adam
Out[33]:
array([ 2.25,  3.75,  5.  ,  5.  ,  4.  ,  3.  ,  3.  ,  6.  ,  2.5 ,
        3.  ,  3.5 ,  1.15,  1.  ,  1.15,  8.  ])
In [34]:
def adam_ciz(adam):
    plt.plot([adam[0],adam[1]], [adam[2],adam[3]], 'go', markersize=adam[4]*10)
    plt.plot(adam[5], adam[6], 'r^', markersize=adam[7]*10)
    plt.plot([adam[8],adam[9],adam[10]], [adam[11],adam[12],adam[13]], 'b', linewidth=adam[14])
    plt.show()
adam_ciz(adam)
In [35]:
len(adam)
Out[35]:
15
In [36]:
# rastegele 15 elemanli, degerler 1-10 arasinda olan, bir vektor yazalim
v = np.random.rand(15) * 10
v
Out[36]:
array([ 5.83659689,  9.14327331,  2.91916066,  7.52298473,  0.34452972,
        5.43048472,  6.16418256,  4.79497974,  5.37545398,  0.62963732,
        0.79456078,  6.33791442,  8.42024878,  4.18980458,  6.92720342])
In [37]:
adam_ciz(v)
In [38]:
1/ (1 + sum((adam - v)**2))
Out[38]:
0.0050517202403891062
In [39]:
sum(np.array([0,4,3])**2)
Out[39]:
25
In [40]:
#################################################################
def kisi2():
    # rastegele 15 elemanli, degerler 1-10 arasinda olan, bir vektor yazalim
    return np.random.rand(15) * 10 

def uyum2(birey):
    return 1/ (1 + sum((adam - birey)**2))

def mutasyon2(kisi, p):
    """ p olasilikla kisinin bir ozelligine 0-10 arasinda rastgele
    deger atanir."""
    if np.random.rand() < p:
        m = np.random.choice(len(kisi))
        kisi[m] = np.random.rand() * 10
#################################################################
In [41]:
N = 100 # Toplumdaki kisi sayisi N
toplum = np.array([kisi2()  for i in range(N)])
olasiliklar = olasilik(toplum, uyum=uyum2)

adam_ciz(en_iyi(toplum, olasiliklar))
In [42]:
for i in range(100):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon2, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum2)

adam_ciz(en_iyi(toplum, olasiliklar))
In [43]:
for i in range(100):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon2, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum2)

adam_ciz(en_iyi(toplum, olasiliklar))
In [44]:
for i in range(100):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon2, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum2)

adam_ciz(en_iyi(toplum, olasiliklar))

Yol Bulma

In [66]:
hx, hy = 5, 5  # hedef
x, y = 2, 0    # baslangic

yolx = [x]
yoly = [y]

def ciz():
    global x, y
    plt.plot(hx, hy, 'go', markersize=10)
    plt.plot(x, y, 'r^', markersize=15)
    plt.plot(yolx, yoly)
    plt.axis((-2,hx+2,0,hx+2))
    plt.grid()
    plt.show()

ciz()
In [67]:
def sag():
    global x, y
    x = x +1
    yolx.append(x)
    yoly.append(y)
    
def sol():
    global x, y
    x = x -1
    yolx.append(x)
    yoly.append(y)
    
def yukari():
    global x, y
    y = y + 1
    yolx.append(x)
    yoly.append(y)
    
def reset():
    global yolx, yoly, x, y
    x, y = 2, 0    # baslangic

    yolx = [x]
    yoly = [y] 
In [68]:
reset()

yukari()
sag()
yukari()
sag()
yukari()
sag()
yukari()
sol()
print(yolx)
print(yoly)
[2, 2, 3, 3, 4, 4, 5, 5, 4]
[0, 1, 1, 2, 2, 3, 3, 4, 4]
In [69]:
ciz()
In [70]:
hareket = {"YUK":yukari, "SAG":sag, "SOL":sol}
In [71]:
cozum = np.random.choice(["YUK","SAG","SOL"], 8)
cozum
Out[71]:
array(['SOL', 'SAG', 'SOL', 'YUK', 'YUK', 'SOL', 'SAG', 'YUK'],
      dtype='<U3')
In [72]:
m = np.random.choice(len(cozum))
m
Out[72]:
6
In [73]:
cozum[m] = np.random.choice(["YUK","SAG","SOL"])
cozum
Out[73]:
array(['SOL', 'SAG', 'SOL', 'YUK', 'YUK', 'SOL', 'SOL', 'YUK'],
      dtype='<U3')
In [74]:
cozum1 = np.random.choice(["YUK","SAG","SOL"], 8)
cozum2 = np.random.choice(["YUK","SAG","SOL"], 8)
print(cozum1)
print(cozum2)
['SOL' 'SAG' 'SOL' 'SAG' 'YUK' 'SOL' 'YUK' 'SAG']
['SAG' 'YUK' 'YUK' 'SAG' 'SOL' 'SOL' 'SAG' 'YUK']
In [75]:
n =3
np.hstack((cozum1[:n],cozum2[n:]))
Out[75]:
array(['SOL', 'SAG', 'SOL', 'SAG', 'SOL', 'SOL', 'SAG', 'YUK'],
      dtype='<U3')
In [76]:
reset()
for c in cozum:
    hareket[c]()
print(yolx)
print(yoly)
ciz()
[2, 1, 2, 1, 1, 1, 0, -1, -1]
[0, 0, 0, 0, 1, 2, 2, 2, 3]
In [77]:
def cozumciz(cozum):
    reset()
    for c in cozum:
        hareket[c]()
    print(yolx)
    print(yoly)
    ciz()  
In [78]:
#################################################################
def kisi3(n = 8):
    """ n uzunlugunda OYA harflerinden olusan genotip
        ornek: kisi3() >> ['SAG', 'YUK', 'SOL', 'YUK', 'YUK', 'SAG', 'YUK', 'SOL']
    """
    return np.random.choice(["YUK","SAG","SOL"], 8)

def uyum3(cozum):
    """ probleme gore uyum degisir. 
    Burada maksimizasyon probleminde, ne kadar cok bire sahipseniz o kadar uyumlusunuz."""
    reset()
    for c in cozum:
        hareket[c]()
    
    fark_kare = (yolx[-1] - hx)**2 + (yoly[-1] - hy)**2
    return 1/(1+fark_kare**(0.5))

def mutasyon3(kisi, p):
    """ p olasilikla kisinin bir ozelligine OYA harflerinden rastgele
    biri atanir."""
    if np.random.rand() < p:
        m = np.random.choice(len(kisi))
        kisi[m] = np.random.choice(["YUK","SAG","SOL"])
            
#################################################################            
In [79]:
N = 10 # Toplumdaki kisi sayisi N
toplum = np.array([kisi3()  for i in range(N)])
olasiliklar = olasilik(toplum, uyum=uyum3)

eniyi = en_iyi(toplum, olasiliklar)
eniyi
Out[79]:
array(['SAG', 'YUK', 'YUK', 'SOL', 'SOL', 'YUK', 'SAG', 'YUK'],
      dtype='<U3')
In [80]:
toplum
Out[80]:
array([['SOL', 'SOL', 'SAG', 'SAG', 'SAG', 'SOL', 'SAG', 'SOL'],
       ['SAG', 'SOL', 'SAG', 'YUK', 'SOL', 'SAG', 'SOL', 'SAG'],
       ['SAG', 'SOL', 'SOL', 'SAG', 'SAG', 'YUK', 'SOL', 'SOL'],
       ['YUK', 'SOL', 'SOL', 'SAG', 'YUK', 'SOL', 'YUK', 'SOL'],
       ['SAG', 'YUK', 'YUK', 'SOL', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['YUK', 'SOL', 'SAG', 'SOL', 'SOL', 'YUK', 'SOL', 'SOL'],
       ['YUK', 'SOL', 'SOL', 'YUK', 'SOL', 'YUK', 'YUK', 'SOL'],
       ['SOL', 'SAG', 'YUK', 'SAG', 'SOL', 'SOL', 'SOL', 'SOL'],
       ['SOL', 'SOL', 'YUK', 'YUK', 'SOL', 'YUK', 'YUK', 'SOL'],
       ['SOL', 'YUK', 'SOL', 'SOL', 'SOL', 'SOL', 'SOL', 'SOL']],
      dtype='<U3')
In [81]:
cozumciz(eniyi)
[2, 3, 3, 3, 2, 1, 1, 2, 2]
[0, 0, 1, 2, 2, 2, 3, 3, 4]
In [82]:
for i in range(10):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon3, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum3)
cozumciz(en_iyi(toplum, olasiliklar))
[2, 3, 3, 4, 4, 3, 3, 4, 4]
[0, 0, 1, 1, 2, 2, 3, 3, 4]
In [83]:
for i in range(10):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon3, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum3)
cozumciz(en_iyi(toplum, olasiliklar))
[2, 3, 3, 4, 4, 4, 4, 5, 5]
[0, 0, 1, 1, 2, 3, 4, 4, 5]
In [84]:
toplum
Out[84]:
array([['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'SAG', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'SOL', 'YUK', 'SAG', 'YUK']],
      dtype='<U3')
In [85]:
for i in range(10):
    toplum = yeni_toplum(toplum, olasiliklar, mutasyon = mutasyon3, p= 0.15) 
    olasiliklar = olasilik(toplum, uyum=uyum3)
cozumciz(en_iyi(toplum, olasiliklar))
[2, 3, 3, 4, 4, 4, 4, 5, 5]
[0, 0, 1, 1, 2, 3, 4, 4, 5]
In [86]:
toplum
Out[86]:
array([['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK'],
       ['SAG', 'YUK', 'SAG', 'YUK', 'YUK', 'YUK', 'SAG', 'YUK']],
      dtype='<U3')
In [ ]: