2011-12-27 27 views
2

C#で離散事象シミュレーションを実行したい。私はランダムな歩行パターンの後に同時に3つのボールが画面上を回転するようにします。ボール1が現れて転がり始めると、ボール5が2番、ボール3が10番になり、ボール3が現れるはずです。いずれかの2つのボールが十分に近づくと、ボールの色は変化するはずです(近くにいる限り)。離散事象シミュレーションの例

私は離散事象シミュレーションには新しく、私はC#プログラミングでどのようにそれを行うのか理解したいと思いますか?モデルの作成にはどのようなステップが必要ですか。私はグラフィックスなどを知っています。

答えて

4

デザイナーでツールボックスからフォームにドラッグするか、必要に応じてコードでインスタンス化するタイマーを使用します。タイマーをダブルクリックして、Nミリ秒ごとに発生する_Tickイベントをコード内に設定します(タイマーの.Intervalプロパティがこれを管理します)。 .Intervalを1000(1秒)に設定し、X座標とY座標で独自の位置を追跡するオブジェクトを使用します。

Randomオブジェクトを使用して、ボールの次の位置変更の方向を生成し、タイマーのイベント内で、各ボールの位置変数を更新します。

Rawスレッドを使用することも可能ですが、Timerはすべてを自分で管理することなく、その力を発揮します。

+0

返信ありがとうございます。私はタイマーを使ってそれからスレッドを使用しました。両方のソリューションが動作していますが、スレッドには奇妙な動作があります。私は離散事象シミュレーションに関するいくつかの理論を読んでおり、離散事象シミュレーションの構成要素はクロック、事象リスト、乱数生成器、統計であると述べている。ボールの例では、キューをどのように使用/有益に使うのでしょうか?第2に、2つのボールが近づいたかどうかを追跡する方法、それのために別のタイマーイベントを実行する必要がありますか? –

+0

@OsmanKhalidキューをどのように使用するのかよく分かりません。私はあなたが最初に適切な間隔でボールをリリースするためにそれらを使用できると思います。 2つのボールが衝突しているかどうかを確認するには、 '_Tick'メソッド内のすべてのボールの動きを終えた後で座標が重なっていないかどうか確認してください。 – jonsca

3

新規参入をお勧めする:オペレーティングシステムのタイマーやスレッドを使用して

は、離散イベントシミュレーションは動作するはずの方法ではありません。これらの1つをビルディングブロックとして使用すると、誤解を招く恐れがあります。

  • Wikipediaの記事を読む最初についてDiscrete Event Simulation(DES)

  • 数学的事象シミュレーションで働くことを証明ので、 『形式主義』と呼ばれる「モデル」があります。実装する必要があります(たとえば、DEVS)。

  • リストされたDES List of discrete event simulationソフトウェアをウィキペディアで見るとよいでしょう。

  • また、DESについて有用なsigmawiki(プログラム、例、チュートリアル)があります。 SharpSimReact.NETは、C#のDES実装です。

関連する問題