以下、本発明の好ましい実施の形態を、図面を参照しながら説明する。
本実施の形態では、船により製品(出荷対象品)が出荷される場合の出荷計画の立案について説明する。工場で製造された製品は、出荷する前に一時的に倉庫に保管される。倉庫に保管された製品に対して出荷のための検査が行われ、検査に合格した製品が出荷可能とされる。他方、検査に不合格の製品及び検査前の製品は出荷不可能とされる。また、出荷用の船毎に積載される製品の量の下限値及び上限値が定められ、出荷可能とされた製品の倉庫における在庫量が下限値以上となった場合に、船が出荷用の港に入港し、船に製品が積載されるものとする。そして、船には上限値以下の量の製品が積載され、出荷されるものとする。
また、ある時点において倉庫に保管されている製品のうち、出荷可能な製品の量を「出荷可能在庫量」といい、出荷不可能な製品の量を「出荷不可能在庫量」という。また、ある時点における倉庫の在庫全体の量、即ち、出荷可能在庫量と出荷不可能在庫量との和を「総在庫量」という。ある時点までに製造された出荷可能な製品の累計を「出荷可能累計量」という。
ある時点において船に積載されている製品の量を「実積載量」といい、船に積載される製品の量の下限値及び上限値のそれぞれを「最小積載量」及び「最大積載量」という。ある時点において船に製品が積載されているか否かを示す情報を船の「積載状態」という。「積載状態」が「0」の場合、船には製品が積載されていないことを示し、「積載状態」が「1」の場合、船には製品が積載されていることを示すものとする。
また、港に船の着岸に関する次のような制約条件があるものとする。船には2種類のサイズ「大」及び「小」が規定されており、「大」及び「小」又は「小」及び「小」の組み合わせで2隻しか同時に港に着岸できない。つまり、「大」及び「大」の組み合わせの2隻、並びに3隻以上の船は港に同時に着岸できない。
また、出荷先毎に1つずつ船がある、即ち、1つの出荷先に対して1つの船があるものとする。
本実施の形態に係る出荷計画立案装置は、製品出荷用の船が製品を積載するための港に到着する到着時点(入港時点)及び港から出発する出発時点(出港時点)を複数の船毎に示す出荷計画を立案する。
[出荷計画立案装置の構成]
本実施の形態に係る出荷計画立案装置の構成について説明する。図1は、本実施の形態に係る出荷計画立案装置の構成を示すブロック図である。出荷計画立案装置1は、コンピュータ10によって実現される。図1に示すように、コンピュータ10は、本体11と、入力部12と、表示部13とを備えている。本体11は、CPU111、ROM112、RAM113、読出装置114、ハードディスク115、入出力インタフェース116、及び画像出力インタフェース117を備えており、CPU111、ROM112、RAM113、読出装置114、ハードディスク115、入出力インタフェース116、及び画像出力インタフェース117は、バスによって接続されている。
CPU111は、RAM113にロードされたコンピュータプログラムを実行することが可能である。そして、出荷計画立案用のコンピュータプログラムである出荷計画立案プログラム110を当該CPU111が実行することにより、コンピュータ10が出荷計画立案装置1として機能する。
ROM112は、マスクROM、PROM、EPROM、又はEEPROM等によって構成されており、CPU111に実行されるコンピュータプログラム及びこれに用いるデータ等が記録されている。
RAM113は、SRAM又はDRAM等によって構成されている。RAM113は、ハードディスク115に記録されている出荷計画立案プログラム110の読み出しに用いられる。また、CPU111がコンピュータプログラムを実行するときに、CPU111の作業領域として利用される。
ハードディスク115は、オペレーティングシステム及びアプリケーションプログラム等、CPU111に実行させるための種々のコンピュータプログラム及び当該コンピュータプログラムの実行に用いられるデータがインストールされている。出荷計画立案プログラム110も、このハードディスク115にインストールされている。
入出力インタフェース116は、例えばUSB,IEEE1394,又はRS-232C等のシリアルインタフェース、SCSI,IDE,又は IEEE1284等のパラレルインタフェース、及びD/A変換器、A/D変換器等からなるアナログインタフェース等から構成されている。入出力インタフェース116には、キーボード及びマウスからなる入力部12が接続されており、ユーザが当該入力部12を使用することにより、コンピュータ10にデータを入力することが可能である。
画像出力インタフェース117は、LCDまたはCRT等で構成された表示部13に接続されており、CPU111から与えられた画像データに応じた映像信号を表示部13に出力するようになっている。表示部13は、入力された映像信号にしたがって、画像(画面)を表示する。
[出荷計画立案装置の動作]
以下、本実施の形態に係る出荷計画立案装置1の動作について説明する。出荷計画立案装置1は、以下に説明する出荷計画立案処理を実行する。
図2は、本実施の形態に係る出荷計画立案装置1による出荷計画立案処理の手順を示すフローチャートである。
まず、出荷計画立案装置1のCPU111は、出荷計画立案用の入力データを受け付ける(ステップS101)。
入力データは、各時点における出荷可能累計量を出荷先毎に示す生産計画データと、輸送機である船に関する輸送機データとを含む。
図3は、生産計画データの一例を示す図である。図3に示すように、生産計画データでは、複数の時点毎に出荷可能累計量、即ち、その時点までに製造された出荷可能な製品の累計と、その出荷先とが示されている。なお、図3では省略しているが、生産計画データには時点毎の出荷不可能在庫量も含まれている。図3において、各行は出荷先に対応し、各列は時点に対応する。ここで、生産計画データが1日毎の生産計画を示す場合、「時点」は日付となる。また、生産計画データが毎日午前及び午後の2回ずつの生産計画を示す場合、「時点」は「○年○月○日午前」のように日付及び午前又は午後となる。生産計画データが1時間毎の生産計画を示す場合、「時点」は日付及び時刻(○年○月○日○時)となる。このように、「時点」は様々な情報であり得るが、図3に示すとおり、本実施の形態では「時点」を日付とした例を用いて説明する。
図3において、各マス内の数字は出荷計画累計量である。例えば、1月10日には出荷先A用の出荷可能な製品の量は「0」であるが、製品が製造された結果、1月11日には「100」の出荷可能な製品がある。さらに「400」の製品が製造された結果、1月12日の出荷可能累計量は「500」(100+400)となっている。
図4は、輸送機データの一例を示す図である。輸送機データは、船毎に、出荷先と、船のサイズ(大又は小)と、船の最小積載量及び最大積載量とを規定するデータである。
次に、CPU111は、初期出荷計画生成処理を実行する(ステップS102)。この初期出荷計画生成処理は、入力データに基づいて、上記の制約条件がない場合の出荷計画を生成する処理である。
初期出荷計画生成処理では、次に示すようなルールに従って出荷計画を生成する。
<ルール>
a.出荷可能在庫量(倉庫における出荷可能な製品の在庫量)が最小積載量になった場合、船が入港する。
b.実積載量(船に積載されている製品の量)がその船の最大積載量になるまで、船は港に停留する。
c.実積載量がその船の最大積載量になった場合、船が出港する。
d.制約条件は課されない(同時に着岸する船のサイズ及び数に制限がない)。
初期出荷計画生成処理についてさらに詳しく説明する。図5は、初期出荷計画生成処理の手順を示すフローチャートである。
初期出荷計画生成処理において、まずCPU111は、処理対象の時点tiを現在の時点にセットする(ステップS201)。
ここで、ハードディスク115には、出荷先毎(船毎)に船の実積載量が記憶される。実積載量は、船に積載されている製品の量を示す。なお、船の実積載量の初期値は「0」である。
また、ハードディスク115には、出荷先毎(船毎)に積載状態が記憶される。積載状態は、船に製品が積載されているか否かを示す。積載状態は、「0」と「1」の2つの値を取り得る情報である。積載状態が「0」であれば、その船に製品が積載されていないことを示す。積載状態が「1」であれば、その船に製品が積載されていることを示す。船が未入港の場合は、積載状態は「0」とされる。船が港に停留している場合、その船には製品が積載されるので、積載状態が「1」とされる。つまり、積載状態は次のように船の入港に関する状態を示している。
CPU111は、出荷先の1つを処理対象出荷先として選択する(ステップS202)。また、CPU111は、時点tiにおける処理対象出荷先の出荷可能在庫量を特定する(ステップS203)。ステップS203の処理では、CPU111が、ハードディスク115に記憶された在庫量データから時点tiにおける処理対象出荷先の出荷可能在庫量を読み出すことで、当該出荷可能在庫量を特定する。初期の在庫量データは、生産計画データと同一のデータである。後述するように、在庫量データは処理が進むにしたがって更新される。
さらにCPU111は、時点tiにおいて、処理対象出荷先の出荷可能在庫量が最小積載量以上であるか否かを判定する(ステップS204)。ステップS204において、出荷可能在庫量が最小積載量未満である場合(ステップS204においてNO)、船への積載に最低限必要な量の製品が倉庫に保管されていない。この場合、CPU111は、処理対象出荷先の船が時点tiに入港しないと決定し、時点tiにおける処理対象出荷先の積載状態を、船に製品が積載されていないことを示す「0」とし(ステップS205)、ステップS211へ処理を移す。
ステップS211では、全出荷先が処理対象出荷先として選択済みであるか否かをCPU111が判定する(ステップS211)。処理対象出荷先として選択されていない出荷先が残っている場合(ステップS211においてNO)、CPU111は、ステップS202に処理を移し、まだ選択されていない出荷先の1つを処理対象出荷先として選択し(ステップS202)、ステップS203以降の処理を実行する。
また、ステップS211において、全出荷先が処理対象出荷先として選択済みである場合(ステップS211においてYES)、CPU111は、時点tiが計画立案期間の最終時点であるか否かを判定する(ステップS212)。なお、計画立案期間の最終時点は、出荷計画立案装置1に予め与えられる。時点tiが計画立案期間の最終時点ではない場合(ステップS212においてNO)、CPU111は、処理対象の時点tiを次の時点に変更し(ステップS213)、ステップS202へ処理を移す。
一方、ステップS204において、出荷可能在庫量が最小積載量以上である場合(ステップS204においてYES)、CPU111は、処理対象出荷先の船が時点tiにおいて入港又は港に停留すると決定し、その船の実積載量を更新する(ステップS206)。このステップS206の処理において、処理対象出荷先への時点tiにおける出荷可能在庫量が最大積載量以下である場合は、実積載量がその出荷可能在庫量と同じ値に更新される。また、当該出荷可能在庫量が最大積載量より大きい場合は、実積載量が最大積載量と同じ値に更新される。
次にCPU111は、時点tiにおける処理対象出荷先の積載状態を、船に製品が積載されていることを示す「1」とする(ステップS207)。さらに、CPU111は、処理対象出荷先への時点tiにおける出荷可能在庫量を更新する(ステップS208)。このステップS208の処理では、在庫量データにおいて、処理対象出荷先への時点tiにおける出荷可能在庫量が最大積載量以下である場合は、その出荷可能在庫量が「0」とされる。また、当該出荷可能在庫量が最大積載量より大きい場合は、出荷可能在庫量と最大積載量との差分が新たな出荷可能在庫量とされる。
ステップS203〜S208の処理について例を挙げて説明する。図6は、出荷可能在庫量の更新を説明するための模式図である。図6に示す例では、「1月10日」〜「1月12」における出荷先Aの出荷可能在庫量は600未満である。ここで、出荷先Aの船の最小積載量が「600」、最大積載量が「1000」であるとすると、「1月10日」〜「1月12日」における出荷先Aの出荷可能在庫量は最小積載量未満となる。このため、「1月10日」〜「1月12日」において出荷先Aの船が入港しないとされ、この間の実積載量は「0」のままであり、出荷可能在庫量も更新されない。また「1月10日」〜「1月12日」における積載状態は「0」とされる。一方、「1月13日」では、更新前の出荷先Aの出荷可能在庫量が「600」となっており、これは最小積載量以上、最大積載量未満である。したがって、出荷先Aの船の入港時点が「1月13日」に決定され、実積載量が「0」から「600」に変更され、「1月13日」における出荷先Aの積載状態が「1」とされる。また、在庫量データにおいて、「1月13日」における出荷先Aへの出荷可能在庫量が「0」とされる。
ステップS208の処理を終えると、CPU111は、処理対象出荷先の船の実積載量が最大積載量であるか否かを判定する(ステップS209)。ここで、処理対象出荷先の船の実積載量が最大積載量でない場合(ステップS209においてNO)、CPU111は、時点tiにおいて船が出港しないと決定し、ステップS211へ処理を移す。
一方、ステップS209において、処理対象出荷先の船の実積載量が最大積載量である場合(ステップS209においてYES)、CPU111は、船の出港時点を時点tiに決定する。この場合、CPU111は、在庫量データにおいて、処理対象出荷先への時点ti+1以降における出荷可能在庫量のそれぞれから当該出荷先の船の最大積載量を差し引く(ステップS210)。
図6の例を用いて、出荷可能在庫量が最大積載量以上の場合におけるステップS203〜S210の処理について説明する。図6に示す例において、「1月14日」における出荷先Aの出荷可能在庫量は「1000」である。したがって、出荷可能在庫量が最小積載量以上であるため、船は港に「1月14日」において停留すると決定され、「1月14日」の実積載量が更新される。ここで、出荷可能在庫量が最大積載量と同じ「1000」であるため、実積載量は「1000」に更新される。また、「1月14日」における積載状態が「1」とされ、出荷可能在庫量が「0」に更新される。
上記のように、「1月14日」における出荷先Aの実積載量は「1000」とされている。これは、出荷先Aの船の最大積載量「1000」と同じである。したがって、当該船の出港時刻が「1月14日」に決定され、ステップS210において、「1月15日」以降の全ての時点における出荷可能在庫量が1000だけ減らされ、当該出荷可能在庫量を含む在庫量データがハードディスク111に記憶される。
ステップS210の処理を終えると、CPU111は、ステップS211へ処理を移す。ステップS211において、全出荷先が処理対象出荷先として選択済みであり(ステップS211においてYES)、ステップS212において、時点tiが計画立案期間の最終時点である場合(ステップS212においてYES)、CPU111は、上記のようにして決定した入港時点及び出港時点に基づいて出荷計画を生成する(ステップS214)。ステップS214の処理では、各時点の積載状態を用いて出荷計画が生成される。ある出向先の船のある時点における積載状態が「0」の場合、出荷計画において、当該出向先の当該時点での値が未入港を示す「0」とされる。また、ある出向先の船のある時点における積載状態が「1」の場合、出荷計画において、当該出向先の当該時点での値がその船の最大出荷量とされる。ここで、出荷計画における最大積載量は、船が港に停留していることを示すものとする(図10参照)。
ステップS214の処理を終えると、CPU111は、初期出荷計画生成処理を終了し、出荷計画立案処理のメインルーチンに処理を戻す。
以上の初期出荷計画生成処理により、倉庫の負荷状況を考慮した出荷計画を生成できる。また、この出荷計画は、船の着岸に関する制約条件がない場合の出荷計画となる。
再び図2を参照し、出荷計画立案処理について説明する。初期出荷計画生成処理の後、CPU111は、出荷計画修正処理を実行する(ステップS103)。この出荷計画修正処理は、初期出荷計画生成処理によって生成された出荷計画を、船の着岸に関する制約条件を満たすように修正する処理である。
出荷計画修正処理についてさらに詳しく説明する。図7は、出荷計画修正処理の手順を示すフローチャートである。
出荷計画修正処理では、計画立案期間の最終時点から遡り、各時点において制約条件に違反するか否かを判定し、制約条件に違反する場合に、制約条件の違反を解消するように船の発着予定を修正する。
出荷計画修正処理において、まずCPU111は、出荷計画を読み出す(ステップS301)。ステップS301において、修正する対象が初期出荷計画生成処理によって生成された出荷計画である場合、CPU111は、ハードディスク115からこの出荷計画を読み出す。また、修正する対象がユーザから指定された出荷計画である場合、指定された出荷計画を当該出荷計画が記録された記録媒体(ハードディスク115又は他の記録媒体)から読み出す。
次にCPU111は、処理対象の時点tiを計画立案期間の最終時点にセットする(ステップS302)。
次にCPU111は、時点tiにおいて、出荷計画が制約条件に違反しているか否かを判定する(ステップS303)。ステップS303においては、CPU111は出荷計画を参照し、時点tiにおいて「大」及び「大」の組み合わせの2つの船、又は3つ以上の船が港に停留するか否かを判定する。「大」及び「大」の組み合わせの2つの船、又は3つ以上の船が港に停留する場合、制約条件に違反する。時点tiにおいて停留する船がない、1つだけ船が停留する、「大」及び「小」又は「小」及び「小」の組み合わせの2つの船が停留する場合は、制約条件に違反しない。
時点tiにおいて制約条件に違反していない場合(ステップS303においてNO)、CPU111は、時点tiが現在時点(計画立案期間の開始時点)であるか否かを判定する(ステップS307)。時点tiが現在時点ではない場合(ステップS307においてNO)、CPU111は、処理対象の時点tiを1つ前の時点に変更し(ステップS308)、ステップS303へ処理を移す。
他方、時点tiにおいて制約条件に違反している場合(ステップS303においてYES)、CPU111は、時点tiにおいて複数の船の出港が重なっているか否かを判定する(ステップS304)。時点tiにおいて複数の船の出港が重なっている場合(ステップS304においてYES)、CPU111は、これらの船のうちの一部の船の出港時点を時点ti−1に変更する(ステップS305)。
ステップS305の処理において、CPU111は、出港時点が重なっている複数の船の時点ti−1における空き容量を比較し、空き容量が小さい船の出港時点を時点ti−1に変更する。ここで、空き容量とは、最大積載容量から時点ti−1における実積載量を差し引いた値である。2つの船の出港時点が重なっている場合、CPU111は、時点ti−1における空き容量が小さい方の船の出港時点を変更し、空き容量が大きい方の船の出港時点を変更しない。3以上の船の出港時点が重なっている場合、CPU111は、時点ti−1における空き容量が最小の船の出港時点を変更せず、その他の船の出港時点を変更する。また、複数の船の間で時点ti−1における空き容量が同一の場合、どちらか一方の船の出港時点を変更する。
図8は、複数の船の出港が重なっている場合の発着予定の変更を説明するための模式図である。図8において、○印は船が港に停留していることを示す。図8に示す例では、時点(日付)「1月20日」〜「1月25日」において出荷先Aの船が港に停留しており、時点(日付)「1月23日」〜「1月25日」において出荷先Bの船が港に停留している。つまり、出荷先A及びBの両方の船において、最後の停留時点が「1月25日」であり、この「1月25日」が出港時点である。また、この例では出荷先A及びBの船のサイズは両方とも「大」であるとする。つまり、「1月25日」において制約条件に違反しており、出荷先A及びBの船の出港が重なっているため、これらの船のうちの一方の出港時点が変更される。
ここで、「1月24日」における出荷先Aの船の実積載量は「800」であり、この船の最大積載量は「1000」であるとする。また、「1月24日」における出荷先Bの船の実積載量は「200」であり、この船の最大積載量は「600」であるとする。この場合、出荷先Aの船の空き容量は「200」であり、出荷先Bの船の空き容量は「400」となる。したがって、空き容量が少ない出荷先Aの船の出港時点が「1月25日」から「1月24日」に変更される。これにより、出港時点が重ならないように出荷計画を修正できる。
なお、図8の例では、出荷先Aの出港時点が変更されても、「1月23日」及び「1月24日」における制約条件の違反は解消されないが、当該違反は処理が進むと解消される。この違反の解消については後述する。
上記のように、空き容量が小さい出荷先Aの船を先に出港させることで、空き容量が大きい出荷先Bの船の荷室を倉庫として使用することができ、倉庫の負荷を低減できる。また、出荷先Bの船の出港時点を「1月24日」に変更すると、当該船の出港時点の空き容量は「400」となり、出荷先Aの船の出港時点を「1月24日」に変更した場合における当該船の空き容量「200」と比べて空き容量が増大する。つまり、空き容量が小さい出荷先Aの船を先に出港させることで、出港時点における船の空き容量の増加を抑制できる。
ステップS305の処理を終えると、CPU111は、ステップS307に処理を移す。
一方、時点tiにおいて複数の船の出港が重なっていない場合(ステップS304においてNO)、CPU111は、時点tiにおいて港に停留している複数の船のうち、後に出港する船(以下、「後発船」という)の入港時点を、先に出港する船(以下、「先発船」という)の出港時点の後に変更する(ステップS306)。
ステップS306の処理において、時点tiにおいて3以上の船が港に停留している場合、CPU111は、各船のサイズを確認し、時点tiで制約条件を違反しないように、時点tiにおいて港に停留している複数の船のうちの1つ又は複数の船の入港時点を変更する。ここで、時点tiにおいて港に停留している複数の船のうち、最後に出港する船の入港時点を、その他の船の出港時点の後に変更してもよいし、最も遅く出港する2以上の船の入港時点を、その他の船の出港時点の後に変更してもよい。
図9は、複数の船の出港が重なっていない場合の発着予定の変更を説明するための模式図である。図9に示す例では、時点(日付)「2月6日」〜「2月9日」において出荷先Aの船が港に停留しており、「2月8日」〜「2月12日」において出荷先Bの船が港に停留している。また、この例では出荷先A及びBの船のサイズは両方とも「大」であるとする。つまり、「2月8日」〜「2月9日」において制約条件に違反している。この例では、出荷先Aの船が先に出港し(出港時点「2月9日」)、出荷先Bの船が後に出港する(出港時点「2月12日」)。したがって、出荷先Bの船の入港時点が、出荷先Aの船の出港時点「2月9日」の後の「2月10日」に変更される。
上記のように、後発船の入港時点を、先発船の出港時点の後になるように変更することで、先発船の停留時間が短縮されず、先発船の出港時点での空き容量は変化しない。他方、後発船についても、入港時点は変更されるが出港時点は変更されないため、出港時点での空き容量は変化しない。したがって、先発船及び後発船における空き容量が増加するのを防止できる。
また、上記の図8の例のように、ステップS305の処理では制約条件の違反が解消されていない場合、時点tiが更新された後のステップS306において制約条件の違反が解消される。
ステップS306の処理を終えると、CPU111は、ステップS307に処理を移す。ステップS307において、時点tiが現在時点である場合(ステップS307においてYES)、CPU111は、出荷計画修正処理を終了し、出荷計画立案処理のメインルーチンに処理を戻す。
以上の出荷計画修正処理により、船の着岸に関する制約条件に違反しないよう、出荷計画が修正される。
次にCPU111は、修正された出荷計画を再修正する出荷計画再修正処理を実行する(ステップS104)。出荷計画修正処理によって修正された出荷計画では、計画立案期間の最終時点から遡り、複数の船の出港が重複する時点があれば、当該複数の船のうち、空き容量が小さい船の出港時点を1つ前の時点に変更した。このため、計画立案期間の開始時点、つまり現在時点において複数の船の出港が重なっている場合、その時点よりも前の時点が存在しないため、制約条件の違反を解消できない。出荷計画再修正処理は、このように出荷計画修正処理によっても残った制約条件の違反を解消するための処理である。なお、便宜上、出荷計画修正処理によって制約条件が残らなかった場合も、出荷計画再修正処理を実行することとして説明を続ける。
かかる出荷計画再修正処理の内容について詳細に説明する。図10は、出荷計画再修正処理の手順を示すフローチャートである。まず、CPU111は、処理対象の時点tiを現在時点にセットする(ステップS401)。
次にCPU111は、時点tiにおいて、出荷計画が制約条件に違反しているか否かを判定する(ステップS402)。時点tiにおいて制約条件に違反していない場合(ステップS402においてNO)、CPU111は、時点tiが計画立案期間の最終時点であるか否かを判定する(ステップS407)。時点tiが計画立案期間の最終時点ではない場合(ステップS407においてNO)、CPU111は、処理対象の時点tiを1つ後の時点に変更し(ステップS408)、ステップS402へ処理を移す。これにより、出荷計画修正処理の結果、出荷計画に制約条件違反が残っていない場合、出荷計画は再修正されない。
他方、時点tiにおいて制約条件に違反している場合(ステップS402においてYES)、CPU111は、時点tiにおいて複数の船の出港が重なっているか否かを判定する(ステップS403)。制約条件違反の場合、時点tiにおいて制約条件に違反する複数の船が港に停留している。かかる制約条件違反には、複数の船の出港が時点tiで重複しているもの(以下、「出港重複」という)と、複数の船が時点tiにおいて港に停留しているが、出港時点は重なっていないもの(以下、「停留重複」という)とがある。ステップS403は、制約条件違反に出港重複が含まれるか否かを判定するものである。つまり、ステップS403において出港重複が含まれないと判定された場合、制約条件違反は停留重複であることになる。
時点tiにおける制約条件違反に出港重複が含まれる場合(ステップS403においてYES)、CPU111は、出港が重なっている船のうちの一部の船の入港時点及び出港時点(入出港時点)を時点ti+1に変更する(ステップS404)。
ステップS404の処理では、将来(ti+1)において倉庫の負荷(在庫量)の増加が最小となるように、発着予定が修正される。具体的には、CPU111は、出港時点が重なっている複数の船の時点tiにおける実積載量を比較し、実積載量が最小の船の入出港時点を時点ti+1に変更する。これにより、入出港時点が変更された船の実積載量だけ時点ti+1における倉庫の負荷は増大するが、当該船の実積載量は、時点tiにおいて出港が重なっている全ての船の実積載量の中で最小であるため、倉庫の負荷の増大は最小限に止まることになる。例えば、2つの船の出港時点が重なっている場合、CPU111は、時点tiにおける実積載量が小さい方の船の入出港時点を変更し、実積載量が大きい方の船の入出港時点を変更しない。3以上の船の出港時点が重なっている場合、CPU111は、時点tiにおける実積載量が最小の船の入出港時点を変更し、その他の船の入出港時点を変更しない。また、複数の船の間で時点tiにおける実積載量が最小であり且つ同一の場合、次の時点ti+1における出荷可能在庫量が大きい方の船の入出港時点を変更する。
図11A乃至図11Cは、出荷計画再修正処理における発着予定の変更の一例を説明するための模式図である。図11A乃至図11Cにおいて、それぞれの数字は船の実積載量を示している。また、太線の枠は、船の港への停留を示している。つまり、図11Aに示す例において、「8月18日」に出荷先A、C、及びGの船が入出港し、「8月19日」に出荷先B及びEの船が入出港する予定である。ここで、出荷先A及びBの船のサイズは「大」であり、出荷先C、E、及びGの船のサイズは「小」であるとする。図11Aに示す例では、「8月18日」において出荷先A、C、及びGの船の入出港が重なっており、制約条件に違反している。したがって、これらのうちで実積載量が最小の出荷先Gの船の入出港時点が「8月19日」に変更される。これにより、「8月18日」における制約条件の違反は解消される。
上記のように出荷先Gの入出港時点を変更すると、図11Bに示す状態となる。図11Bでは、「8月19日」において出荷先B、E、及びGの船の入出港が重なっており、制約条件に違反している。したがって、ステップS402において制約条件に違反していると判定され、ステップS403の処理が実行される。図11Bに示す例では、出荷先E及びGの船の実積載量は出荷先Bの船の実積載量よりも小さいが、400で同一である。したがって、この場合、出荷先E及びGの船のそれぞれについて、入出港時点を「8月20日」に変更した場合における「8月20日」の出荷可能在庫量を比較する。出荷先Eの船の入出港時点を「8月20日」に変更した場合、「8月20日」における出荷先Eの出荷可能在庫量は「400」である。これに対して、出荷先Gの船の入出港時点を「8月20日」に変更した場合、「8月20日」における出荷先Gの出荷可能在庫量は「500」である。したがって、「8月20日」における出荷可能在庫量が大きい出荷先Gの船の入出港時点が、「8月20日」に変更される(図11C参照)。これにより、「8月19日」における制約条件の違反は解消される。また、「8月20日」においても制約条件は満たされている。
再び図10を参照する。ステップS403において、時点tiで複数の船の出港が重なっていない場合、つまり、制約条件違反に出港重複が含まれない場合(ステップS403においてNO)、出港時点が異なる複数の船が港に停留している状態にある。この場合、CPU111は、これらの船のうちの一部の船の入港時点を時点ti+1に変更する(ステップS405)。具体的には、CPU111は、同時に港に停留している複数の船の時点tiにおける実積載量を比較し、実積載量が最小の船の入港時点を時点ti+1に変更する。ここで、入港時点を変更する対象の船の出港時点が時点tiである場合、入港時点と共に出港時点も時点ti+1に変更される。ステップS405の処理の後、CPU111は、ステップS407に処理を移す。
図12A乃至図12Cは、出荷計画再修正処理における発着予定の変更の他の例を説明するための模式図である。図12Aに示す例において、「8月18日」に出荷先A、C、及びGの船が入出港し、「8月19日」に出荷先Bの船が入出港する予定である。また、出荷先Eの船が「8月19日」に入港し、「8月20日」に出港する予定である。この例では、「8月18日」において出荷先A、C、及びGの船の入出港が重なっており、制約条件に違反している。したがって、ステップS404の処理により、実積載量が最小の出荷先Gの船の入出港時点が「8月19日」に変更される。これにより、「8月18日」における制約条件の違反は解消される。
上記のように出荷先Gの入出港時点を変更すると、図12Bに示す状態となる。図12Bでは、「8月19日」において出荷先B、E、及びGの船の入港が重なっているが、出港時点は出荷先B及びG(「8月19日」)と出荷先E(「8月20日」)とで異なっている。したがって、CPU111は、ステップS405の処理により、処理対象時点「8月19日」における実積載量が最小の出荷先Eの船の入港時点を「8月20日」に変更する(図12C参照)。これにより、「8月19日」における制約条件の違反は解消される。また、「8月20日」においても制約条件は満たされている。
再び図10を参照する。上述したステップS404の処理を行うと、複数の船の出港重複は解消される。しかし、時点tiにおける制約条件違反に、出港重複と停留重複の両方が含まれる場合があり、このような場合は、時点tiにおける出港重複を解消しても、停留重複は解消されておらず、結果として制約条件の違反が解消されないことがある。そこで、CPU111は、ステップS404の処理の後、時点tiにおける制約条件違反が解消したか否か、即ち、停留重複が存在するか否かを判定する(ステップS406)。停留重複が存在する場合(ステップS406においてYES)、CPU111は、上記のステップS405に処理を移す。これにより、停留重複が解消される。
ステップS406において停留重複が存在しない場合(ステップS406においてNO)、CPU111は、ステップS407に処理を移す。ステップS407において、時点tiが計画立案期間の最終時点である場合(ステップS407においてYES)、CPU111は、出荷計画再修正処理を終了し、出荷計画立案処理のメインルーチンに処理を戻す。以上の出荷計画再修正処理を実行することで、出荷計画修正処理で残った制約条件違反を解消できる。また、制約条件を違反している船のうち、実積載量が小さい船の発着予定を変更することで、できるだけ倉庫負荷の増大を抑制しつつ、船の空き容量を減らし、しかも制約条件も満たす出荷計画とすることができる。
再び図2を参照し、出荷計画立案処理について説明する。出荷計画再修正処理の後、CPU111は、得られた出荷計画に基づいて、時点毎の製品の出荷可能在庫量を生成する(ステップS105)。
次にCPU111は、時点毎の倉庫の総在庫量を生成する(ステップS106)。この処理では、時点毎に出荷可能在庫量と出荷不可能在庫量とを加算することにより、倉庫の総在庫量が生成される。
次にCPU111は、(1)修正された出荷計画、(2)時系列の出荷可能在庫量、及び(3)倉庫の総在庫量を出力する(ステップS107)。図13は出荷計画の出力例を示す図であり、図14は出荷可能在庫量の出力例を示す図であり、図15は倉庫の総在庫量の出力例を示す図である。図13に示すように、出荷計画では、時点毎にどの出荷先の船が港に停留しているかが示される。制約条件を違反していない出荷計画でも、倉庫の負荷状況、工場の生産能力等の理由によって、実行できない場合がある。ユーザは、出力された出荷計画を確認することで、その出荷計画に問題がないかを判断できる。
また、図14に示すように、時点毎の出荷可能在庫量が出力される。ユーザは、この出荷可能在庫量を参考にして、製品の生産計画を立案したり、修正したりすることができる。また、工場の生産能力等の理由により、出力された出荷可能在庫量を実現できない場合がある。このような場合、ユーザは出荷計画を修正すべきであると判断できる。
また、図15に示すように、時点毎の倉庫の総在庫量がグラフ形式で出力される。グラフの縦軸は倉庫の収容率を示し、横軸は時点を示している。このように、倉庫の総在庫量を時系列で出力することで、ユーザが総在庫量の推移を確認できる。また、倉庫の収容率が100%を超える時点がある場合、倉庫に製品を収容しきれなくなってしまう。したがって、このような場合、ユーザは出荷計画に問題があると判断できる。
ここで、出荷計画、出荷可能在庫量及び総在庫量を表示部13に表示させてもよいし、出荷計画立案装置1に接続されたプリンタによって印刷してもよい。
ユーザは、出力された出荷計画、出荷可能在庫量及び総在庫量を確認し、出荷計画に問題がないかを判断する。問題があれば、ユーザは出荷計画を手作業で訂正する。訂正を行った場合、ユーザは再度出荷計画修正処理を実行する指示を出荷計画立案装置1に与える。この場合、ユーザは、処理の対象の出荷計画のハードディスク115等における保存場所を指定することで、出荷計画立案装置1に出荷計画の修正を指示する。また、出荷計画の訂正を行わなかった場合、ユーザは出荷計画立案処理の終了指示を出荷計画立案装置1に与える。
CPU111は、ユーザから出荷計画の修正の指示を受け付けたか、出荷計画立案処理の終了指示を受け付けたかを判定する(ステップS108)。出荷計画の修正指示を受け付けた場合(ステップS108において「出荷計画の修正指示」)、CPU111は、ステップS103に処理を移し、指定された出荷計画に対して出荷計画修正処理を実行する。
一方、ユーザから出荷計画立案処理の終了指示を受け付けた場合(ステップS108において「終了指示」)、CPU111は、出荷計画立案処理を終了する。
以上のような構成とすることにより、倉庫の負荷状況を考慮した出荷計画を立案できる。また、港における船の同時受入可能数の制限を超えることなく、各船の発着予定を定めた出荷計画を立案できる。
(その他の実施の形態)
上述した実施の形態においては、船による出荷計画を立案する構成について述べたが、これに限定されるものではない。船以外の輸送機、例えば、貨物自動車、鉄道、航空機による出荷計画を立案するものであってもよい。
また、上述した実施の形態においては、製品の出荷計画を立案する構成について述べたが、これに限定されるものではない。「出荷対象品」を、製造が完了した製品でなく、製造の途中段階の半製品としてもよい。1つの工場で製造工程の途中まで加工された半製品を、倉庫に一時的に保管した後別の工場へ搬送し、当該別の工場で残りの製造工程を実施し製品を完成させる場合がある。このような場合に、半製品の出荷計画を立案することが有用である。
また、上述した実施の形態においては、出荷計画修正処理において、初期出荷計画生成処理で生成された出荷計画を制約条件に違反しないように修正し、修正された出荷計画を出力する構成について述べたが、これに限定されるものではない。制約条件を考慮せずに生成された出荷計画を出力してもよい。この場合でも、得られる出荷計画は倉庫の負荷状況が考慮されたものであり、有用である。
また、上述した実施の形態においては、時点tiにおける出荷可能在庫量と最小積載量とを比較して、出荷可能在庫量が最小積載量以上である場合、時点tiに船が入港することとしたが、これに限定されるものではない。出荷可能在庫量の比較対象は船に積載される製品の量であれば、最小積載量以外であってもよい。例えば、出荷可能在庫量と最大積載量とを比較して、出荷可能在庫量が最大積載量に達した時点を、船の入港時点とすることもできる。このように、出荷可能在庫量と船に積載される製品の量とを利用することで、出荷可能在庫量に応じた入港時点を決定できる。ただし、例えば、出荷可能在庫量が最大積載量から所定量少ない量に達した時点を、船の入港時点とするなど、出荷可能在庫量が最大積載量に到達する前の時点を到着時点として決定することが好ましい。これにより、船に最大積載量の製品を積載可能な時点よりも前に船を入港させ、船の停留期間を長く確保できる。このため、停留されている船を擬似的に倉庫の一部として利用して、倉庫の負荷を軽減できる。
また、時刻tiにおける出荷可能在庫量を、船に積載される製品の量と比較しなくてもよい。例えば、出荷可能在庫量が0以外となった時点を、船の入港時点とすることもできる。出荷可能在庫量は、倉庫の負荷状況を反映した情報である。したがって、この場合も、倉庫の負荷状況を考慮した出荷計画を立案できる。
また、上述した実施の形態においては、制約条件を違反している場合に、複数の船の出港時点が重なっているか否かを判定し、その判定結果によって異なる処理を実行する構成について述べたが、これに限定されるものではない。制約条件に違反していれば、複数の船の出港時点が重なっているか否かに関わらず、同一の処理によって、港に同時に停留させておく複数の船のうちの少なくとも1つの船の入港時点又は出港時点を変更する構成としてもよい。例えば、制約条件を違反している場合、無作為に一部の船を選択し、選択された船の入港時点又は出港時点を変更してもよいし、当該複数の船の間である時点における空き容量を比較し、空き容量が小さい船の出港時点を早めるようにしてもよい。
また、上述した実施の形態においては、出荷計画修正処理において、制約条件を違反しており、且つ、複数の船の出港時点が重なっていない場合に、同時に港に停留している複数の船のうち、後発船の入港時点を、先発船の出港時点の後に変更する構成について述べたが、これに限定されるものではない。先発船の出港時点を、後発船の入港時点の前に変更する構成とすることもできる。
また、上述した実施の形態においては、出荷計画修正処理において、制約条件を違反しており、且つ、複数の船の出港時点が重なっている場合に、空き容量が小さい船の出港時点を、空き容量が大きい船の出港時点の前に変更する構成について述べたが、これに限定されるものではない。空き容量が小さい船の出港時点を、空き容量が大きい船の出港時点よりも遅くするように船の発着予定を変更してもよい。この場合、空き容量が大きい船の出港時点を変更せず、空き容量が小さい船の出港時点を、空き容量が大きい船の出港時点の後に変更してもよいし、空き容量が小さい船の出港時点を変更せず、空き容量が大きい船の出港時点を、空き容量が小さい船の出港時点の前に変更してもよい。
また、空き容量が小さい船の出港時点を変更せず、空き容量が大きい船の出港時点を、空き容量が小さい船の出港時点の後に変更する構成とすることも可能である。この場合、時点tiにおいて空き容量が大きい船の出港と空き容量が小さい船の出港が重なっているとすると、空き容量が大きい船の出港時点が時点tiから次の時点ti+1に変更されることになる。したがって、時点tiにおける制約条件の違反は解消されていない。このため、時点tiにおける制約条件の違反を解消するために、発着予定の変更を別途行う必要がある。
また、上述した実施の形態においては、出荷計画修正処理の後に、出荷計画再修正処理を実行する構成について述べたが、これに限定されるものではない。出荷計画修正処理を実行し、出荷計画再修正処理を実行しない構成としてもよい。また、出荷計画修正処理を実行することなく、出荷計画再修正処理と同様の処理を実行する構成としてもよい。つまり、初期出荷計画生成処理で生成された出荷計画について、各時点で制約条件の違反があるか否かを判定し、制約条件の違反があった場合に、制約条件を違反する複数の船の実積載量を比較し、実積載量が小さい船の入出港時点を遅らせるようにすることもできる。
また、上述した実施の形態においては、出荷計画再修正処理において、複数の船の出港時点が重なっている場合に、出港時点が重なっている複数の船のうち実積載量が小さい船の入出港時点を遅らせるようにすることについて述べたが、これに限定されるものではない。出港時点は重なっていなくても、制約条件を違反している場合に、同時に港に停留する複数の船のうち実積載量が小さい船の入出港時点を、他の船の出港時点の後に変更する構成としてもよい。