プトレマイオスのシミュレーション環境

プトレミー



Ptolemyは、並列異種システム用のリアルタイムシミュレーション環境です。 このプロジェクトは、バークレー大学の学生がエドワード・リー教授の監督の下で開発しています。 使用される開発言語はJavaです。 プトレマイオスは常に進化しています。 新しい計算モデルと新しいデモモデルのサポートが追加され、ドキュメントが拡張されました。



Ptolemyを使用すると、たとえば、離散イベントモデリングや有限状態マシンなど、さまざまな計算モデルを使用できます。 モデリングはアクターとディレクターの概念に基づいており、それぞれ「エグゼクティブリンク」と「コントロールリンク」として翻訳できます。 Directorは、シミュレートされたシステムが機能する計算モデルを定義します。 多くのActor'ovは、それらの間の接続と組み合わせて、実際のデバイスシステムを決定します。 最初の記事では、離散時間モデルを取り上げます。





離散イベント



DEは、キューイングシステムや通信ネットワークなどのリアルタイムシステムをシミュレートするための基本的なツールを提供します。 シミュレーションプロセスは、アクター間のトークンの移動です。 マーカーは本質的にある種のデータ構造を表します。 マーカーがアクターに入ると、アクターの内部状態を変更し、新しいイベントを生成できるアクションを起動します。 DEスケジューラーは、すべてのイベントが厳密に同期して発生するようにします。 Actor'ami間のマーカーの移動には時間がかかりません。 マーカーは自発的に表示または非表示にできないことを覚えておくことが重要です。



簡単な離散時間モデルを組み立てましょう。 遅延とパケット損失がモデル化されるデータチャネルとします。 マーカーはパッケージとして機能します。 まず、エディターウィンドウを開きます( [ファイル]-[新規]-[グラフエディター] )。 ウィンドウのほとんどは、モデルが組み立てられるワークスペースで占められています。 ワークスペースの左側には、俳優と監督のライブラリがあります。 DE DirectorDirectorsセクションからワークスペースに追加します。 この文脈では簡潔にロシア語に翻訳されていない英語の単語Actorの代わりに、「ブロック」という単語を使用し続けます。



マーカーは自然に現れたり消えたりすることはできないため、ソースが必要です。 Actors / DomainSpecific / DescreteEventsセクションSingleEventブロックを使用します。 このブロックは巧妙に機能しません。指定された時点で1つのマーカーを生成します。 マーカーの値と時間は、ブロック設定で指定できます(パラメーター設定ウィンドウは、ブロックをダブルクリックして開きます)。 次に、チャネルでのパケット送信の遅延をシミュレートする必要があります。 これを行うには、ライブラリの同じセクションからサーバーブロックを追加します画像 名前が示すように、このブロックはキューイングシステムの観点からサーバーをシミュレートします。 トークンが空きサーバーに届くと、serviceTimeパラメーターの値に等しい遅延でトークンが発行され、サーバーはこの間ビジー状態になります。 トークンが到着し、サーバーがビジーの場合、トークンはサーバーキューに配置されます(サイズは容量パラメーターによって決定されます)。 キューはそれぞれFIFOの原則に従って機能し、サーバーが解放されると、キュー内の最高トークンがserviceTime遅延で出口に送信されます。 サーバーは、たとえば単純なDelayブロックとは異なり、キューからの選択時に各トークンの遅延を決定するという点で優れています(サーバーが空いている場合、選択はトークンの到着時に行われます)。 簡単に言えば、これは遅延がキューでの待機時間を考慮する必要がないことを意味します。



SingleEvent出力をサーバー入力に接続します。 画像 モデルを実行すると、両方のブロックの標準パラメーターを使用して、次のことが起こります:0.0に等しい時間で、値trueのブール型のマーカーがSingleEventブロックの出力に表示され、空いているサーバーに移動し、同時にモデル時間1.0に遅延します。 時間1.0で、トークンはサーバーを終了します。 これを納得させるには、プロッター( Actors / Sinks / TimedSinks / TimedPlotter )を追加します。 プロッターは、Doubleタイプのマーカーを受け入れ、それらをグラフ(時間値)に表示します。 プロッタの入力ポートの白色は、複数のラインをプロッタに接続できることを意味します。 チャートでは、異なる線のマーカーが異なる色で表示されます。



画像 プロッターが表示できるように、SingleEventのマーカー値をゼロに変更します。 わかりやすくするために、サーバー出力をConstブロックの入力( Actors / Sources / GenericSources )に提供します。これにより、入力のマーカーが到着したときに値1のマーカーが生成されます。 Const出力はプロッターに送られます。 モデルを開始すると、プロッターウィンドウが開きます。

画像 表示形式の設定で、ドットの種類を設定します。 プロッターは、マーカーの値だけでなく対応する時点も視覚的に表示するため、モデルのデバッグに不可欠なツールであることがわかりました。



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

画像



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

画像






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



画像 さて、ランダム画像のモデルでパケット損失の存在が決定されると、損失自体を実現するために残ります。 これを行うには、 Switch要素を使用します (セクションActors / FlowControl / Aggregators )。 入力に到着したパケットは、出力の1つに送信されます。出力の数によって、制御入力の値が決まります。 スイッチ出力に接続されている最初の行はインデックス0、次は1などです。 ノードを介してサーバー出力をSwitchブロックの入力に接続します。 パケット損失フラグを制御入力に接続し、1行のみを出力に接続すると、損失フラグが生成されると(制御入力のユニット)、マーカーはインデックス1の行に、インデックス0の行に送信されます。チャンネル、彼は「失われます」。



このような単純なチャネル自体はあまり関心がありませんが、ネットワークプロトコルのモデリングに使用すると便利です。 シミュレートされたチャネルは、ランダムな遅延でパケットを送信し、特定の確率でパケットを失う可能性があります。



Ptolemyでは、新しいActor'yを作成し、既存のActor'yから収集できます。 [ ユーティリティライブラリ]セクションには、 CompositeActorを含む他のブロックを配置できるCompositeActorブロックがあります。 CompositeActorにチャネルモデルを配置します。 CompositeActorワークスペースは、コンテキストメニューのOpenActorコマンドによって開かれます。 SingleEventブロックは不要になりました。 代わりに、1つの入力ポートと1つの出力ポートを追加します。
画像




サーバー入力を入力ポートに接続し、スイッチ出力を出力ポートに接続します。 単純なチャネルモデルをカプセル化するブロックの準備ができました。



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




これで、他のブロックと同様に、内部を見なくてもチャネルを操作できます。すべての設定は外部からアクセスできます。



プリミティブパッケージソースを構築する:

画像






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

画像






DE Directorの設定には、重要なパラメーター-stopTimeがあります。 デフォルトでは、無限に設定されていますが、このような単純なモデルを観察するには、値50で十分です。



これで、プトレマイオスとの知り合いを終えさせてください。 トピックが需要がある場合、すぐに継続されます。



All Articles