assimeeによるモデル作成方法やプロセスについてのより深い理解のためにこの記事を読む前に以下の記事を先にご覧いただくことをことをお勧めします。
ー概要ー
今回の記事では、在庫の最適量を決めたいという課題をassimeeのシミュレーション使って効率的に解決する方法について解説します。前回の記事ではassimeeを使うことで生産目標を達成するのに必要な人員数を決定しました。今回はassimeeを活用して在庫の計算を行ってみます。ここでいう在庫とは適正在庫のことを指し、これは欠品を出さずに企業利益を最大にする最小限の在庫数のことです。適正在庫は欠品を防ぐための安全在庫と季節要因や波動需要を吸収するためのサイクル在庫からなっていますが、今回の記事では安全在庫の計算にassimeeを活用する方法について説明します。
ーモデルー
前回の記事と同様に入荷する3つの部品から製品の組み立てを行い、出荷するラインを考えます。モデル内の「0000入荷」を在庫置き場からの出庫と考えることで、このラインが必要とする部品の数を計算することが出来ます。
*モデルに配置されるカードは前回と同様ですが、3か所の部品の加工プロセス(「2001駆動部品チェック」、「2101内装部品加工」、「2201外装部品加工」)の作業人数が前回の結果を受けて変更されています。
モデルの作成
以下のようにプロセスカードを配置し設定して行きます。
入荷プロセス:
プロセス名を「0000入荷」へ変更、
詳細設定からパーツの入荷を3つ設定
1つ目:入荷パーツ名称を「駆動部品」、間隔を「1分」、個数を「2個」、
2つ目:入荷パーツ名称を「内装部品」、間隔を「1分」、個数を「2個」、
3つ目:入荷パーツ名称を「外装部品」、間隔を「1分」、個数を「2個」と設定
置き場プロセス:
プロセス名を「0001入荷品置き場」へ変更、容量を「1000個」と設定
検品プロセス:
プロセス名を「0002入荷時検品」へ変更、不良品率を0.1%、処理時間を「1分」、作業人数を「10人」と設定
分岐プロセス:
プロセス名を「0003不良品排除」へ変更、処理時間を「0分」、作業人数を「1人」と設定
*処理時間を「0」とすることでパススルーとなります。
分岐先として2つのプロセスを設置:
置き場プロセス:
プロセス名を「0004合格品置き場」へ変更、容量を「1000個」と設定
置き場プロセス:
プロセス名を「1000不良品置き場」へ変更、容量を「1000個」と設定
分岐条件:
条件1:
・送り先:0004合格品置き場
・分岐条件:パーツステータスが一致
・パーツステータス:正常
条件2:
・送り先:1000不良品置き場
・分岐条件:パーツステータスが一致
・パーツステータス:不良
入荷部品の不良品処理
置き場プロセス(再掲):
プロセス名を「1000不良品置き場」へ変更、容量を「1000個」と設定
以降は最後に設定
合格品処理
置き場プロセス(再掲):
プロセス名を「0004合格品置き場」へ変更、容量を「1000個」と設定
運搬プロセス(ローラーコンベア):
プロセス名を「0005運搬」へ変更、積荷容量を「10個」、処理時間「1分」と設定
分岐プロセス:
プロセス名を「0006分岐」へ変更、処理時間を「0分」、作業人数を「1人」と設定
分岐先として3つのプロセスを設置:
置き場プロセス:
プロセス名を「2000駆動部品置き場」へ変更、容量を「1000個」と設定
置き場プロセス:
プロセス名を「2100内装部品置き場」へ変更、容量を「1000個」と設定
置き場プロセス:
プロセス名を「2200外装部品置き場」へ変更、容量を「1000個」と設定
分岐条件:
条件1:
・送り先:2000駆動部品置き場
・分岐条件:パーツ名が一致
・パーツ名:駆動部品
条件2:
・送り先:2100内装部品置き場
・分岐条件:パーツ名が一致
・パーツ名:内装部品
条件3:
・送り先:2200外装部品置き場
・分岐条件:パーツ名が一致
・パーツ名:外装部品
駆動部品加工処理
置き場プロセス(再掲):
プロセス名を「2000駆動部品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「2001駆動部品チェック」へ変更、処理時間を「20分」、作業人数を「40人」と設定、
対象パーツ名称を「駆動部品」、個数を「1個」、
出力パーツ名称を「チェック済駆動部品」、個数を「1個」と設定
置き場プロセス:
プロセス名を「2002チェック済駆動部品置き場」へ変更、容量を「1000個」と設定
運搬プロセス(ローラーコンベア):
プロセス名を「2003運搬」へ変更、積荷容量を「10個」、処理時間「1分」と設定
置き場プロセス:
プロセス名を「3000組立前部品置き場」へ変更、容量を「1000個」と設定
内装部品加工処理
置き場プロセス(再掲):
プロセス名を「2100内装部品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「2101内装部品加工」へ変更、処理時間を「10分」、作業人数を「20人」と設定、
対象パーツ名称を「内装部品」、個数を「1個」、
出力パーツ名称を「加工済内装部品」、個数を「1個」と設定
置き場プロセス:
プロセス名を「2102加工済内装部品置き場」へ変更、容量を「1000個」と設定
運搬プロセス(ローラーコンベア):
プロセス名を「2103運搬」へ変更、積荷容量を「10個」、処理時間「1分」と設定
以降は「3000組立前部品置き場」へ合流
外装部品加工処理
置き場プロセス(再掲):
プロセス名を「2200外装部品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「2201外装部品加工」へ変更、処理時間を「5分」、作業人数を「10人」と設定、
対象パーツ名称を「外装部品」、個数を「1個」、
出力パーツ名称を「加工済外装部品」、個数を「1個」と設定
置き場プロセス:
プロセス名を「2202加工済外装部品置き場」へ変更、容量を「1000個」と設定
運搬プロセス(ローラーコンベア):
プロセス名を「2203運搬」へ変更、積荷容量を「10個」、処理時間「1分」と設定
以降は「3000組立前部品置き場」へ合流
合流後に組立処理
置き場プロセス(再掲):
プロセス名を「3000組立前部品置き場」へ変更、容量を「1000個」と設定
組立プロセス:
プロセス名を「3001組立」へ変更、処理時間を「1分」、作業人数を「10人」と設定、
詳細設定から対象パーツを3つ設定
1つ目:
対象パーツ名称を「チェック済駆動部品」、個数を「1個」、
2つ目:
対象パーツ名称を「加工済内装部品」、個数を「1個」、
3つ目:
対象パーツ名称を「加工済外装部品」、個数を「1個」、
出力パーツ名称を「製品」、個数を「1個」と設定
置き場プロセス:
プロセス名を「3002製品置き場」へ変更、容量を「1000個」と設定
検品プロセス:
プロセス名を「3003完成品検品」へ変更、不良品率を0.1%、処理時間を「1分」、作業人数を「5人」と設定
分岐プロセス:
プロセス名を「3004分岐」へ変更、処理時間を「0分」、作業人数を「1人」と設定
*処理時間を「0」とすることでパススルーとなります。
分岐先として2つのプロセスを設置:
置き場プロセス:
プロセス名を「3005合格品置き場」へ変更、容量を「1000個」と設定
置き場プロセス:
プロセス名を「4000不良品置き場」へ変更、容量を「1000個」と設定
分岐条件:
条件1:
・送り先:3005合格品置き場
・分岐条件:パーツステータスが一致
・パーツステータス:正常
条件2:
・送り先:4000不良品置き場
・分岐条件:パーツステータスが一致
・パーツステータス:不良
合格側の出荷処理
置き場プロセス(再掲):
プロセス名を「3005合格品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「3006梱包」へ変更、処理時間を「1分」、作業人数を「5人」と設定、
対象パーツ名称を「製品」、個数を「1個」、
出力パーツ名称を「梱包用段ボール」、個数を「1個」と設定
置き場プロセス:
プロセス名を「3007出荷品置き場」へ変更、容量を「1000個」と設定
運搬プロセス(ローラーコンベア):
プロセス名を「3008運搬」へ変更、積荷容量を「10個」、処理時間「1分」と設定
出荷プロセス:
プロセス名を「3009出荷」へ変更
製品の不良品処理
置き場プロセス(再掲):
プロセス名を「4000不良品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「4001不良品破壊」へ変更、処理時間を「1分」、作業人数を「1人」と設定、
対象パーツ名称を「製品」、個数を「1個」、
出力パーツ名称を「破棄品」、個数を「1個」と設定
出荷プロセス:
プロセス名を「4002破棄」へ変更
入荷部品の不良品処理
置き場プロセス(再掲):
プロセス名を「1000不良品置き場」へ変更、容量を「1000個」と設定
加工プロセス:
プロセス名を「1001不良品破壊」へ変更、処理時間を「1分」、作業人数を「1人」と設定、
詳細画面よりパーツごとに以下のように設定
1つ目:
対象パーツ名称を「駆動部品」、個数を「1個」、
出力パーツ名称を「破棄品」、個数を「1個」と設定
2つ目:
対象パーツ名称を「内装部品」、個数を「1個」、
出力パーツ名称を「破棄品」、個数を「1個」と設定
3つ目:
対象パーツ名称を「外装部品」、個数を「1個」、
出力パーツ名称を「破棄品」、個数を「1個」と設定
出荷プロセス:
プロセス名を「1002破棄」へ変更
ーシミュレーション結果ー
今回のモデルのシミュレーション結果は以下のようになります。生産目標を達成できていることが分かると思います。生産目標を60分で120個から変更する場合は前回の記事の方法で、再度ラインの人数を調整します。
このモデルでは適切に人員を配置すれば、駆動部品が1個、内装部品が1個、外装部品が1個から1個の製品を出荷されます。まず、「2000駆動部品置き場」、「2100内装部品置き場」、「2200外装部品置き場」、「3000組立前部品置き場」など4つの置き場で在庫の滞留が起きていないかを確認します。
これらの在庫の量が右肩上がりでないことから、生産プロセスが問題なく動いていること、また、出荷の情報から不良品が非常に少ないことが分かりました。*入荷の際の不良品の発生がランダム変数を含むため、完全に一致しないことがあります。
ここから、例えば60分で120個の製品を出荷するためには、60分間に駆動部品を120個、内装部品を120個、外装部品を120個、在庫置き場から出庫する必要があることが分かります。これを前提に生産計画を立ててみましょう。
ー生産計画と在庫の計算ー
assimeeを使えば、ラインのモデルを使って将来の生産計画を簡単にシミュレーション出来ます。シミュレーション結果から目標生産数に対する必要な部品数や在庫を計算することも可能です。ここでは例として10日間の生産計画から、それに対して必要な安全在庫数を計算してみましょう。
安全在庫は次の計算式で計算します。
- 安全在庫=安全係数(1.65)×使用量の標準偏差×√(発注リードタイム+発注間隔)
安全係数1.65は欠品率(100回の発注に対して何回の欠品を受容するか)5%に対する係数で、安全在庫を計算するために一般的に使われる値です。欠品率をこれより低くする場合、安全係数はより大きくなります。
今回、計算の簡単のために発注リードタイムを1日、発注間隔を3日とします。また不良品率や立ち上げのための時間(シミュレーション結果の図の最初が下がっているのは、今回のモデルでは仕掛在庫がなく部品を運搬する時間や、それを加工が待たないといけない時間があるためです)は今回は無視できる値なので考えないことにします。*待ち時間による生産の落ち込みは途中の在庫置き場に仕掛かり品(在庫)を用意することで回避できます。
以下の表のような生産計画表を考えます。加えて予定に対する出荷実績を並べました。また、今回のモデルでは製品1個に対して駆動部品1個、内装部品1個、外装部品1個が必要なため、必要な部品数は以下の通りとなりました。それではこの表の出荷実績から安全在庫を計算してみましょう
出荷予定数 | 出荷実績数 | 使用する 駆動部品数 | 使用する 内装部品数 | 使用する 外装部品数 | |
1日目 | 960 | 960 | 960 | 960 | 960 |
2日目 | 960 | 960 | 960 | 960 | 960 |
3日目 | 960 | 720 | 720 | 720 | 720 |
4日目 | 960 | 720 | 720 | 720 | 720 |
5日目 | 960 | 960 | 960 | 960 | 960 |
6日目 | 960 | 960 | 960 | 960 | 960 |
7日目 | 960 | 960 | 960 | 960 | 960 |
8日目 | 960 | 1200 | 1200 | 1200 | 1200 |
9日目 | 960 | 1200 | 1200 | 1200 | 1200 |
10日目 | 960 | 960 | 960 | 960 | 960 |
平均 | 960 | 960 | 960 | 960 | |
標準偏差 | 160 | 160 | 160 | 160 |
計算の結果、上表の10日間の生産計画と実績に従った場合に必要な部品量の標準偏差は160となりました。ここから生産計画で起きている変動を考えた安全在庫を計算式に従って計算すると528個となります。3日間隔の部品発注(リードタイム1日)の条件では、初日に528個の在庫を手配しておけば、欠品の可能性を5%以下に抑えることが出来ることが分かりました。
ーまとめー
今回はシミュレーションを活用して生産計画に必要な部品数を計算しました。今回の記事のようにassimeeは人員数や在庫置き場の容量だけでなく、安全在庫の計算に活用することが出来ます。事前にassimeeでモデルを作ってさえおけば、不良品率やラインの生産能力の加味といった複雑な計算をしなくても、シミュレーションを行うだけで出荷目標に対して必要な部品数が計算できます。このことは、これまで熟練者の経験や勘に頼る分が多かった在庫計算を誰でも簡単に行えることに繋がります。
今回の記事では安全在庫をきわめて簡略した形で計算しましたが、この安全在庫が本当に安全なのかをassimeeを使って実際にシミュレーションでテストする記事を予定しています。ご期待ください。