現在、C++ 用に作成された離散イベント シミュレーターを探しています。オブジェクト指向スタイルで具体的に書かれた Web はあまり見つかりませんでした。いくつかありますが、時代遅れです。Opnet、Omnet、ns3 などの他のものは、私がする必要があることに対して複雑すぎます。さらに、数千ノードのシステムをシミュレートできるエージェントベースのアルゴリズムをシミュレートする必要があります。
誰かが私のニーズに適したものを知っていますか?
現在、C++ 用に作成された離散イベント シミュレーターを探しています。オブジェクト指向スタイルで具体的に書かれた Web はあまり見つかりませんでした。いくつかありますが、時代遅れです。Opnet、Omnet、ns3 などの他のものは、私がする必要があることに対して複雑すぎます。さらに、数千ノードのシステムをシミュレートできるエージェントベースのアルゴリズムをシミュレートする必要があります。
誰かが私のニーズに適したものを知っていますか?
他の人は良い直接的な答えを持っていますが、別の方法を提案します。私の理解が正しければ、将来発生するイベントを投稿できる C++ などのシステムが必要であり、それらのイベントが発生したときにコードが実行されます。
このようなことを行うプロジェクトがあり、そのようなイベント システムを C++ で記述しようと試み始めたところ、すぐにもっと良い解決策があることに気付きました。
プログラムをビヘイビア Verilog で書くことを検討したことがありますか? ハードウェア記述言語でソフトウェアを書くのは奇妙に思えるかもしれませんが、Verilog シミュレーターはその下にあるイベントベースのシステムであり、動作 Verilog はイベント、タイミング、トリガーなどを表現するための非常に便利な方法です。無料の Verilog シミュレーター (これは私が使用したものです) Icarus Verilog と呼ばれます。Ubuntu や Icarus が既にパッケージに含まれている Linux ディストリビューションを使用していない場合は、ソースからのビルドは簡単です。
OmNet++ をもう一度見てみることをお勧めします。一見、非常に複雑に見えるかもしれませんが、詳細に調べると、複雑さのほとんどがネットワーク アドオン (INET フレームワーク) にあることがわかります。詳細なネットワーク シミュレーションを行う場合を除き、INET は必要ありません。
OmNet++ コアを使用することは特に難しいことではなく、他の同様のツールよりも簡単かもしれません。
イントロをご覧になることをお勧めします。
OmNet++ の魅力の 1 つは、そのスケーラビリティです。デスクトップで大規模なシミュレーションを実行できます。また、コードを書き直すことなく、同じシミュレーションをクラスターにスケーリングすることができます。
SystemCを検討する必要がありますが、OmNet++ をもう一度確認することもお勧めします。
私の学校ではSIMLIBを使用しています。これは非常に高速で、理解しやすく、オブジェクト指向の離散的で連続的なシミュレーターです。古くなっているように見えるかもしれませんが、それでも維持されています。
C、C++、および Java でのモデルの開発をサポートするMesquite Softwareの CSIM があります。ただし、それは有料のコマーシャルです。
GBL ライブラリを見てください。最新の C++ で記述されており、移動セマンティクスやラムダ関数などの C++0x 機能もサポートしています。同期および非同期のイベント ハンドラー、プリエンプティブ スレッド、ファイバーなど、いくつかのモデリング メカニズムを提供します。純粋な動作モデル、サイクル精度の高いリアルタイム モデル、またはそれらの混合モデルを作成できます。