五目並べを再生するCプログラムを作成しています。ミニマックス検索を使用して、最適な動きを決定します。ただし、最適な動きを検索できるのは10秒間のみです。検索機能が10秒の検索に費やした時間を判断する方法。例またはドキュメントへのリンクを提供していただければ幸いです。
5 に答える
#include <time.h>
time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < 10) {
//search
}
つまり、私の頭に浮かぶのは。ただし、テストされていません。
唯一の時間チェックは仕事をしません!ミニマックスは再帰的な深さ優先探索アルゴリズムであり、明らかにはるかに優れた動きがある場合は30秒かけて非常に間違った動きを調べ、最後の1秒間で良い動きを見つけることができます。
あなたは短時間でかなり良い動きを見つけるいくつかのアルゴリズムを使用する必要があります、そしてそれから、より多くの時間が利用可能になると、それは解決策を改善します!幅優先探索戦略に合わせて、ミニマックス(またはアルファベータ)アルゴリズムを変更する必要があります。そうすれば、いつでもかなり良い動きでカットすることができます。
あなたはalarm
信号を使うことができます。シグナルハンドラにと呼ばれるグローバルフラグを設定させokWereDoneNow
、検索を開始、確認、リセットするだけです。
タイマー関数に対するこれの利点は、検索の反復ごとに1回の比較のみが必要なことです。信号の作業は費用がかかりますが、実行は1回だけです。集中的な、おそらくCPUにバインドされた繰り返しの操作では、これは大きな利点になる可能性があります。しかし、私の言葉を信じないでください-テストしてください!
time.hでtime()関数を使用できます。通常、戻り値は秒単位です。そうでない場合でも、同じヘッダーからdifftime()を使用するだけで済みます。
これは、必要な機能に関する優れたリソースです。
上記のリンクはC++リファレンスサイトからのものですが、そのヘッダーと例はすべてCコードです。