タスク1.3 - 処理フローモデルを構築する

タスクの概要

このチュートリアルのタスクでは、先に作成した3Dモデルと同じシミュレーションモデルを作成しますが、今回は処理フローツールを使用します。処理フローツールは、FlexSimの3Dモデリングツールよりも抽象的で理論的であり、その点が一部のユーザーにとっては魅力となります。処理フローツールを使用するもう1つの利点として、このツールではカスタムモデルロジックをはるかに簡単に作成できます。両方のシミュレーションモデリング方法を試すことで、特定のシミュレーションプロジェクトにはどちらの方法が適しているかを判断できるようになります。

このチュートリアルタスクでは、FlexSimの処理フローツール内での基本的な操作について、処理フローモデルを構築しながら学習します。次の画像に、処理フローツールの重要な要素をラベル付きで示します。

ステップ1 処理フローアクティビティを追加および接続する

この最初のステップでは、処理フローを作成します。はじめに、作成する処理フローのタイプを選択します。このチュートリアルでは、一般的な処理フローを作成します。このタイプの処理フローは、3Dモデルとは独立して実行できる理論上のシミュレーションモデルを作成するのに理想的です。

次に、いくつかのアクティビティを追加して処理フローに接続します。アクティビティは、シミュレーションモデルのロジックチャンクやロジックオペレーションのようなものです。アクティビティを追加および接続するさまざまな方法があります。このステップではこれらの方法をすべて試します。

ここでは、各アクティビティが何をするのかを説明せずに、アクティビティを処理フローに追加します。各アクティビティの詳細についてはチュートリアルのステップ3で学習します。この手順を完了すると、処理フローは次の画像のようになります。

これらのアクティビティを追加するには:

  1. 前のチュートリアルのタスクで作成したものと同じシミュレーションモデルを使用していることを確認します。
  2. メインツールバーの[処理フロー]ボタンをクリックして、メニューを開きます。[Add a General Process Flow]を選択して一般的な処理フローを作成し、中央ペインで別のタブとして開きます。また、処理フロービューが開いていてアクティブな場合、ライブラリが処理フローアクティビティの表示に変わります。
  3. ライブラリの[トークンの作成]グループの下にある[到着間隔ソース]アクティビティを処理フローにドラッグします。
  4. ライブラリの[共有アセット]グループの下にある[リソースを取得]アクティビティをドラッグして[ソース]アクティビティの上にドロップします。次の画像に示すように、2つのアクティビティが一緒にスナップされます。それらは自動でブロックとして接続されます(これは「スタックブロック」と呼ばれることもあります)。
  5. 今度は、アクティビティを追加して接続する2つ目の方法である、スタックブロックから出ている接続を使用する方法を試します。ブロックの下の端にマウスを合わせます。マウスのアイコンがチェーンリンクに変わります。 ブロックの端をクリックし、マウスを押しながら画面の下に向かって少しドラッグします。ブロックの端からマウスポインターまでのコネクターがあることを確認します。マウスを放すと、クイックライブラリが表示されます。[ベーシック]グループの下にある[遅延]アクティビティをクリックします。 次のアニメーションgifはこの手順を示しています。
  6. 今度は、スタックブロックの下に新しいアクティビティを直接追加する、最後の接続方法を試します。[遅延]アクティビティの下の端にマウスを合わせます。マウスのアイコンがチェーンリンクに変わります。 この端をダブルクリックして、クイックライブラリを再度開きます。
  7. 共有アセット]グループの下で、[リソースをリリース]アクティビティ()をクリックします。
  8. この時点で、アクティビティを追加するためのさまざまな方法をすべて試しました。いずれかの方法を使用して、[リソースをリリース]アクティビティの後に[シンク]アクティビティを追加して接続します。
  9. リソースを取得]アクティビティなど、一部のアクティビティには、複数の発信コネクターを含めることができます。[取得]アクティビティから出力される2つ目のコネクターを作成し、次の画像に示すように[シンク]アクティビティに接続します。
  10. ライブラリの[共有アセット]の下から[リソース]アクティビティを処理フローにドラッグします。これは他のアクティビティには接続しません。

処理フローのレイアウトがこのステップの冒頭に表示した画像のようになっていることを確認します。

ステップ2 アクティビティの名前とサイズを変更する

このステップでは、すべてのアクティビティをよりわかりやすい名前に変更します。この手順では、アクティビティの名前を変更する2つの異なる方法を説明します。

アクティビティの名前を変更してもアクティビティの動作には影響しませんが、アクティビティの名前を変更することで処理フローがより直観的でわかりやすくなります。一部のアクティビティは、新しい名前を読みやすいフォントサイズで表示するには小さすぎるため、このステップではアクティビティのサイズを変更する方法についても説明します。

この手順を完了すると、処理フローは次の画像のようになります。

処理フローアクティビティの名前を変更するには:

  1. 最初の[シンク]アクティビティ([取得]アクティビティに接続されているアクティビティ)をクリックして選択します。
  2. [クイックプロパティ]の[アクティビティのプロパティ]で、[名前]ボックス内をクリックします。現在のテキストを「シンク:不満のあるお客様」に変更して、次の画像に示すようにシンクアクティビティの名前を変更します。
  3. 次に、アクティビティ名を変更する2つ目の方法を試します。2つ目の[シンク]アクティビティ([リリース]アクティビティに接続されているアクティビティ)をダブルクリックして、その名前を強調表示します。「シンク:満足したお客様」と入力してEnterキーを押します。
  4. この時点で、アクティビティの名前を変更する2つの異なる方法を試しました。いずれかの方法を使用して、次のテーブルに示すようにアクティビティの名前を変更します。
  5. アクティビティ 新しい名前
    ソース ソース:顧客の到着
    取得 取得:サービスを取得
    遅延 遅延:サービス時間
    リリース リリース:サービスを終了
    リソース リソース:Service Desk
  6. いくつかのアクティビティの名前は非常に長いため、小さなフォントが使用されています。そこで、アクティビティブロックのサイズを変更して名前がすべて表示されるようにします。最初のアクティビティブロックをクリックして選択します。
  7. アクティビティブロックを選択すると、アクティビティブロックの境界線全体が黄色に変わり、黒いサイズ調整ボックスが表示されます。右端の中央のサイザーボックスをクリックして、名前全体が他のアクティビティの名前と同じフォントサイズになるまで少し右にドラッグします。
  8. 2つ目のアクティビティブロックに対して前の手順を繰り返し、フォントが適切なサイズになるように調整します。

処理フローのレイアウトがこのステップの冒頭に表示した画像のようになっていることを確認します。

ステップ3 アクティビティのプロパティを編集する

このステップでは、前のステップで追加したアクティビティのプロパティを編集します。この処理フローのアクティビティが機能する方法の概要を次に示します。

アクティビティ 説明
リソース:Service Desk リソースアクティビティの色が他のアクティビティと異なることがわかります。それは共有アセットであるためです。共有アセットは他のアクティビティとは異なる方法でトークンと相互に作用します。共有アセットは、有限リソースへのアクセスをコントロールすることによって、複雑なロジックを処理フローに組み込むことができます。

カスタマーサービスセンターは、このモデルではリソース共有アセットで表される1人の従業員から始まります。ある意味では、カスタマーサービス担当者は有限のリソースです。その担当者が顧客に対応しているときは、現在の顧客の要求が完了するまで他の顧客に対応することはできません。
ソース:顧客の到着 ほとんどの処理フローは、他のアクティビティの中を移動するトークンを作成するソースアクティビティから始まります。このモデルでは、トークンはカスタマーサービスセンターに来る顧客を表します。この処理フローでは、[到着間隔ソース]を使用して、ランダムな間隔で到着する顧客を表します。

このステップでは、顧客の到着率を変更します。3Dモデルと同じように、約1分ごとに顧客が到着するように到着率を設定します。指数関数分布を使用して、到着率が平均60秒となるようにランダムに計算します。
取得:サービスを取得 このアクティビティは、サービスデスクのカスタマーサービス担当者からサービスを受けるのを待っている顧客を表します。担当者が忙しい場合、顧客は担当者の手が空くまで並んで待ちます。

列が長すぎて特定の顧客がいらだって立ち去る様子をシミュレーションするために、このアクティビティの最大待機時間を変更します。顧客は待ち時間が200秒を超えるといらだちます。いらだった顧客を表すトークンは、[Unhappy Customers]シンクに送られます。
シンク:Unhappy Customers このアクティビティは、モデルからトークン(顧客)を削除し、この特定のシンクを通じて処理フローを退出した顧客の数を追跡します。言い換えれば、それは不満を抱いて立ち去った顧客の数を追跡します
遅延:サービス時間 このアクティビティは、担当者が顧客に対応するのにかかる時間を表します。遅延時間を変更して、顧客対応の所要時間を約92秒とするランダム統計分布を使用します。
リリース:サービスを終了 このアクティビティでは、カスタマーサービス担当者をリリースして、別のお顧客に対応できるようします。
シンク:Happy Customers このアクティビティは、モデルからトークン(顧客)を削除し、この特定のシンクを通じて処理フローを退出した顧客の数を追跡します。

アクティビティのプロパティを編集するには、2つの異なる方法があります。このステップでは、これら両方の方法を試します。

  1. リソース]アクティビティのアイコンをクリックして、処理フローで直接プロパティを開きます。
  2. 現時点ではデフォルトのプロパティを使用します。[カウント]プロパティが1.00に設定されていることを確認します。これは、現在利用可能なリソースが1つだけであることを意味します。
  3. 次に、[クイックプロパティ]ペインを使っていくつかのアクティビティプロパティを編集します。[ソース:顧客の到着]アクティビティをクリックして選択します。[クイックプロパティ](右端のペイン)には、このスタックブロックにある全アクティビティのすべてのプロパティが表示されます。
  4. [クイックプロパティ]の[ソース:顧客の到着]グループの下で、モデルの実行開始時にトークンが作成されるように[時刻0に到達]チェックボックスをオンにします。
  5. 到着時間間隔]は平均して3秒ごとにランダムに到着する指数統計分布を使用するようにすでに設定されています。[プロパティを編集]ボタン をクリックして、分布セレクターを開き、この分布のプロパティを編集します。[スケール]ボックスで、数値を「60」に変更します。
  6. 次に[リソースを取得:サービスを取得]アクティビティを[リソース:サービスデスク]共有アセットに接続します。赤い感嘆符のアイコン が[リソースを取得:サービスを取得]アクティビティの右側にあります。これは、このアクティビティが本来接続されるべきリソースに接続されていないことを意味します。[感嘆符]アイコンをクリックします。マウスがサンプラー に変わり、サンプリングモードに入ったことを示します。
  7. リソース:サービスデスク]共有アセットをクリックしてリンクします。リンクされていることを示す青い線が表示されます。
  8. リソースを取得]アクティビティのプロパティで、[最大待機タイマーの使用]チェックボックスをオンにして、最大待機時間をオンにします。チェックボックスの下にいくつかの追加設定が表示されます。
  9. 時間]ボックスで、時間を「200」に変更します。
  10. OnWaitTimerFired]トリガーの横にある[プロパティを編集 ボタンをクリックします。[トークンをリリース]ピックリストの横にある矢印をクリックして、ピックリストオプションを開きます。[目的地]ボックスに「2」と入力します。この設定によって、最大待機時間に達した顧客(トークン)が、[Unhappy Customers]アクティビティに接続されている2つ目のコネクターに送信されます。
  11. 遅延:サービス時間]アクティビティのプロパティで、[遅延時間]ボックスの横にある[プロパティを編集 ボタンをクリックして、分布セレクターを開きます。
  12. 分布]メニューから、[対数正規2]分布を選択します。次のパラメータを設定します。
    • 場所 - 90
    • スケール - 3.1
    • 形状 - 0.5

処理フロープロパティの編集が完了したのでモデルを保存します。

ステップ4 シミュレーションを実行する

処理フローシミュレーションの実行は、標準3Dモデルのシミュレーションの実行とまったく同じです。シミュレーションを開始すると、トークンは処理フローアクティビティを通過しながら移動します。トークンが各アクティビティに入ると、そのアクティビティのロジックが適用されます。シミュレーションモデルを実行するには:

  1. シミュレーションコントロールバーで、[実行速度]の横にある矢印をクリックしてプロパティを開きます。[カスタム]ボックスで時間を「4.00」に変更します。
  2. シミュレーションコントロールバーで、[リセット]ボタンを押して、処理フローからデータを消去します。
  3. 次に[実行]ボタンを押して、シミュレーション時の動作を確認します。

シミュレーションを見ると、次のことがわかります。

  • [遅延:サービス時間]アクティビティ(サポートを受けている顧客を表す)では一度に1つのトークンのみ許容されます。
  • 複数のトークンが[取得:サービスを取得]アクティビティ(順番待ち列内の顧客を表す)には存在します。
  • ユーザーに対しては[取得:サービスを取得]アクティビティと[遅延:サービス時間]アクティビティの内部トークンのみ表示されます。他のすべてのアクティビティは、時刻0にロジックを実行してイベントを作成しないため、トークンの移動が表示されることはありません。トークンが各アクティビティを通過して移動するように表示するには、シミュレーションコントロールバーの[ステップ]ボタンを使用して、トークンが各アクティビティを通過して進むようにします。
  • 実行中は緑と赤の丸が[リソース:サービスデスク]リソースに表示されます。緑色のアイコンは、リソースを取得したトークンの数を示します。この場合、利用可能なリソースは1つだけなので、この数は決して1より大きくなることはありません。赤色のアイコンは、リソースの取得を試みているものの、利用可能なリソースがないために取得できないトークンの数です。

ステップ5 処理フローチャートを作成する

処理フローのすべてのロジックが設定されたので、この処理フローによって作成された満足したお客様と不満のあるお客様の数を記録するダッシュボードを作成します。[シンク:不満のあるお客様]の入力と時間の統計を前のチュートリアルタスクで作成したダッシュボードに固定表示します。

処理フローから統計を固定するプロセスは、3Dオブジェクトでの処理とほぼ同じです。統計をダッシュボードに固定すると、自動で統計コレクターが作成されます。このステップでは、統計コレクターを編集して[Unhappy Customers]シンクと[Happy Customers]シンクの両方をリッスンします。

また3Dモデルの順番待ち列で待っている顧客に対応する[取得:サービスを取得]アクティビティの滞在時間を固定表示します。これらの統計を固定するには:

  1. シンク:不満のあるお客様]アクティビティをクリックして選択します。
  2. [クイックプロパティ]で、[統計 ボタンをクリックして、このアクティビティの統計ウィンドウを開きます。
  3. このアクティビティに入ったトークンの数を追跡します。そのため、[入力]ボックスの横にある[固定]ボタン をクリックしてメニューを開きます。[カスタマーサービスメトリックに固定]をポイントしてから、[入力と時間]を選択します。チャートがダッシュボードに表示されます。
  4. チャートをダブルクリックして[チャートのプロパティ]ウィンドウを開きます。
  5. 上部の[名前]ボックスで、現在のチャート名を削除して、代わりに「顧客(処理フロー)」と入力します。
  6. データ]タブで[データソース]メニューに[シンク:UnhappyCustomersInputvsTime]と表示されていることを確認します。このメニューの横にある[...]ボタンを押すと、この統計コレクターのプロパティウィンドウが開きます。
  7. プロパティの上部にある名前ボックスで、統計コレクターの名前を「CustomersInputVsTime」に短縮します。
  8. イベントリスニング]タブで、イベントリストの[シンク - 入力]イベントを選択します。[イベントの詳細]で、イベントの[名前]を「不満のあるシンク - 入力」に変更します。
  9. イベントリストの上にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
  10. 処理フローが表示されていない場合は、サンプラーを[処理フロー]タブに合わせます。
  11. 処理フローで[シンク:満足したお客様]をクリックしてメニューを開きます。[入力変更時]を選択します。
  12. この新しく作成したイベントをイベントリストで選択して、イベントの[名前]を「満足したシンク - 入力」に変更します。
  13. パラメータ]テーブルにある[イベントデータラベル名]列の[新しい値]行で、現在のテキストを削除して「入力」と入力します。
  14. イベントリストで[不満のあるシンク - 入力]イベントをクリックして選択します。[パラメータ]テーブルにある[イベントの詳細]の[イベントデータラベル名]列の下にある[新しい値]行で、現在のテキストを削除して「入力」と入力します。
  15. OK]ボタンを押して変更を保存し、ウィンドウを閉じます。開いているウィンドウをすべて閉じて変更を保存します。
  16. 処理フローで[取得:サービスを取得]アクティビティをクリックします。
  17. [クイックプロパティ]で、[取得:サービスを取得]アクティビティの横にある[統計 ボタンをクリックして、このアクティビティの統計ウィンドウを開きます。
  18. 滞在時間]ボックスの隣にある[固定 ボタンをクリックしてメニューを開きます。[カスタマーサービスメトリックに固定]をポイントして、[滞在時間と時間]を選択します。チャートがダッシュボードに表示されます。
  19. 実際に必要としているのはこの統計情報に対して自動で生成された統計コレクターのみであるため、新しいチャートはクリックして削除します。統計ウィンドウも閉じることができます。
  20. ダッシュボードを開いてアクティブにすると、ライブラリがさまざまなチャートオプションの表示に変更されます。[ヒストグラム]チャートをダッシュボードにドラッグします。[チャートのプロパティ]が自動で開きます。
  21. 上部の[名前]ボックスで、現在のチャート名を削除して、代わりに「待機時間(処理フロー)」と入力します。
  22. データ]タブで[データソース]メニューをクリックし、[取得:GetServiceStaytimevsTime]を選択します。
  23. ]メニューをクリックし、[滞在時間]を選択します。
  24. OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。

シミュレーションモデルを保存することをおすすめします。

ステップ6 データを分析する

このステップでは、データを実行して処理フローモデルの結果と3Dモデルと比較します。

モデルをリセットして実行します。作業が終了すると、結果は次の画像のようになります。

3Dモデルの結果と同様に、不満のあるお客様よりも満足したお客様がわずかに多いことがわかります。これは良い兆候ではありません。また、平均待機時間が最大待機時間200秒に非常に近いことにも注目してください。これは明らかに改善の余地があるビジネスプロセスです。

結論

このチュートリアルを完了して、処理フローツールでモデルを構築するための基本を学ぶことができました。次のチュートリアルタスクでは、3Dモデルのビジュアルを改善する方法を学び、処理フローを使用して3Dモデルのカスタムロジックを作成する方法を学習します。さらに、サービスデスクを追加してそれがビジネスシステムの問題を解決するかどうかを試します。「チュートリアルタスク1.4 - モデルをリンクする」に進んでください。