Hatena::ブログ(Diary)

やねうらお−ノーゲーム・ノーライフ このページをアンテナに追加 RSSフィード

GT-Rの買取ならここですわ。どこよりも高く買取ってもらえるはず。お勧め!GT-R 買取
電王戦出場記念! 書籍化されたで! 監修したで!(`ω´) 絶版なってしもた Kindle版で復活!! 記事書いたで!
解析魔法少女美咲ちゃん マジカル・オープン!

YaneuLabs / やねうら王公式 / やねうらおにメール / twitter / プロフィール

 | 

2014-12-13 時代はまだゲームセンターあらしに追いつかないのか

[] 時代はまだゲームセンターあらしに追いつかないのか  時代はまだゲームセンターあらしに追いつかないのかを含むブックマーク  時代はまだゲームセンターあらしに追いつかないのかのブックマークコメント


私が小学生のころに『ゲームセンターあらし』という漫画が流行った。(1979〜1983年)「炎のコマ」と言う「スティックを高速で操作することでプレイヤー操作するキャラクターが敵から攻撃を潜り抜ける」というインチキまがいの技が出てくる。


私は小学生にして、その漫画に出てくる平安京エイリアンぐらいのゲームならオールアセンブラで余裕で作れる程度には天才児(?)だったので、「いくらスティックを高速に動かそうと、1回の描画ごとに1回の入力受付しかしないのだから、単に入力が取りこぼされるだけだろ。所詮、漫画だな。」と小馬鹿にしたものだった。


ところが、その考え方は間違いなんじゃないかと最近思うわけだ。


キーボード入力のようなユーザー入力は取りこぼしてはならないのであるユーザーは1秒間にたかだか10文字程度しか入力できない。キー入力の遅い人は数文字が限界かも知れない。それなのにCPU負荷が高いときやDisk I/Oの負荷が高いときキー入力を時々取りこぼすわけである現在CPUは数GHzというクロックに達しており、1秒間に1,000億回程度の浮動小数点演算が出来るくせに、たかだか1秒間に10回程度の入力を取りこぼすとか、ありえない。そのありえないことが現代においていまだに起こりうるのである


単にユーザー入力に関する割り込み処理の実行プライオリティを上げれば良いという話ではない。なぜなら、例えば、タブレット端末ではユーザー入力を行なうためにはソフトウェアキーボードの表示処理が必要で、Disk(SSD)への読み書きが忙しいからと言って、キーを取りこぼしたり、英語日本語キーボード切り替えに時間がかかったり、日本語変換に時間を要してはならない。ならない…が、実際はそうなるのである


ゲームセンターあらしから30年以上経ってるのにユーザー入力すら満足にさばけない欠陥OSが蔓延っているわけである。かと言ってユーザー入力に関するタスクの実行プライオリティを上げれば良いかというと、そういう単純な問題ではなく、本気で解決しようと思うといわゆるリアルタイムOSのように、高優先度のタスクが確実に実行されることを保証するための仕組みが必要になる。


ゲーム場合でも画面描画の更新回数だけしかワールド更新を行わず、キー入力も受け付けないゲーム多数派であるが、格闘ゲームなんかだと、画面描画は60fpsより遅れようともワールド更新(と入力)は1/60秒ごとなのを保証する作りになっているゲームもある。(10年ぐらい前に私がSNKKOF作ってたプログラマーの人たちと仕事をしたときも、そういう話が出た。)


もっと繊細なコマンド入力音ゲーのような超絶タイミングを必要とするゲームならばキー入力だけ画面描画より細かいインターバル入力を受け付けるのはおかしくはない。(まあ、入力デバイスUSBでぶら下がってたりするとどこまでの精度が保てるかという問題はあるが…。)


そう考えると、『ゲームセンターあらし』のように開発者の想定を超えた激しい入力がされたとき開発者想定外挙動をする(バグる?)ようなゲームがあっても、まあ、おかしくはないのかな…。


ゲームセンターあらしから30年以上を経て、あの漫画は自分のなかでは「そんなんありえへんわ!から、「ありえるかも…」に変わりつつある、という話でした。

amuseumamuseum 2014/12/13 10:34 入力遅延の観点から

>画面描画より細かいインターバルで入力を受け付ける

を行っている例としてこんなのを紹介します
http://www.ouma.jp/ootake/delay-j.html

Direct某の問題もあるようですが、内部処理をVsync以上に細分化する意味もちょっとはあるということで。

yaneuraoyaneurao 2014/12/13 10:52 ↑その例は、Vsyncと同期させる画面描画が前提にあって、かつ、次のワールド更新のなるべく直前の入力状態が取りたいがために「約1/240秒毎に休みを入れる」ことで入力のpolling周期を細かくしているようなのですが、ここが1/240秒である意味がよくわからないです。これ以上細かくしてもCPU負荷が高くなるだけで意味がないという判断なんでしょうか…。別にこの構造なら入力用にスレッド一つ起動して、そいつに処理させてもいいような気がします。

timelimitstimelimits 2014/12/13 14:14 昨今のリッチなゲーム機向けシステムは

> 別にこの構造なら入力用にスレッド一つ起動して、そいつに処理させてもいいような気がします。

この構造になってますね。これをシステムレベルでやってます。
入力のリスナーは複数いるため、それぞれのリスナーの都合でデバイスに問い合わせると高コストです。
ドライバーがデバイスのポーリングを描画フレームよりも数倍高速に行い、
リスナーはドライバの溜め込んだデータを参照する感じで。

yaneuraoyaneurao 2014/12/13 22:35 ↑なるほろ。音ゲーの場合などは入力遅延の問題よりは、押されたタイミングと曲の再生ポジションとの差がどれだけかという問題が大きいので、曲の再生遅延は事前に計算できるものとすると、押されたタイミング(時刻)は低レベルのドライバが1/10ミリ秒ぐらいの精度で記録しておいてくれると嬉しいのですが、そういう作りになっている入力デバイス(+ ドライバ)ってないもんですね…。1/60秒単位で正確に押しても満点とれないような糞判定の音ゲー多すぎ…。

Ta(ryTa(ry 2014/12/15 09:15 最近のタッチパネル端末の上で行うゲームはゲームになってない気がする。

こばこば 2014/12/15 19:12 ソフト的には1μS単位でもいいでしょうけど、物理的なボタン(ジョイスティックのスイッチを含む)にはチャタリングが付きものですから、そっちを改善しない限り10msくらいが限界なんじゃないでしょうか。

yaneuraoyaneurao 2014/12/15 23:52 ↑30年ぐらい前に、ジョイパッド(ファミコンのコントローラー型のPCに接続するデバイス)だと計測したときに結構なチャタリングがあって5〜10msぐらいの幅で積分してやらないと入力状態を2度検出してしまっていました。しかし、近年のジョイスティックのスイッチはそのへんが改善されているのか、1ms間隔でポーリングしてもチャタリングは検出されないです。ジョイスティック側に積分回路が入っていて、チャタリングは完全になくなった状態の値しか返してこないのかも知れませんが。だとしたら、この積分回路分の遅延は潜在的に発生していることにはなりますが、ポーリング間隔は限りなく小さくしておくほうが、入力されてからの遅延時間は小さくなることにはなります。

timelimitstimelimits 2014/12/16 01:25 チャタリングについてはハードウェアレベルである程度回避している様子です。

チャタリングは信号の"跳ね返り"のような現象です。強く下に叩きつければそれだけ激しく
跳ね返りますので、一般的には電流値を調整したり抵抗やコンデンサでゆっくり落とすようにしたりとか。
ヒステリシス特性のある端子につなぐとかも効果的でしょうね。

ななしななし 2014/12/17 21:40 音ゲーでms判定なのに入力が毎秒60回だったりすると悲惨ですね。ノーツ毎に見た目と判定の前後幅が異なるカオス状態です。
ただ60fpsでフレーム判定されても、見た目に対するリズム的な違和感が凄まじいのでms判定かつ入力判定は1000fps欲しいところです。
フレーム判定するなら、流れてくるノーツもフレーム単位でクオンタイズして配置してほしい……

yaneuraoyaneurao 2014/12/18 07:42 ↑*1 「1000fpsは欲しいところ」とは、どこの全国スコアラーさんですか…。
↑*2 > チャタリングについてはハードウェアレベルである程度回避している様子です。
普通、そうですよね…。私が30年前にジョイパッドを分解したとき、特別な回路は何もなくI/Oに直結みたいな感じでした…。

KKKK 2014/12/18 23:27 リアルタイムOSが必要ってTRONはやっぱ慧眼だったか。
マイクロソフトのレースゲームのForza Motorsportシリーズは映像は60FPSだが内部処理が360FPSなってて快適らしい。

bbgbbg 2014/12/19 12:31 新ブログ拝見しました よかったです
こちらでも告知記事を出された方がいいかもしれませんよ
例えば自分の場合、Twitter を普段チェックしてないので、気づくのに時間がかかりました

yaneuraoyaneurao 2014/12/19 14:39 ↑*2 レーティングゲームですと内部処理はある程度細かくないと走行ラインが体感と一致しなかったりするんですかね…。(私にはよくわかりませんが…)
↑*1 ありがとうございます。ひまうら王の実験を開始するときにこちらのブログでも告知します。

Ta(ryTa(ry 2014/12/20 09:55 Forzaはアイマスの痛車を作るゲームだと思ってた。

アマグラマーアマグラマー 2014/12/24 21:36 レースゲームの内部FPSが高いのは、挙動の物理計算のためでは。
少なくとも自分が関わってたps2のレースゲームではそのために描画以上に回してました。

yaneuraoyaneurao 2014/12/24 21:43 ↑ああ、なるほど。接触判定とか、ある程度ワールド更新が細かくないと正確にならないので、そういう意味はあるんですかね…。

IQ135IQ135 2014/12/25 06:34 やねうらおさん、
対戦脳トレアプリで世界1目指してください!

り 2014/12/28 08:49 2次元で三体問題シミュレーションプログラムを組んで、ワールド更新の時間間隔でどうなるか見てみるのがいいと思います。

○○法みたいな複雑な方法は一切使わずに、めっちゃシンプルに重力があって、それで星が引っ張られてみたいなめっちゃシンプルな方法で

yaneuraoyaneurao 2014/12/28 12:27 ↑*2 反射的に答えを出すのは若いほうが有利なので世界一になれないとです(´ω`)
↑*1 それ昔、ビリヤードゲームを作ったときに似たことをやったのですが、ワールドの更新の刻みが大きいと衝突の仕方が嘘くさくなりますね。(あまりにfpsが低いとボールがボールを突き抜けていったりしますが…)

YakitoriYakitori 2014/12/31 05:06 今年ももう終わりますがいいものが見れました。
来年もやねさんにとって実のある年でありますように。
皆様、よいお年を!

さびねこにゃさびねこにゃ 2015/01/03 05:27 こういう想定外の現象はネットワークゲームでもあります。
ファンタジーアースゼロというゲームは帯域を抑えるために2歩ごとに位置を送るという動作をしていました。初めのうちはこれでうまくいっていたのですが、1歩動いて1歩別の方向に動くことで正しい位置を伝えられないというバグを見つけてしまいました。プレイヤーは少しでも優位に立つためにこのバグを積極的に利用したので、運営は禁止令を出しましたが、相変わらずこのバグを利用する人はあとを絶ちませんでした。
ちなみに同じ会社が作ったメビウスオンラインではこのバグは解決されてますが、被弾側のほうで攻撃が当たってないのに当たったと判断されるバグが見つかってしまいました。

さびねこにゃさびねこにゃ 2015/01/03 05:29 追記
ファンタジーアースゼロは被弾側判定。メビウスオンラインは攻撃側判定となっています。

YakitoriYakitori 2015/01/05 18:32 やねさんに質問です。
このブログは近いうちに閉鎖されるのでしょうか。
それと、HDDでも搭載しないとIOをビジーにするのは難しいと思います。SSDで快適になりましたよね。

ニコ厨ニコ厨 2015/03/29 21:29 バグと言ってしまえばそれまでですけど、TASではフレーム刻みでタイミング測って操作することで攻撃や壁をすり抜けたりメモリ破壊や任意コード実行したりする奴がちょいちょいありますよ。
マリオ3とかスーパーマリオワールドとかマリオ64辺りは遊びつくされてる感がすごい。
で、そういうのを実機再現しようとする人も実際いてキャッスルヴァニアのRTAとか酷い。

ファミコンゲームでファミコンゲームで 2015/04/17 01:36 開発版を某達人が高速連射したらフリーズした、という話は本当だったのでしょうか…。
昔からのすごい疑問ですわ。

探偵ナイトスクープに応募してみようかしらん…。

トラックバック - http://d.hatena.ne.jp/yaneurao/20141213

2014-12-08 やねうら王、電王戦バージョン提出しました

[] やねうら王、電王戦バージョン提出しました  やねうら王、電王戦バージョン提出しましたを含むブックマーク  やねうら王、電王戦バージョン提出しましたのブックマークコメント


電王戦出場バージョンのやねうら王、提出期限が今日までだ。定跡は16手目までしか出来なかった。32手目までの定跡は1/4ほど出来たが、全部作るにはあと1ヶ月ほどかかりそう…。(要するに今回は間に合わない)


部屋のPCはフル稼働で、冬だというのに暖房を入れなくても暖かい。それどころか日中冷房を入れないと暑くて部屋に居られないぐらいだ。


肝心のおもてなし定跡だが、後手番ということもあって、あまり芳しくない。後手番だと評価値が-100ぐらいからスタートする。AWAKEの巨瀬さんに「序盤で評価値-100の局面から指し継がせたとき、-100側は勝率3%ぐらい落ちますよね?」と尋ねたら「もっとじゃないかな…。5%ぐらい?」と返ってきたので、もしかしたら、コンピューター将棋では後手番は勝率45%ぐらいなのかも知れない。


Bonanza6と10分切れ負けで100戦させたら95-2-3。負けた3局はいずれもやねうら王が後手番だ。悪い予感しかしない。


あと、おもてなし定跡のため、評価値-200までは許容するようになっているので、下手な定跡に突っ込むとたぶん10%ぐらい勝率が下がる。定跡がたくさん搭載してあって事前研究で必勝パターンを見つけられないことが大切だが、後手番だと先手の初手でいきなり定跡を外すことだって可能なのでいかにも危うい。


定跡の穴は結構ありそうな気はする。やねうら王が好んで指す、横歩取り33桂戦法とか。ただ、激しい戦型なので指すほうも怖いと思うのだが、事前研究が十分あればそうでもないのかな…。


せっかくなのでランニングを兼ねて評価関数テーブルの値が別のバージョンをfloodgateに投入してみた。


f:id:yaneurao:20141208102715p:image


一応、ponderと置換表32768MB設定で、きちんと動いているようで一安心


これでやっとやねうら王2015の開発に入れる。


あ、その前にひまわり将棋(人間棋譜を参考にしない)×やねうら王 = ひまうら王の公開実験年末にやる予定だ。駒得のみの評価関数のやねうら王より強くなるのか弱くなるのかすら実験してみないとわからない。それがこの年末から年明け(1月15日ごろまで?)にかけて判明するというわけだ。Bonanza6と同等の強さになれば大成功と言えるだろう。なお、ひまうら王は思考エンジンバイナリを公開する。楽しみに待たれよ。

ジャックジャック 2014/12/08 13:33 floodgateで1位wwたった一ヶ月でAWAKEより強くなったんですか?

話は変わりますが↓の動画面白いですよ。
電王戦番外編www

2014年12月07日 11時40分 投稿
14.12.5 永井兄弟 詰将棋
http://www.nicovideo.jp/watch/sm25072035

2014年12月07日 11時43分 投稿
14.12.5 永井兄弟 将棋(CPU戦)
http://www.nicovideo.jp/watch/sm25072119

きのあ将棋(開発者 山田元気)VS永井先生(ながいせんせい)

きのあ将棋
第2回将棋電王トーナメント予選14位
第24回世界コンピュータ将棋選手権 二次予選21位
第23回世界コンピュータ将棋選手権 一次予選12位

永井先生
1978年6月9日生まれ。本名は永井浩二(ながいこうじ)。
一般的には永井先生の名で知られるが、
他にも愛称を持ち、ジーコ(浩二の反対読み)、
チンパン、チャバネ、てんてー、猿等がある。

ヨシヨシ 2014/12/08 14:46 トーナメントの時と比べてどのくらい強くなりました?

aa 2014/12/08 17:14 正確なレーティングを出すためにfloodgateではもうちょっと対戦数が欲しいところですが、1coreでの結果ならかなりの強さですね!
先日もPonanzaがふらっと来て勝ちまくってましたし、今回の電王戦出場ソフトのレベルはもうその出場ソフト以外相手にならないような強さを感じますね

yaneuraoyaneurao 2014/12/08 21:53 ↑*3 永井先生、懐かしいですね。ニコニコのβ時代によく見てました。やねうら王を強くするのはまだこれからです。
↑*2 まだトーナメント版に数%勝ち越す程度です…。手元でやっているとGPSfishには6,7割勝つようですが、サンプル数が少なくてよくわかりません。
↑*1 定跡生成のバックグラウンドで1coreだけ余らせて参戦していたのですが、定跡生成がノルマまで終わっていたため、8coreで参加してることになってました。すみません><

り 2014/12/09 07:25 コンピュータ将棋選手権には出場しないんですか?
クラウドファンディングで7億集めるのは無理でもクラウドファンディングで100万くらい集めてコンピュータ将棋選手権の賞金にして、やねうら王に出てもらうのは現実的なんだけど、う〜ん
やねうら王を引きずり出すのは

aa 2014/12/09 19:42 なるほど 確かに1coreとしては強すぎるかもと思っていました(笑)

電王戦楽しみにしてます〜

茶田茶田 2014/12/09 23:27 お、ついにナントカちゃんねるの住人を完全論破しにかかりましたね。「ワシの一行一行からプログラミングの真髄を学ぶが良い」と言えるものをバシッと作っちゃってください。

ピンピン 2014/12/10 01:09 お疲れ様でした。改造やら何やら色々と負担が大きい事や役回りばかりやって頂いて本当にすみません。
ひまうら王はとても興味深い実験で楽しみです。しかし駒得に関する評価関数はひまわり将棋の中にもきっとあるのに、どうやって駒得のみの評価関数のやねうら王と合体される予定なのでしょうか。
評価関数がどうなっているのか解説して頂いても難しくて理解できないかもしれませんが、ひまわりとやねうら王の評価関数のベストミックスを探る中で、棋力の要素やそれぞれの要素の重要性とバランスを考えるのが実験の意味の一つにあるのなら
駒得とそれ以外の要素についてどれくらいの重み付けがあるのか、評価関数の開発部分の解説を書いて頂けるとうれしく思います。

yaneuraoyaneurao 2014/12/10 02:23 ↑*4 コンピュータ将棋選手権のほうは、出場するかどうか考え中です。
↑*3 ありがとうございます。
↑*2 今回の年末の実験で何が産まれるかは予測不可能なのでやってみないと…ですね。
↑*1 ひまわり将棋とはタイアップしてないです。私が勝手に「ひまうら王」と名づけているだけです(^^;
> 駒得とそれ以外の要素についてどれくらいの重み付けがあるのか

評価値 = 駒割 + 位置評価(2駒関係・3駒関係)のように単純に足しあわせてあるだけです。位置評価にどんな点数がつくかは…例えば1間龍(玉の2升隣の敵の龍)に歩5枚分ぐらいの価値がつきます。

YakitoriYakitori 2014/12/10 13:36 やねうら王2014は突貫で作ったと確かおっしゃってたと思いますけど、やねうら王2015は長めに開発期間を取るおつもりなのでしょうか。
っていうか、将棋ソフト熱が燃え上がってますか?

yaneuraoyaneurao 2014/12/13 09:49 ↑やねうら王2014でやり残したことをしばらくやります。やねうら王2015の開発というよりは2014の宿題というか..(´ω`)

namorinamori 2014/12/24 18:19 新Blog拝見しました。

floodgateでこれだけ強いのですから、やねうら王が
一方的に負けることはないんだろうと思います。

でも連盟はやねさんには負けたくないと思っているはず(笑)

ジャックジャック 2014/12/26 10:36 やねうらさんのツイッターを見ると12月18日に息子さんがトイレをうんこまみれにしてます。
floodgateの最近二週間のレーティングを見てみるとうんこが1位になってます。
これは偶然といえるのでしょうか・・
うんこにインスピレーションをうけた、やねうらさんがやねうら王の別バージョンをうんこと名付けてfloodgateに投入したと考えるとしっくりきます。
やねうら王はうんこですか?

yaneuraoyaneurao 2014/12/26 12:08 ↑*2 ありがとうございます。
↑*1 floodgateのうんこはやねうら王ではないです…。

ジャックジャック 2014/12/26 13:37 あぁ違うのか・・
迷探偵の推理外れました。
残念ながら・・事件は迷宮入りです。
ありがとうございました。
orz

り 2014/12/28 08:07 第25回世界コンピュータ将棋選手権 参加者募集のお知らせが
告知されてますね。

参加申込期限は2015年1月31日です。あと1月です。

やねうらお氏はコンピューター将棋ソフト作成おいて全世界72億人の頂点なのか。やねうら王は世界の頂点なのか?
やねうら王の活躍を見てみたいです。

トラックバック - http://d.hatena.ne.jp/yaneurao/20141208
 | 

1900 | 01 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 06 | 08 | 10 | 11 | 12 |
2015 | 01 | 02 |


Microsoft MVP
Microsoft MVP Visual C# 2006.07-2011.06