Davranış Ağaçları (Behavior Trees) ve Sonlu Durum Makineleri (FSM) Üzerine Kapsamlı Bir Analiz
Otonom ajanların, karmaşık video oyunu karakterlerinin ve endüstriyel robotik sistemlerin temelini oluşturan karar verme mekanizmaları, modern yazılım mühendisliğinin ve yapay zeka araştırmalarının en kritik ve üzerinde en çok tartışılan alanlarından birini teşkil etmektedir. Bir ajanın, sürekli değişen çevresel uyarıcılara nasıl tepki vereceği, elindeki sayısız hedef arasından hangilerini önceliklendireceği ve spesifik görevleri hangi sırayla yürüteceği, tümüyle temel aldığı karar verme mimarisinin sağlamlığına ve esnekliğine bağlıdır. Tarihsel gelişim süreci incelendiğinde, bu alanın uzun yıllar boyunca Sonlu Durum Makineleri (Finite State Machines - FSM) tarafından domine edildiği görülmektedir. Ancak, dijital dünyaların ve fiziksel robotik görevlerin artan karmaşıklığı, geliştiricileri ve araştırmacıları daha ölçeklenebilir, reaktif ve modüler yapılar aramaya itmiş, bu arayış Davranış Ağaçları (Behavior Trees - BT) gibi devrim niteliğinde hiyerarşik yapıların doğmasına önayak olmuştur.
Bu rapor, otonom sistemlerde karar verme ve davranış modellemesi için günümüzde endüstri standardı olarak kabul edilen bu iki temel mimariyi tüm teknik detayları, matematiksel altyapıları, tarihsel evrimleri, endüstriyel kullanım senaryoları ve birbirlerine karşı olan yapısal avantaj ve dezavantajları bağlamında derinlemesine incelemektedir. Ek olarak, modern oyun motorlarındaki (örneğin Unreal Engine) en güncel hibrit yaklaşımlar ve Durum Ağaçları (State Trees) gibi yeni nesil çözümler de bu analizin ayrılmaz bir parçası olarak değerlendirilmektedir.
Sonlu Durum Makineleri (FSM): Teorik Altyapı ve Matematiksel Temeller
Sonlu Durum Makinesi (FSM), bir sistemin aynı anda yalnızca tek bir önceden tanımlanmış durumda (state) bulunabildiği ve belirli çevresel girdilere veya içsel olaylara (inputs/events) tepki olarak durumlar arası geçiş (transition) yaptığı soyut bir makine modelidir. Hesaplama teorisinin en temel yapı taşlarından biri olan bu model, bilgisayar bilimlerinde algoritmaların tasarımından dijital elektronik devrelerin inşasına kadar geniş bir yelpazede kullanılmaktadır.
FSM'ler, teorik olarak deterministik (belirlenimci) veya non-deterministik (belirlenimci olmayan) olarak iki ana kategoriye ayrılarak tasarlanabilirler. Ancak hesaplama teorisinin temel teoremlerinden biri, herhangi bir non-deterministik sonlu durum makinesi için, tamamen aynı dili tanıyan ve aynı davranışsal çıktıları üreten eşdeğer bir deterministik sonlu durum makinesinin her zaman inşa edilebileceğini kanıtlamaktadır. Bu teorem, yazılım mühendislerinin karmaşık senaryoları daha öngörülebilir deterministik yapılara indirgemesine olanak tanır.
Mantıksal Temsil ve Durum Geçiş Dinamikleri

Sonlu Durum Makineleri, özünde yönlü bir graf (directed graph) veya durum diyagramı (state diagram) olarak görselleştirilir ve ifade edilirler. Bu yönlü grafta, düğümler (nodes) soyut makinenin iç durumlarını, bu düğümleri birbirine bağlayan yönlü oklar (edges) ise durum geçişlerini temsil eder. Sistemin herhangi bir "t" anındaki mevcut durumu, her zaman bir önceki durumun ve sisteme o anda giren mevcut girdilerin deterministik bir fonksiyonu olarak hesaplanır.
Matematiksel bir bağlamda, bu durum geçiş fonksiyonu şu şekilde ifade edilmektedir:
Bu formülasyonda sistemin bir sonraki durumunu, makinenin bir önceki (mevcut) durumunu, o anki girdi (input) değerini ve ise durum geçiş fonksiyonunu (state transition function) temsil etmektedir. Bu bağıntı, literatürde sıklıkla durum kümesi (S) ile girdi kümesinin (I) kartezyen çarpımının yine durum kümesine haritalanması işlemi olarak, yani şeklinde de gösterilmektedir. Durum makineleri, ürettikleri çıktıların (output) doğasına göre de iki temel mimari alt sınıfa ayrılırlar: Moore Makinesi modelinde çıktı fonksiyonu yalnızca sistemin mevcut durumuna bağlıyken (), Mealy Makinesi modelinde çıktı fonksiyonu hem mevcut duruma hem de anlık girdiye eşzamanlı olarak bağlıdır ().
Sistem tasarımında, durumlar ve girdiler tipik olarak ikili (binary) bir alfabe veya önceden tanımlanmış numaralandırmalar (enum) ile temsil edilir ve ile fonksiyonları genellikle bir arama tablosu (look-up table) veya durum geçiş tablosu (state transition table) biçiminde kodlanır. Yazılım mimarisinde geçişlerin gerçekleşmesi sadece girdilerin varlığına değil, ek koşulların (guards) sağlanmasına da bağlıdır. Tipik bir UML durum diyagramında veya modern motor implementasyonlarında bir geçişin notasyonu genellikle tetikleyici[koşul]/etki (trigger[guard]/effect) sözdizimi ile ifade edilir. Burada tetikleyici (trigger) bir sinyal, çağrı, zamanlama veya değişim olayı olabilir. Koşul (guard), geçişin gerçekleşmesi için doğrulanması gereken ekstra bir mantıksal sınamadır. Etki (effect) ise geçiş sırasında yürütülen spesifik işlemdir.
Bununla birlikte, FSM mimarisinin gücü yalnızca durumlar arası geçişlerde değil, aynı zamanda belirli durumlara girildiğinde, o durumların içinde kalındığında ve o durumlardan çıkıldığında çalıştırılabilen eylemlerde yatar. Bir FSM durumuna girildiğinde (entry action), durum içindeyken periyodik olarak (during action) ve durumdan çıkıldığında (exit action) özel kod blokları çalıştırılabilir. Örneğin bir telsiz sisteminde, cihaz "Radyo" durumundayken "İleri" düğmesine basılması bir sonraki radyo istasyonuna geçişi sağlarken, cihaz "CD" durumundayken aynı "İleri" düğmesine basılması bir sonraki şarkı parçasına geçişi tetikler; böylece tamamen aynı çevresel uyarıcı, makinenin bulunduğu bağlamsal duruma göre tamamen farklı eylemler üretir.
FSM'nin Endüstri Standartlarındaki Yeri ve Pratik Avantajları
Sonlu Durum Makineleri, dijital devre tasarımından oyun endüstrisine kadar uzanan geniş bir tarihsel arka planda bir endüstri standardı olarak varlığını sürdürmüştür. En belirgin avantajları, kavramsal olarak anlaşılmalarının son derece kolay olması, mimari basitlikleri ve donanım/yazılım seviyesindeki muazzam çalışma hızlarıdır. Bir tasarımcının, bir karakterin veya sistemin ne yapabileceğini, hangi durumlara geçebileceğini bir kutu ve ok diyagramı ("box and arrow" diagram) üzerinden görselleştirmesi, FSM'leri kodlama sürecinde son derece sezgisel ve hata ayıklaması (debugging) kolay bir yapı haline getirir.
Özellikle sistemin anlık modunu, animasyon evresini veya karakterin fiziksel durumunu kesin, geçirimsiz sınırlarla belirlemenin kritik olduğu alanlarda FSM'ler rakipsizdir. FSM'lerin kusursuz bir şekilde işlediği spesifik bağlamlar şunlardır:
Birinci olarak, dövüş oyunları (fighting games) FSM mimarisinin en parlak uygulama alanlarından biridir. Bir dövüş oyununda karakterin "Saldırı", "Zıplama", "Sersemleme" (Stunned), "Eğilme" veya "Savunma" durumları birbirinden kesin, mantıksal çizgilerle ayrılmak zorundadır. Örneğin, bir karakter rakibinden ağır bir darbe alıp "Sersemleme" durumuna girdiğinde, oyuncu zıplama tuşuna bassa dahi karakter zıplayamaz. FSM mimarisi kullanılmadığı takdirde, karakterin her eylem denemesinde onlarca "eğer karakter sersemlememişse ve eğer havada değilse ve eğer saldırı animasyonunda kilitli kalmamışsa..." şeklinde uzayıp giden ve bakımı imkansız olan iç içe geçmiş koşul (conditional) ifadeleri yazmak gerekir. FSM'ler, "karakter A durumundaysa, yalnızca B veya C durumuna geçebilir" mantığını kusursuz bir şekilde işleterek kod bloklarındaki bu devasa spagetti karmaşasının önüne geçer.
İkinci olarak, karakter animasyon kontrolcüleri büyük ölçüde FSM tabanlıdır. Endüstri lideri olan Unreal Engine gibi modern oyun motorlarında, karakter animasyonları "Animation Blueprints" (Animasyon Şemaları) adı verilen ve arka planda bir durum makinesi çalıştıran arayüzlerle kontrol edilir. Bir karakterin "Bekleme" (Idle) animasyonundan "Yürüme" (Walk) animasyonuna, oradan da "Koşma" (Run) animasyonuna ne zaman ve nasıl geçeceği, bu kutu ve ok arayüzü ile yönetilen FSM'lerin temel işlevidir.
Üçüncü olarak, arcade sistemler ve basit karar mantığı gerektiren oyunlarda FSM'ler "KISS" (Keep It Simple, Stupid - Basit Tut, Aptalca Tut) prensibiyle çalışmak için idealdir. Arcade tarzı oyunların birçoğunda, düşmanların "Devriye Gez", "Kovala", "Saldır" veya "Kaç" gibi çok kısıtlı ve spesifik durumları vardır. Native C++ ortamında uygulanan bir FSM, modern işlemcilerde nananiyeler seviyesinde çalışarak benzersiz bir performans sunar. Yazılım geliştiriciler, isimsiz numaralandırmalar (unnamed enums) kullanarak durumları tanımlayıp, "tek büyük bir switch" (one big switch) yapısıyla veya bit maskeleme teknikleriyle bu durumları olay kimliklerine (event IDs) bağlayabilirler. Bu yapının getirdiği düzenli kod mimarisi, FSM'nin çalışma zamanında (runtime) derlenmesine (hot-recompiling) olanak tanırken, SetState() gibi alt rutinler yerine olay işleyicilerden (event handlers) sıfır olmayan durum kimlikleri döndürerek güvenli ve kesintisiz bir yürütme (execution safety) sağlar. Bu doğrusal yürütme akışı, oyun döngüsünde herhangi bir takılmayı (stutter) önleyerek yüksek kare hızlarına (framerate) ulaşılmasını mümkün kılar.
Mimari Kriz Noktası: Durum Patlaması (State Explosion) Sorunsalı
FSM'ler, sınırlı sayıda duruma sahip deterministik davranış modelleri için kusursuz ve performanslı olsalar da, otonom sistemin karmaşıklığı, çevresel değişkenlerin sayısı ve yapay zekanın sahip olması beklenen davranışsal repertuvar arttıkça yapısal olarak çökme eğilimi gösterirler. Literatürde bu kronik zafiyete "Durum Patlaması" (State Explosion) adı verilmektedir.
FSM mimarisinin temel kısıtı, makinenin aynı anda yalnızca tek bir durumda bulunabilmesidir. Eğer bir karakter hem koşup hem de aynı anda ateş edebilecekse, FSM mimarisinde karakter "Koşma" ve "Ateş Etme" durumlarında aynı anda bulunamaz; bunun yerine "Koşarak Ateş Etme" adında yepyeni bir melez durum yaratılması gerekir. Sisteme eklenen her yeni değişken, mevcut tüm durumlarla olası kombinasyonları kadar yeni durum üretilmesini gerektirir. Modelin temsil etmesi gereken durum sayısı, değişken kümelerinin kartezyen çarpımı kadar devasa boyutlara ulaşır.
Daha da kritik olan sorun, artan durum sayısının yarattığı geçiş (transition) karmaşasıdır. FSM'de bir durum eklemek, sadece o durumu oluşturmak anlamına gelmez; yeni eklenen bu duruma sistemdeki diğer tüm ilgili durumlardan nasıl geçileceğini ve bu durumdan hangi durumlara geri dönülebileceğini teker teker, spesifik kurallarla kodlamayı gerektirir. Bilgisayar bilimleri jargonunda, durum sayısının artmasıyla geçiş karmaşıklığının büyüme hızı (kare orantılı) olarak ifade edilmektedir. Bu geometrik artış hızı, ağ ekonomisinde bir telekomünikasyon ağının değerinin kullanıcı sayısının karesiyle orantılı olduğunu savunan Metcalfe Kanunu'na benzer bir kümülatif karmaşıklık yükü yaratır.
Bir FSM yaklaşık 10 duruma ulaştığında yönetimi zorlaşır; durum sayısı 40'a ulaştığında (örneğin gelişmiş bir Sekiro veya Dark Souls tarzı boss dövüşü yapay zekasında), kod dosyası yüzlerce
satır geçiş mantığıyla dolar ve kelimenin tam anlamıyla bir "spagetti koda" (Spaghettification) dönüşür. 13 Bu aşamada kodun bakımını yapmak (maintenance) veya hataları ayıklamak (debugging) bir kabusa evrilir. Çünkü ortaya çıkan herhangi bir mantıksal hatanın (bug) kök nedeni, onlarca farklı durum geçişinden birindeki hatalı bir tetikleyici, yanlış kurgulanmış bir öncelik sırası veya unutulmuş bir geçiş oku olabilir. 23
Bu durum patlamasını hafifletmek ve spagetti kod oluşumunu bir nebze olsun engellemek amacıyla "Hiyerarşik Sonlu Durum Makineleri" (Hierarchical Finite State Machines - HFSM) geliştirilmiştir. HFSM modelinde, durumlar içi içe geçebilir şekilde tasarlanır; bir "üst durum" (parent state) kendi içinde bağımsız çalışan alt durumları (substates) barındırır. Örneğin "Savaş" adlı bir ana durum, içinde "Siper Al", "Nişan Al" ve "Ateş Et" alt durumlarını çalıştıran bir alt makineye sahip olabilir. Eğer sistem "Savaş" ana durumundayken oyuncu uzaklaşırsa, alt durumlardan hangisinde olunduğuna bakılmaksızın ana durumdan "Devriye Gez" durumuna yapılacak tek bir "Grup Geçişi" (Group Transition), içerdeki alt durumların her birine teker teker kaçış veya iptal kodu yazma ihtiyacını ortadan kaldırır. 8 Geçiş noktaları (transition points) ve olay tetikleme öncelikleri (event triggering precedence) sayesinde HFSM'ler, FSM'lerin kapasitesini bir miktar daha yukarı taşır. 24 Ancak, sistem karmaşıklığı belirli bir eşiği aştığında (örneğin onlarca durum ve yüzlerce geçiş barındıran kompleks bir görev planlayıcısında), HFSM'ler bile görsel karmaşaya teslim olmakta ve yapısal olarak kırılganlaşmaktadır. 8
Davranış Ağaçları (Behavior Trees): Evrim, Yapı ve Yürütme Mantığı

FSM'lerin ve HFSM'lerin getirdiği geometrik ölçeklenebilirlik bariyeri, otonom karakterlerin ve ajanların karar verme süreçlerinde yepyeni bir mimari paradigmanın doğuşunu zorunlu kılmıştır. Davranış Ağaçları (Behavior Trees - BT), tam olarak bu tıkanıklığı aşmak, yapay zekaya "eğer bu olursa, o zaman şunu yap" şeklindeki katı geçiş labirentlerinde kaybolmadan, görsel ve net bir yol haritası sunmak için geliştirilmiş modüler, hiyerarşik karar verme yapılarıdır. 2
Tarihsel Kökenler ve Endüstriyel Benimsenme Süreci
Davranış ağaçlarının tam olarak ne zaman ve nerede ortaya çıktığına dair akademik ve endüstriyel anlatılar bazı ufak farklılıklar gösterse de, bu yapıların sofistike araştırma laboratuvarlarından ziyade bizzat oyun geliştirme stüdyolarının siperlerinden çıktığı geniş çapta kabul görmektedir. 2 Belgelenmiş en erken kullanımlardan biri, Maxis tarafından geliştirilen 1996 yapımı SimCopter oyununa dayanmaktadır. Eski Maxis çalışanı Don Hopkins'in açıklamalarına göre, oyun içinde NPC'leri kontrol etmek için "SimAntics" adı verilen ve oyun kodlarındaki people.df dosyasında "reaksiyon ağaçları" (reaction trees) olarak geçen görsel bir dil kullanılmıştır. Bu dosyadaki yorum satırları, "bir reaksiyon ağacının diğer bir reaksiyon ağacından çağrılabileceği ancak o esnada kesintiye uğratılamayacağı" gibi modern davranış ağacı mekaniklerini andıran tanımlamalar barındırmaktadır. 25
Ancak Davranış Ağacı mimarisinin modern anlamda formüle edilmesi, endüstriyel bir standarda dönüşmesi ve sağlam bir akademik temel kazanması büyük ölçüde Damian Isla'nın 2005 yılındaki Oyun Geliştiricileri Konferansı'nda (GDC) Halo 2 oyununun devrim niteliğindeki YZ mimarisini sunduğu ikonik konuşmasıyla ("Handling Complexity in the Halo 2 AI") gerçekleşmiştir. 3 Halo 2 geliştirme sürecinde Bungie ekibi, FSM'lerin getirdiği iki büyük çıkmazla karşılaştı: Hızla artan davranış çeşitliliği karşısında sistemin ölçeklenebilirliğini yitirmesi ve YZ'nin hızlı kararlar arasında gidip gelmesinden kaynaklanan kararsızlık, yani "dithering" problemi. 3
FSM'lerin neden olduğu bu mental aşırı yüklenmeyi (mental bandwidth) çözmek isteyen ekip, karakter davranışlarını "Davranış DAG'leri" (Directed Acyclic Graphs - Yönlü Asiklik Grafikler) olarak adlandırılan bir hiyerarşi içine oturttu. 3 Bu sistem, yaklaşık 50 farklı çekirdek davranış barındırıyordu.
Isla'nın tanımladığı yapıda, ağacın üst kısımlarındaki düğümler karar verme algoritmalarından, en uçtaki yaprak düğümler ise eylemlerin icra edilmesinden sorumluydu. Bu yaklaşım, YZ'nin sadece ne yapacağını bilmesini değil, aynı zamanda sağduyulu (common sense) davranmasını sağladı. Ayrıca karakterler, hedefleri algılayabilmek için kendi içsel "hedef listelerine" (target lists) ve bir mekansal farkındalığa (firing positions) sahiptiler. 3 Bu modüler yapı öylesine esnek, hata toleranslı ve okunabilirdi ki, konsept kısa sürede robotik alanına ve akademiye de sıçradı. Günümüzde insansız hava araçlarından, endüstriyel işbirlikçi robotlara (collaborative robots) ve otonom sürüş sistemlerine kadar geniş bir yelpazede Davranış Ağaçları fiili standart (de facto standard) haline gelmiştir. 1
BT'nin Yapısal Mimarisi ve Düğüm (Node) Hiyerarşisi
Davranış ağaçları, eylemleri ve kararları dijital LEGO blokları gibi birbirine bağlayan, hiyerarşik bir ağaç veri yapısıdır. 2 Klasik Karar Ağaçlarından (Decision Trees) farklı olarak BT'ler, yalnızca sonuca ulaşana kadar bir yolu takip etmekle kalmaz; düğümlerin mantıksal kontrolünü, asenkron yürütme süreçlerini (execution flows) ve kesintileri (interrupts), sistemin kökünden (root) yapraklarına (leaves) doğru gönderilen düzenli sinyaller (genellikle "tick" olarak adlandırılır) ile yönetirler. 1
Bu mimarinin işleyişindeki en hayati ve ayırıcı konsept, her bir düğümün kendisine gelen bir "tick" işlemi sonucunda üst düğümüne (parent node) mutlaka bir mantıksal durum (status) döndürmesidir. Bu dönüş durumları üç evrensel çeşitten oluşur:
Success (Başarılı): Düğüm görevini tam olarak ve sorunsuz bir şekilde tamamlamıştır veya test edilen koşul doğrudur.
Failure (Başarısız): Düğüm görevini yerine getirememiştir, bir engele takılmıştır veya test edilen koşul yanlıştır.
Running (Çalışıyor): İşlem henüz tamamlanmamıştır; eylemin tamamlanması için birden fazla zaman döngüsü (tick/frame) gerekmektedir. 8
İşte bu "Running" durumunun varlığı, Davranış Ağaçlarını diğer tüm klasik ağaç yapılarından ayıran teknolojik bir sıçramadır. 27 Fiziksel bir robotun "Hedefe Yürü" emrini saniyenin onda biri gibi bir sürede bitirmesi veya bir oyun karakterinin "Sandığı Aç" animasyonunu anında tamamlaması beklenemez. Running durumu, ağacın o spesifik dalının eylemi asenkron olarak arka planda sürdürmesine olanak tanırken, sistemin bloke olup donmasını (blocking the execution thread) engeller. 27
Davranış ağaçları yapısal olarak üç ana düğüm kategorisinden oluşur: Kompozitler, Dekoratörler ve Yapraklar. 28
1. Kompozit Düğümler (Composite Nodes)
Kompozit düğümler, ağacın dal ayrım noktalarıdır. Birden fazla alt düğüme (çocuğa) sahip olan ve kendisine bağlı olan bu alt düğümlerin hangi sırayla, hangi şartla veya eşzamanlı olarak çalıştırılacağına karar veren yapı taşlarıdır. 28
Seçiciler (Selector / Fallback Nodes): Temel programlama mantığındaki OR (VEYA) operatörünün bir yansımasıdır. Kendisine bağlı olan alt düğümleri soldan sağa doğru sırayla çalıştırır. Eğer alt düğümlerden biri Success veya Running döndürürse, Seçici düğümü diğer çocukları test etmeyi anında durdurur ve bu durumu kendi üst düğüme iletir. Seçici düğümünün Failure (Başarısızlık) döndürmesinin tek yolu, kendisine bağlı olan tüm alt düğümlerin başarısız olmasıdır. Bu yapı, bir ajanın hayatta kalma önceliklerini veya alternatif planlarını (fallback) belirlemek için mükemmeldir: Sistem önce "Kendini İyileştir" seçeneğini dener, başarısız olursa "Siper Al" seçeneğine geçer, o da olmazsa "Kaç" seçeneğini dener. Biri başarılı olduğu anda eylem zinciri tatmin olur. 8
Diziler (Sequence Nodes): Temel programlamadaki AND (VE) operatörünün davranış ağacı karşılığıdır. Alt düğümleri soldan sağa doğru dener. Ancak Seçicilerin aksine Diziler, eğer alt düğümlerden biri Failure döndürürse anında işlemi keser ve üst düğüme Failure döndürür. Dizinin Success döndürmesi için, içerdiği tüm alt düğümlerin istisnasız bir şekilde başarılı olması şarttır. Bu düğüm, bir görevin mantıksal adım zincirini kurmak için kullanılır: Bir NPC'nin kapıdan geçmesi için gereken zincir "Kapıya Yürü", ardından "Kilidi Aç", ardından "Kulpu İndir", ardından "İçeri Gir" şeklinde kurgulanır. Eğer kapı kilitliyse ve karakter kilidi açamazsa (Failure), sonraki adımlara geçmenin bir mantığı yoktur; dizi başarısız olur ve karakter kapıdan geçme planından vazgeçer. 8
Paralel Düğümler (Parallel Nodes): Kompozit ailesinin en karmaşık üyelerinden biridir. Alt düğümlerini soldan sağa sırayla değil, aynı anda (eşzamanlı olarak) çalıştırır. Belirli bir başarı veya başarısızlık politikasına göre (örneğin "alt düğümlerden herhangi biri başarılı olunca işlemi bitir" veya "hepsi başarılı oluncaya kadar bekle") ağaca sonuç döndürür. Karakterin "Konuşurken aynı anda el kol hareketi yapması" veya robotik bir aracın "Radar Taraması Yaparken aynı anda Hedefe İlerlemesi" gibi eşzamanlı görevlerin kontrolü için kullanılır. 30
2. Dekoratör Düğümler (Decorator Nodes)
Tıpkı tasarım desenlerindeki Decorator paternine benzer şekilde, yalnızca tek bir alt düğüme sahip olabilen ve o alt düğümün döndürdüğü sonucu çeşitli politikalara göre değiştiren veya yürütülmesini koşullara bağlayan düğümlerdir. 8
Inverter (Tersine Çevirici): Klasik programlamadaki NOT operatörüdür. Alt düğümün Success sonucunu Failure'a, Failure sonucunu ise Success'e dönüştürür.
Limiter (Sınırlayıcı): Alt düğümün belirli bir saniyede veya tüm yaşam döngüsünde yalnızca belirlenen sayıda çalışmasına izin verir; bu kotayı aşan durumlarda başarısızlık döndürür.
Timer (Zamanlayıcı): Alt düğümün eylemini hemen yürütmek yerine belirli bir süre bekletir. 8
3. Yaprak Düğümler (Leaf Nodes)
Ağacın en uç, en alt seviyesinde yer alan ve doğaları gereği hiçbir alt düğüme sahip olamayan icra düğümleridir. 29 Yapraklar, sanal oyun dünyasıyla veya gerçek robot sensörleriyle doğrudan etkileşime girilen, sistemin somut etkiler yaratan uç noktalarıdır. 22
Eylemler (Actions/Tasks): Dünyada fiziksel veya mantıksal bir değişiklik yaratan, animasyon oynatan, ses çıkaran veya motorlara güç gönderen asıl kod bloklarıdır ("Ateş Et", "Hedefe Yürü", "Motorları Durdur").
Koşullar (Conditions/Queries): Genellikle Success veya Failure döndüren, herhangi bir eylem yapmayan mantıksal anlık kontroller ve sensör sorgularıdır ("Düşman Görüntü Menzilinde mi?", "Mermim Kaldı mı?", "Pil Seviyesi %20'nin altında mı?"). 8
Olay-Güdümlü (Event-Driven) Davranış Ağaçları ve Gözlemciler (Observers)
Erken dönem klasik BT'ler, her "tick" işleminde (genellikle her görsel frame'de) ağacı kökten başlayarak sürekli olarak aşağıya doğru yeniden değerlendiren polling (sürekli yoklama) mantığıyla çalışıyorlardı. 19 Bu durum, reaktivite açısından kusursuz olsa da, her karenin hesaplanmasında devasa bir işlemci (CPU) ön yükü yaratmaktaydı. Bir ağaç çok derinleştikçe, her karede en tepeden en aşağıya kadar tüm koşulları tekrar tekrar test etmenin maliyeti sürdürülebilir olmaktan çıkmaktaydı. 9
Unreal Engine gibi modern oyun motorları ve endüstri standartları, bu donanımsal darboğazı aşmak için mimariyi "Olay-Güdümlü Davranış Ağaçları" (Event-Driven Behavior Trees) modeline evriltmiştir. 32 Bu yenilikçi yapıda, sistem her "tick"te koşulları baştan sona polis gibi kontrol etmek yerine, "Gözlemci İptalleri" (Observer Aborts) adı verilen reaktif dekoratörler kullanır. Örneğin, bir kedi YZ'si fareyi kovalıyorsa, klasik bir paralel düğüm farenin deliğe girip girmediğini her saniye sorar. Olay-güdümlü yapıda ise "Fare Gözlemlenebilir mi?" koşulu bir Observer olarak
ağaca yerleştirilir. Fare deliğe kaçtığı anda (event), bu olay tetiklenir ve Gözlemci, kedinin o anki "Koş" ve "Zıpla" dizisini anında iptal (abort) eder. Bu sayede yapay zeka sadece gerçekten durumu değiştiğinde yeniden hesaplama yapar, işlemci gücünden büyük tasarruf sağlanır, karmaşık ağaçlarda eşzamanlı çalışma yolları en aza indirgenir ve sistem optimizasyonu inanılmaz derecede kolaylaşır. Ayrıca, Unreal Engine sisteminde Kompozit düğümlere "Hizmetler" (Services) adı verilen özel düğümler eklenebilir. Hizmetler, alt ağaç aktif olduğu sürece belirli periyotlarda (örneğin her 2 saniyede bir) çalışarak, FSM'lerin periyodik "during" aksiyonlarının yerini alır ve düşman takibi gibi verileri sürekli günceller.
Hafıza Problemi ve Kara Tahta (Blackboard) Mekanizması
Davranış Ağaçlarının muazzam modülerliğinin bir bedeli vardır: BT düğümleri, tasarımları gereği tamamen yalıtılmış ve durumsuzdur (stateless). Yani bir "Hedefe Yürü" eylemi düğümü, hemen solundaki "Düşmanı Bul" koşul düğümünün ne bulduğundan veya önceki döngülerde ne karar alındığından habersizdir. FSM'lerin aksine BT'ler, geçmiş kararları veya anlık sensör verilerini kendi içsel yapılarına kaydetmezler.
Bu hayati iletişim boşluğunu doldurmak ve ağaca bir nevi "kısa süreli hafıza" kazandırmak için Blackboard (Kara Tahta) tasarım deseni kullanılır. Blackboard, ağaçtaki tüm düğümlerin çalışma esnasında okuyup yazabileceği, dışsal ve ortak bir veri havuzudur (genellikle programlama dillerinde bir Dictionary, Hash Map veya Variant veri yapısı olarak kurgulanır).
İşleyiş şu şekildedir: Bir ağaç "Düşmanı Gör" koşul düğümüne ulaştığında, bu düğüm düşmanın koordinatlarını tespit eder ancak bu bilgiyi kendisinde tutmaz; doğrudan Blackboard üzerine TargetPosition = şeklinde yazar. Ağaç akışı bir sonraki adım olan "Oraya Git" eylem düğümüne ulaştığında, eylem düğümü Blackboard'a bağlanır, TargetPosition verisini okur ve rotasını çizer.
Kara Tahta mimarisi, Davranış Ağaçlarının saf modülerliğini ve düğüm izolasyonunu tehlikeye atmadan, düğümler ve dallar arasında inanılmaz derecede güçlü, esnek ve hızlı bir veri köprüsü inşa eder.
Karşılaştırmalı Analiz: FSM ve Davranış Ağaçlarının Çarpışması
Sıfırdan bir yapay zeka sisteminin temelini atmaya hazırlanan mimarlar için Sonlu Durum Makineleri (FSM) ile Davranış Ağaçları (BT) arasındaki seçim, salt bir sözdizimi veya motor tercihi değil, projenin tüm yaşam döngüsünü derinden etkileyecek hayati bir mimari karardır. Oyun Geliştiricileri Konferansı (GDC) tebliğleri, endüstriyel vaka çalışmaları ve son yıllarda yayımlanan akademik robotik simülasyonları, bu iki sistemin yapısal performanslarını Karar Verme, Modülerlik, Reaktivite, Okunabilirlik ve Ölçeklenebilirlik açılarından kapsamlı bir şekilde karşılaştırmaktadır.
1. Karar Verme (Decision-Making) vs. Durum Kontrolü (State Control)
Yazılım endüstrisindeki en güçlü uzlaşı, BT'lerin "Karar Verme" süreçlerinde, FSM'lerin ise "Durum Kontrolü" süreçlerinde uzmanlaştığı yönündedir.
Davranış ağaçları dinamik, sürekli değişen çevresel koşullara tepki veren, çok sayıda mantıksal dallanma içeren ve önceliklendirme gerektiren kognitif kararların ("Ajan şimdi ne yapmalı?") verilmesi için özel olarak optimize edilmiştir. FSM'ler ise halihazırda alınmış bir kararın uygulanma biçimi, sistemin tutarlı ve izole fiziksel modlarının yönetimi ve sıralı akışların ("Ajan bu eylemi nasıl ve hangi aşamalarla icra etmeli?") kesin sınırlarla kontrolü için biçilmiş kaftandır.
Aşağıdaki tablo, bu temel felsefi farkları sistematik olarak özetlemektedir:

2. Modülerlik ve Bağımlılık (Coupling) Krizi
BT'ler, endüstride kabul gördüğü üzere "bağımlılığın düşük olduğu" (low-dependency) mimarilerdir. Bir BT yaprak düğümü (örneğin "Hedefe Doğru Koş" eylemi), ağacın neresinde durduğundan tamamen bağımsız, kendi kendine yeten kapsüllenmiş bir nesnedir. Bu düğüm kopyalanıp "Ağır Makineli Tüfek Savunma Modu" isimli tamamen farklı bir dalın içine sürüklenebilir ve hiçbir kaynak kod değiştirilmeden sorunsuz çalışır.
Buna karşın FSM'lerde bir "durum" (state), kendisinden sonra hangi spesifik durumlara geçilebileceğini, bu geçişin hangi koşullarla yapılacağını bizzat kendi içinde veya kendi yöneticisinde tanımlamak zorundadır. Bu "sıkı bağ" (tight coupling) yaklaşımı, yazılmış bir kod bloğunun projeden kopyalanıp başka bir yapay zekaya aktarılmasını neredeyse imkansız kılar. FSM'de yapılan her minik değişiklik veya yeni bir durumun eklenmesi, o duruma bağlanan tüm giriş ve çıkış oklarının (transitions) tek tek yeniden kalibre edilmesini gerektirir. Bir robotik kontrol çalışmasında FSM tabanlı sistemlere yeni hata tolerans davranışlarının (örneğin şarjı bitince otonom şarja dönme) eklenmesinin, BT sistemlerine göre katbekat zor olduğu istatistiksel olarak kanıtlanmıştır.
3. İfade Gücü (Expressiveness) ve Reaktivite Çatışması
Robotik kontrol mimarilerinde yapılan laboratuvar karşılaştırmaları, bu iki mimarinin doğasındaki felsefi farkı son derece çarpıcı metriklerle ortaya koymaktadır.
İfade Gücü (Expressiveness): Beklenenin aksine akademik çalışmalar, FSM'lerin BT'lerden daha "ifade edici" olduğunu kanıtlamıştır. FSM'nin bulunduğu aktif durum, geçmişte alınan kararların somut bir fiziksel birikimidir. Bir FSM "Şu an Alarm Durumundayım" sinyali veriyorsa, bu bilginin içinde geçmişte bir tehdit algılandığı, sistemin bu tehdidi geçerli kıldığı ve bir aksiyon dizisi başlattığı gerçeği içkin olarak (inherently) bulunur. BT'ler ise tamamen unutkandır. Her yeni "tick" döngüsünde ağaç, sanki dünya yeni yaratılmışçasına root düğümünden taramaya başlar. Geçmiş eylemleri veya modları hatırlamak için tamamen Blackboard üzerindeki dışsal verilere muhtaçtır.
Reaktivite: Modülerliğin bedeli olarak FSM'lerde reaktivite zayıftır. FSM tasarımcısı, "Robot eşya taşırken aniden bir yangın alarmı duyarsa şu duruma geç" şeklinde bir geçiş oku çizmediyse, robot elindeki kutuyu bırakıp asla kaçmayacaktır. BT'ler ise FSM'lerden fersah fersah daha reaktiftir. Her döngüde dünya baştan kontrol edildiği veya Gözlemciler kullanıldığı için, en ufak bir çevresel değişim, ağacın anında en yüksek öncelikli dala (örneğin "Acil Kaçış") yönelmesini ve o an "Running" statüsünde olan eşya taşıma eylemini iptal (preempt) etmesini sağlar.
4. Kurulum Maliyeti, Hata Ayıklama (Debugging) ve Bakım

Karar verme sistemlerinde bakım maliyeti (maintenance), geliştiricilerin en çok mesai harcadığı alandır. FSM'ler, başlangıç aşamasında son derece düşük bir maliyetle, birkaç basit enum ve switch-case ifadesiyle sıfırdan dakikalar içinde inşa edilebilir. Ancak zamanla sistem büyüdükçe bu avantaj buharlaşır ve hata ayıklamak tam bir kaosa dönüşür.
Davranış ağaçları ise işe en başından ağır bir "boilerplate" (şablon kodlar) yüküyle başlar. Root mekanizmaları, Tick sistemleri, Blackboard entegrasyonu derken sistemi sadece ayağa kaldırmak bile ciddi bir mimari yatırımdır. Ancak bu bedel bir kez ödendikten sonra, sağladıkları gerçek zamanlı görsel hata ayıklama (visual debugging) yetenekleri muazzamdır. Unreal Engine içindeki yerleşik BT araçları veya Godot için geliştirilen Beehave eklentisi gibi sistemlerde geliştirici, oyun oynanırken veya simülasyon çalışırken ağacın üstündeki veri akışlarını (yanan yeşil, kırmızı statüleri) gerçek zamanlı olarak izleyebilir, hangi eylem düğümünün neden başarısız olduğunu saniyeler içinde tespit edebilir. FSM tabanlı "örümcek ağlarında" görsel olarak hatanın kaynağını bulmak ise çoğu zaman saatler alır.
İleri Düzey Hibrit Mimari Uygulamaları ve Hedef Yönelimli Sistemler
Sadece tek bir mimari kalıba saplanıp kalmak, otonom sistem projelerinde sıklıkla başarısızlığa neden olmaktadır. Saf bir FSM yaklaşımı ölçeklenebilirlik duvarına çarparken, en ufak bir hareket döngüsünü veya zıplama algoritmasını bile BT kullanarak tasarlamaya çalışmak, "Observer" sayısını artırarak gereksiz bir koşul denetimi ve devasa bir CPU maliyeti yaratır. Bu nedenle modern AAA oyunlarda ve endüstriyel robotik çözümlerinde "Altın Standart", bu iki mimarinin birbirinin zayıf yönlerini örtecek şekilde ustaca entegre edildiği hibrit (melez) tasarımlardır.
Davranış Ağacı ve Durum Makinesi Füzyonu (Layered AI)
En verimli ve endüstri tarafından kabul görmüş hibrit tasarımlarda yapay zeka sistemi katmanlara (layers) ayrılır. Karakterin ne yapması gerektiğine dair üst düzey kognitif kararlar, yapısı gereği hiyerarşik ve dallanmalara yatkın olan Davranış Ağacı tarafından verilirken, seçilen bu kararın sahada fiziksel ve algoritmik olarak yürütülmesi görevi alttaki FSM veya HFSM'ye devredilir.
Örneğin, gelişmiş bir düşman yapay zekasında veya bir otonom gözetleme ajanında sistem şu
şekilde işler:
Karar Katmanı (BT - Stratejik Beyin): Karakterin çevresindeki tehdit sayısını, kendi can değerini ve mühimmatını Blackboard üzerinden okur. Yapılan seçici değerlendirme sonucunda "Taktiksel Geri Çekilme" kararı alınır.35
Yürütme Katmanı (FSM - Motor Beceriler): "Taktiksel Geri Çekilme" komutu, karakterin iskelet sistemine entegre edilmiş bir durumsal makineye tetikleyici (trigger) olarak iletilir. FSM, karakteri mevcut "Saldırı Animasyonu" durumundan derhal çıkarıp "Seri Koşma" durumuna, oradan da siper arkasında "Çömelme" animasyon durumuna pürüzsüz bir sırayla geçirir.
Bu katmanlı yaklaşım sayesinde, BT her karede (frame) gereksiz yere "karakterin sol ayağı mı önde sağ ayağı mı?" gibi yürütme detaylarıyla boğulmaz; FSM ise "düşman nerede?" gibi makro-stratejik kararları sormak zorunda kalmaz.22
Robotik alanında da durum benzer bir paralellik gösterir. Bir lojistik depoda çalışan otonom yönlendirmeli taşıyıcı robotun (AGV) en üst seviye mod değişimleri (İnsan Manuel Kontrolü, Otonom Görev Modu, Donanımsal Hata/Acil Durum Modu) anlaşılırlığı garantilemek adına makro bir HFSM tarafından koordine edilir.27 Ancak robot "Otonom Görev Modu" içine girdiğinde, hedefe gidiş rotasındaki dinamik engellerden kaçınma, hassas nesne manipülasyonu, anlık sensör geri bildirimleri gibi işlemler BT'lerin benzersiz hiyerarşik reaktivitesine emanet edilir.27 Literatürde, geriye doğru zincirleme (backward-chaining) planlayıcıları kullanılarak, bir hedeften geriye doğru koşulların sıralanmasıyla sıfırdan otonom davranış ağaçlarının dinamik olarak üretilebildiği gelişmiş çözümler de başarıyla uygulanmaktadır.27
Otonom Karar Vermenin Diğer Boyutları: GOAP Bağlamı
Mimarilerin karmaşıklığını tam olarak anlayabilmek adına, endüstride FSM ve BT sistemlerinin ötesine geçen "Hedef Yönelimli Eylem Planlama" (Goal-Oriented Action Planning - GOAP) konseptine değinmek de önem arz etmektedir. 1971 tarihli akademik STRIPS planlama teorisine dayanan ve F.E.A.R. oyunundaki efsanevi düşman YZ'sinin mimarı Jeff Orkin tarafından popülerleştirilen GOAP, karar verme süreçlerine apayrı bir boyut katmıştır.13
GOAP sisteminde, eylemler önceden katı bir ağaçta birleştirilmez. Sisteme sadece "Eylemler" (Actions - Örn: Kapıyı Aç), "Önkoşullar" (Preconditions - Örn: Kapının yanında olmak) ve "Etkiler" (Effects - Örn: Kapı artık açıktır) listesi verilir. Sistem (genellikle bir A* arama algoritması kullanarak) istenen "Hedef" duruma ulaşmak için bu eylemleri çalışma zamanında (runtime) birleştirip en ideal planı otomatik olarak yaratır. F.E.A.R.'ın dehası, arkadaki bu devasa otonom planlama motorunun ürettiği planları yürütmek için aslında sadece 3 duruma (GoTo, Animate, Use Smart Object) sahip çok basit, minimalist bir FSM kullanmasıdır.13 Tıpkı modern BT hibritlerinde olduğu gibi, beyin karmaşık bir algoritma iken kaslar her zaman sağlam bir FSM'den ibarettir.
Yeni Nesil Oyun Motoru Ekosistemleri: Unreal Engine "State Trees" (Durum Ağaçları) Vizyonu
Oyun motoru teknolojilerinde ve otonom sistem simülasyonlarında küresel bir öncü olan Epic Games, Unreal Engine 5'in devrimsel yapısıyla birlikte (özellikle 5.5 güncellemesinde belirginleşen şekliyle), Davranış Ağaçları ile Durum Makinelerinin on yıllardır süren çekişmesine son vermeyi hedefleyen vizyoner bir aracı endüstriye sunmuştur: "State Trees" (Durum Ağaçları).36
Geleneksel Davranış Ağaçlarının (BT) belirli bir ölçekten sonra hantallaşmaya yüz tutan "stateless" doğası ile FSM'lerin esneklikten yoksun, spagetti kod üretmeye eğilimli katı sınırları, Durum Ağaçları konseptinde zekice harmanlanmıştır.36 Epic Games, State Tree mimarisiyle eski tarz BT'lerin sahip olduğu yapısal zafiyetleri gidermekte ve FSM'lerin lineer gücünü modern bir karar mekanizmasıyla donatmaktadır.
State Tree mimarisinin öne çıkan özellikleri şunlardır:
● Temel işleyiş akışı olarak, BT'lerin sürekli tick atan ve "koşulları durmaksızın kontrol eden" işlemci düşmanı yapısı yerine, FSM'lerin sunduğu optimize edilmiş durum kontrolü (state flow) performansını temel alır.36 ● Durumlar arası geçişleri tanımlarken FSM'lerin en zayıf noktası olan "birbirine sıkı sıkıya bağlı karmaşık geçiş okları" kullanmak yerine, Davranış Ağaçlarının kullandığı Seçici (Fallback) düğümlerinin esnekliğinden faydalanır. ● Bunu bir adım öteye taşıyarak Utility (Fayda/Ağırlık Puanlaması) algoritmalarını doğrudan durum seçimine entegre eder.38 Geliştirici, bir hedefe "Savaş" veya "Kaç" eylemleri için statik ve kırılgan geçiş okları çizmek yerine, her bir duruma matematiksel ağırlık (weight) parametreleri ve olasılık dağılımları tanımlayabilir. Karakterin sağlığı düştükçe "Kaç" durumunu hesaplayan fonksiyonun fayda (utility) puanı, "Savaş" durumunun puanını geçer.38 Bu şekilde ağaç, sayısız geçiş okuna gerek duymadan, adeta bir karar ağacı zarafetiyle durumdan duruma organik bir geçiş yapar.38
Bu yeni jenerasyon teknoloji hamlesi, otonom karar verme alanında oyun kuralları değiştirecek bir adımdır. Epic Games mühendislerinin yeni donanım ve sistem inşalarında doğrudan State Tree mimarisine ağırlık vermesi, salt klasik Davranış Ağaçlarının gelecekte yavaş yavaş terk edilerek yerini FSM performansıyla donatılmış, Utility fonksiyonlarıyla zenginleştirilmiş melez "Durum Ağaçlarına" bırakacağının açık bir projeksiyonunu çizmektedir.36
Sonuç
Otonom karakterlerin, robotik kolların, sürücüsüz araçların ve video oyunlarındaki gelişmiş yapay zeka ajanlarının karar verme omurgasını tasarlarken "Hangi mimari daha üstündür?" sorusunun mutlak, tek bir teorik cevabı bulunmamaktadır. Bilgisayar bilimleri ve yazılım mühendisliğinde alınan her mimari karar, derinlemesine bir ödünleşim (trade-off) hesabını beraberinde getirir.
Sonlu Durum Makineleri (FSM), deterministik durum geçişlerinde sağladıkları yüksek hız performansı, geliştirici açısından sundukları mantıksal kavrayış kolaylığı ve kesin donanımsal sınırlarıyla donatılmış doğası sayesinde özellikle düşük seviyeli oyun kontrollerinde, dövüş oyunlarında, arcade mekaniklerinde ve karmaşık animasyon sistemlerinde vazgeçilmez bir yapı taşı olmaya devam edecektir. Ne var ki, temsil edilen değişken sayısının arttığı ve çevre koşullarının anlık olarak değiştiği kognitif senaryolarda, FSM'nin neden olduğu "Durum Patlaması", projeyi kısa sürede bakımı yapılamaz bir spagetti koda mahkum eden tehlikeli bir yapısal krize dönüşmektedir.
Davranış Ağaçları (Behavior Trees) ise esneklik, aşırı modülerlik, bileşen tabanlı yeniden kullanılabilirlik ve yüksek reaktivite paradigmalarını endüstriye kazandırarak oyun yapay zekasına ve robotik otonomisine gerçek anlamda çağ atlatmıştır. Zamanı kapsayan eylemleri asenkron olarak yürütebilen "Running" konseptinin varlığı ve kodları bir daha hiç dokunulmadan başka ajanlara eklenebilecek bağımsız LEGO parçaları gibi şekillendirmeleri, BT'leri devasa açık dünya simülasyonlarının tartışılmaz beyni haline getirmiştir. Ancak bu esnekliğin karşılığı olan durumsuzluk (statelessness), sistem tasarımcılarını Blackboard gibi harici hafıza köprüleri kurmaya mecbur bırakmakta ve performans optimizasyonlarını sağlamak için ağır olay-güdümlü (event-driven) tasarımların hayata geçirilmesini zorunlu kılmaktadır.
Nihai tahlilde, başarılı bir modern otonom sistem tasarımı, mimarın projeyi hangi soyutlama (abstraction) seviyesinde yönetmeyi tercih ettiğine bağlıdır. Pratik endüstri uygulamaları tartışılmaz bir gerçeği kanıtlamaktadır: Otonom sistemlerin hedeflerinin belirlendiği ve hangi eylemin seçileceğine dair reaktif kararların Davranış Ağaçlarıyla verildiği; seçilen bu eylemin fiziksel koordinasyonunun, animasyon adımlarının ve mod geçişlerinin ise FSM'lerle yönetildiği hiyerarşik hibrit mimariler, günümüz yazılımının ulaştığı en zarif ve sofistike noktayı temsil etmektedir. Geleceğin karar verme mekanizmaları, sınırların daha da bulanıklaştığı ve mimarilerin FSM ile BT'yi tek bir gövdede eriten (Unreal Engine State Trees örneğinde olduğu gibi) yeni nesil sistem evrimlerine sahne olmaya devam edecektir.
*Bilgi : Görseller, Google Gemini Tarafından Üretilmiştir.
