プトレミー
Ptolemyは、並列異種システム用のリアルタイムシミュレーション環境です。 このプロジェクトは、バークレー大学の学生がエドワード・リー教授の監督の下で開発しています。 使用される開発言語はJavaです。 プトレマイオスは常に進化しています。 新しい計算モデルと新しいデモモデルのサポートが追加され、ドキュメントが拡張されました。
Ptolemyを使用すると、たとえば、離散イベントモデリングや有限状態マシンなど、さまざまな計算モデルを使用できます。 モデリングはアクターとディレクターの概念に基づいており、それぞれ「エグゼクティブリンク」と「コントロールリンク」として翻訳できます。 Directorは、シミュレートされたシステムが機能する計算モデルを定義します。 多くのActor'ovは、それらの間の接続と組み合わせて、実際のデバイスシステムを決定します。 最初の記事では、離散時間モデルを取り上げます。
離散イベント
DEは、キューイングシステムや通信ネットワークなどのリアルタイムシステムをシミュレートするための基本的なツールを提供します。 シミュレーションプロセスは、アクター間のトークンの移動です。 マーカーは本質的にある種のデータ構造を表します。 マーカーがアクターに入ると、アクターの内部状態を変更し、新しいイベントを生成できるアクションを起動します。 DEスケジューラーは、すべてのイベントが厳密に同期して発生するようにします。 Actor'ami間のマーカーの移動には時間がかかりません。 マーカーは自発的に表示または非表示にできないことを覚えておくことが重要です。
簡単な離散時間モデルを組み立てましょう。 遅延とパケット損失がモデル化されるデータチャネルとします。 マーカーはパッケージとして機能します。 まず、エディターウィンドウを開きます( [ファイル]-[新規]-[グラフエディター] )。 ウィンドウのほとんどは、モデルが組み立てられるワークスペースで占められています。 ワークスペースの左側には、俳優と監督のライブラリがあります。 DE DirectorをDirectorsセクションからワークスペースに追加します。 この文脈では簡潔にロシア語に翻訳されていない英語の単語Actorの代わりに、「ブロック」という単語を使用し続けます。
マーカーは自然に現れたり消えたりすることはできないため、ソースが必要です。 Actors / DomainSpecific / DescreteEventsセクションのSingleEventブロックを使用します。 このブロックは巧妙に機能しません。指定された時点で1つのマーカーを生成します。 マーカーの値と時間は、ブロック設定で指定できます(パラメーター設定ウィンドウは、ブロックをダブルクリックして開きます)。 次に、チャネルでのパケット送信の遅延をシミュレートする必要があります。 これを行うには、ライブラリの同じセクションからサーバーブロックを追加します 。

SingleEvent出力をサーバー入力に接続します。



これまでのところ、サーバーブロックは、パラメーターで指定された厳密に定義された時間だけトークンを遅延させます。 ランダム性の要素を紹介します。 これを行うには、 Actors / RandomセクションのUniformブロックが必要になります。マーカーが入力に入ると、通常の法則に従って下限と上限の境界(パラメーターで設定)の間で分布するランダム値を持つ新しいマーカーが生成されます。


シミュレートされたチャネルと実際のチャネルの大まかな対応については、送信中のパケット損失のみが欠落しています。 損失をモデル化するには、同じRandomセクションのDiscreteRandomSourceブロックを使用します。 生成された値の配列は、valuesパラメーターで示され、pmf(確率質量関数)パラメーターで各値を生成する確率の配列で示されます。 値、およびpmf-0.85および0.15で値0および1を指定します。

マーカーがトリガー入力に到達すると、85%の確率のブロックはゼロを生成し、15%の確率のブロックは1を生成します。 トリガー入力をサーバー出力に接続します。 (ノードはラインの分岐に使用されます-ツールバー上の黒い菱形)これらの値を損失の兆候として使用します(ユニット-パケット損失)。

このような単純なチャネル自体はあまり関心がありませんが、ネットワークプロトコルのモデリングに使用すると便利です。 シミュレートされたチャネルは、ランダムな遅延でパケットを送信し、特定の確率でパケットを失う可能性があります。
Ptolemyでは、新しいActor'yを作成し、既存のActor'yから収集できます。 [ ユーティリティライブラリ]セクションには、 CompositeActorを含む他のブロックを配置できるCompositeActorブロックがあります。 CompositeActorにチャネルモデルを配置します。 CompositeActorワークスペースは、コンテキストメニューのOpenActorコマンドによって開かれます。 SingleEventブロックは不要になりました。 代わりに、1つの入力ポートと1つの出力ポートを追加します。

サーバー入力を入力ポートに接続し、スイッチ出力を出力ポートに接続します。 単純なチャネルモデルをカプセル化するブロックの準備ができました。
すべての重要なパラメーター(時間遅延範囲の下限と上限、およびパケット損失の確率)をすべて「引き出す」と、チャネルでの作業を簡素化できます。 これを行うには、ブロックパラメーター設定ウィンドウでパラメーターlowDelayBorder、highDelayBorderおよびlossProbabilityを追加します。 [ 追加 ]ボタンをクリックすると、対応するダイアログが表示されます。このダイアログでは、特に追加したパラメーターのデフォルト値を指定できます。 ブロック内で新しいパラメーター名を使用できるようになりました。 特定の値をUniformブロックとDiscreteRandomsourceブロックのパラメーター名に置き換えます。

これで、他のブロックと同様に、内部を見なくてもチャネルを操作できます。すべての設定は外部からアクセスできます。
プリミティブパッケージソースを構築する:

チャネルの動作をテストできます。

DE Directorの設定には、重要なパラメーター-stopTimeがあります。 デフォルトでは、無限に設定されていますが、このような単純なモデルを観察するには、値50で十分です。
これで、プトレマイオスとの知り合いを終えさせてください。 トピックが需要がある場合、すぐに継続されます。