GPSSワールドシミュレーション | |
| サンプルコード | |
|---|---|
生成 15,5
SEIZE 理容室
アドバンス 10,2
リリースバーバー
終了 1
| |
| デザイン: | ジェフリー・ゴードン |
| 開発者 | IBM |
| 初登場 | 1961年 |
| ファイル名拡張子 | 。GPS |
| 主な実装 | |
| GPSSワールド、JGPSS | |
汎用シミュレーションシステム(GPSS)は、離散イベントシミュレーションに使用されるシミュレーション言語です。多くの統計情報が自動的に収集されるため、待ち行列システムのモデリングに特に役立ちます。[1]典型的なシミュレーションは、システム内で生成されるトランザクション(通常は一定の間隔で)、定義された一連のルール(リソースの使用、待機、転送など)の実行、およびシミュレーションからの削除で構成されます。
歴史
GPSSは、IBMの高度システム開発部門(ASDD)の従業員であったジェフリー・ゴードンによって1960年代に開発されました。この部門は、テレプロセシングシステムの設計に関する研究に深く関わっており、コンピュータリソースとサーバー端末間の共有回線の使用の経済的なバランスを実現しようとしていました。当時ゴードンシミュレーターと呼ばれていたシミュレーションシステムは、ASDD内のテレプロセシングシステムの研究で非常に人気がありました。その後、1960年10月25日にIBMの社内メモで修正され、文書化されました。[2] 1961年の冬から夏にかけて、3人のプログラマーのグループ(ゴードンを含む)が新しいアルゴリズムと新しいブロックタイプでシミュレーションシステムを書き直しました。1961年9月27日に25のブロックタイプでIBMラベルのサポート付きプログラムとして正式にリリースされました。この時点で、ゴードンはシミュレーションシステムの開発を中止しました。
1963 年に、32 個のブロック タイプを備えた GPSS II がリリースされました。これにより、システム数値属性が導入され、ストレージの現在の内容、キューの長さ、または現在のクロック時間を追跡できるようになりました。
1965 年に GPSS III がリリースされ、IBM Systems 7090/94および7040/44で利用できるようになりました。
1967 年、新しくリリースされたSystem 360上で実行するために GPSS/360 がリリースされました。
1970年に、49 種類のブロックを備えた GPSS V がリリースされました。
1980年代には、GPSS/VACとGPSS/PCがリリースされました。これらは、言語がライセンス解除される前の最後の公式IBMレーベルのリリースであると思われます。[3]
その後、IBM 360、[4] Univac 1108、CDC向けのリリースがありました。[5] [6] [7]
時間が経つにつれて、 DECのVAX、大規模なUnivacシステム向けの特殊なAPLバージョン、 [8]、Macintoshなどのシステム向けの他の実装も開発されました。[9]
2001年に、 GPSSに新機能を加えたWindowsプログラムGPSS World [10]がリリースされました。これには、PLUS(Pascalに似た言語)を使用したスクリプト、グラフィカルなシステム状態表示、グラフ作成、最適化実験などが含まれています。
2009年には、 GPSSシミュレーション言語を教えるために、JGPSS(Java General Purpose Simulation System)と呼ばれるJavaベースのグラフィカルツールが開発されました。 [11] [12]
説明
GPSS シミュレーションは、トランザクション、統計収集、および変数 のフローを制御するためのさまざまな単一目的のコマンド (「ブロック」) を含むアセンブリスタイルの「ブロック ダイアグラム言語」で記述されます。
シミュレーションには、顧客が店舗に入るなど、コマンドによるトランザクションエントリ ポイントがあります。次に、施設/ストレージ(レジ係など) の要求、待機、統計の保存などを通じてアクションが実行されます。最後に、シミュレートされたトランザクションは、コマンドを通じてシミュレーションを終了します。各コマンド動詞は「コントロール」と呼ばれます。
GENERATETERMINATE
ブロックは、施設指向 (ジョブショップの機械など) またはトランザクション指向 (仕掛品の一部、電子部品の信号、官僚的手続きの文書など) にすることができます。GPSS は、レポートに表示する統計を自動的に追跡します。
エンティティは、リソース、計算エンティティ、統計エンティティに大まかに分類できます。[13]施設やストレージなどのリソースは、容量が限られたリソースを表します。アンペア変数(変数)、関数、乱数ジェネレータなどの計算エンティティは、トランザクションの状態や環境の要素を表すために使用されます。キューやテーブル(ヒストグラム)などの統計エンティティは、興味のある統計情報を収集します。
基本的なトランザクションコマンド
トランザクションは次のことが可能です:
- シミュレーションを自動的に入力する(生成)
- 施設または保管場所を使用する(それぞれ SEIZE/ENTER)
- 施設または保管場所の使用を停止する(それぞれRELEASE/LEAVE)
- 待つ(前進)
- 別のコードセクションへの転送 (TRANSFER)
- シミュレーションを終了する (終了)
これらのメイン タスクに加えて、ASSIGN コマンドを使用してパラメータを保持することもできます。トランザクションはコード内で暗黙的に区切られます。
コード内には、同時に発生するトランザクションが複数ある場合があります。トランザクションは GENERATE で始まり、TERMINATE で終わります。その間のコードは、TRANSFER コマンドを使用して複数のトランザクション間で共有される可能性がありますが、それ以外はトランザクションのライフサイクルが分離されます。1 つのトランザクションと別のトランザクションのアクション行の間に空白を追加すると便利です。
生成する
生成 0.1
0.1 時間単位ごとにトランザクションが生成されます。
生成 15,4
トランザクションは、15 時間単位ごとにプラスマイナス 4 時間単位ずつ生成されます。
生成する
前進
トランザクションを待機させるには、ADVANCE コマンドを使用します。このコマンドには、GENERATE と同様の引数があります。
アドバンス 10,6
トランザクションは 10+-6 秒待機します。
前進
押収、解放(施設)
一度に 1 回しか使用できない Facility を使用するには、SEIZE コマンドを使用します。使用を停止するには、RELEASE コマンドを使用します。
GENERATE 30,5 ; 30+-5 時間単位ごとに顧客を生成します
SEIZE理容室;施設を利用する
ADVANCE 15,4 ; 15+-4時間単位待つ
理容師を解放する;施設の使用を停止する
終了 1 ; 理髪店を出る
一度に複数回使用したい場合は、ストレージを使用してください。
押収
リリース
ENTER、LEAVE(ストレージ)
座席数 100 ; ラウンジの座席には100人が座れる
GENERATE 10,5 ; 10+-5 時間ごとに人物を生成します
ENTER 座席、1 ; 人が座る
ADVANCE 15,4 ; 15+-4時間単位待つ
LEAVE 理髪店、1 ; 人が座るのをやめる
終了 1 ; 座席エリアから退出
この方法により、複数の人が同時に座席に座ることができます。これが施設(SEIZE/RELEASE を使用) の場合、リソースを使用しようとする他の人がブロックされます。
ENTER コマンドは、ストレージ参照を引数 A として受け取り、予約する量を引数 B として受け取ります。LEAVE コマンドの引数は同じです。
入力
離れる
終了
トランザクションを削除するには、TERMINATE を使用します。
オプションの引数 は、完了カウンタを減算します。これは、シミュレーションを実行するときにユーザーが選択する変数です。たとえば、100 人の顧客をテストする場合、 でシミュレーションの実行を開始しますSTART 100。TERMINATE 1各トランザクションの終了時に、 は初期値 100 を 1 ずつ減算し (99、98、97...)、0 に達するまで続けます。この時点で、シミュレーションは停止し、結果が返されます。TERMINATE で引数を省略すると、0 であるとみなされます。つまり、シミュレーションは永久に実行されます (もちろん、このカウンタを減算する別の TERMINATE がある場合は除きます)。
終了
タイマー
プログラムをあらかじめ決められた時間実行させるには、TERMINATES がカウンターを減分しないようにし、次のようなセクションを含めます。
GENERATE ; 1つのトランザクションを生成する ADVANCE 100 ; 100時間単位で実行 終了 1 ; 終了
次に、START 1 でプログラムを実行します。100 時間単位で実行されます。
ASSIGN (パラメータ「メタデータ」)
ASSIGN制御ブロックを使用して、トランザクションパラメータに値を割り当てます。Pj(j=パラメータ番号)で呼び出されます。
ASSIGN 2,V$Orderqty;パラメータ2=注文数量
Custwait ADVANCE 5;リードタイムは5日です
ENTER Stock,P2 ;在庫がP2増加します
ASSIGN: ASSIGN ブロックは、トランザクション パラメータに値を配置または変更するために使用されます。
例
理髪店
GPSSを使用したシミュレーション[14]から引用した次の例は、GPSSの「Hello world!」であり、主要な概念を示しています。
目的は、理髪店の 1 日の営業をシミュレートすることです。顧客はランダムな一定の流れで到着し、店に入り、理髪店が忙しい場合は列に並び、先着順で髪を切ってもらい、店を出ます。平均および最大の待ち行列と顧客数を知りたいと考えています。
シミュレーション; モデルの定義
*
* モデルセグメント1
*
生成 18,6 ; 顧客は18±6分ごとに到着します
QUEUEチェア; 列に並ぶ
ジョーを捕まえろ;床屋を捕まえろ
出発 椅子 ; 列を離れる
ADVANCE 16,4 ; 16±4分でヘアカット
ジョーを解放せよ;床屋を解放せよ
終了; 店を出る
*
* モデルセグメント2
*
GENERATE 480 ; タイマーが時間 = 480 分に到着
TERMINATE 1 ; 実行を停止する
*
* コントロールカード
*
START 1 ; 1回の実行を開始する
END ; モデルの終了
「プログラム」はSIMULATEと のENDステートメントで構成され、「モデルセグメント」と「制御カード」に分かれています。
最初のセグメントは顧客をモデル化します。GENERATEブロックはトランザクションのフローを作成し、到着間隔が 18±6 の範囲で均一に分散された状態でモデルに入るようにスケジュールします。これらのトランザクションを顧客として解釈し、時間が分単位でカウントされることを理解する責任はプログラマにあります。トランザクションはGENERATEブロック内で存在を開始し、特定のルールに従ってブロックからブロックへと進み、TERMINATEモデルから削除される位置に到達します。
通常、トランザクションは 1 つのブロックから次のブロックへと進むため、顧客トランザクションはGENERATEブロックを出てQUEUE Chairsブロックに入ります。このブロックは待機列をシミュレートし、それに応じて統計を収集します。例では、椅子の列を具体化し、シミュレーションの最後に、最大キュー サイズ (必要な椅子の数) と平均待機時間などがわかります。QUEUEモデルには複数のキューが存在する可能性があるため、ブロックにはパラメーターとしてキューの名前が必要です。各キューはブロックに関連付けられておりDEPART、トランザクションがキューを出るときにトリガーされます。GPSS はキューにあるトランザクションを記憶するため、平均所要時間を把握し、バグのあるトランザクションがキューに入らずにキューを出て行っていないことを確認できます。
ブロックの後QUEUE chairs、トランザクションはブロックに進もうとします。このブロックは、Joe という名前の施設SEIZE Joeのキャプチャをシミュレートするブロックです。施設は、容量 1 の単一サーバーをモデル化します。施設がビジー状態の場合、試行中のトランザクションの進入権は拒否されます。この例では、顧客はブロック内で待機します。ブロックが空いている場合、または使用可能になるとすぐに、トランザクションは施設をキャプチャすることを許可され、他のトランザクションに対してビジー状態としてマークされ、同じトランザクションが対応するブロックを通過するまで、サービス時間やその他の統計のカウントが開始されます。
SEIZEQUEUERELEASE Joe
SEIZE/ペアRELEASEは施設名でリンクされています。これは、モデル内に多くの独立した施設が存在する可能性があるためです。理髪師、修理工、エージェントなどのオペレーターだけでなく、クレーン、ガソリンスタンド、許可文書などの機器もモデル化できます。つまり、容量が 1 であるものなら何でもモデル化できます。5 人の理髪師のチームや容量が 10 のオーブンなど、複数の並列サーバーをシミュレートするために、GPSS はSTORAGEs という名前のエンティティを使用します。
顧客がジョーを捕まえた後、次の文に進みます。これはADVANCE 16,4、エンティティを所定の時間凍結する文です。この時間には、16-4=12 分から 16+4=20 分の間でランダムに選ばれます。他のサービス時間分布は、GPSS FUNCTION(他のプログラミング言語の関数とは多少異なる概念) を通じて利用できます。その間、他のトランザクションはモデル内を移動できますが、モデル内に存在する可能性のある他のいくつかの機能はブロックされますが、ジョーはブロックされません。この機能は凍結された顧客でビジー状態だからです。所定の時間が経過すると、顧客は目を覚まし、次の文に進みます。この文はジョーを解放し、 になりますTERMINATE。
その後、前のブロックの次のトランザクション、つまり椅子に座っている顧客が、 できるようになりますSEIZE Joe。 「次の」トランザクションを選択するために、GPSS は先着順で優先順位を使用します。 その他の選択ポリシーは、将来のイベント チェーンエンティティを直接操作することでプログラムできます。
この最初のセグメントと並行して、顧客の行動をシミュレートし、2 番目のモデル セグメントで 1 日の終わりをシミュレートします。480 分 = 8 時にエンティティがGENERATEd され、TERMINATE次のブロックに進みます。今回は、TERMINATEパラメータとして 1 が設定され、特別なカウンターが 1 減少します。そのカウンターが 0 に達すると、プログラムが停止し、出力が印刷されます。この特別なカウンターは、ステートメントで設定されますSTART。例では、1 に設定されているため、シミュレーションは、シミュレートされた時間で 480 分を 1 回実行した後に終了します。
出力には以下が含まれます。
施設 平均数 平均押収 先取
利用エントリ 時間/トランザクション トランザクション番号 トランザクション番号
ジョー .860 26 15.884 26
キュー 最大 平均 合計 ゼロ パーセント 平均 $平均 テーブル 現在
コンテンツ コンテンツ エントリ エントリ ゼロ 時間/トランス 時間/トランス 番号 コンテンツ
椅子 1 .160 27 12 44.4 2.851 5.133 1
$平均時間/トランス = ゼロエンティティを除いた平均時間/トランス
これは、ジョーが 86.0% の時間を忙しく過ごし、26 人の顧客にヘアカットを施し、そのヘアカットに平均 15.88 分かかったことを示しています。ちなみに、シミュレーションが終了したとき、ジョーは顧客番号 26 のヘアカットを行っていました。理髪師が店を閉める前にヘアカットを終えるためのプログラミング対策は講じられていませんでした。
また、順番を待っている顧客は最大で 1 人であり、実際に待っている顧客の数は平均 0.160 人であったことも示されています。合計 27 人の顧客が列に加わったため、ジョーが店を閉めた時点で顧客 27 番はまだ座って順番を待っていました。この 27 人の顧客のうち、12 人は待たずにサービスを受けました。実際、列が空いていた時間は 44.4% でした。平均待ち時間は 2.851 分で、実際に待った 15=27-12 人の顧客の平均待ち時間は 5.133 分でした。
ヘアカット
* 108ページ 質問18 ※ユニセックスのヘアサロンは椅子が1脚のみの店舗で、20分前後の間隔で1人ずつ来店していただきます。 * 来店客の半数はドライカットを希望し、30%はスタイリングを希望し、20%は * トリミングのみをご希望の場合。ドライカットは15分+-5分、スタイルカットは25分+-10分かかります。 * トリミングには10分前後かかります。50人のお客様が来店すると仮定します。 * ショップ。各タイプのサービスリクエストの割合を、 * シミュレーション結果。結果は妥当ですか?二項式に基づいて回答してください * 分布。 到着FUNCTION RN1,D4; 1=ドライカット、2=スタイル、3=トリム 0.0,0/0.5,1/0.8,2/1.0,3 GENERATE 20,15 ; 到着を生成する ASSIGN 1,FN$Arrivals ; 到着タイプをP1に割り当てる Test1 TEST E P1,1,Test2 ; P1=1の場合はDryCutに転送します。それ以外の場合はTest2 転写、ドライカット Test2 TEST E P1,2,TrimHair ; P1=2 の場合は StyCut に転送します。それ以外の場合は Trim します。 トランスファー、スタイカット ドライカット セイズチェア アドバンス 15,5 SAVEVALUE 希望ドライカット+,1 譲渡、期間 スティカット セイズチェア アドバンス 25,10 SAVEVALUE 希望スタイルカット+,1 譲渡、期間 トリムヘア セイズチェア アドバンス 10,3 SAVEVALUE 求むトリムヘア+,1 任期解除議長 終了 1
スーパーハイウェイ
* 108ページ 質問14 * 高速道路は大都市圏を他の大都市圏と結ぶ。 * 最初の都市は20+-15秒ごとに通過します。車両の20%は1回の通過が可能です。 * エンガー、車両の30%は2人乗り、10%は3人乗り、10%は * 4人の乗客が乗車できる。残りの30%の車両は40人を乗せるバスである。 * 人。車で2つの地下鉄駅間を移動するのに60分前後かかります。 * 都市圏。5,000 人が第 2 の都市に到着するまでにどのくらいの時間がかかりますか? 乗客機能RN1、D6 0.0、0/0.2、1/0.5、2/0.6、3/0.7、4/1.0、40 生成 20,15 ; 新しい車両が高速道路に入る (秒) ASSIGN 1,FN$Passenger ; 乗客数をP1に割り当てる 前進 (60#60),(10#60) ; 移動 (分から秒) TERMINATE P1 ; 乗客数に応じてカウントを減らす * 終了時間は秒単位です。60 で割る必要があります。 * 結果: 10958 秒 => 182.645 分 = 3 時間 2 分
データプレフィックス
出典: [15]
取引
チェーン
ブロック
システム属性
数量
装備の属性
ストレージ
設備
グループ
統計属性
キュー
テーブル
保存値
計算属性
標準数値属性の範囲
条件演算子
これはTESTコマンドで使用されます。
参照
参考文献
- ^ Schriber, Thomas (1977)、「GPSS入門」(PDF)、p. 1 、 2023年12月12日閲覧
- ^ ジェフリー・ゴードン (1981)。「汎用シミュレーションシステム (GPSS) の開発」。プログラミング言語の歴史。pp. 403–426。doi : 10.1145 /800025.1198386。ISBN 0127450408GPSS の開発では、
アナログ コンピュータに基づいて設計するという意識的な努力はありませんでしたが、GPSS の特徴であるブロック ダイアグラム表記法や、プログラマーを介さずにシステム アナリストが直接シミュレーションにアクセスできるようにすることに重点が置かれている点は、アナログ コンピュータの経験に無意識のうちに影響されていると感じています。
- ^ IEEE (1984)、冬季シミュレーション会議議事録、ISBN 9780911801040、 2023年12月12日閲覧
- ^ (GPSS/360、MFT/MVT では DOS ではない)
- ^ DC Div (1968). 「テクニカルノート」. IEEE Transactions on Systems Science and Cybernetics . 4 (4): 446–447. doi :10.1109/TSSC.1968.300174.
IBM は 7044 および 7090 シリーズ用の GPSS III と、より大型の 360 用の GPSS/360 を提供しています。GPSS II は UNIVAC 1108 でも利用できます。
- ^ 「GPSS 入門」(PDF)。
シミュレーション モデリング言語 GPSS について。 ... 要約。GPSS と他のものを比較するソース。... コーポレーションの Univac 1108 ハードウェア用 GPSS)
- ^ B. Liskov (1981). 「GPSS セッション」. プログラミング言語の歴史. ScienceDirect . pp. 403–437. doi :10.1016/B978-0-12-745040-7.50013-2. ISBN 9780127450407背景
:汎用シミュレーションシステム(GPSS)は...GPSSのバージョンを製造したメーカーはUNIVAC(Gorchow、1968)、CDC
- ^ Nabil R. Adam、Ali Dogramaci (2014)。コンピュータシミュレーションの現在の課題。Academic Press。p. 25。ISBN 978-1483258034.
GPSS のような ... APL バージョンの GPSS ですが、APL は解釈型言語です。 ... Univac Corporation、UNIVAC 1108 システム用の GPSS 1100。
- ^ Ståhl, Ingolf (1990). PC、MacIntosh、Vax での GPS シミュレーション入門. Prentice Hall. ISBN 0-1348-323-10。
- ^ 「GPSS World リファレンスマニュアル」athena.ecs.csus.edu . 2023年12月11日閲覧。
- ^ P. Fonseca Casas (2009)。「jgpss、シミュレーションを教えるオープン ソースの gpss フレームワーク」(PDF) 。GPSS 構文に従った完全なシミュレーション ツールの開発を簡素化します。
この論文では、次の内容を紹介します... 元々、GPSS は、作成者である Geoffrey Gordon に敬意を表して、Gordon's Programmable Simulation System を意味していました。
- ^ 「Java 汎用シミュレーション システム」。
シミュレーション エンジンを構築してシミュレーションを学習します。JGPSS は、Java ベースの GPSS システムの実装です。
- ^ スタンレー・グリーンバーグ (1972) 。GPSS 入門。ニューヨーク: ワイリー・インターサイエンス。ISBN 0471324906。
- ^ Schriber, Thomas (1974). GPSS を使用したシミュレーション. Wiley. ISBN 9780471763109。
- ^ 汎用シミュレーションシステム/360: ユーザーズマニュアル(PDF)、1967年、2023年12月10日閲覧
外部リンク
- Wolverine Software GPSS/H バージョン
- Minuteman Softwareは、いくつかの実装を提供する会社です
- aGPSS: PC&Mac: 教育機関や専門家向け
- JGPSS Java汎用シミュレーションシステム。
- GPSS360 オンライン GPSS360 - オリジナル GPSS の後継
