Hücresel Otomata ile Kentsel Büyüme Modellemesi

Şehirler bazen planlı caddelerle, bazen de “Şuraya da bir bina konduralım!” yaklaşımıyla büyür. Gerçek kentsel gelişim ekonomi, ulaşım, nüfus ve coğrafya gibi pek çok değişkene bağlıdır. Yine de yalnızca karelerden ve birkaç komşuluk kuralından yararlanarak şaşırtıcı derecede gerçekçi büyüme desenleri üretebiliriz. Bunun için kullanacağımız araç, hücresel otomata modelidir. ``

Hücresel otomata nedir?

Hücresel otomata, uzayı hücrelerden oluşan bir ızgaraya bölen ayrık bir modeldir. Her hücre belirli bir durumda bulunur ve bir sonraki zaman adımındaki durumu, kendi mevcut durumuna ve komşularına göre hesaplanır.

Kentsel büyüme modelinde hücreler arazi parçalarını temsil edebilir:

Hücre değeri Arazi türü Büyüyebilir mi?
0 Boş arazi Evet
1 Kentsel alan Zaten gelişmiş
2 Su veya koruma alanı Hayır

En yaygın iki komşuluk yaklaşımı şunlardır:

Komşuluk Hücre sayısı Özellik
Von Neumann 4 Yalnızca yatay ve dikey komşular
Moore 8 Çapraz hücreler dâhil tüm çevre

Moore komşuluğu, şehrin daha yuvarlak ve yaygın biçimde büyümesine izin verir. Von Neumann komşuluğu ise daha köşeli desenler oluşturabilir.

Büyüme kuralını kurmak

Boş bir hücrenin kentleşme olasılığını, çevresindeki kentsel hücrelerin oranıyla ilişkilendirebiliriz. Hücrenin sekiz komşusundan $n$ tanesi kentleşmişse temel olasılık şöyle tanımlanabilir:

\[P = b + w(n / 8)\]

Burada $b$ kendiliğinden büyüme olasılığı, $w$ ise komşuluk etkisinin ağırlığıdır. Örneğin $b=0.01$ ve $w=0.6$ olduğunda, mevcut şehre yakın araziler daha hızlı yapılaşırken uzakta küçük uydu yerleşimler de doğabilir. Olasılığın 1’i aşmaması için $P = min(1, P)$ kullanılır.

Bu basit denklem önemli bir fikri yakalar: Kentsel alanlar altyapı, ulaşım ve hizmetlere yakınlık nedeniyle çoğunlukla mevcut yerleşimlerin çevresinde gelişir.

Python ile küçük bir simülasyon

Aşağıdaki kod, 50x50 hücrelik bir haritada Moore komşuluğunu kullanarak büyümeyi simüle eder:

import numpy as np
import matplotlib.pyplot as plt

size = 50
city = np.zeros((size, size), dtype=int)
city[24:27, 24:27] = 1  # Başlangıçtaki kent merkezi

base_probability = 0.01
neighbor_weight = 0.60

def step(grid):
    new_grid = grid.copy()

    for row in range(1, size - 1):
        for col in range(1, size - 1):
            if grid[row, col] != 0:
                continue

            neighborhood = grid[row-1:row+2, col-1:col+2]
            urban_neighbors = np.count_nonzero(neighborhood == 1)
            probability = min(1, base_probability +
                              neighbor_weight * urban_neighbors / 8)

            if np.random.random() < probability:
                new_grid[row, col] = 1

    return new_grid

for _ in range(30):
    city = step(city)

plt.imshow(city, cmap='Greys', interpolation='nearest')
plt.title('30 Adım Sonra Kentsel Yayılım')
plt.axis('off')
plt.show()

step fonksiyonu her boş araziyi inceler, kentleşmiş komşuları sayar ve hesaplanan olasılığa göre hücrenin durumunu değiştirir. Güncelleme sırasında ayrı bir kopya kullanılması kritiktir; aksi hâlde aynı turda yeni kentleşen hücreler hemen komşularını etkiler ve zaman mantığı bozulur.

Modeli daha gerçekçi yapmak

Basit modeli yükselti, yol ve koruma alanı katmanlarıyla geliştirebiliriz. Bir hücrenin toplam uygunluğu örneğin $S = 0.5N + 0.3R - 0.2E$ biçiminde hesaplanabilir. Burada $N$ komşuluk etkisini, $R$ yola yakınlığı, $E$ ise eğim maliyetini temsil eder.

Farklı parametrelerle çok sayıda deney yapmak, tek bir kesin gelecek üretmekten daha değerlidir. Çünkü model bir kehanet makinesi değil, “Bu kurallar geçerliyse ne olabilir?” sorusuna cevap veren bir düşünme laboratuvarıdır. Birkaç satırlık kodla plansız yayılımı, uydu kentleri veya koruma politikalarının etkisini karşılaştırabilir; şehirlerin karmaşık görünümünün basit yerel kararlardan nasıl doğabildiğini gözlemleyebilirsiniz.

hucresel-otomata-ile-80

Yorumlar