暗黒の時代(経済の基盤を築く時代です。)


時間順で説明していきます。最後にサンプルAIを用意してあります。


 最初の家の建築
ゲーム開始直後では、家の建設は最優先で行わなくてはなりません。(フンと中国を除きます。)
そこで見落としがちなのがsn-initial-exploration-required 【建物を建設する前に探索する割合(%)】です。これが0%になっていないと、すぐに家を建て始めないことがあります。(当然マップが大きくなるほど顕著です。)

中国の場合、家の建築は機織が終わってからでもかまいません。最初は資源収集や探索に割り当てましょう。

(2001/01/28)
 
 

 最初の探索
ゲームが始まったら素早く果実の木か羊を見つけないと、農民の連続生産が途切れてしまいます。しかしAIの斥候は動きが粗いため、中心の近くにある羊×4を見逃したり、見つけるまでにかなりの時間がかかる場合が珍しくありません。そこで最初は町の人全員で探索させたくなります。

町の人全員で探索させる方法
農民配分をすべて探索用に割り当て、建築用と採集用の配分は0にします。
 
 全員で探索させる為の具体例
; 全員で探索
(defrule
 (true)
=>
 (set-strategic-number sn-total-number-explorers       8) ;探索に割り当てるユニットの総数

 (set-strategic-number sn-percent-civilian-builders    0) ;建築を行う町の人の割合(%)
 (set-strategic-number sn-percent-civilian-explorers 100) ;探索を行う町の人の割合(%)
 (set-strategic-number sn-percent-civilian-gatherers   0) ;収集を行う町の人の割合(%)

 (set-strategic-number sn-cap-civilian-builders       10) ;建築に割り当てる町の人の最大人数
 (set-strategic-number sn-cap-civilian-explorers       7) ;探索に割り当てる町の人の最大人数
 (set-strategic-number sn-cap-civilian-gatherers       0) ;収集に割り当てる町の人の最大人数

 (chat-local-to-self "全員で探索")
 (disable-self)
)
 

上記具体例に加え適当なタイミングで探索を打ち切り農民配分をすべて採集用に振り分ける処理も必要です。サンプルAIでは30秒経過したら探索を打ち切りるようにしていますが、さらに「羊が見つかったら」「果実の木が見つかったら」という条件なども加えて工夫することをお勧めします。

(2001/01/28)
 
 

 粉引き所を立てる
粉引き所を建てるタイミングのついては、sn-maximum-food-drop-distance 【町の人が木苺、羊を認識する最大距離】を20程度に設定し、苺を採る人が発生したら粉引き所を建てると効率がよくなります。なぜなら早く建て過ぎると町の人が羊とイチゴに分散して羊肉の回収率が下がるからです。またこの方法だと苺が一部しか見えてなくて粉引き所が建たないという時も、町の人が苺を取りに行くときに視界が開けるので回避することができます。ただあまり引き伸ばすと畑を張り始める時間が遅れるので苺を採る人が発生しなくても適当なタイミングで粉引き所を建ててしまいましょう。
 
 粉引き所建築の具体例
; 粉引き所
(defrule
 (current-age == dark-age)
 (or 
  (players-unit-type-count my-player-number 120 >= 1);苺を採る人(男) 
  (players-unit-type-count my-player-number 354 >= 1);苺を採る人(女) 
 )
 (resource-found food)
 (can-build mill)
 (building-type-count-total mill < 1)
=>
 (set-strategic-number sn-maximum-food-drop-distance 10)
 (chat-local-to-self "苺を採る人が発生したので粉引き所を建設します")
 (build mill)
)

; 粉引き所
(defrule
 (current-age == dark-age)
 (unit-type-count villager >= 11)
 (or
  (resource-found food)
  (game-time >= 360)
 )
 (can-build mill)
 (building-type-count-total mill < 1)
=>
 (set-strategic-number sn-maximum-food-drop-distance 10)
 (chat-local-to-self "町の人が11人以上になったので粉引き所を建設します")
 (build mill)
)
 

(2001/01/28)
 
 

果実の木が見つからない時の対応
AIの斥候は動きが粗いので農民が10人以上生まれた後でもまだ、果実の木が見つからない場合が稀にあります。これは農民を再度探索に割り当てることで回避できることがあります。
 
 果実の木の再探索の具体例
;-------------- 果実の木の再探索

(defrule
 (current-age == dark-age)
 (game-time >= 90)
 (building-type-count-total mill == 0)
 (players-unit-type-count my-player-number 958 == 0);羊
 (not (resource-found food))
=>
 (set-strategic-number sn-total-number-explorers 8)
 (set-strategic-number sn-percent-civilian-explorers 100) ;探索を行う町の人の割合(%)
 (set-strategic-number sn-percent-civilian-gatherers   0) ;収集を行う町の人の割合(%)
 (set-strategic-number sn-cap-civilian-explorers     100) ;探索に割り当てる町の人の最大人数
 (set-strategic-number sn-cap-civilian-gatherers       0) ;収集に割り当てる町の人の最大人数

 (set-goal g-search-food 1)

 (chat-to-all "果実の木の再探索中")
)

(defrule
 (goal g-search-food 1)
 (or
  (resource-found food)
  (game-time >= 360)
 )
=>
 (set-strategic-number sn-total-number-explorers 1)
 (set-strategic-number sn-percent-civilian-explorers   0) ;探索を行う町の人の割合(%)
 (set-strategic-number sn-percent-civilian-gatherers 100) ;収集を行う町の人の割合(%)
 (set-strategic-number sn-cap-civilian-explorers       0) ;探索に割り当てる町の人の最大人数
 (set-strategic-number sn-cap-civilian-gatherers     100) ;収集に割り当てる町の人の最大人数

 (set-goal g-search-food 0)

 (chat-to-all "果実の木の再探索終了")
)
 

(2001/01/28)
 
 

伐採所を建てる
伐採所を建てる位置については、sn-camp-max-distance 【伐採所及び採掘所の町の中心からの最大距離】である程度lコントロールできます。15程度に設定すれば町の近くの森に伐採所を建ててくれますが、森が遠い場合は立ち木の側に建ててしまいます。当然立ち木の側に建ててしまったのでは再起不能になってしまいますのでこれは防がなければなりません。経験的に最低20は有ったほうが良いようです。25も有れば完璧でしょう。伐採所建てる瞬間にsn-camp-max-distance を数秒単位で徐々に大きくするという方法もありますが、これでも失敗する場合があります[※3]。(小さい値で固定するよりはずっといいのですが。)

(2001/01/28)
 
 

資源採集比率をコントロールする
町の人の資源採集比率を変えてもすぐには反映されないのはなぜでしょうか?どうも町の人は1つの資源に食いついたらそれが無くなるまで採り続けたがる傾向があるようです。(羊を食いかけで放りだすことも多いのですが。)このこと踏まえてコントロールすると思ったような資源採集比率になりやすいようです。

(2001/01/28)
 
 

鹿を狩る
効率良く鹿を狩るには次のようにします。
(1) 最初は sn-maximum-hunt-drop-distance 【町の人が鹿を認識する最大距離】を10、sn-maximum-food-drop-distance 【町の人が木苺、羊を認識する最大距離】を10程度に設定しておく。
(2) 伐採所を建築した後ぐらいにsn-maximum-hunt-drop-distance を30、sn-maximum-food-drop-distance 0に設定する。[※2]
(3) 狩りをする人が発生したら2個目の粉引き所を建て始めるまで畑を張るのを止める。
(4) 2個目の粉引き所の基礎ができたら、畑を張るのを再開する。
(5) 粉引き所が完成したらsn-maximum-hunt-drop-distance を10に戻す。
(6) 適当なタイミングで sn-maximum-hunt-drop-distancesn-maximum-food-drop-distance を10に戻す。
 
;------ 鹿狩り処理

(defrule
 (current-age == dark-age)
 (unit-type-count villager >= 17)
 (goal g-stop-farm 0)
 (building-type-count mill == 1)
=>
 (set-strategic-number sn-maximum-food-drop-distance     0)
 (set-strategic-number sn-maximum-hunt-drop-distance    30)
 (chat-local-to-self "鹿を探します。(鹿を認識する距離を広げ食料を認識する距離を0にします。)")
 (disable-self)
)


(defrule
 (current-age == dark-age)
 (goal g-stop-farm 0)
 (building-type-count-total mill == 1)
 (or
  (unit-type-count-total 122 > 0)
  (unit-type-count-total 216 > 0)
 )
=>
 (set-goal g-stop-farm 1)
 (chat-local-to-self "鹿用の粉引き所を建てるため畑の建設を止めます。")
)

(defrule
 (current-age == dark-age)
 (building-type-count-total lumber-camp >= 1)
 (or
  (unit-type-count-total 122 > 0)
  (unit-type-count-total 216 > 0)
 )
 (can-build mill)
 (building-type-count-total mill < 2)
=>
 (build mill)
 (chat-local-to-self "鹿用の粉引き所を建てます。")
)

(defrule
 (current-age == dark-age)
 (goal g-stop-farm 1)
 (or
  (building-type-count-total mill >= 2)
  (and
   (unit-type-count-total 122 == 0)
   (unit-type-count-total 216 == 0)
  )
 )
=>
 (set-goal g-stop-farm 0)
 (chat-local-to-self "畑の建設を再開します。")
)
(defrule
 (current-age == dark-age)
 (building-type-count mill >= 2)
=>
 (set-strategic-number sn-maximum-hunt-drop-distance    10)
 (chat-local-to-self "鹿用の粉引き所が完成したので鹿を認識する距離を狭めます。")
 (disable-self)
)

(defrule
 (current-age == dark-age)
 (unit-type-count villager >= 21)
=>
 (set-strategic-number sn-maximum-food-drop-distance    10)
 (set-strategic-number sn-maximum-hunt-drop-distance    10)
 (chat-local-to-self "鹿を探しを終わります。(鹿を認識する距離を狭め食料を認識する距離を戻します。)")
 (disable-self)
)

  −−−−−−−−−−中略−−−−−−−−−−

; 畑
(defrule
 (current-age == dark-age)
 (goal g-stop-farm 0)
 (building-type-count-total farm < 16)
 (building-type-count-total lumber-camp >= 1)
 (building-type-count-total mill == 1)
 (can-build farm)
=>
 (build farm)
 (chat-local-to-self "畑(16枚まで)")
)
; 畑
(defrule
 (current-age == dark-age)
 (goal g-stop-farm 0)
 (building-type-count-total farm < 13)
 (building-type-count-total lumber-camp >= 1)
 (building-type-count-total mill == 2)
 (can-build farm)
=>
 (build farm)
 (chat-local-to-self "畑(13枚まで)")
)
 

・鹿を狩るメリット
(a)羊の発見率が悪かったりしたときに進化が遅れるのを防ぐことができる。
(b)畑と違い大勢で一度に採集できる。
(c)木に余裕ができることが多い。(畑を減らせるため。)
・一方デメリットは
(d)鹿を狩ることを前提に調整すると見つからない場合に進化が遅れる。
(e)狼に襲われることがある。
(f)歩く距離が長いため得られる資源が減ることが多い。

(2001/01/28)
 
 

領主の時代の研究をする
領主入りする町の人の人数については、領主時代に何ををするかにより変わりますが、町の人が24〜33人の範囲が良さそうです。23人以下だと内政が細すぎます。

24〜26人の場合:細く早い進化です。メリットは「塔を早く建てられる」「(貢ぐために)市場を早く建てられる」でしょうか?この進化で速攻をかけるのはあまり有効ではないようです。

27〜29人の場合:平均的な進化でしょうか?条件がよければ農民を作り終わった後に即領主押しができる場合があります。即城主をする場合はこれくらいの人数がいたほうがいいでしょう。領主Rをするには少し細いかもしれません。

30〜33人の場合:太く遅い進化です。農民を作り終わった後には食料が600を超えていることもあります。領主Rに向いています。即城主でも有効ですが、前線構築型の領主Rに苦戦する場合があります。

34〜人の場合:極太進化です。まだ良いのか悪いのかわかりません。今後の研究次第では流行る可能性はあります。

領主時代研究中かどうか判定する方法。一番確実なのはresearch-available を使う方法です。詳しくはサンプルAIをご覧ください。[※3]

おまけ:機織をする前に農民を作り終わり即領主時代の研究をできる場合は領主の時代に入ってから機織をする手もあります。

(2001/01/28)
 
 

 イノシシは・・・
残念ながらAIではイノシシは食べられないみたいです。sn-minimum-boar-hunt-group-size 【猪を狩る最少人数】というものがありますが、設定してもイノシシを狩ってはくれません。

(2001/01/28)
 
 
 
 
 
 
 

 論より証拠の暗黒時代までのサンプルAI (2001/01/28)
 
 
 
 
 
 



[※1] この方法はTsujikazeさんとJawaさんに教わりました。
[※2] sn-maximum-food-drop-distanceを0にする方法はraoさんが発見されました。
[※3] この方法はAOK Heavenのフォーラムで知ったのですが、どなたの書きこみか忘れてしまいました。覚えてる方がいたら教えてくさい。Sintingさんでしたっけ・・・?
 
SSI error: Syntax Error