将棋とかチェスでコンピューターと対戦していると、パターンが多くて処理に時間が掛かることがあると思うのですが、
コンピューターが思考しているときのプログラムはどのように動いてるんですか?
1フレームの中で次の一手を考えていたらFPSが著しく下がってしまう気がします。
将棋やチェスにFPSなんか関係ないとしても、思考時間中に他の動作(将棋であれば、投了とか)をすることもできないと不便だと思います。
コンピューターの思考とプレイヤーの操作を分けて処理しているのでしょうか?
1フレーム目はここまで、次のフレームはここまで、というように分けて考えているのでしょうか?
それともこれらは見当違いなのでしょうか?
ご教示お願いします
No.2ベストアンサー
- 回答日時:
結論から言うと、最近のCPU,OSの環境では、並列に実行することのできる、複数の「プロセス」や「スレッド」に「分けて」処理しています。
ご心配されているとおり、長時間の処理中に操作ができないと困るので、ユーザ操作や画面表示を取り扱うGUIスレッドと、長時間掛かる思考ルーチンは別スレッドにするのが一般的だと思います。
"FPS"は"frame per second"のことだと思います。シューティングゲームのような常に画面が更新されるゲームでは、FPSを落とさず滑らかに描画することが大切なので、ご想像のとおり、描画処理を中心にして1フレームごとに処理が完結するようにプログラムが書かれることがあります。しかし、将棋やチェスのようなゲームでは、ユーザとコンピュータのどちらかの手番が進むまでが画面の更新がなかったりするので、プログラムの構造そのものがまったく違います。
なお、マルチプロセスやマルチスレッドが使えないOSで作る場合は、GUIの処理と思考ルーチンを両立させるために、ご想像なさったとおり、思考ルーチンをブツ切りにすることもあります。ブツ切りの仕方はどういうモノを作るかによるのですが、OSが提供するほどのものではないにせよ、ある程度汎用的なオレオレマルチタスクライブラリを作っていた人も多いでしょう。
お礼遅くなって申し訳ありません。
コンピューターの思考とプレイヤーの操作を分けて処理するなんてことが本当に出来るとは思いませんでした!
>プログラムの構造そのものがまったく違います。
2つのプログラムについて調べてどのようにそれぞれのゲームが作られているか見てみるのも面白そうですね。
いずれは自分でも色んな種類のゲームを作ってみたいと思います。
ご回答ありがとうございました。
No.1
- 回答日時:
思考時間中にも優勢度(評価値?)がコロコロ変化してるみたいですしパターン別で考えてるんですかね…
もうちょっと将棋を参考に考えてみます
ご回答ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AI・ロボット 自律型AIも近い将来 誕生しますか? 2 2023/06/10 20:23
- 囲碁・将棋 詰将棋。過去作品との重複、盗作、偶然の一致については誰が検証しているのか? 2 2023/04/26 20:14
- 囲碁・将棋 将棋 聞いた話ですがAI 対 AI でも勝ち負けはあるので 最善ってというのはないのでしょうか 4 2023/02/09 23:15
- 囲碁・将棋 オセロ 2 2022/12/26 09:28
- 囲碁・将棋 人間(プロの棋士の)の能力を凌駕してる、たとえば囲碁のAIは、将棋の能力がみられないのですか? 5 2023/08/13 15:59
- 囲碁・将棋 将棋の対局に他人が口出しすることは厳禁。ではこの場合は許される? 許されない? 2 2023/02/06 19:40
- 囲碁・将棋 羽生さんが将棋連盟会長になった真の理由は…? 2 2023/06/14 17:26
- 囲碁・将棋 日本議員はいつもモメてますが、日本棋院もモメる事があるんですね? 2 2022/10/15 09:02
- 囲碁・将棋 将棋の藤井聡太氏は本当に天才・偉業なのでしょうか? 15 2023/06/03 17:48
- 囲碁・将棋 将棋のスーパーカップはやらんの? 2 2023/06/27 21:54
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
絶対パスの取得について
-
Excelでのセル内容の高速消去方法
-
小数点を含む数値かどうか判断...
-
Excel VBA での処理時間計測結...
-
再帰処理について
-
WebBrowserの読み込み待ちの処...
-
clispの実行方法
-
DoEvents関数って何?
-
Typescript が必要な理由
-
C言語 時刻差分の算出方法
-
ポインターの横に輪が回ってる。
-
プログラミングの授業でPython...
-
VB 電卓 メモリー機能
-
音程とテンポを独立して変化さ...
-
VBAでリアルタイムで計算結果を...
-
Excel2000 セルに設定された計...
-
WindowsMessage(ウィンドウメッ...
-
Excel(VBA)でSetTimer関数を使...
-
ファミリーベーシックのDATAの...
-
プログラム上のCPU稼働率低減に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
C言語 再帰処理のメリットとデ...
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
C言語 時刻差分の算出方法
-
Excel VBA データ削除の高速化
-
VBでの簡易電卓の作成(減算方...
-
Excel(VBA)でSetTimer関数を使...
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
C言語で、文字とか入力されなく...
-
C言語:関数を使うメリットとデ...
おすすめ情報