ペトリネットとは?仕組み・構成要素・活用例を初心者向けに解説

AIの初心者
「ペトリネット」はプレースとトランジションでできていると聞きました。どんな図で、何を表せるものなのですか?

AI専門家
ペトリネットは、状態を表すプレースと、変化を表すトランジションを矢印でつないで、システムの動きを図解する方法だよ。プレースは丸、トランジションは棒や四角で描くことが多いんだ。

AIの初心者
丸と棒を矢印でつなぐだけなら、普通のフローチャートとは何が違うのでしょうか?

AI専門家
大きな違いは、トークンという印で現在の状態や資源の有無を表せることだね。条件が満たされるとトランジションが発火し、トークンが移動するので、並行処理や資源の取り合いも追いやすいんだ。
ペトリネットとは。
ペトリネットとは、状態と出来事を2種類の点で表し、矢印とトークンを使ってシステムの振る舞いを図解するモデルです。処理の順序、同時進行、資源の競合、停止しやすい箇所などを視覚的に確認できます。
ペトリネットとは何か

ペトリネットは、複雑な手順やシステムの状態変化を、図として分かりやすく表すためのモデルです。1962年にカール・アダム・ペトリによって提案され、情報システム、制御、通信、製造工程、業務プロセスなどの分析に使われてきました。
ペトリネットでは、システムを「状態」と「出来事」に分けて考えます。状態は、たとえば「在庫がある」「書類が未確認」「機械が待機中」のような状況です。出来事は、「注文を受け付ける」「書類を確認する」「機械を起動する」のように、状態を変える動作を指します。
フローチャートが処理の順番を追うことに向いているのに対し、ペトリネットは現在の状態を示すトークンを使うため、複数の処理が同時に進む場面や、同じ資源を複数の処理が取り合う場面を表しやすい点が特徴です。
基本要素:プレース、トランジション、アーク、トークン

ペトリネットを読むときは、まず4つの要素を押さえると理解しやすくなります。プレース、トランジション、アーク、トークンです。
| 要素 | 意味 | 図での表し方 |
|---|---|---|
| プレース | 状態、条件、資源の置き場を表す | 円 |
| トランジション | 状態を変える出来事や処理を表す | 棒または四角 |
| アーク | プレースとトランジションの関係を表す | 向きのある矢印 |
| トークン | 現在の状態や資源の存在、個数を表す | プレース内の黒丸など |
プレースは「何があるか」「どの状態か」を表し、トランジションは「何が起きるか」を表します。たとえば在庫管理なら、プレースは「在庫あり」や「出荷待ち」、トランジションは「注文受付」や「出荷処理」と考えられます。
アークは有向矢印で、基本的にはプレースからトランジション、またはトランジションからプレースへ向かいます。プレース同士、トランジション同士を直接つなぐのではなく、状態と出来事を交互につないで因果関係を示す点が重要です。
トークンは、プレースの中に置かれる印です。商品在庫が3個あるなら、在庫を表すプレースに3つのトークンを置くように考えられます。トークンの位置や数を見ることで、システムが今どの状態にあるのかを追跡できます。
発火と状態遷移の仕組み

ペトリネットでは、トランジションが実行されることを「発火」と呼びます。発火はいつでも起こるわけではなく、入力側のプレースに必要なトークンが置かれているときだけ可能になります。
たとえば書類確認の作業を考えます。「未確認」というプレースにトークンがある場合、その書類はまだ確認されていない状態です。「確認する」というトランジションが発火すると、「未確認」のトークンが消費され、「確認済み」のプレースに新しいトークンが置かれます。
発火は、入力条件を満たしたときにトークンを消費し、出力側の状態へトークンを移す動きとして理解できます。これにより、単なる図ではなく、システムの状態が時間とともにどう変わるかを追えるモデルになります。
一つのトランジションが複数の入力プレースを持つ場合は、それぞれに必要なトークンが揃っていなければ発火できません。逆に複数の出力プレースを持つ場合は、発火後に複数の状態が同時に変化します。これが、実務の手順やプログラム処理を表すときに便利な理由です。
ペトリネットで表せること:並行処理・同期・競合

ペトリネットの強みは、順番に進む処理だけでなく、複数の処理が関係する状況を表せることです。特に、並行処理、同期、競合はペトリネットを学ぶうえで重要な考え方です。
並行処理は、複数の作業が同時に進められる状態です。たとえば注文処理の中で、在庫確認と請求書作成が独立して進められるなら、それぞれを別の経路として表現できます。
同期は、複数の条件が揃って初めて次の処理へ進める状態です。製造工程で「部品A」と「部品B」が両方そろってから組み立てる場合、2つの入力プレースにトークンがあるときだけ組み立てのトランジションが発火します。
競合は、複数の処理が同じ資源を必要とする状態です。1台しかない機械を複数の工程が使おうとする場合、どちらか一方がトークンを取ると、もう一方は待つ必要があります。同じ資源を取り合う構造を図で確認できるため、ボトルネックや待ち時間の原因を見つけやすくなります。
活用分野と分析で見つけられる問題
ペトリネットは、システムの設計や分析で幅広く使われます。代表例として、業務ワークフロー、通信プロトコル、製造ライン、在庫管理、プログラムの並行処理、制御システムなどがあります。
製造ラインでは、工程の前後関係、同時に動ける作業、特定の機械や作業者に処理が集中する箇所を確認できます。通信システムでは、メッセージ送受信の順序や待ち状態をモデル化できます。プログラムでは、複数の処理が共有メモリやファイルを扱うときの競合を検討できます。
分析で特に注目されるのが、デッドロックとライブロックです。デッドロックは、必要なトークンや資源を互いに待ち合って、システムが止まってしまう状態です。ライブロックは、動作しているように見えても目的の処理が進まない状態です。
ペトリネットを使うと、実装や運用に入る前に、停止しやすい構造や資源競合を図の上で検討できます。そのため、信頼性が求められるシステムの設計段階で役立ちます。
ペトリネットの主な種類

基本的なペトリネットだけでも多くの仕組みを表現できますが、現実のシステムを詳しく扱うために、いくつかの拡張版も使われます。
| 種類 | 特徴 | 向いている用途 |
|---|---|---|
| 時間ペトリネット | トランジションの発火や処理に時間の条件を加える | 製造工程、待ち時間、処理遅延の分析 |
| カラーペトリネット | トークンに色や属性を持たせ、種類の違いを表す | 通信パケット、部品種別、データ種別の分析 |
| 階層ペトリネット | 大きなモデルを階層に分けて整理する | 大規模システム、複雑な業務プロセスの整理 |
時間ペトリネットは、処理時間や遅延を扱いたいときに使います。カラーペトリネットは、同じ流れの中で異なる種類のデータや資源を区別したいときに便利です。階層ペトリネットは、モデルが大きくなりすぎて全体が読みにくくなる場合に、部分ごとに分けて見通しをよくします。
どの種類を選ぶかは、分析したい問題によって変わります。最初は基本的なペトリネットで構造をつかみ、時間、属性、階層が必要になった段階で拡張版を検討すると学びやすくなります。
学習時につまずきやすい注意点
初心者がつまずきやすいのは、プレースとトランジションの役割を混同することです。プレースは状態や資源を表し、トランジションは状態を変える出来事を表します。「在庫あり」はプレース、「注文受付」はトランジションのように、名詞的な状態か、動詞的な処理かで考えると整理しやすくなります。
また、アークの向きにも注意が必要です。入力側のプレースからトランジションへ向かうアークは「この条件が必要」という意味を持ち、トランジションから出力側のプレースへ向かうアークは「処理後にこの状態になる」という意味を持ちます。
もう一つの注意点は、図を細かくしすぎないことです。最初からすべての例外処理や詳細条件を入れると、ペトリネットの利点である見通しのよさが失われます。学習や初期設計では、まず主要な状態と出来事だけで描き、必要に応じて詳細化するのが実用的です。
まとめ
ペトリネットは、プレース、トランジション、アーク、トークンを使って、システムの状態変化を視覚的に表すモデルです。複雑な手順や処理の流れを図にすることで、どの条件で処理が進むのか、どこで待ちや競合が起こるのかを確認できます。
特に、並行処理、同期、競合、デッドロックのように、単純な順序図だけでは見落としやすい問題を扱える点が大きな特徴です。製造工程、通信、業務プロセス、プログラム処理など、複数の状態や資源が関係する場面で役立ちます。
まずは、プレースを状態、トランジションを出来事、トークンを現在の状態や資源として読むことから始めると、ペトリネット図の意味をつかみやすくなります。
更新履歴
| 日付 | 内容 |
|---|---|
| 2025年1月31日 | 初回公開 |
| 2026年5月27日 | 発火の流れと種類比較を補い、図の読み方を追いやすく更新 |
