Yapay Zeka Aracılarının Davranış Ağaçlarıyla Davranışlarını Tasarlama

Yapay Zeka Aracıları için Davranışları Tasarlama ve Uygulama Giriş - Oyunculuk Motoru uygulamanın başka bir yolu Önceki yazılarımızda Planlama ve Harekete Geçme hakkında tartıştık. Her ikisi de planlama içindir, biri Tanımlayıcı Model ile diğeri Operasyonel Eylem Modeli ile.

AI Aracıları için Davranışları Tasarlama ve Uygulama

Bir Davranış Ağacı

Giriş - Acting Engine'i uygulamanın başka bir yolu

Önceki yazılarımızda Planlama ve Harekete Geçme hakkında tartıştık. Her ikisi de planlama içindir, biri Tanımlayıcı Model ile diğeri Operasyonel Eylem Modeli ile.

Operasyonel Modelle Hareket Etmek, soyut görevleri Yürütme Platformu tarafından yürütülebilecek alt görevlere veya komutlara dönüştürmek için İyileştirme Yöntemlerini kullanır. Bir görevi iyileştirmek için kullanabileceğimiz çok sayıda yöntemin olduğu oldukça karmaşık bir alanda, bu yaklaşım mükemmeldir.

Bununla birlikte, daha az karmaşık birçok sistem için, soyut bir görevi iyileştirmek için kullanabileceğimiz yalnızca bir / iki yönteme sahibiz. Bu sistemlerde planlamaya ihtiyacımız olmadığı tartışılabilir. İhtiyacımız olan şey:

Hiyerarşik reaktif ve modüler bir kontrol sistemi.

Davranış Ağacı nedir? Bu yazıda, Davranış Ağacı'nın dinamik bir dünyadaki gerçek zamanlı değişikliklere tepki vermede anlaşılması kolay ve güçlü olduğunu göstermek için Davranış Ağacı'nı açıklayacağım ve Pacman'ımıza uygulayacağım.

Davranış Ağaçları nedir?

Davranış ağaçları HFSM'ye (Hiyerarşik Sonlu Durum Makineleri - bunu başka bir makalede tartışacağız) Acting Engine'de görevlerin iyileştirilmesini ve değiştirilmesini yapılandırmak için kullanabileceğimiz HFSM'ye benzer .

Davranış ağaçlarını kullanmanın iki ana avantajı vardır:

  • Modülerlik
  • Reaktivite

Programın mantıksal kısımlarını görevlere bölerek temelde yazılımımızın modülerliğini iyileştiriyoruz. Bir görev, tek bir yazılım modülü olarak uygulanabilen bir Davranış Ağacı olabilir.

Reaktivite

Davranış Ağaçları, sabit bir frekansta gönderilen ve kök düğümden başlayıp alt düğümlerine yayılan bir sinyal olan Tick kavramını kullanır. Bu Davranışı yaparak Ağaçlar, dünyada meydana gelen olaylara gerçek zamanlı olarak tepki verebilir.

Davranış Ağaçları nasıl çalışır?

Adından da anlaşılacağı gibi, Davranış Ağacı, iki ana düğüm türüne sahip bir ağaç veri yapısıdır:

  • Kontrol Akışı Düğümleri: Dahili düğümler
  • Yürütme Düğümleri: Yaprak düğümleri
  • Düğüm Türleri

Önceki bölümde belirtildiği gibi, BT, Kök Düğümden başlatılan ve belirli koşullar gerçekleşene kadar çocuklarına (soldan sağa) yayılan Tick adlı bir sinyal kullanır.

Bir düğümün, yalnızca bir Tick sinyali aldığında yürütülen bir programı vardır.

Düğüm Durumu

İşaretlendiğinde, bir düğüm kendi programını yürütür veya Kontrol Akışı düğümü ise Tick sinyalini yayar. Bir düğümün üst birimine bir durum döndürmesi gerekir. Durum, aşağıdakilerden biridir:

  • BAŞARI: işi başarıyla tamamladığında
  • BAŞARISIZ: işi yürütemediğinde
  • ÇALIŞIYOR: iş hala çalışırken (veya Yürütme Platformu tarafından yürütülürken)

Dört farklı Kontrol Düğümü türü vardır:

  • Dizi (->)
    Tüm alt öğelerinin BAŞARI döndürmesi durumunda BAŞARI döndüren bir düğüm
  • Geri
    dönüş (?) BAŞARI döndüren ilk çocuğu bulduğunda BAŞARI döndüren bir düğüm
  • Paralel (çift oklar)
    Tüm alt öğelerini aynı anda işaretleyen ve alt öğelerinin tümü veya bir kısmı BAŞARI döndürürse BAŞARI döndüren bir düğüm
  • Dekoratör (delta)
    Alt öğesinin döndürülen durumunu değiştiren bir düğüm

İki farklı Yürütme Düğümü türü vardır:

  • Eylem
    Bir eylemi yürüten bir düğüm (bir komut - ilkel)
  • Koşul
    Bazı koşulları kontrol eden bir düğüm
  • Sembollerle Davranış Ağacı

Yukarıda Davranış Ağaçlarının avantajlarından birinin tepkiselliği olduğunu belirtmiştik. Bununla birlikte, bütün ağaçları kontrol eden bazı sistemlerde, her kene aşırı olarak değerlendirilebilir.

Bu, yapılandırılmış bir ortamdakiler gibi reaktivite gerektirmeyen sistemler için geçerlidir, örneğin ortamının statik olduğu bir fabrikadaki robotik kol.

Bunun için reaktif olmayan Kontrol Düğümlerini kullanabiliriz.

Reaktif olmayan Kontrol Düğümlerinde, yalnızca çalışan veya işaretlenmemiş çocuklara Kene sinyali gönderilir.

Basit Bir Örnekten Geçmek

Şimdi, bir davranış ağacının nasıl çalıştığını anlamak için bir örnek görelim.

Kat planı

İnsansı bir robotumuz olduğunu ve evin içinde dolaşıp işleri yapmamıza yardımcı olmasını istediğimizi hayal edin.

Robotumuzun Oda 1'den Oda 2'ye geçmesi için ihtiyacımız var, hadi ona Davranış Ağacı diyelim . Robotun aşağıdakileri yapması gerekir:

  • Kapıya git
  • Kapı kapalıysa açın ve Oda 2'ye girin
  • Kapı açıksa, Oda 2'ye girin
Davranış Ağacı

Üst düzey bir bakış açısına göre, bu bizim Go-To için davranış ağacımızdır. Bu örnek için tüm bizim Kontrol Düğümler olan reaktif . Yani çocuklarının durumunu ezberlemiyorlar.

İlk Tik

Ne zaman InRoom2 (kesikli ok) işaretli olan robot odası 2 zaten mevcutsa, bu BAŞARIYI ve bütün ağaç sona erer döndürür. Aksi takdirde bir sonraki düğümü işaretlemeye devam eder.

İkinci Tik

Ne zaman InRoom2 döner ARIZASI (kırmızı ok), kene yayılır AtTheDoor robot kapıda zaten olup olmadığını kontrol etmek. Zaten kapıda ise, geri dönüş düğümü BAŞARI (mavi ok) döndürür ve sıra düğümü kapının açık mı yoksa kapalı mı olduğunu kontrol etmeye devam eder.

Üçüncü Tik

Kapının kapalı olduğunu varsayalım, bu nedenle sonraki birkaç tıklama , komutu başlatmak ve tamamlanmasını beklemek için OpenTheDoor'u işaretleyeceğiz .

Dördüncü Tik

Bu eylem başarısız olursa (HATA döndürür), tüm ağaç BAŞARISIZ durumuyla sona erer. Ama başarılı olduğunu ve BAŞARI döndürdüğünü varsayalım.

Beşinci Tik

Robotumuz EnterTheRoom komutunu yürütmeye devam eder ve tamamlandığında ağaç, yalnızca InRoom2'nin işaretlendiği şu şekilde görünür .

Altıncı Kene

Robot şimdi Oda 2'de.

Bu örneği inceledikten sonra, Davranış Ağacının çok güçlü ve anlaşılması kolay olduğunu görebiliriz. AI temsilcilerimizin sahip olmasını istediğimiz davranışları kolayca tasarlayabiliriz.

Bir sonraki bölümde, AI Aracımız Pacman için Davranış Ağaçları uygulayacağız ve ondan yapmasını ve ortamdaki değişikliklere tepki vermesini istediğimiz görevi nasıl tamamlayabileceğini göreceğiz.

Pacman için Davranış Ağaçları

AI Ajanımız Pacman'a bir problem vererek başlayalım. İşte burada:

Davranış Ağaçları için Pacman Problemi

Bu, Pacman'a verdiğimiz açık ara en zorlu sorundur. Beş yemek yemeye çalışırken kaçınılması gereken dört hayalet . Ona yardım etmek için, yenildiğinde hayaletleri geçici olarak yenilebilir hale getirecek beş hap sağlıyoruz.

Davranışlar

İlk önce Pacman'imiz için davranışları tasarlarız, davranışlar davranış ağacındaki Yürütme Düğümleridir (yaprak düğümleridir).

  • Mevcut Yiyecekler : Gıdaların mevcut olup olmadığını kontrol etmek için bir Koşul Düğümü
  • En Yakın Yiyecekleri Bul : Geçerli konumdan en yakın yiyeceği hesaplamak için bir Eylem Düğümü
  • Kullanılabilir Haplar : Hapların mevcut olup olmadığını kontrol etmek için bir Durum Düğümü
  • En Yakın Hapı Bul : Geçerli konumdan en yakın hapı hesaplamak için bir Eylem Düğümü
  • Hayaletler Çok Yakın : Hayaletlerin mevcut konuma çok yakın olup olmadığını kontrol etmek için bir Koşul Düğümü
  • Yol Planlayın : Yol planlamayı gerçekleştirmek için bir Eylem Düğümü
  • Planlanan Yolu Yürüt : Yol yürütmeyi gerçekleştirmek için bir Eylem Düğümü
  • Hayaletlerden Kaçının : Hayaletlerden kaçmak için bir Eylem Düğümü

Davranış Ağaçları

Daha sonra Kontrol Akış Düğümleri ekleyerek tüm ağaçları tasarlarız.

Pacman Davranış Ağaçları

Yukarıdaki resim, Pacman ajanımızın tüm davranış ağaçlarını göstermektedir. Daha net görmenize yardımcı olması için lütfen tarayıcınızdaki resmi büyütmeyi deneyin.

Resimde Reaktif Olmayan Kontrol Düğümleri olan * Kontrol Düğümleri ve çocuğunun sonucunu tersine çeviren bir Dekoratör düğümü olan İnvertör gibi yeni düğümler görüyoruz .

Akış

Kullanılabilir Yiyecek kalmadığında bütün ağaçlar sona erer . FoodsAvailable varsa Pacman bir hap ve yiyecek yemeye çalışacaktır. Bir yiyecek veya hap yemeye çalışırken çok yaklaşırsa, AvoidGhosts'u çalıştırır .

Bir yemek yemek ve bir hap yemek Reaktif Olmayan Sıra Düğümü kullanır, çünkü planlı bir yolu uygularken hedefi değiştirmek istemiyoruz. Bu, diyagramda FindClosestPill , PlanAPath ve ExecutePlannedPath dizisi olarak gösterilir .

Tüm haplar yendikten sonra, bunun alt ağacı her zaman BAŞARI döndürür ve Pacman yalnızca bir hap alt ağacı yemeyi gerçekleştirir.

Modülerlik ve Reaktivite

Bazı alt ağaçların benzer olduğunu fark etmiş olabilirsiniz, bunlar parametreli bir yazılım modülü olarak uygulanabilirler, bu da aynı modülü birden çok alt ağaç için yeniden kullanabileceğimiz anlamına gelir.

Temsilcimizin davranışını değiştirmek istediğimizde, bir alt ağacı bir yerden diğerine de taşıyabiliriz.

Ajanımız Pacman, reaktif kontrol düğümlerinin kullanımıyla kendi ortamında meydana gelen olaylara tepki verebilir.

Pacman İş Başında

Yukarıdaki video, Pacman'in hayaletlerden kaçarken tüm yiyecekleri yeme görevini nasıl tamamlayabileceğini gösteriyor. Davranış ağaçları uygulaması, Pacman Aracımızda iyi çalışıyor.

Sarma

Davranış ağaçları genellikle video oyunlarında Oyuncu Olmayan Karakterleri (NPC) uygulamak için ve ayrıca robotikte kullanılır.

BT'lerin Modülerlik ve Reaktivite'deki avantajlarını da gördük. BT'ler, yukarıda gösterilen Pacman videoları gibi karmaşık sorunları çözebilir.

Bir dahaki sefere, daha akıllı bir sisteme sahip olabilmek için planlamayı BT'lere dahil etmek isteyebiliriz.

Son olarak, davranış ağaçları uygulamayı denemek istiyorsanız, bazı açık kaynak kitaplıkları mevcuttur.

Python'da (py_trees):

C ++ 'da (BehaviorTree.cpp):

Umarım bu makale Davranış Ağaçlarını anlamanıza yardımcı olur. Bu makaleyi beğendiyseniz, lütfen beni alkışlayın ve Otomatik Planlama ve Eylemle ilgileniyorsanız diğer yazılarımı okuyun.