質問

プレイするCプログラムを作成しています ゴモク. 。それは使用しています ミニマックス 検索して、最良の動きを決定します。ただし、10秒間しか最適な動きを検索できます。検索機能が10秒の検索に費やした時期を判断する方法。あなたが私に、大いに感謝されるドキュメントへの例またはリンクを私に提供することができれば。

役に立ちましたか?

解決

#include <time.h>
time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < 10) {
  //search
}

つまり、私の頭に浮かぶものです。ただし、テストされていません。

他のヒント

あなたの問題は時間関数そのものではないと思います。再帰的なMinmaxアルゴリズムについて言及しました。 Minmaxアルゴリズムの停止基準は、指定された検索深いものです。時間ベースの停止基準が必要な場合は、アルゴリズムを拡張する必要があります。 反復的な深化 フレームワークと再帰的なminmax関数を返すようにします センチネルの価値, 、時間が終わった場合。

唯一の時間チェックは仕事をしません! Minimaxは再帰的な深度検索アルゴリズムであり、明らかにはるかに優れた動きがあり、最後の1秒で良い動きを見つけるために、非常に間違った動きを調べる30秒を費やすことができます!

短時間で非常に良い動きを見つけるアルゴリズムを使用する必要があり、その後、ますます多くの時間を利用できるようにすると、ソリューションが改善されます! Minimax(またはAlpha-beta)アルゴリズムを変更する必要があります 幅の最初の検索 ストラテジー。その後、いつでも非常に良い動きをすることができます。

使用できます alarm 信号。単に信号ハンドラーにグローバルフラグを設定してもらう okWereDoneNow 検索を開始し、確認し、リセットしてください。

タイマー関数よりもこれの利点は、検索の反復ごとに1回の比較のみが必要であることです。信号作業は高価ですが、一度だけ実行されます。集中的で、おそらくCPUに縛られた繰り返し操作では、これは大きな利点になる可能性があります。しかし、私の言葉を受け取らないでください - テスト!

Time()関数をTime.H.一般に、返された値は秒単位です。そうでない場合でも、同じヘッダーからdifftime()を単に使用できます。

これ 必要な機能に関する優れたリソースです。

上記のリンクはC ++リファレンスサイトからのものですが、そのヘッダーと例はすべてCコードです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top