Stellaris’te Yapay Zekanın Yenilenmesi

Stellaris geliştirici günlüklerinde bu hafta yapay zekada yapılan yeniliklerden bahsediliyor.

Herkese merhaba. Fransız Paradox konuşuyor! Beni bilmeyenler için Stellaris ekibine bir buçuk yıl Europa Universalis IV’te programlayıcı olarak çalıştıktan sonra geçtiğimiz aralıkta katıldım.

Bugün yapay zeka hakkında konuşacağız.

1.jpg
Sahada yeni olanlar için iyi bir tanıtım

Yapay Zekanın Elli Tonu

Stellaris’te birçok yapay zeka modülü bulunmakta. Tarihsel sebeplerden dolayı, yapay zeka imparatorluğunda her biri belirli bir rol ile ilgilenmesi gerektiğinden onlara “bakan” diyoruz.

3 esas tip vardır:

  • Dışişleri bakanı yapay zekası diplomasi, federasyonlar, galaktik kominite, barış teklifleri ve benzerleri ile ilgilenir.
  • İçişleri bakanı yapay zekası ekonomiden sorumludur. Bütçelere göz kulak olur ve hem sivil hem askeri inşaatları kontrol eder.
  • Askeri bakan yapay zekası askeri tüm birlikleri ve filoları yönetir ve ayrıca savaş zamanı stratejik planların düzenlenmesinden sorumludur.

Her farklı bakan için oyundaki her imparatorlukta seçilebilecek birçok seçenek bulunmaktadır. Tüm bunların bir jenerik olanı vardır ki az çok bir oyuncudan beklediğimiz şekilde davranır ve çoğu yapay zeka imparatorluklarında kullanılır. Uzay canavarları, uyuyan imparatorluklar, buhranlar, yağmacılar gibi birkaç tane de özel etikete sahip olanlar bulunmaktadır.

Neredeyse tüm oyunlarımızda olduğu gibi yapay zeka modcularımız için kodlanabilirdir ancak bir uzay canavarı askeri yapay zekasını kervanbaşılarına atadığınızda ne olur tam bir fikrim yok 😉

Ekibe katıldığımda hoşgeldin hediyesi olarak askeri yapay zekasını üzerinde çalışmak üzere görevlendirildim.

Askeri Yapay Zeka

Biraz arka plan bilgisi vermek adına, Stellaris’te birçok askeri yapay zekası jenerasyonu bulunmaktaydı. Jenerik olan (birçok “klasik” imparatorluk tarafından kullanılmış olan) sidestep tarafından elden geçirildi, daha spesifik olanlar (buhranlar, uzay canavarları) çıkıştaki haline yakın tutuldu. Üzücü ve karanlık bir İsveç kışının ortasında, bugün size göstereceğim bazı geliştirmeleri getirmeyi başardım.

İlk olarak, yapay zekanın nasıl “düşündüğünü” göstermede yardımcı olması için görsellik üzerinde çalıştım. Komik olan, herhangi bir davranış değiştirmediyse bile izleyicilere şimdiden “iyi” görünmesini sağladı. Bu aslında video oyunlarında gözlemlenmiş bir şey: iyi bir yapay zeka ne yaptığını söyler, bu da onun daha zeki görünmesini sağlar. Favori örneklerimden biri düşmanların korku içinde olması olurdu.

Konsolda “debug_ai” yazarak ve yapay zeka imparatorluğunu gözlemleyerek onun aklında ne var görebilirsiniz:

2.jpg
Daha kodu bile göremiyorum. Tüm gördüğüm sarışın, esmer ve kızıl. Hey, bir içecek ister misin?

Basit bir benzetme olarak, bir yapay zekanın resmin tamamına bakan askeri bakanı olduğunu ve potansiyel her hedefi değerlendiren, bu hedeflerin bazılarına filo atayan genel bir personeli ve bu filoları bu hedeflere ulaşmak adına taktiksel seviyede yönetmeye çalışan amirallerin olduğunu hayal edin.

Sistemlerin üzerinde bulunan kafatasları yapay zekanın (savaş bakanının) değerlendirdiği askeri hedefleri gösteriyor. Kırmızı olanlar seçtikleri ve bazı filolarını yönlendirdikleri, yeşil olanlar şimdilik akıllarında bulundurmadıkları diğer seçeneklerdir. Son olarak, bu görev kollarındaki her bir filonun o an ne yaptıklarını görebilirsiniz.

Ekran görüntüsü örneğimizde, yapay zeka 4500 puanlık Tiralam’ı almanın en önemli hedef olduğuna karar verdi ve bunu gerçekleştirebilmek için en az 11.2k filo gücü gerektiğini hesapladı. Kilik Armadası, Jinki-Ki-Ti Armadası ve Grekki Armadası bunun için görevlendirildi. Dağılmış formasyonda saldırmak taktiksel olarak pek mantıklı olmadığı için yapay zeka saldırıdan önce Broon’s Singularity’de bir araya gelme emri verdi (bu yamada geliştirdiğimiz bir şey).

Kolaylık adına bunun özeti Outliner’da görülebilir:

3.jpg
Savaşın öteki yüzünden görüldüğü gibi

Bu değişiklik tek başına yapay zekanın nerelerde zayıf olduğunu gösterdi ve ayrıca hemen düzelttiğimiz birkaç hatayı da açığa çıkardı. Komik olan bir tanesi, bazı durumlarda bir filonun iki farklı filo grubuna atanmasıydı, iki amiralin bir filonun yönetimi üzerine savaşmasına ve her gün çelişkili emirlerin oluşmasına neden oldu.

Buhran Yapay Zekası

Bir sonraki adım çeşitli buhranları yeniden yazarak jenerik yapay zekayı kullanmak, böylece bunu daha iyi yapmak için gösterilen her efor hepsine yarar sağlayacaktı. 2.6 yamasında spesifik yapay zekalar Khan, Prethoryn, Unbidden ve Contingency “standart” imparatorlukların kullandığı aynı yapay zekayı, kişiliklerini korumak adına birkaç ufak değişiklikle kullanacak.

Her sırrımızı açığa çıkarmadan işte birkaç fikir:

  • Khan savunmaya hiç inanmıyor ve en yakınındaki sistemleri teslim olacak şekilde hırpalayacak.
  • Prethoryn mümkün olan her yönde akın edecek.
  • Contingency sistematik olarak galaksinin en büyük tehditlerini hiçbir şey kalmayana kadar durdurmaya çalışacak.
  • Unbidden tahmin edilmesi zordur ama gösterdikleri uzaylı davranışlarında bir sebep vardır.

Karşılaştığımız en büyük zorluklardan biri filoları hedeflere yönlendirmek oldu. X sayıda filoyu Z hedefin Y’si ile eşleştirmek yapılması kolay bir iş değil. Yapabildiğimiz kadar çok görev yapmaya çalışarak, fazla yayılmacı davranarak zayıf kalma riskini mi almalıyız yoksa hiçbir şey yapmamalımıyız? Yoksa en değerli hedefe odaklanmalı ve muhtemelen kaçınmış olabileceğimiz büyük bir savaş ile mi yüzleşmeliyiz? Seçeneklerimizi ne sıklıkla tekrardan gözden geçiriyoruz?

Şu anki versiyon, filo gücünü her hedef üzerine koyarak sonra da öncelik sırasına göre hedefi tamamlamaya veya bir sonrakine gitmeye yetecek durumda olana kadar filoları çekerek bunu çözüyor. Bu yaklaşım, buhran yapay zekasını işin içine kattığımızda, uygun olan gemi büyüklüklerine bağlı olduğu için (onları bölmeyi bilmiyor, sadece bir araya getirebiliyor) sınırlarını gösterdi.

Yapay zekaya filoları nasıl böleceğini öğretmek oldukça ilginç oldu:

4.jpg
Bu bilgi ile ne yapmalıyız?

Yapay zeka bölmeye fazla eğilimli olduğu için dengeyi bulmamız birkaç denemeyi buldu (çoğu hedefler çok fazla filo gücü gerektirmiyor, düşmanınızın ana filosuyla savaşmıyorsanız). En sonunda, tamamlanan görevlerin istatistiklerini tutmak ve bundan iyi bir hedef numarası türetmek gibi bazı karmaşık stratejiler denedikten sonra, daha basit bir yaklaşım daha efektif oldu: bir ulusun tüm saldırgan filo gücünü bir araya getirmesi ve sonra yapay zekanın askeri gücüne, düşmanlarına kıyasla ne kadar güvendiğine bağlı olarak 2, 3 veya daha fazla sayıda bölünmeyi düşünmesi.

Bazılarınızın yapay zekamızı modlamayı sevdiğinizi bildiğimizden, tüm bunlar raflara ulaştığında üzerinde oynamalar yapmak isteyebileceğiniz bazı tanımlar:

# Hedef değerleri
HORDE_INVASION_PLANNING_DEPTH = 5 # Horda yapay zekası istila hedeflerinden ne kadar uzakta görünüyor (sistem sıçramalarında)
SWARM_INVASION_PLANNING_DEPTH = 5 # Akıncı yapay zekası istila hedeflerinden ne kadar uzakta görünüyor (sistem sıçramalarında)
SWARM_POP_TARGET_MULT = 1.0 # Akıncı için fazladan hedef puanı (gezegendeki yenebilir nüfus sayısı ile çarpıldı)
CONTINGENCY_MEGASTRUCTURE_EXTRA_VALUE = 4 # Devasa yapılar Contingency için ne kadar çekici (taban değeri 1'e eklendi)
UNBIDDEN_PORTAL_EXTRA_VALUE = 20 # Unbidden, geçitini ne kadar korumak istiyor (taban değeri 1 ile kıyaslandı)
UNBIDDEN_BYPASSES_EXTRA_VALUE = 4 # Bypass'lar Unbidden için ne kadar çekici (taban değeri 1'e eklendi)
UNBIDDEN_RIVALS_EXTRA_VALUE = 10 # Rakip istilacılar için fazladan hedef puanı (Aberrant ve Vehement)
UNBIDDEN_TARGET_EXTRA_VALUE = 10 # Rastgele seçilen Nemesis için fazladan hedef puanı
UNBIDDEN_PSIONIC_CONQUER_DESIRE = 20 # Nemesis denk geldiğinde Psionic İmparatorluklara eklenen fazladan ağırlık (taban 1 + sahip olunan bypass sayısı)
UNBIDDEN_CHOSEN_ONE_CONQUER_DESIRE = 50 # Nemesis denk geldiğinde seçilmiş olan tarafından imparatorluğa eklenen fazladan ağırlık (taban 1 + sahip olunan bypass sayısı)

# Filo büyüklükleri
OFFENSE_VS_DEFENSE_STRATEGY_ALLOTMENT = 0.75 # 1.0 agresifliğe sahip bir ülkenin filosu ne kadar agresif görev denemesinde bulunmalı
AVERAGE_FLEET_SIZE_FACTOR = 0.05 # Azami büyüklükte bir filonun toplam filo gücüyle olan Ballpark tahmini ilişkisi
OWN_FLEET_POWER_FACTOR = 1.0 # Yapay zeka güçleri hesaplarken kendi filo gücünü ne kadar göz önüne alır
ALLY_FLEET_POWER_FACTOR = 0.5 # Yapay zeka güçleri hesaplarken dost filo gücünü ne kadar göz önüne alır
ENEMY_FLEET_POWER_FACTOR = 1.0 # Yapay zeka güçleri hesaplarken düşman filo gücünü ne kadar göz önüne alır
FLEET_SUPERIORITY_FACTOR = 1.5 # Yapay zeka filolarını bölmeyi düşünmeye başlamadan önce ne kadar güçlü olmalı (filo sayısı = tahmini güç / bu faktör)
CRISIS_FLEET_SUPERIORITY_FACTOR = 1.0 # Yukarıdakinin aynısı ama evrendeki en güçlü düşman ile kıyaslanmış hali

Bu değişikliklerin çoğu Federations’un çıkışıyla (2.6.0) birlikte verilecek ama hepsi değil. Tahmin edebileceğiniz gibi askeri yapay zeka değişiklikleri oldukça etkili ve bu değişiklikleri yeterince test etmeden çıkartmak istemiyoruz, bu yüzden bazıları ilk destek yaması ile birlikte (2.6.1) verilecek.

Bununla birlikte, sizleri son bir kez daha sidestep ile başbaşa bırakıyorum.

Ekonomik yapay zeka nedir ve birini nereden satın alabilirim?

Merhaba uzay gezginleri, ben Zack. sidestep olarak bilinirim. Fransız Paradox yapay zekanın askeri yönü üzerinde yoğun olarak çalışırken ben ise ekonomik yapay zeka ile meşguldüm, hepimizin bildiği gibi dünyaların dönmesini sağlayan krediler oldukça önemlidir.

5.jpg

Peki ekonomik yapay nedir ve Stellaris’te nasıl çalışır? Şey, bu tek başına bir geliştirici günlüğü olabilir ve oyundan oyuna değişir. Ama kısaca ekonomik yapay zeka, kaynakları ne zaman ve nasıl harcaması gerektiğine ve aynı zamanda bu kaynaklardan nasıl daha çok elde edebileceğine karar verir. Stellaris özelinde yapay zeka takaslardan, üslerde madencilik yapmaktan, yıldız üslerinden (starbase), modüllerden, poliçelerden, hükümlerden (edict) ve daha fazlasından sorumludur. Ama belki de en önemlisi gezegenlerinizde nelerin inşa edildiğini denetlemesidir!

İnşaatlar Stellaris ekonomisinin temelidir, binalar ve bölgeler ekonominizi besler ve nüfusunuzun büyümesini sağlar. Bu da daha fazla kaynak demektir. Ekonomik yapay zeka önceden gezegenden gezegene, uzun vadeli bir hedefi olmadan inşaat yapardı. Düzenli aralıklarda sahip olduğu tüm gezegenlere gider ve kodları üzerinden inşaat edecek “iyi” bir şey bulur, onu sıraya koyar ve aynısını bir sonraki gezegende yapmak için devam ederdi. Ancak bu yöntemde yapılan inşaatlarda bazı temel sorunlar mevcuttu.

Sorunlar

İlk olarak bu yöntem aşırı derecede kod ağırlıklıdır ve çok sayıda kod bakımı ve dengeleme gerektirir. Bir binanın nasıl çalıştığını değiştirirseniz veya en basitinden oyun içinde ekonomik dengeyi değiştirici bir dengeleme yaparsanız birçok kodu yeniden yazmanız gerekir. “Oh, eğer bunu değiştirirsek sonra daha fazla alloy’a ihtiyacımız olur ama foundry’lerin ağırlığını arttırırsak sonra bu da diğer binaların sık inşa edilmemesine sebep olur ve sonra bunu değiştirirsek…” sorunu görebildiniz mi?

Her bina için takip edilmesi oldukça güç olan (ve hesaplaması zor) büyük, karmaşık, aşikar ve statik kodlar ile karşı karşıya kaldık; hiç kimsenin takip edemeyeceği farklı ağırlıklarda if/else durumları. Aşağıdaki örnek yapay zekanın bir bina üzerindeki kod ağırlığını gösteriyor.

ai_weight = {
weight = 0
modifier = {
weight = 10
OR = {
planet_crime 2
owner = {
has_monthly_income = {
resource = minerals
value > 100
}
has_monthly_income = {
resource = alloys
value 6
}#Check for alloy shutdown
}
}
modifier = {
weight = 200
planet = {
is_capital = yes
NOR = {
has_building = building_foundry_2
has_building = building_foundry_3
}
num_buildings = { type = building_foundry_1 value 0
}
country_uses_consumer_goods = no
}
}
NOR = {
num_buildings = { type = building_foundry_1 value > 1 }
has_building = building_foundry_2
has_building = building_foundry_3
}
owner = {
has_ai_personality_behaviour = conqueror
OR = {
has_ai_personality_behaviour = opportunist
has_ai_personality_behaviour = purger
has_ai_personality_behaviour = propagator
}
}# Saldırgan imparatorluklar ama bilgin gezginler olmaya yatkın oldukları için özgürlükçü robotlar değil
}# Saldırgan imparatorluklara erken aşamada gezegenlerine 2 alloy fabrikası ver
NOR = {
has_building = building_foundry_1
has_building = building_foundry_2
has_building = building_foundry_3
}
}
}
modifier = {
factor = 0.5
free_jobs > 3
}
modifier = {
weight = 500
has_building = building_foundry_1
free_building_slots = 0
}#Repairs
}

200, 400 ve 500 ağırlıkları nasıl diğer dosyalardaki binaların ağırlıkları ile kıyaslanabilir? Bir fikrim yok.

Yapay zekanın bu şekilde çalışmasından dolayı çıkan başka bir sorun ise yapay zekanın aşırı derecede reaktif olması ve pek fazla proaktif olmamasıdır. Bir şeyde düşük gelir var, bu durum kodun belirli bir binanın çok yüksek değer biçmesine ve daha sonra onu inşa etmesine neden oluyor ki bu makul. Ancak ya oldukça iyi gidiyorsanız? Daha sonra ne inşa edeceğinize nasıl karar verirsiniz? “Eğer tüm bu kaynaklarla iyi gidiyorsanız bu inşa edilmeli ama ona fazla yüksek değer verme çünkü belki de biraz yedek kaynağa ihtiyacımız var, hmmm… ” şeklinde daha fazla kod eklemeniz gerekir. Kodlanmasının ne kadar zor olduğunu görebilirsiniz ve diğer kodlarla kolaylıkla çakışabilirler. Bu ayrıca bir problem çünkü tüm hepsinin manuel olarak bakımının ve güncellemesinin yapılması gerekir, her koddaki her bina için.

Başka bir sorun olarak, bunu gezegenden gezegene olacak şekilde kodladığımızda herhangi bir gezegende neyin veya neden inşa edildiği hakkında gerçek anlamda bir fikrimizin olmamasıdır. Bunun anlamı, düşük enerjiye sahip olduğumuzdan eğer bir gezegende bir enerji bölgesinin gerekliliği hesaplanıyorsa ve sonra bunu inşa sırasına koyuyorsak, hesaplanan kodda durum aynı gözükeceğinden, büyük olasılıkla kontrol ettiğimiz bir sonraki gezegende aynı bölge inşa edilecek. Her ne kadar ilk bölgenin yapımı tamamlandığında iyi bir durumda olacak olsak da ikinci bölgenin yapımı fazlalık olacaktır. Bu küçük bir sorun gibi görünebilir ama bunun 12 farklı gezegende gerçekleştiğini hayal edin, bu durum yapay zekanın ekonomisini kötü bir yola girmesine ve uzun vadede büyük sonuçlar doğurmasına neden olur. Yapay zeka hatta bu bölgelerden bazılarını başka bir şey için yok edip tüm eforun çöpe gitmesine bile neden olabilir.

Başka sorunlar da bulunmaktaydı ama asıl ele almak istediklerim şunlar:

  • Daha az karmaşık ve bakımı daha kolay kod
  • Daha proaktif yapay zeka planlaması
  • Tek gezegene özgü olmayan inşaat
  • Genel olarak daha iyi ekonomik yapay zeka performansı

Çözüm Diğer Bir Deyişle Plan

Yaptığımız harika Soru-Cevap’ta yapay zekanın belirli bir zamanda başarması gerektiğini düşündükleri ekonomik ölçütlerin bir listesini bir araya getirdi. Oyunun erken aşaması ve ileri aşaması için birer setleri vardı. Bu yenilemeyi nasıl yapacağımı dizayn etmeye ve planlamaya başladım ve yapay zekanın sadece ekonomik olarak yaşadıklarına tepki vermesi yerine uzun vadeli bir plana gerçekten ihtiyacı olduğu sonucuna vardım. Bu, Soru-Cevap’ın topladığı performans ölçütleriyle bağdaştı ve düşündüm ki “Hey, neden bunları asıl oyun hedefleri yapmayalım!?” ve böylelikle Yapay Zeka Ekonomik Planı doğdu. Ekonomik plan, yeni ekonomik yapay zekanın temelini oluşturuyor; yapay zekanın plan hedeflerine ulaşmak için nelerin gerektiğini türetmesi ve uzun vadede bunları nasıl yapacağına karar vermesi. Planlar, basitçe yapay zekanın ulaşması gereken hedefleri belirleyen tümüyle kodlanabilir nesnelerdir. Planlar oyunun erken, orta veya ileri aşamaları için olabilir. Ayrıca potansiyel tetikleyicileri vardır ve yapay zekanın tam olarak hangi planı, ne zaman ve neden seçmesi gerektiğini kodlayarak yapay zeka için önceliklendirebilirsiniz (planlar sadece tamamlandıklarında veya geçerliliklerini kaybettiklerinde yenilenirler).

early_default_plan = {
type = early

income = {
energy = 50
minerals = 200
food = 50
consumer_goods = 50
alloys = 100
unity = 50

physics_research = 200
society_research = 200
engineering_research = 200

exotic_gases = 1
volatile_motes = 1
rare_crystals = 1
sr_living_metal = 1
sr_zro = 1
sr_dark_matter = 1
}

focus = {
energy = 10
minerals = 30
alloys = 50
food = 10
consumer_goods = 20
}

pops = 500
empire_size = 1.25

potential = {
country_uses_consumer_goods = yes
country_uses_food = yes
}

ai_weight = {
weight = 1
}
}

Yukarıdakiler sıradan imapratorlukların kullandığı varsayılan erken ekonomik planları. Gördüğünüz gibi potansiyel tetikleyiciler hivemind’ların bu planı kullanmamasını garanti ediyor, bu da ihtiyaç duymadıkları sayıda çok tüketici ürünleri üreterek başlamaları demek.

Aşağıda örnek bir planın kodlanabilir kısımlar üstünden geçeceğim, o yüzden eğer kodlamaya veya sistemin daha ayrıntılı olarak nasıl işlediğine ilgili değilseniz bu bölümü geçebilirsiniz.

‘type = early’
Tür alanı, oyunun hangi aşamasında bu planın geçerli olduğuna karar verir, oyunun erken aşamasına geçerlidir. Bu yüzden oyun ayarlarında oyunun orta aşaması hangi yıl seçildiyse o yıla kadar göz önünde tutulur.

‘income = {}’
Gelir alanı, yapay zeka bu plana sahip olduğunda ulaşmaya çalıştığı ana ekonomik hedefleri içerir. Buradan yapay zekanın bahsi geçen kaynak hedefinin tamamlanmadan önce ihtiyaç duyduğu gelirde uygun olan herhangi stratejik kaynağı kodlayabilirsiniz. Not: Eğer bir kaynak burada kodlanmamışsa yapay zeka o kaynağı üreten herhangi bir şeyi aktif olarak inşa etmeye çalışmayacağı anlamına gelir, bunu yapabilir çünkü belirli bir bina ihtiyaç duyduğu başka bir şeyi üretiyordur.

‘focus = {}’
Odak alanı, yapay zekanın başka bir şeyden önce özellikle o kaynak için erişmek istediği özel odak hedeflerini (net gelir) belirlemede kullanılır. Bu alan yapay zekanın belirbi bir net gelirin altına düşmemesini sağlamada mükemmeldir ve erken aşamada belirli kaynakları, o kaynakta eksiklik olmamasına rağmen üretmeyi mümkün kılar. Mineraller ve alloy'lar erken aşama odak kaynaklarına iyi bir örnektir çünkü yapay zeka rekabetçi kalabilmek için onlardan hatrı sayılır miktarda üretmesi gerekmektedir, 0 net gelirin az üstünde kalmak yeterli değildir!

‘pops = 500’
Nüfus alanı, yapay zekanın erişmek istediği hedef nüfus sayısıdır. Bu sayıya erişildiğinde nüfus üretmeyi durdurmayacaktır ancak nüfus büyümesi ve assemly binaları bu hedefe ulaşıldığında diğer kaynaklardan daha fazla üretmek adına daha az ağırlıklı olacaktır.

‘empire_size = 1.25’
İmparatorluk büyüklüğü alanı, yüzdesel olarak, imparatorluk genişlemesini (Empire Sprawl) belirli bir sınırda tutmaya çalıştığı kısmı belirtir. Burada 1.25, yapay zekanın erken aşamada imparatorluk genişlemesini %125 kapasitenin altında tutmaya çalıştığı anlamına gelmektedir, böylece çok fazla cezaya maruz kalmaz ama bazılarını tolere edebilir.

‘potential = {}’
Potansiyel alanı, standart tetikleme alanıdır. Yapay zekanın ülkesinden gözlenmiştir, bu planı hangi ülke tiplerinin uygulayabileceğini kodlayabilirsiniz. Temel plan olanakları, farklı imparator tiplerinin sadece ihtiyaç duydukları kaynağı üretmelerini sağlar ama eğer savaşta veya federasyonda vb. iseniz bunlar için özel ekonomik planlar da kodlayabilirsiniz.

‘ai_weight = {}’
Yapay zeka ağırlığı alanı, yapay zekanın belirli bir planı ne kadar kullanmak isteyeceğini kodlayabileğiniz standart ağırlık alanıdır. Her ülke tipi ve dönemi için mümkün olan sadece bir plan olduğu için tüm ağırlıklar 1 olarak ayarlanmıştır ama çok daha fazla farklı planı kodlayabilir ve ağırlıklarını örneğin kişilik, etnik veya diğer yapay zeka özelliklerine bağlı olarak farklı imparatorluklar için farklı yapabilirsiniz.

Planı Uygulamak

Peki yapay zeka bu planları nasıl uygulanabilir kılıyor? Güzel soru! Yapay zeka, normal zaman dilimlerinde o anki ekonomik durumuna bakacak (gelir, açıklar, bütçe vb.) ve onu o anda aktif olan plandaki hedeflerle kıyaslayacak. Buradan, bu hedeflere ulaşmak için nelerin gerekli olduğunu türetecek ve bir inşa planı oluşturacak. İnşa planı basitçe yapay zekanın farklı gezegenlerde yapmak istediği öncelikli bina (veya bölge) listesidir.

6.jpg

Bu inşa planı oyun içinde, “debugtooltip” aktifken, boş veya kilitli bina slotunun üstüne imleç getirilerek görülebilir ve yukarıdaki resme benzer bir şey olacaktır (sayı, yapay zekanın o bina için hesapladığı puandır). Yapay zeka bu planı normal zaman dilimleri için tekrardan hesaplar, böylece artık geçerli olmayan eski planlara bağlı kalmaz.

Yapay zeka bu inşa planında tam olarak ne inşa edeceğini, bu binaların inşa edildiklerinde gerçekten ne üreteceğini bulduğunda (mesleklerdeki kaynaklar dahil) inşa etmeye başlayacaktır ve sonra ekonomik plandaki hedefleri yerine getirmek için binaları mümkün olduğunca efektif bir biçimde karıştırıp eşleştirmeye çalışacaktır. Elbette binaların gider maliyetlerini veya o andaki teknoloji limitlerini de hesaba katacaktır. Bu sistemin yararı, yapay zekanın belirli binaları yapmasını sağlamak için aşikar bir biçimde kodlamanıza gerek kalmamanızdır, bunun yerine dinamik olarak her binanın ne ürettiğini koddan çıkaracaktır. Ayrı olarak, farklı kaynaklar üreten binaları daha hızlı bir şekilde eklemenizi sağlayacaktır ki artık yapay zekanın onları nasıl idare edeceğini manuel olarak kodlamanıza gerek yoktur. İnşa planı ayrıca bir binanın hangi gezegende en çok üretim yapacağını göz önüne almaya çalışır ve oraya inşa eder; böylece daha çok “foundry worlds” gibi gezegenlerde özel kaynak üretimi yapmaya meyilli olur. Ayrıca birçok iş olanağı bulunan gezegenlerde herhangi bir şey inşa etmeyecektir. Yapay zeka, artık tüm bunları gezegen bazlı değil de imparatorluk bazlı olarak yaptığı için gezegenlere tek başına bakmak yerine hedeflerine ulaşmak için yaptığı işleri takip edecektir. Yapay zeka hala gezegenlerinizi kontrol ederek ev, amenity veya diğer gezegen bazlı kaynaklarda eksiklik var mı bakacaktır. Bu binalar yine de ekonomik planın bir parçasıdır ve eğer gerçekten gezegenlerinizde bulunanlardan başka bir kaynağa ihtiyacınız varsa bir süre o amenity eksikliği ile idare etmeniz gerekir.

Peki yapay zeka inşa planında farklı binaları nasıl önceliklendirir? Harika bir soru daha! Buna cevap verebilmek için yapay zekanın farklı bina ve bölgeleri nasıl puanladığına bakmalıyız. Puanlama fonksiyonu birkaç parametre içermektedir: plan hedeflerine ulaşmak için gereken gelir, odak planlarına ulaşabilmek için gerekli gelir, anlık gelir ve eksiklikler, üretilen kaynaklar, diğer kaynakların (amenity’ler, suç, ev, konutlandırma vb.) üretimi ve son olarak eğer varsa nüfus büyümesine katkıda bulunması veya assembly. Verilen binalar bu parametrelerin her birinden, o kategoride ne kadar eksik olduğumuzu ve o binanın belirli çarpan ile bu durumu düzeltmede ne kadar yardımcı olacağını baz alarak bir puan alır. Sonra eksik olduğumuz kaynakta daha fazla kaynak üretiyorsa veya odak planımızı başarmaya daha da yaklaştıracaksa ona daha fazla puan ekler. Not: Sistem tüm sıraya koyulan binaları hatırlar o yüzden 4 mineral bölgesi sıraya koyduysak ve bu o anki mineral eksikliğimizi çözecekse 5. mineral bölgesi fazladan eksiklik puanı almaz!

AI_DEFICIT_SCORE_MULT = 50 # Yapay zeka eksik kaynakları üreten binaları bu kadar fazla puanlayacaktır
AI_FOCUS_SCORE_MULT = 10 # Yapay zeka hedef kaynakları üreten binaları bu kadar fazla puanlayacaktır
AI_AMENITIES_SCORE_MULT = 2 # Yapay zeka amenity binalarını diğer kaynaklardan bu kadar fazla puanlayacaktır
AI_HOUSING_SCORE_MULT = 5 # Yapay zeka konutlama binalarını diğer kaynaklardan bu kadar fazla puanlayacaktır
AI_CRIME_REDUCTION_SCORE_MULT = 2 # Yapay zeka suçla savaşma binalarını diğer kaynaklardan bu kadar fazla puanlayacaktır
AI_ADMIN_CAP_SCORE_MULT = 2 # Yapay zeka admin cap binalarını diğer kaynaklardan bu kadar fazla puanlayacaktır
AI_POPS_SCORE_MULT = 5 # Yapay zeka nüfus büyüme ve assembly binalarını bu kadar fazla puanlayacaktır (kodda zaten makul ağırlıkta)
AI_UPGRADE_SCORE_MULT = 40 # Yapay zeka bina geliştirmeleri bu kadar fazla puanlayacaktır (nasılsa yeni bir bina slotunu doldurmadıklarından)

Yukarıda puanlama parametrelerine eklenen çarpanları görebilirsiniz, onların hepsi tanımdır ve bu yüzden modlanabilirler.

7.jpg

Tüm bunlar çok karmaşık ve “matematikçe” gelebilir o yüzden hızlı bir örnek ile açıklayalım. Eğer Blorg, gelirin -1 olduğu mineraller dışında her kaynakta stabil gelire sahipse ve yukarıda bahsedilen hedef mineral geliri 200 ve mineral odak planı 30 olan varsayılan planı kullanıyorsa o zaman algoritma minerak eksikliğini puanlarken…

  • Blorg hedefine ulaşmak için ~200 net mineral gelir eksikliğine sahip olduğunu görür ve eksik miktar çok yüksek olduğu için buna fazla puan verir.
  • Odak hedefi için gerekli kaynakların mineral bölgesinin ürettiğini görür ve belirli bir faktör ile puanı çarpar.
  • Blorg’un mineral eksikliği yaşadığını görür ve tekrardan belirli bir faktör ile puanı çarpar.

Algoritma, daha sonra binaları önceliklendirirken inşa planına bir puan verecektir ve Blorg tarafından bir (veya daha fazla) mineral bölgesi yapılacaktır. Bu, benzer şekilde hangi bina olduğu farketmeden çalışacaktır, önemli olan hedefinizden yaklaşık olarak ne kadar eksik olduğunuzu puanlamasıdır ve bahsi geçen hedeflerden planlanan bina kaynaklarını çıkarmasıdır. Yani eğer sadece 2 mineral geliri eksiğiniz varsa puan o kadar yüksek olmayacaktır ve eğer bina üreten bir binayı sıraya koyduysanız, o zaman yapay zeka bu binalara bakmayı bırakacaktır çünkü hedefinize ulaşmak için gerekli olanı siz hesaplamışsınız.

Planı Değerlendirmek

Peki, bu sistem belirlediğim tüm sorunları ele almayı başarıyor mu? Evet, yapıyor 🙂

Artık her bina için karmaşık kodlar yazmak zorunda değilsiniz, bunun yerine plan üzerinde oynamalar yaparak yapay zekanın bir kaynağı ne kadar önemli bulduğunu kontrol edebilirsiniz. Plan, aynı zamanda yapay zekanın sadece eksikliklere ve anlık gerçekleşenlere tepki vermek yerine ileriye dönük ve proaktif olmasını garanti ediyor. Yapay zeka artık gezegenlere tekil olarak değil bütün olarak bakıyor, hepsi plan sayesinde.

Tüm bunlar iyi hoş ama şimdi sıra asıl soruda; ekonomik yapay zeka genel olarak daha iyi performans gösteriyor mu? Şey… evet!

Yaptığımız testlerde yapay zeka ekonomilerininin güçlendiğini ve genel olarak ekonomiyi daha iyi yürüttüklerini saptadık. Elbette hepsini tek başıma yapmadım, Soru-Cevap’tan ve diğer geliştiricilerden çok yardım aldım ve bunun için hepsine minnettarım çünkü onlar olmasa yapılanlar bu kadar iyi olamazdı. Federations’ın çıkışına yaklaştıkça sizin (topluluğun) bunlarla neler yapacağınızı ve nasıl modlayacağınızı görmek isterim 😉

Son olarak, bunları yazarken elbette modlarınız üzerindeki büyük uğraşlarınızı da unutmadım. Eski usül bina kodları ve ağırlıkları eğer yapay zekanın kullanacağı bir plan yoksa hala çalışıyor. Eğer yapay zekanın kullanacağı tüm planları kaldırırsanız veya yapay zeka sahip olduğu planları tamamlarsa, gezegen odaklı bina inşasının yapıldığı ve eski bina ağırlıklarının geçerli olduğu eski sisteme geri dönecektir.

Okuduğunuz için teşekkürler ve yıldızlar arasında iyi şanslar!

Yazar: İhsan Berkay Erdem

Henüz yorumlanmamış.

Yorumla

STRATEGYTURK

Strategyturk'te strateji oyunlarından haberleri, yama notlarını, geliştirici günlüklerini ve daha birçok içeriği Türk strateji oyuncularına Türkçe bir biçimde sunuyoruz. Aynı zamanda yeni çıkan strateji oyunlarının ve eklentilerinin incelemelerini yapıyor, bu oyunlara dair sürekli olarak içerik oluşturuyoruz.

Sosyal medya sayfalarımızı takip ederek strateji oyunlarındaki gelişmelerden haberdar olabilirsiniz.

Son Yorumlar

  • FADYORYA: 1 ve 2. oyun epic gameste, 3. oyun steam'de olursa immortal empires olmuyor değil mi? üçünün de aynı platformda olması gerekiyor
  • Wandervals: 1.14 Sürümü için yama güncellemesine ihtiyacımız var.

KATEGORİLER

ARŞİV