作ろう - How to make

できることできないこと
最初にがっかりさせることになるでしょうが、残念ながら AOK の AI でユーザーが作れる部分は限られています。一言で言えば、ユーザーは戦略を立てるだけで、戦術はコンピュータにまかせる事になります。ユーザーはいわば司令官の頭を作るだけです。攻撃部隊長に細かい命令を送ることは出来ません。ユーザーは、どういう攻撃部隊を組んで、どういうポリシーで攻撃目標を決めるかを指示するだけです。

ですが、安心してください。それでも AI はかなりの権限を持っています。まず、AI が指示しない限り、どんな建物も建築されませんし、どんなユニットも生産されません。攻撃部隊の編成もある程度決める事が出来ます。村人一人一人にどうやって羊を狩るかを指示する事は出来ませんが、どのくらいの人をどの資源採取に投入するかを決定することは出来ます。残念ながら場所に関しては、どの建物をどこに作るか、どのユニットをどこに行かせるかを決めることは出来ませんが、距離に関しては設定できるようになっています。

私が現時点で思うのは、このような制限された AI でも白熱した対戦ができるということです。最強の AI を目指して AI を改良しつづけ、誰の AI が一番強いか、こんな状況では誰々の AI が強いか、などということが出来ると思います。
 

誰かの作ったものを改良するのが良いのか?

結論から言いますと、良い AI を元に自分の AI を作るのは大変です。その理由は、AI の文法が単純すぎるので、効率の良い書き方が難しいからです。誰かが作ったものの上に、自分の戦略を載せることはかなり難しいのです。そこで、部分部分で良いアイデアを頂きつつ、自分の AI はゼロから作った方が良いと思います。
どんな AI を試作すれば良いか?
始めに言っておきますが、正しい AI はどんなゲーム設定にも対応していなければなりません。たとえば、人口の最大数、選択した文明、ゲームの種類、などです。それから、マップの種類や大きさによって戦略を変えることが出来れば戦いが有利になります。それから、正しい AI は難易度を調節できるようになっています。正しい AI は、ゲーム設定の難易度に合わせて、時には手加減をしてやる必要があるのです。

しかし、最初は自分で勝手にゲーム設定を固定にして考えてみましょう。たとえば、人口の最大数を 75 や 125 だとして、文明も自分の好きな文明だと仮定します。難易度に合わせて手加減してやる必要はありません。まずは、通常のコンピュータの「非常に簡単」レベルに勝つことを目標としましょう。いえ、その前にまず暗黒の時代から領主の時代へと進化することを最初の目標とすべきです。たったこれだけのことながら、AI をゼロから作るとなるとそれなりに大変です。

空の AI でやってみるとどうなるでしょう。本当に空の AI を作るとエラーになるので、最低限以下のように書く必要があります。

(defrule (true) => (do-nothing))
これはまさに何もしない AI です。このような AI だと、まず斥候は全く動きません。代わりに村人二人が探索に行ってしまい、残りの一人は手近な木苺を摘みに行きますこの状況はゲームが進もうと全く変わりません。この状態から、様々な条件や命令を書くことによって、まずは領主の時代へ進化することを目標にしましょう。
空の AI ファイルの作り方
AI ファイル本体はテキストエディタ (メモ帳など) で作成できるただのテキストファイルです。好きな名前を付けて、AOK をインストールした場所のすぐ下にある Ai フォルダに入れましょう。ただし拡張子は .per である必要があります。それから、AOK に AI ファイルを認識させるには、名前だけ一緒で拡張子が .ai の空ファイルが必要になります。

例を挙げて説明しましょう。私が最初に作った AI の名前は "Nestoris AI" でした。このような名前の AI を作るには、最低二つのファイルが必要になります。以下の通りです。

Nestoris AI.ai
Nestoris AI.per

AI ファイルの中身は、複数のファイルに分けて書くことが出来ます。そのとき、AOK が読もうとするのは、拡張子 .ai の付いたファイルと同じ名前で拡張子に .per を持つファイルだけです。あとのファイルは、たとえ拡張子が .per であってもそのままでは読まれることはありません。あとのファイルは、先の例で言えば Nestoris AI.per の中で明示的に load 文で呼んでやる必要があります。

空の AI ファイルといっても、本当に .per ファイルを空にしてしまうとエラーが起きてしまうので、どうやら必ず一つは条件を入れなければいけないようです。とりあえず以下の文を入れてやると、空の AI ファイルは完成です。

(defrule (true) => (do-nothing))

ただし、他の defrule 文が一つでもあると、上の文は必要ありません。

[download]
Nestoris AI
(空の AI ファイル)

(gomi@din.or.jp)