パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

すでにコンピュータにプログラム勝負で負けていた話

2016-11-12 | コンピュータ
c++のソースを-O3という最適化のコマンドでコンパイルすると4倍ぐらいAIが速くなった。

これはすごいことになるぞ投入してみるけどちっとも順位があがらない。謎のタイムアップ負けを繰り返す。(AIのコンテストに参加しています。)
とにかくスピードを上げるしかないとソースを見てみると同じ配列の複数回の呼び出し等、高速化できるところがあったのでそこを修正する。

プログラムがちょっとしたことで飛躍的に速くなったり強くなったりするのが報酬となって続けてしまうのはパチンコなどと同じなのだろう。

さらに速くなって前のプログラムに6戦全勝!これなら大幅アップ間違いなし投入してみるが46位から67位…

いつものことです。


呆然として履歴をみるといつもどおりに上位集団に完敗かタイムアウト負け
原因をあれこれ調査してみるけどローカル対戦では起こらない現象

ひょっとして-O3のオプションが原因とか疑うけどそもそもサーバ側ではその設定はしていない。
そんなところも疑ったので-O3と-O2でローカル対戦、あれ?-O3前ほど速くない1.2倍ぐらい??

自分が行った高速化、すでにコンパイラがこうしたほうが速くなるよと先に修正してらしい。


ローカルでもサーバー側の3倍遅いぐらいのスピードになってきて遅いながらも同じ設定で検証してみる。
はっきりとは原因不明ながら少し手を入れたソースで発生しなかったのでそのソースを本番投入!

昨夜順位が落ちていくときは1時間に7回とか対戦していたのに
今は1時間以上対戦待ち…

しょうがない3倍遅い環境から対戦させるしかない。

すると今度は1手20秒越えのタイムアウト負け、この打ち切り制御も入れないといけないのかー

時間計測には
auto start = std::chrono::system_clock::now();
というのを使っているけどsystem_clock??これを使うのが正しいのかも未確定。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。