1

さて、タイトルが示すように、私はモラバラバと呼ばれるゲームをコーディングしています。それはコンピューター対人間のゲームになります。コンピュータープレイを生成するためにゲームツリーとアルファベータカットオフを使用します。すべてのコンピュータープレイは特定の時間(たとえば15秒)で行う必要があります。

ターン開始からの経過秒数をカウントし、システムに過負荷をかけずに制限時間を超えていないことを検証するための最良の方法は何ですか?知られているように、ゲームツリーを生成するときは時間が貴重です。制限時間を超えると失効します。

軽量アルゴリズムでこれをどのように行うことができるか知りたいです。x秒ごとに制限時間に達していないことを確認するにはどうすればよいですか?この検証の時間はごくわずかですか?

前もって感謝します。

4

2 に答える 2

1

はい、この検証の時間は、離散的な間隔で経過した時間をポーリングし、それを開始時間と比較して、これまでに経過した時間を知るために、ほとんど無視できます。

ここに2つの解決策があります。

  • アルファベータプルーニングを計算しているのと同じスレッドにタイムチェックを埋め込み、それに応じて停止し、これまでに見つかった最良のソリューションを返します
  • AIコードを別のスレッドに配置し、時間がしきい値を超えたときに中断します。これまでの最良のソリューションがすでにどこかに保存されていることを確認して、それを取得できるようにします。

2番目のアプローチは恐ろしいように聞こえるかもしれませんが、特定の状況では、コードを簡単に適応させて呼び出し先から中断することができないため、アルゴリズム自体の経過時間をチェックするのは実用的ではありません(たとえば、多くの異なるステップで構成される非モジュラーアルゴリズムがある場合、あなたの場合ではありませんが)

于 2012-05-14T01:03:53.430 に答える
0

少なくとも1秒に1回チェックしていると思われる方法で、すべての「ステップ」またはNステップごとに時間をチェックすることから始めます。計算の性質上、これが実用的でない場合は、POSIXタイマーなどを使用して、特定の時間が経過したときにプロセスに信号を送ることができます。

于 2012-05-14T00:56:29.977 に答える