programming

ICPC模擬コンテスト

とりあえず始めて全ページ印刷して始めようかという雰囲気になった時点でA問題を解いているチームがすでにいくつかある。さすがに早いな、思いつつ着手。 A,B問題は一時間とちょっとで解けたものの次に着手したE問題が厄だった?とりあえず数値積分で突撃し…

初めてcgiを書いてみる

今日はコンベンションに行くつもりだったが寝過ごした。 6時半に起きたけど二度寝して寝坊した。絶望した!! 腹いせにcgiを始めて書いてみる。 最近オンセの六門クロスボーンが非常に快適だ。それも全自動複合判定装置が出来たからで、非常にスムーズに進…

Gather the Maps!続き

思いついた解法を頼りに作ってみたら、無事クリア。どうやら今までのコードだとこのサンプルが通らなかったらしい。このために丸一日使ってしまった input 4 3 1 2 6 2 2 5 3 1 3 6 3 3 4 5 0output 5 せっかくだからコードも晒す

Gather the Maps!

ACM/ICPCの問題を解いてみる。解けそうなアルゴリズムはすぐに思いついたが、実装してみるとリジェクトされてしまう。いくつかテストケースを作って通してみても通っているように見える・・・どこが間違っているかわからない。また一から作ってみよう一応ソ…

携帯用サイトのタグ変換

なんだか良く分からないけどこうなっているらしい DOCOMO:tableタグが使えない。でもPやNだと使えるらしい。メインページが開かないのでよくわかんない。 ボーダフォン:ポート指定ができないらしい。でもformもtableも使える。気にする所なし。 KDDI:form…

オセロ開発記〜パターンによる辺の評価完成〜

辺だけに注目して確定石をカウントする関数を作っている最中に閃きました。盤にインデックスハッシュがあって一列だけなら一意に定まるのだからそのハッシュ値に対応した確定石の数をあらかじめ入力してやればより正確に速く評価が出せるのではないかと。結…

オセロ開発記〜実装予定〜

AIはゲームの進行によって5段階(6段階だったが1段削除)に分ける 0レベル(削除) 定石 1レベル 序盤を定義 相対着手可能数、危険な星打ち、確定石、辺の評価を使用 探索アルゴリズムはnegascout 2レベル 中盤を定義 相対着手可能数、(危険な星打ち?)、…

オセロ開発記〜分割統治の応用で速度アップ〜

現在の探索方では一番下、つまりパーフェクト負け=−64石差から順番に評価を上げていき限界に達するとそこで評価値の上昇が止まる仕組みになっていたようです。そして一回の上昇値は2〜1だったので、必然的にかなり多くの回数探索しているようだったので…

オセロ開発記〜MTD(f)探索アルゴリズム実装?〜

とりあえず資料を読みつつMTD(f)探索アルゴリズムを実装しました。しかし、評価値は微妙に変動したりしてイマイチうまくいっているかは微妙なところでしょうか。一応互いに最善手を打っているようですけどね。 そしてよく見てみると私はどうやらMTD(f)探索ア…

オセロ開発記〜置換表導入完了〜

前回のバグは手を戻す段階のアルゴリズムのバグが原因だったようです。どうやら手を戻す時の手順が悪かったらしく、配列のキーの最大よりも大きな数をキーよりも大きな数を渡していたみたいでした。ここを修正してやると、置換表本体はすべてうまく通りまし…

オセロ開発記〜置換表導入・・・ならず!残念〜

普段見るオセロアルゴリズムのサイトはほとんどがminimaxのアルゴリズムについて解説していますが、negamaxについてはオマケ扱いで少ししか解説が載っていないんですね。negamaxからならnegascout/PVSの方が解説サイトもあるし実装も楽です。でもそれじゃ某…

オセロ開発記

αβ探索を実装しました。早速実装して読ませてみました。 黒の188539石勝ちです!! ポーン( Д )゜ ゜ どう見てもうまくできてません。とりあえず原因究明します。

オセロ開発記

AIがとりあえずできました。今は着手できる一番最初の座標に打ち込むだけです。これで何も考えずにゲーム終了までいけるので楽々です。ゲーム終了時のテスト終了です。 次は本格的に評価関数を作ります。とりあえずαβ探索を作って、そのあと置換表ですね。

オセロ開発記

とりあえず大学に二日間ほど泊り込んでそこそこ進みました。現在、着手可能箇所を一覧で出すことと裏返し処理に成功しました。一応終了作業部分も作りましたがテストしていないのでうまくいっているかわかりません。ここは思考AIができてからテストする予定…

新生オセロ

いままで作っていたオセロではいろいろと限界が見えたので新しく作り始めました。いままでは適当に紙に仕様を書いています。でも実はまだ仕様が完成していません。でも期限が迫ってきているので仕方なくコーディングしながら仕様を固めることにしました。仕…

電卓

MSVistaにちなんで1毘素陀(びすだ)まで正確に演算できる電卓を作ろうと思うのですが、これが中々な難しいです。 ちなみに1毘素陀=10^14680064です。知らない人は参考にしてください。 *参考リンクhttp://www.sf.airnet.ne.jp/~ts/language/largenumber…

MTD(f)について調べてみる

深読みアルゴリズムは現在αβ法を使っていますが、さらに効率のよいアルゴリズムがあるらしいので調べてみました。基本は全部minimax法が基準になっているのでアルゴリズムとして大幅に違うというものはありませんが、MTD(f)法がかなり高速に読めるらしいです…

αβ法実装

やっとアルゴリズムが完全に頭に入ったので実装に踏み切りました。コード変更はちょっとしかないのでバグも出ずに完成。 現在がんばれば17手まで読みきれるようになりました。

久しぶりにオセロのソースコードを見る

何だこの底辺を這いずり回ったコードは!絶望した!コピペした関数に絶望した! というわけで特に処理を増やすわけでもなく弄るのが怖いのでコメントつけて整理中です。それでも触るのが怖い部分がある・・・終わっとるorz

突然X打ちは勘弁

私のプログラムは5手先を読んで隅が取られるか見ているので、基本的には悪手に入るX打ちはやらないのですが、序盤でX打ちをすることがあります。手前みそでうが、X地点位置評価を落としてみました。これで序盤のX打ちは無くなります。これが功を相したのかAI…

Zebraの棋譜入力に対応

いちいち解析機能を使うためにZebraを使ってポチポチと打つことが面倒になってきたのでZebraの入力機能に対応した結果をファイルとして出力できるようにしました。これでも私はボタン一つで解析機能を使えるようになって非常に便利です。他のプログラムとの…

オセロ中盤を改良

どうも盤の場所による評価がAIを弱くしているように感じたので盤の評価を隅だけにしてみたところ、僅かに強くなりZebra1手読みに勝てるようになりました。ここらへんが場所による評価の限界点だったようですね。それでもまだ悪手、疑問手はたくさん打って…

源平碁一応完成?

とりあえず外見を整えて、プレゼン用には完成しました。プレゼンはうまくいくといいですが・・・まあ適当にがんばります

源平碁ちょっとだけ改良

ログ保存と前手の表示、アニメーションするようになりました。あとタイトルを作って調整すればグラフィックは完成になります。その後はAI作りが残っているのですけどね。 何かやたらと予定が詰まっていて源平碁に割ける時間が少ないのが不安です。さすがに今…

源平碁続き

ゲーム中に設定を変更できるようになりました。べつにマルチスレッドなんてする必要ありませんでした。面倒な処理をしなくてよいので楽ですね。 cygwinではmousemask関数がうまく機能していないようです。原因はOSにあるようですけど、これを直す手段が見…

源平碁プログラム途中経過

とりあえずソースコードが全部飛んでいったので、また新しく作り直さなければなりません。ある程度は復旧しましたけど、肝心な所がまったく直りません。なぜならcygwinがどういうわけかマウスイベントを検知しないからです。おかげでGUIに対応できないし、こ…

謎のエラー

cygwin上でncursesが動かないな、と思ったらncursesが無くなっていました。gccの動きも怪しいなと思ってHello Worldを出力してみました。コンパイルはできましたが、警告が出ました。しかも警告は文字化けして何書いてあるか不明です。もうcygwin使いたくな…

実装ミス発見

さて、大問題です。現在配列を[X][Y]の二次元配列にしていました。でも配列って[縦][横]なんですよね。だから本来なら[Y][X]の方が分かりやすいのです。今になっての変更は非常にきつい・・・オセロ作ったなかで一番疲れたような気がしました

squeakは外から絵を持ってこれることが判明

これで選択肢が一気に広がりました。とりあえずマウスで書いた雑な絵を使わなくて済みそうです。よかった。よかった。

バグがやっと取れた

散々悩ませていたバグは二次元配列の指定ミスという一行にも満たない場所で起こってました。バグで悩んだ時間がすごくもったいないです。 ここらへんでICPC対策の問題も解きたいし、山のようなレポート提出があるので改良は後回しなんですけどね。 バグが取…