FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

BぷよAI作成メモ4

最近回線の調子がよくないです・・・どうしよ?


さて、今回は前回の続きで、発火編です。

前回、関数を使って4列目までを満タンにすることができたのでいよいよここから発火します。

発火させたい時は、ぷよを4つつなげればよいので

ai_GetScore関数のtsunagi_aやtsunagi_bを使えばいくつ繋がるか分かります。

さて、ではここからAIに最もよいところへ置いてもらうやり方の基本的概要を説明したいと思います。

難しく言いましたが、要するにどれがよいかをAIに計算してもらうのです(あまり説明になってない?)



まず、1手のパターンは22通りしかないということを覚えておきましょう。

この22パターンの中から、最善手を選ぶのです。この22パターンで、パターンひとつずつに点数をつけて、採点してやります。そして、22パターンの中から、最も優れたものを次の一手としてSetTumiさせてやればいいわけです。

つまり、悪い置き方には減点、よい置きかたに加点してやればいいのです。

この採点の配分によって、同じ組ませ方でも違う結果になることがありますので、今回はあくまで一例です。が、そこまで大きくずれているわけではないので是非参考にするといいでしょう。

また、サンプルフォルダにある「先読みするサンプル.lua」のgetPat関数は結構役立ちます。(以下の画像でも使用しています)


set12.png

ここでの図の78行目が加点処理で、そのほかは全て減点処理です。
もちろん、その人の好みでほかに加点対象を増やしてもよいですし、減点対象を増やしてもいいでしょう。

今回は連結数が最も多くなるように置くようにしています。

書き方次第では「連鎖数は少ないほうがよい」や、「ちぎらないほうがよい」ということもできます。
私のフィーリングバーサーカーAIではバーサーカー構築時にもこのような採点基準を組み込んで、より連鎖が起きやすくしています。

※ちなみにこのような採点のことを実際には「評価」と言うのですが、採点のほうが分かりやすい・・・よね?

今回で基礎書きは終わりです。

実際、AIを組んでみることになると今回の採点ばっかりになると思うのですが、本当の初心者は、実際に書いてみて、動くのを実感してから次のステップに移行したほうが言いかと思い、今回の前書きになりました。
やはり千里の道もバーサーカーから。と感じてくれる人が増えるといいな
次回からはデスタワー考察なのでいきなり内容ががらりと変わる・・・かも。

スポンサーサイト

BぷよAI作成メモ3

前回、AIに6列目に積ませることが出来ましたが、このままではAIはずっと6列目に積もうとするので、
6列目に積めない時は

「6列目に積めないよー!」(ボイスは各々好みで)

と困ってしまい、自由落下をしてしまいます。
AIが自由落下している時は

・積めない場所に積もうとした時。
・そもそも積む命令がない時

が考えられます。今回は前者ですね。こういうときは
便利なBぷよAI関数の
ai_GetScore( 数字(列) , 数字(回転) )
を使いましょう。()の中の書き方はai_SetTumiと一緒ですね。

この関数は一度
sd = ai_GetScore( 5 , 0 )
のように一度書いて
sdにもしai_SetTumi( 5 , 0 )をしたらどうなるかをシミュレートしたいろいろなデータを格納します。
そしてこのsdから必要なデータを引き出します。

今回必要なのは、置けるか置けないかです。
置けなかったときはscoreに-1が入っています。なのでこのように書けばよいでしょう。

set8.png

こうすることでAIは5列目にも積んでくれるはずです。
もちろん、もうちょっと分岐文を増やせば4列目まで満タンに積んでくれます。

set9.png

ここで、「似たようなことを何度も書かなきゃいけないのめんどい」と思ったあなたはきっとプログラムを組むセンスがあります。

バーサーカーは
「最右端に積んでいって、置けないようならひとつ左の列に積む」
という組み方ですよね。
つまり、AIに「置けないときはひとつ左の列において」と命令させてやればいいのです。

set10.png

このように関数を自分で作ってみてもいいでしょう。
例えば上記のように書くと、もし、置こうとしてる場所が置けないときはひとつ左に置いてくれます。



set11.png
そして、使う時はこのように書けば、4列目まで満タンに積んでくれます。


今回のことを応用すれば、積んでいる最中に消してしまいそうになったときに別の場所においてくれる関数も作ることが出来ます。

が、今は積むまで。積めたら、次に発火してやらないといけませんよね。

次回も関数を使います。

※補足
・そもそも積む命令がない時
の解決方法は
ai_IsTumiReserved関数を使いましょう。
こいつの戻り値が0の時は、命令がなかったということなので、
if文を使ってやるといいでしょう。


BぷよAI作成メモ2

さて、LuaでAIを書くにあたってですが。

なぜバーサーカーなのか。


それはバーサーカーが一番CPUにやらせやすい挙動だからなんですね。


言うまでもなくAIはコンピュータです。ただ、言われたとおりにしかおくことが出来ず、感覚でやることはできません。

ただ、いろいろな数だけは見えている「やれば出来る子」なので私たち人間(一部人外)がアドバイスを与えていくんですね。


では、ぷよをやったことない人が最もやりやすい連鎖法とは?
恐らくズラース(階段)よりもバーサーカーでしょう。実際私もそうでしたし。


とまぁ、前置きはこのへんにして実際に作ってみましょう。




まずはサンプルAIを見ていきましょう。

set5.png

一応、「名前をつけて保存」かなんかで上書きしやすくしておきましょう


さて、いきなりこれで分かるわけがないので必要ない部分は全て消してしまいましょう。

えぃ!

set6.png

ずいぶんとすっきりになりましたね。


では早速AIにぷよを置いてもらいましょう。

ぷよを置いてもらう関数は

ai_SetTumi( 数字(列) , 数字(回転) )

です。

バーサーカーはどんどん右においていくAIなのでまずは

ai_SetTumi( 5 , 0 )

と、ai_main()とendの間に書いてみて、保存したあと

CPU戦を開始してみましょう。


※補足
コンピュータの世界だと0が最初なので

普段呼んでいる1列目、2列目、3列目は
コンピュータだと、0列目、1列目、2列目となります。

なので一番右は5としているのです。



set7.png



しかし、この書き方をすると右端がいっぱいになると次のぷよを置いてくれなくなります。これは

CPUが6列目に置こうと試しても6列目に置けないので困ってるからなんですね。

では、どうすればいいのでしょう。

6列目がいっぱいなら5列目に置くようにしてやればいいんですね。


それはまた次回。


※補足
最初から置いてくれないんだけど?という人は
関係ない部分を消してしまう時に一番下にあった
endの部分を消していませんか?
endをつけたしてやれば解決することも。

BぷよAI作成メモ

まず告知


第十回VCA初代ぷよ大会開催のお知らせ。

来る10月27日(土) 21時35分 よりVCA初代ぷよ大会が開かれます。

大会メンバーも常連が多いですが、かく言う私は前々回が初参加でした。

・・・そういえば惨敗で悔しかったのでこうやってブログに書きはじめたのだと思い出します。





大会が終わった後しばらく対戦会をやっていたりなので、
環境がある方は是非一度参加していただきたいと思います!

大会ページはこちら
ぷよぷよポータル:第十回VCA初代ぷよ大会


一週間練習すれば戦えるようにはなるのも初代の魅力ですね。


告知終わり。



BぷよではLua言語を用いてAIを組むことが出来ます。
私はその手のものが結構好きで手を出そうとしたのですが、


いかんせんLua言語に触ったことはない。

一応、東方弾幕風をいじったり、学校でC言語を習ったので大体の形は分かるんですが
新しい言語なのでとっつきにくいんですね。

というわけで、まずは簡単そうなAIから作ることにしました。





今回は私の使っているエディタとその設定です。


・エディタ

サクラエディタ
もともと、弾幕風で使っていたエディタですが、設定することによりLua言語にも対応するようにしました。
やっぱり、色分けしてくれるのがうれしいですね。

set.png

共通設定から

set2.png



http://www1.axfc.net/uploader/Sc/so/384960.zip

これを解凍して出てくるファイルをひとつずつインポート。(セットを追加で別々に。)

set3.png

タイプ別設定一覧で設定18とかその辺を選択してから設定変更

set4.png

http://www1.axfc.net/uploader/Sc/so/384963.dat
color.colをインポートして、強調キーワード1にLua予約語、強調キーワード2にBぷよAI関数、そして行型のところに -- とやれば設定終わり。if文とかfor文が色分けされてすっきり~

次回、バーサーカーになろう。

デスタワー考察日記19

Bx0さんが開発した初代ぷよぷよツールがいよいよβテストという形で公開されました!

テスター参加したい方はBさんにDMなりなんなりで連絡取ってくださいね。



というわけでテスターとして参加したわけですけども。

VCAでみかける人はもちろん、そうでない人も結構いましたね。


実力も階段連鎖がようやく組める人から人外まで幅広くいます。
私はこの中なら中堅ぐらい・・・・かな?


しかし上位の後姿は未だ見えません・・・・。




私個人としては


ラスボス:ピロ彦P

8面ボス:K1さん

プロ:雨宮さん

師:MOTさん


という感じですねー
私は4面MOBあたりでしょうか

まぁしかしいつかは8面ボス、ラスボスを倒し、師匠を超え、プロと対等以上に並ぶような強さになりたいものです。




それとBぷよには観戦機能がついてまして、第三者の目から対戦風景をたくさん見ることができるので強い人の研究したい私にとってはうれしいことこの上ないです。

それで思ったのですが上記4名のかたは普通の形を組みにくいと判断すると

dl47.png

このような形にして致死連鎖を組んでいましたね。最近の流行?(まるで将棋)
これはいわゆる「かまいたち」に近い連鎖形ですね。3列目から繋がるぷよが綺麗に斜めになっていて分かりやすいですね。

参式からはもちろん、壱式からでも(やや苦しいですが)移行できる形なので覚えれるなら覚えたほうがいいでしょう。
dl48.png



どういった形になったらこの「かまいたち型」に変更していったほうがいいか、考察する楽しみがひとつ増えました。


また、一人モードのCPUのAIですがこれも作ることができるようです。(言語はLuaやC++で)


個人的にはこの手のものが好きなので、最強のデスタワーAIを作りたいなと思っています。


AI作成記も今後やるかもしれないです。

デスタワー考察日記18

【とりあえず告知】
mekaさんが10/6日(土曜日)に初代ぷよ大会(15th)を開催するようです。15thのDSをもっている方はぜひ参加してください!。
詳しくは→http://www.puyop.com/contest/104


15thや20thは初手4色がこないので初手周りで悩むことはないのですが、お釣りがないうえ、回せる時間が非常に長いのでぎりぎり致死量(6-6-6ヘルファイア、4180点)程度だと完全致死(10手5連鎖、4840点)に勝てないところが辛いところです。

それでもデスタワーは有利らしいですが。
15thは部室の、さらにPS2版しか今のところないので私は出られない可能性が高いです(20thならあるんですけどねー)。

あと、10月に入って授業再開なので更新ペースは落ちる。かも。


第十一試合

AB-AB-ACの3手ですが、4手目にC()が来ているので壱式デスタワーで組みやすい形にします。

5手目で黄をちぎったのは
がたすきがけしやすい位置にある
・2段目の底上げ
のメリットがあるためです。ただ、仮に次が黄ゾロだったなら、黄を中央に置くでしょうね。

10手目のを両方生かす位置に置いたんですが、その次の紫ゾロはちぎって中央のの底上げをしたかったところ。そうすれば、14手発火で(5-5-5-5)完全致死(AF)連鎖にすることも可能でした。
dl46.png

5連鎖党の人曰く、14手以内でデスタワーを完成させられるとどうしようもないらしいので14手以内で組むことを目標にするといいかも。


第十二試合

AA-AB-AAの割と困る配ぷよ。無理やりデスタワーを組むのなら、3手目のゾロは、「はなれ」に置くのが定石です。
が、動画では5連鎖に組んでいます。
わしは5連鎖はわからんけん、パス。


ルヨルさん>対戦者本人からのコメントはありがたいです。動画では伝わらない思考が書いてあるので参考になります。

K1さん>いつも解説ありがとうございます。毎回参考にしています。
プロフィール

都倉 欅(とくら けやき)

Author:都倉 欅(とくら けやき)
いとも容易くというハンドルネームで活動している人の日記。
たわごととか満載。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。