(57)【特許請求の範囲】
【請求項１】
貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画を作成する配船計画作成装置であって、
貨物と、当該貨物の積荷役のイベントである積港、積日及び貨物量と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定手段と、
各船の使用開始日時と使用開始港と限界積載量とを設定する初期船情報設定手段と、
前記依頼内容設定手段及び前記初期船情報設定手段による設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードを列挙するノード列挙手段と、
前記ノード列挙手段により列挙されたノード間を結ぶアークを列挙するアーク列挙手段と、
未選択のアークの中からアークを選択することと、選択したアーク（以下「選択アーク」という）を暫定的な配船計画に新規追加することと、未選択のアークの中から以下（Ａ）〜（Ｄ）の条件を満たさないアークを削除することと、の一連の処理を繰り返し行ってノードを全て網羅するアークの組合せでなる配船計画を決定する配船計画決定手段と、
（Ａ）暫定的な配船計画に含まれる各ノードに入る又は出るアークが必ず１本であること、
（Ｂ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、同一貨物に係る積荷役ノードの後に揚荷役ノードを実施する順序となること、
（Ｃ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役ノードについては設定された積日での積荷役を開始可能であり、揚荷役ノードについては設定された揚日以前での揚荷役を開始可能であること、
（Ｄ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役を実施しても積載している貨物量が限界積載量を超えないこと、
を備えた配船計画作成装置。
【請求項２】
前記配船計画決定手段は、前記（Ａ）の条件を満たさないアークの検出を、前記選択アークによって結ばれるノードに係るアークについて行う、
請求項１に記載の配船計画作成装置。
【請求項３】
前記配船計画決定手段は、
船初期ノード以外のノードの中に、何れのアークの始端ノードにもなっていないノードが存在するか否かを判定する判定手段を更に有し、
前記一連の処理に前記判定手段の処理を含めて当該一連の処理を繰り返し実行し、前記判定手段により存在するとの判定がなされた場合には前記一連の処理を再度やり直し実行する、
請求項１又は２に記載の配船計画作成装置。
【請求項４】
前記配船計画決定手段は、暫定的な配船計画に含まれるノードのうちの日時が最も遅いノードに結ばれるアークを前記選択アークとして未選択のアークの中から選択する、
請求項１〜３の何れか一項に記載の配船計画作成装置。
【請求項５】
貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画をコンピュータに作成させるためのプログラムであって、
貨物と、当該貨物の積荷役のイベントである積港、積日及び貨物量と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定手段、
各船の使用開始日時と使用開始港と限界積載量とを設定する初期船情報設定手段、
前記依頼内容設定手段及び前記初期船情報設定手段による設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードを列挙するノード列挙手段、
前記ノード列挙手段により列挙されたノード間を結ぶアークを列挙するアーク列挙手段、
未選択のアークの中からアークを選択することと、選択したアーク（以下「選択アーク」という）を暫定的な配船計画に新規追加することと、未選択のアークの中から以下（Ａ）〜（Ｄ）の条件を満たさないアークを削除することと、の一連の処理を繰り返し行ってノードを全て網羅するアークの組合せでなる配船計画を決定する配船計画決定手段、
（Ａ）暫定的な配船計画に含まれる各ノードに入る又は出るアークが必ず１本であること、
（Ｂ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、同一貨物に係る積荷役ノードの後に揚荷役ノードを実施する順序となること、
（Ｃ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役ノードについては設定された積日での積荷役を開始可能であり、揚荷役ノードについては設定された揚日以前での揚荷役を開始可能であること、
（Ｄ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役を実施しても積載している貨物量が限界積載量を超えないこと、
として機能させるためのプログラム。
【請求項６】
コンピュータが、貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画の作成を演算実行するための配船計画作成方法であって、
貨物と、当該貨物の積荷役のイベントである積港、積日及び貨物量と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定ステップと、
各船の使用開始日時と使用開始港と限界積載量とを設定する初期船情報設定ステップと、
前記依頼内容設定ステップ及び前記初期船情報設定ステップでの設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードを列挙するノード列挙ステップと、
前記ノード列挙ステップで列挙されたノード間を結ぶアークを列挙するアーク列挙ステップと、
未選択のアークの中からアークを選択することと、選択したアーク（以下「選択アーク」という）を暫定的な配船計画に新規追加することと、未選択のアークの中から以下（Ａ）〜（Ｄ）の条件を満たさないアークを削除することと、の一連の処理を繰り返し行ってノードを全て網羅するアークの組合せでなる配船計画を決定する配船計画決定ステップと、
（Ａ）暫定的な配船計画に含まれる各ノードに入る又は出るアークが必ず１本であること、
（Ｂ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、同一貨物に係る積荷役ノードの後に揚荷役ノードを実施する順序となること、
（Ｃ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役ノードについては設定された積日での積荷役を開始可能であり、揚荷役ノードについては設定された揚日以前での揚荷役を開始可能であること、
（Ｄ）選択アークを辿ることで暫定的な配船計画を実施し、更に未選択のアークを辿って各ノードの荷役を実施した場合に、積荷役を実施しても積載している貨物量が限界積載量を超えないこと、
を含む配船計画作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画を作成する配船計画作成装置等に関する。
【背景技術】
【０００２】
内航海運業の事業者は、複数の船と乗組員とを保有しており、それらを運用することによって、荷主から依頼された貨物を依頼内容（以下、１荷主からの１貨物単位の依頼内容のことを「オーダー」という。）に従って運送する。この場合、事業者は、手持ちの船を効率的に使用して、一時期にできるだけ多くの貨物をできるだけ低い経費で運送することを望んでおり、ある一定期間（例えば「一か月間」）を計画期間として、どの船でどの貨物をどのような順序で運送するかを計画する。この計画は配船計画と呼ばれている。
【０００３】
一方、配船計画とは別の計画として、列車ダイヤに基づいて各列車の車両の割り当てを決定する車両運用計画が存在し、この車両運用計画を求める手法が、例えば特許文献１に開示されている。
【特許文献１】特開２００３−３０６１４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
配船計画と車両運用計画とは一見似通った計画ではないか、とも思える。しかし、車両運用計画は、決められた列車ダイヤに対する車両の運用計画である。全てのオーダーの貨物を適確に運送する運航スケジュールそのものを計画しなければならない配船計画は、車両運用計画とは大きく異なる計画であり、特許文献１の技術をそのまま適用することは不可能である。
【０００５】
特に、配船計画では、（１）各貨物の量や各貨物の積荷役及び揚荷役を行う日時等のオーダーに関する制約条件、（２）各船が積載可能な貨物の量や各船が使用可能な日時及び港等の船舶に関する制約条件、（３）各港において貨物の積荷役及び揚荷役を開始することができる時間帯や各港の荷役能力等の港に関する制約条件、といった数多くの制約条件が存在する。この制約条件の厳しさから、配船計画の立案は、専門の担当者が経験と勘とを頼りに試行錯誤を繰り返しながら、手作業で行っているのが現状である。
【０００６】
しかし、船の数やオーダーの数がある程度の規模（例えば船４隻で２０オーダー程度）以上となると、手作業によって最適な配船計画を得ることはほとんど不可能である。また、コンピュータを用いて実現し得る全ての配船計画を網羅的に調べようとしても、船とオーダーの天文学的な数の組合せを調べることになり、必要な時間内に最適な配船計画を得ることが困難であるという問題があった。
【０００７】
本発明は上述した課題に鑑みて為されたものであり、その目的とするところは、現状の手作業による配船計画の作成に代わり、コンピュータを用いた配船計画の作成を実現するための手法を提案することである。
【課題を解決するための手段】
【０００８】
以上の課題を解決するための第１の発明は、
貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画を作成する配船計画作成装置であって、
貨物と、当該貨物の積荷役のイベントである積港及び積日と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ１、図２７の設定オーダーデータ５０３）と、
各船の使用開始日時と使用開始港とを対応付けて設定する初期船情報設定手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ１、図２８の設定船舶データ５０５）と、
前記依頼内容設定手段及び前記初期船情報設定手段による設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード（例えば、図１４の積ノードｔ（１））、２）揚港及び揚日を表す揚荷役ノード（例えば、図１４の揚ノードａ（１））、３）船の使用開始日時及び使用開始港を表す船初期ノード（例えば、図１４の船舶初期ノードｓ（１））を列挙するノード列挙手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ３）と、
前記ノード列挙手段により列挙されたノード間を結ぶアーク（例えば、図１４のアークＡ１）を列挙するアーク列挙手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ３）と、
前記アーク列挙手段により列挙されたアークの中から、前記ノード列挙手段により列挙されたノードを全て網羅するアークの組合せであって、所定の配船実行可能条件を満たすアークの組合せを選出するアーク選出手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ５）と、
前記アーク選出手段により選出されたアークの組合せに従い、連接するアークを一の船の航路とした配船計画（例えば、図２５の配船計画Ｓ）を出力する出力手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ１９）と、
を備えた配船計画作成装置（例えば、図２６の配船計画作成装置１）である。
【０００９】
また、他の発明として、
貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画をコンピュータに作成させるためのプログラムであって、
貨物と、当該貨物の積荷役のイベントである積港及び積日と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定手段、
各船の使用開始日時と使用開始港とを対応付けて設定する初期船情報設定手段、
前記依頼内容設定手段及び前記初期船情報設定手段による設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードを列挙するノード列挙手段、
前記ノード列挙手段により列挙されたノード間を結ぶアークを列挙するアーク列挙手段、
前記アーク列挙手段により列挙されたアークの中から、前記ノード列挙手段により列挙されたノードを全て網羅するアークの組合せであって、所定の配船実行可能条件を満たすアークの組合せを選出するアーク選出手段、
前記アーク選出手段により選出されたアークの組合せに従い、連接するアークを一の船の航路とした配船計画を出力する出力手段、
として機能させるためのプログラム（例えば、図２６の配船計画作成プログラム５０１）を構成してもよい。
【００１０】
さらに、他の発明として、
コンピュータが、貨物を、積港、揚港、積日及び揚日が定められた依頼内容に従って船で運送するための配船計画の作成を演算実行するための配船計画作成方法であって、
貨物と、当該貨物の積荷役のイベントである積港及び積日と、当該貨物の揚荷役のイベントである揚港及び揚日とを対応付けて設定する依頼内容設定ステップと、
各船の使用開始日時と使用開始港とを対応付けて設定する初期船情報設定ステップと、
前記依頼内容設定ステップ及び前記初期船情報設定ステップでの設定内容から、ノードとして、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードを列挙するノード列挙ステップと、
前記ノード列挙ステップで列挙されたノード間を結ぶアークを列挙するアーク列挙ステップと、
前記アーク列挙ステップで列挙されたアークの中から、前記ノード列挙ステップで列挙されたノードを全て網羅するアークの組合せであって、所定の配船実行可能条件を満たすアークの組合せを選出するアーク選出ステップと、
前記アーク選出ステップで選出されたアークの組合せに従い、連接するアークを一の船の航路とした配船計画を出力する出力ステップと、
を含む配船計画作成方法を構成してもよい。
【００１１】
この第１の発明等によれば、貨物及び船に関する設定内容から、１）積港及び積日を表す積荷役ノード、２）揚港及び揚日を表す揚荷役ノード、３）船の使用開始日時及び使用開始港を表す船初期ノードが列挙されるとともに、これらのノード間を結ぶアークが列挙される。そして、列挙されたアークの中から、列挙されたノードを全て網羅するアークの組合せであって、所定の配船実行可能条件を満たすアークの組合せが選出され、選出されたアークの組合せに従い、連接するアークを一の船の航路とした配船計画が出力される。
【００１２】
貨物の積荷役に対応する積荷役ノードと、貨物の揚荷役に対応する揚荷役ノードと、船に対応する船初期ノードとを列挙した上で、いわゆる完全マッチングの探索手法に基づいて、列挙したノードを全て網羅するアークの組合せを探索することで、コンピュータを用いて配船計画を作成することが可能となる。また、配船実行可能条件として適切な条件を設定することで、アークの篩い分けを適切に行うことが可能となり、その結果、演算量を削減して効率の良い配船計画の探索を実現し得る。
【００１３】
また、第２の発明として、第１の発明の配船計画作成装置であって、
荷役開始最小時刻と、荷役開始最大時刻と、荷役能力とが各港ごとに定められた港データを設定する港データ設定手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ１、図２９の設定港データ５０７）と、
各船ごとの限界積載量を設定する積載量設定手段（例えば、図２６のＣＰＵ１０；図３０のステップＡ１、図２８の設定船舶データ５０５）と、
を更に備え、
前記アーク列挙手段は、前記港データ設定手段及び前記積載量設定手段による設定内容を参照して、前記ノード列挙手段により列挙されたノードのうち、実施順序を含む当該２つのノードに係るイベントの実施可能な条件である所定の局所実施可能条件を満たす２つのノードの組合せを抽出し、該抽出した２つのノードの組合せそれぞれを当該実施順序に従ったアークとして列挙する、
配船計画作成装置を構成してもよい。
【００１４】
この第２の発明によれば、港及び船の限界積載量に関する設定内容が参照されて、列挙されたノードのうち、実施順序を含む当該２つのノードに係るイベントの実施可能な条件である所定の局所実施可能条件を満たす２つのノードの組合せが抽出される。そして、抽出された２つのノードの組合せそれぞれについて当該実施順序に従ったアークが列挙される。
【００１５】
また、第３の発明として、第２の発明の配船計画作成装置であって、
前記アーク列挙手段は、２つのノードのうちの一方又は双方が、積荷役又は揚荷役の場合に、当該荷役の貨物に係る積荷役及び揚荷役双方の実施可能性が有りであることを前記所定の局所実施可能条件の１つの条件として、２つのノードの組合せを抽出する、
配船計画作成装置を構成してもよい。
【００１６】
この第３の発明によれば、２つのノードのうちの一方又は双方が、積荷役又は揚荷役の場合に、当該荷役の貨物に係る積荷役及び揚荷役双方の実施可能性が有りであることを所定の局所実施可能条件の１つの条件として、２つのノードの組合せが抽出される。
【００１７】
また、第４の発明として、第３の発明の配船計画作成装置であって、
前記アーク選出手段は、
未選択のアークでなる未選択アーク群の中から、選択済みのアークでなる選択済みアーク群に追加することにより、当該追加されたアーク群で構成される暫定的な配船計画が所定の実行不可能条件を満たすアークを削除して前記未選択アーク群を更新するアーク削除手段（例えば、図２６のＣＰＵ１０；図３２のステップＣ１）と、
前記未選択アーク群の中から一のアークを選択して前記選択済みアーク群に追加するアーク追加手段（例えば、図２６のＣＰＵ１０；図３２のステップＣ１９）と、
を有し、前記アーク削除手段と前記アーク追加手段との一連の処理を繰り返し実行することでアークの組合せを選出する、
配船計画作成装置を構成してもよい。
【００１８】
この第４の発明によれば、未選択アーク群の中から所定の実行不可能条件を満たすアークを削除する処理と、未選択アーク群の中から一のアークを選択して選択済みアーク群に追加する処理との一連の処理が繰り返し実行されることでアークの組合せが選出される。未選択アーク群の中から選択したアークを選択済みアーク群に追加しながら、暫定的な配船計画と矛盾するアークを未選択アーク群から削除していく制約理論に基づく手法を採用したことで、実質的に探索するアークの組合せの数を大幅に削減することができ、計算時間が短縮される。
【００１９】
また、第５の発明として、第４の発明の配船計画作成装置であって、
前記アーク選出手段は、
船初期ノード以外のノードの中に、前記選択済みアーク群及び前記未選択アーク群のうちの何れのアークの始端ノードにもなっていないノードが存在するか否かを判定する判定手段（例えば、図２６のＣＰＵ１０；図３２のステップＣ３）を更に有し、
前記一連の処理に前記判定手段の処理を含めて当該一連の処理を繰り返し実行し、前記判定手段により存在するとの判定がなされた場合には前記一連の処理を再度やり直し実行する、
配船計画作成装置を構成してもよい。
【００２０】
この第５の発明によれば、船初期ノード以外のノードの中に、選択済みアーク群及び未選択アーク群のうちの何れのアークの始端ノードにもなっていないノードが存在するか否かが判定される。そして、アークの削除とアークの追加との一連の処理に、このノードの判定の処理を含めて当該一連の処理が繰り返し実行され、ノードが存在すると判定された場合には、一連の処理が再度やり直し実行される。
【００２１】
また、第６の発明として、第４又は第５の発明の配船計画作成装置であって、
前記アーク追加手段は、各船初期ノードそれぞれからアークを順次連接していくようにアークを選択していく、
配船計画作成装置を構成してもよい。
【００２２】
この第６の発明によれば、各船初期ノードそれぞれからアークを順次連接していくようにアークが選択されて、選択済みアーク群に追加される。
【発明の効果】
【００２３】
本発明によれば、貨物の積荷役に対応する積荷役ノードと、貨物の揚荷役に対応する揚荷役ノードと、船に対応する船初期ノードとを列挙した上で、いわゆる完全マッチングの探索手法に基づいて、列挙したノードを全て網羅するアークの組合せを探索することで、コンピュータを用いて配船計画を作成することが可能となる。また、配船実行可能条件として適切な条件を設定することで、アークの篩い分けを適切に行うことが可能となり、その結果、演算量を削減して効率の良い配船計画の探索を実現し得る。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照して、本発明に好適な実施形態の一例を説明する。但し、本発明を適用可能な実施形態がこれらに限定されるわけではない。
【００２５】
１．概説
本実施形態では、各船舶が、積港、揚港、積日及び揚日が定められた依頼内容（以下、「オーダー」という。）に従って、重油等の貨物を運送することとして説明する。この場合に、各船舶がどのような順序で、積港で貨物の積荷役を行い、揚港で貨物の揚荷役を行うのかを示す配船計画を作成することが本実施形態の目的である。
【００２６】
図１に、ある１つの船舶の航路の一例を示す図である。図１では、横軸を「日（時間）」、縦軸を「港」とし、「ノード」と呼ばれる複数の頂点間が「アーク」と呼ばれる有向辺によって結合されたネットワークによって船舶「ｈ」の航路を示している。
【００２７】
ノードには、各船舶の初期状態に対応する「船舶初期ノード」と、船舶が各オーダーの積荷役を開始するというイベントに対応する「積ノード」と、船舶が各オーダーの揚荷役を開始するというイベントに対応する「揚ノード」との３種類が存在する。より具体的には、船舶初期ノードは、当該船舶の使用開始日時及び使用開始港を表している。また、積ノードは、貨物の積港及び積日を表しており、揚ノードは、貨物の揚港及び揚日を表している。以下の説明では、船舶「ｈ」に対応する船舶初期ノードを「ｓ（ｈ）」、オーダー「ｉ」に対応する積ノード及び揚ノードをそれぞれ「ｔ（ｉ）」及び「ａ（ｉ）」と表記する。
【００２８】
また、本実施形態では、荷役「ｘ」を実施する船舶がその直前に実施する荷役は「ｙ」であるという事柄を、ノード「ｘ」からノード「ｙ」へのアークに対応させる。例えば、揚ノード「ａ（ｉ）」から積ノード「ｔ（ｉ）」へのアークが設定されている場合は、船舶は、オーダー「ｉ」の貨物の揚荷役を実施する直前にオーダー「ｉ」の貨物の積荷役を実施したということを意味する。
【００２９】
さらに、本実施形態の特徴的な構成として、最終的な配船計画を表すネットワークが、揚ノードを始端とし、船舶初期ノードが終端となるようにアークを連接していくことが挙げられる。これは、船舶初期ノードを始端としてネットワークを構成すると、終端が必ず揚ノードとなることが保障されないのに対し、揚ノードを始端としてネットワークを構成すれば、必ず終端が船舶初期ノードとなることが保障されるためである。
【００３０】
今、一例として、１５００キロリットルの重油を、２月２日にＢ港から積んで、２月１０日までにＥ港に揚げるというオーダー「ｉ」と、１０００キロリットルの重油を、２月５日にＤ港から積んで、２月６日までにＣ港に揚げるというオーダー「ｊ」との２つのオーダーが存在する場合を考える。また、船舶として、１月３１日にＡ港に停泊し、積載量がゼロとなっている船舶「ｈ」が存在し、船舶「ｈ」の重油の限界積載量は３０００キロリットルであるものとする。
【００３１】
この場合、船舶「ｈ」の航路としては、先ず１月３１日にＡ港から出発してＢ港で２月２日に１５００キロリットルの重油の積荷役を実施した後、Ｄ港に移動して２月５日に１０００キロリットルの重油の積荷役を実施する。そして、Ｃ港に移動してＤ港で積んだ１０００キロリットルの重油の揚荷役を実施した後、Ｅ港に移動してＢ港で積んだ１５００キロリットルの重油の揚荷役を実施することが考えられる。
【００３２】
上述した船舶「ｈ」の航路をネットワークとして表現すると、図１のようになる。すなわち、揚ノード「ａ（ｉ）」を始端として、揚ノード「ａ（ｊ）」、積ノード「ｔ（ｊ）」、積ノード「ｔ（ｉ）」、船舶初期ノード「ｓ（ｈ）」の順にアークが接続され、終端は船舶初期ノード「ｓ（ｈ）」となる。
【００３３】
２．原理
２−１．配船計画の作成手順
図２〜図４は、配船計画の作成手順を説明するための図である。配船計画の作成は、先ず「配船ネットワーク」と呼ばれるネットワークを作成することから始まる。具体的には、図２に示すように、横軸を「日（時間）」、縦軸を「港」とする２次元の座標上に、船舶初期ノード、積ノード及び揚ノードを配置する。
【００３４】
次いで、図３に示すように、所定のアーク列挙条件に従ってノード間を接続するアークを列挙することによって配船ネットワークを作成する。そして、作成された配船ネットワークから完全マッチングが探索されるように、所定の制約条件に反するアークを削除していくことで、配船計画を作成する。すなわち、配船計画の作成は、ノード及びアークで構成される配船ネットワークから完全マッチングを探索する完全マッチング探索の問題に帰着する。
【００３５】
より具体的には、図４に示すように、揚ノードを始端とし、船舶初期ノードを終端とするネットワークであって、始端となるノードからは必ず１本のアークが出ており、終端となるノードには必ず１本のアークが入ってきており、始端と終端を除いた各ノードについては、他の何れかのノードに向けて必ず１本のアークが出ており、且つ、他の何れかのノードから必ず１本のアークが入ってくるようなノードの組合せで構成されるネットワーク（以下、「完全マッチング配船ネットワーク」という。）が形成されるように、アークの組合せを選出する。そして、図５に示すように、選出されたアークの組合せが最終的な配船計画となる。
【００３６】
２−２．配船ネットワークの作成
次に、配船ネットワークの作成方法について詳細に説明する。配船ネットワークは、以下の（１）〜（６）の６種類のアーク列挙条件に従ってノード間を接続するアークを列挙することによって作成することができる。尚、図６〜図１３では、船舶の移動を太線の矢印で示すとともに、荷役開始可能時間帯をハッチングで示している。また、アークの接続対象とするノードを太線で強調して示している。
【００３７】
ここで、荷役開始可能時間帯とは、荷役開始最小時刻から荷役開始最大時刻までの時間帯のことをいう。また、荷役開始最小時刻とは、荷役を開始することができる最も早い時刻（例えば「朝８時」）のことをいい、荷役開始最大時刻とは、荷役を開始することができる最も遅い時刻（例えば「夜６時」）のことをいう。荷役開始可能時間帯までに船舶が港に到着することができた場合は、当該荷役開始可能時間帯に荷役を開始することができるが、当該荷役開始可能時間帯までに船舶が港に到着することができなかった場合は、次の荷役開始可能時間帯まで待たなければ荷役を開始することができない。尚、一旦荷役を開始することができれば、荷役が終了する時刻が荷役開始可能時間帯外であっても問題はない。
【００３８】
（１）同一のオーダーにおける揚ノードから積ノードへのアークの列挙
図６は、同一のオーダーにおける揚ノードから積ノードへのアークの列挙の説明図である。各オーダーそれぞれについて、揚ノードから積ノードに向かうアークを列挙する。例えば、異なる２つのオーダー「ｉ」及びオーダー「ｊ」が存在する場合は、揚ノード「ａ（ｉ）」から積ノード「ｔ（ｉ）」へのアークと、揚ノード「ａ（ｊ）」から積ノード「ｔ（ｊ）」へのアークとをそれぞれ設定する。
【００３９】
（２）積ノードから船舶初期ノードへのアークの列挙
図７は、積ノードから船舶初期ノードへのアークの列挙の説明図である。船舶「ｈ」及びオーダー「ｉ」に対し、オーダー「ｉ」の貨物の量（重油量）が船舶「ｈ」の限界積載量以下である場合に、船舶「ｈ」がオーダー「ｉ」の貨物を積載可能であるとする。この場合に、さらに、船舶「ｈ」の使用開始日時に空船状態で使用開始港を出港した船舶「ｈ」が、オーダー「ｉ」の積日の荷役開始最大時刻以前にオーダー「ｉ」の積港に到着して貨物の積荷役を実施した後、オーダー「ｉ」の揚日の荷役開始最大時刻以前にオーダー「ｉ」の揚港に到着することができるかどうかを判断し、できる場合は、積ノード「ｔ（ｉ）」から船舶初期ノード「ｓ（ｈ）」へのアークを設定する。
【００４０】
特徴的であるのは、船舶「ｈ」によるオーダー「ｉ」の積荷役の実施可能性ばかりでなく、オーダー「ｉ」の揚荷役の実施可能性をも考慮して、船舶初期ノード「ｓ（ｈ）」と積ノード「ｔ（ｉ）」間のアークの設定を行っている点である。
【００４１】
（３）積ノードから揚ノードへのアークの列挙
図８は、積ノードから揚ノードへのアークの列挙の説明図である。任意の異なるオーダー「ｉ」及びオーダー「ｊ」に対し、両オーダーの貨物を同時に積載可能な船舶「ｈ」が存在し、オーダー「ｉ」の積荷役を同積日の荷役開始最小時刻に開始したと仮定する。この場合に、船舶「ｈ」が、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施した後、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施し、その後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、積ノード「ｔ（ｊ）」から揚ノード「ａ（ｉ）」へのアークを設定する。
【００４２】
特徴的であるのは、船舶「ｈ」によるオーダー「ｉ」の揚荷役及びオーダー「ｊ」の積荷役の実施可能性ばかりでなく、オーダー「ｉ」の積荷役及びオーダー「ｊ」の揚荷役の実施可能性をも考慮して、揚ノード「ａ（ｉ）」と積ノード「ｔ（ｊ）」間のアークの設定を行っている点である。
【００４３】
（４）積ノードから積ノードへのアークの列挙
図９及び図１０は、積ノードから積ノードへのアークの設定の説明図である。任意の異なるオーダー「ｉ」及びオーダー「ｊ」に対し、両オーダーの貨物を同時に積載可能な船舶「ｈ」が存在し、オーダー「ｉ」の積荷役を同積日の荷役開始最小時刻に開始したと仮定する。この場合に、船舶「ｈ」が、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施した後、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施し、その後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、積ノード「ｔ（ｊ）」から積ノード「ｔ（ｉ）」へのアークを設定する。
【００４４】
同様に、船舶「ｈ」が、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施した後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施し、その後、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、積ノード「ｔ（ｊ）」から積ノード「ｔ（ｉ）」へのアークを設定する。
【００４５】
特徴的であるのは、船舶「ｈ」によるオーダー「ｉ」の積荷役及びオーダー「ｊ」の積荷役の実施可能性ばかりでなく、オーダー「ｉ」の揚荷役及びオーダー「ｊ」の揚荷役の実施可能性をも考慮して、積ノード「ｔ（ｉ）」と積ノード「ｔ（ｊ）」間のアークの設定を行っている点である。
【００４６】
（５）揚ノードから揚ノードへのアークの列挙
図１１及び図１２は、揚ノードから揚ノードへのアークの設定の説明図である。任意の異なるオーダー「ｉ」及びオーダー「ｊ」に対し、両オーダーの貨物を同時に積載可能な船舶「ｈ」が存在し、オーダー「ｉ」の積荷役を同積日の荷役開始最小時刻に開始したと仮定する。この場合に、船舶「ｈ」が、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施した後、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施し、その後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、揚ノード「ａ（ｊ）」から揚ノード「ａ（ｉ）」へのアークを設定する。
【００４７】
また、船舶「ｈ」が、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施した後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施し、その後、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、揚ノード「ａ（ｉ）」から揚ノード「ａ（ｊ）」へのアークを設定する。
【００４８】
特徴的であるのは、船舶「ｈ」によるオーダー「ｉ」の揚荷役及びオーダー「ｊ」の揚荷役の実施可能性ばかりでなく、オーダー「ｉ」の積荷役及びオーダー「ｊ」の積荷役の実施可能性をも考慮して、揚ノード「ａ（ｉ）」と揚ノード「ａ（ｊ）」間のアークの設定を行っている点である。
【００４９】
（６）揚ノードから他のオーダーの積ノードへのアークの列挙
図１３は、揚ノードから他のオーダーの積ノードへのアークの設定の説明図である。任意の異なるオーダー「ｉ」及びオーダー「ｊ」に対し、両オーダーの貨物を同時に積載可能な船舶「ｈ」が存在し、オーダー「ｉ」の積荷役を同積日の荷役開始最小時刻に開始したと仮定する。この場合に、船舶「ｈ」が、オーダー「ｊ」の積港の荷役開始最大時刻までに当該積港に到着して貨物の積荷役を実施した後、オーダー「ｉ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施し、その後、オーダー「ｊ」の揚港の荷役開始最大時刻までに当該揚港に到着して貨物の揚荷役を実施することが可能であるかどうかを判断し、可能であれば、揚ノード「ａ（ｉ）」から積ノード「ｔ（ｊ）」へのアークを設定する。
【００５０】
特徴的であるのは、船舶「ｈ」によるオーダー「ｊ」の積荷役及びオーダー「ｉ」の揚荷役の実施可能性ばかりでなく、オーダー「ｉ」の積荷役及びオーダー「ｊ」の揚荷役の実施可能性をも考慮して、積ノード「ｔ（ｊ）」と揚ノード「ａ（ｉ）」間のアークの設定を行っている点である。
【００５１】
２−３．配船計画の探索
次に、配船ネットワークから配船計画を探索する方法について説明する。以下の説明において、決定ノード集合「Ｎｓ」とは、完全マッチング配船ネットワークを構成するノードとして決定されたノード（以下、「決定ノード」という。）で構成される集合のことを示し、未決定ノード集合「Ｎｕ」とは、決定ノード以外のノード（以下、「未決定ノード」という。）で構成される集合のことを示す。また、配船始端ノード集合とは、決定ノード集合「Ｎｓ」に含まれるノードのうちの始端となるノード（以下、「配船始端ノード」という。）で構成される集合のことを示す。また、配船計画「Ｓ」とは、選択済みのアークの組合せのことであり、演算途中までに作成された暫定的な配船計画（以下、「暫定配船計画」という。）を示す。
【００５２】
配船計画の探索は、暫定配船計画と矛盾するアークを削除しながら、未決定ノード集合「Ｎｕ」からノードを１つ選択して決定ノード集合「Ｎｓ」に追加する処理と、当該選択したノードを始端とするアークの集合からアークを１つ選択して配船計画「Ｓ」に追加する処理とを繰り返し行うことによって実現することができる。アークが暫定配船計画と矛盾するか否かの判断は、当該アークが以下の制約条件を満たすか否かを判断することによって行う。
【００５３】
（Ａ）アークの本数に関する制約条件
始端となるノードからは必ず１本のアークが出ており、終端となるノード（船舶初期ノード）には必ず１本のアークが入ってくるという制約がある。また、始端と終端を除いた各ノードについては、他の何れかのノードに向けて必ず１本のアークが出ており、且つ、他の何れかのノードから必ず１本のアークが入ってくるという制約がある。
【００５４】
（Ｂ）積荷役と揚荷役の実施順序に関する制約条件
任意のオーダーの揚荷役を実施する船舶は、それ以前のある時点で、同オーダーの積荷役を実施するという制約がある。これは、オーダー「ｉ」の揚ノード「ａ（ｉ）」からアークを辿って別のノードに移動することを繰り返していくと、必ずオーダー「ｉ」の積ノード「ｔ（ｉ）」に到達することを意味する。
【００５５】
また、任意のオーダーの積荷役を実施する船舶は、それ以前に同オーダーの揚荷役を実施することはないという制約がある。これは、オーダー「ｉ」の積ノード「ｔ（ｉ）」からアークを辿って別のノードに移動することを繰り返していっても、オーダー「ｉ」の揚ノード「ａ（ｉ）」に到達することはないことを意味する。
【００５６】
（Ｃ）オーダーの日時に関する制約条件
各ノードの荷役開始日時は、対応するオーダーの積日及び揚日の条件を全て満たさなければならないという制約がある。すなわち、積ノードの荷役開始日時が、対応するオーダーの積日内であり、揚ノードの荷役開始日時が、対応するオーダーの揚日以前であることが必要である。
【００５７】
（Ｄ）船舶の積載量に関する制約条件
各オーダーそれぞれについて、当該オーダーの積荷役開始時に船舶「ｈ」が積載中の貨物の総量に、当該オーダーの貨物の量を加えた合計量が、船舶「ｈ」の限界積載量を超えることはないという制約がある。
【００５８】
図１４〜図２５を参照して、配船計画探索の具体例について説明する。ここでは、船舶初期ノード「ｓ（１）」及び「ｓ（２）」と、積ノード「ｔ（１）」及び「ｔ（２）」と、揚ノード「ａ（１）」及び「ａ（２）」との６つのノードを有する配船ネットワークから配船計画を探索する場合を一例として説明する。図１４〜図２５では、決定ノード集合「Ｎｓ」及び配船計画「Ｓ」として確定したノード及びアークを太実線、決定ノード集合「Ｎｓ」及び配船計画「Ｓ」に追加する候補として選択されたノード及びアークを実線、それ以外のノード及びアークを破線でそれぞれ示している。
【００５９】
最初に、図１４に示すように、船舶初期ノード「ｓ（１）」及び「ｓ（２）」を決定ノードとし、決定ノード集合「Ｎｓ」に追加する。船舶初期ノードは、接続先のノードが存在しないため、決定ノードとして取り扱うこととしたものである。また、船舶初期ノード以外のノードである積ノード「ｔ（１）」及び「ｔ（２）」と、揚ノード「ａ（１）」及び「ａ（２）」とを未決定ノードとし、未決定ノード集合「Ｎｕ」に追加する。
【００６０】
次いで、未決定ノードのうち、配船始端ノードに向かうアークを有するノードの集合を「選択候補ノード集合」とする。図１４では、配船始端ノードは船舶初期ノード「ｓ（１）」及び「ｓ（２）」であり、これらのノードに向かうアークを有する積ノード「ｔ（１）」及び「ｔ（２）」が選択候補ノード集合に含まれることになる。
【００６１】
その後、選択候補ノード集合の中からノードを１つランダムに選択し、当該選択したノード（以下、「選択ノード」という。）から配船始端ノードに向かうアークの集合を「選択候補アーク集合」とする。図１４において、例えば積ノード「ｔ（１）」が選択されたとすると、積ノード「ｔ（１）」から配船始端ノードに向かうアークは、積ノード「ｔ（１）」から配船始端ノード「ｓ（１）」に向かうアーク「Ａ１」のみであるため、アーク「Ａ１」が選択候補アーク集合に含まれることになる。
【００６２】
次いで、選択候補アーク集合からアークを１つランダムに選択して配船計画「Ｓ」に追加するとともに、選択ノードを決定ノード集合「Ｎｓ」に追加する。この結果、図１５に示すように、アーク「Ａ１」が配船計画「Ｓ」に追加されるとともに、積ノード「ｔ（１）」が決定ノード集合「Ｎｓ」に追加されている。
【００６３】
次いで、前述した（Ａ）〜（Ｄ）の制約条件に反するアークを全て削除する。図１５においてアーク「Ａ１」が配船計画「Ｓ」に追加されたことで、船舶初期ノード「ｓ（１）」は１本のアークの終端とされたことになる。この場合、前述した「（Ａ）アークの本数に関する制約条件」から、アーク「Ａ１」を配船計画「Ｓ」に採用するという仮定において、積ノード「ｔ（２）」から船舶初期ノード「ｓ（１）」に向かうアーク「Ａ２」は暫定的な配船計画「Ｓ」と矛盾することになる。このため、図１６に示すように、アーク「Ａ２」を削除する。
【００６４】
また、アーク「Ａ１」を採用するという仮定において、積ノード「ｔ（１）」は１本のアークの始端とされたため、同じく「（Ａ）アークの本数に関する制約条件」から、積ノード「ｔ（１）」を始端とする他のアーク「Ａ３」を削除する。
【００６５】
さらに、「（Ｂ）積荷役と揚荷役の実施順序に関する制約条件」によれば、揚ノード「ａ（２）」からアークを辿って別のノードに移動することを繰り返していくと、積ノード「ｔ（２）」に到達できなければならないが、揚ノード「ａ（２）」からアーク「Ａ４」を辿って積ノード「ｔ（１）」に移動した場合は、アーク「Ａ３」が既に削除されているため、積ノード「ｔ（２）」に到達することができなくなる。そこで、「（Ｂ）積荷役と揚荷役の実施順序に関する制約条件」に抵触するとして、揚ノード「ａ（２）」から積ノード「ｔ（１）」に向かうアーク「Ａ４」を削除する。
【００６６】
同様に、揚ノード「ａ（１）」からアークを辿って別のノードに移動することを繰り返していくと、積ノード「ｔ（１）」に到達できなければならないが、揚ノード「ａ（１）」からアーク「Ａ５」を辿って揚ノード「ａ（２）」に移動した場合は、アーク「Ａ４」が既に削除されているため、積ノード「ｔ（１）」に到達することができなくなる。そこで、同じく「（Ｂ）積荷役と揚荷役の実施順序に関する制約条件」に抵触するとして、揚ノード「ａ（１）」から揚ノード「ａ（２）」に向かうアーク「Ａ５」を削除する。
【００６７】
さらに、図１６から読み取ることはできないが、次の理由により、積ノード「ｔ（２）」から揚ノード「ａ（１）」に向かうアーク「Ａ６」を削除する。すなわち、アーク「Ａ６」は、アーク列挙条件の１つである「（３）積ノードから揚ノードへのアークの列挙」に従って列挙された。しかし、アーク「Ａ１」を採用するという仮定において、積ノード「ｔ（１）」の積荷役が荷役開始最小時刻で開始できなくなった。この結果、積ノード「ｔ（１）」を終端とする唯一のアーク「Ａ７」の始端である揚ノード「ａ（１）」の揚荷役の開始時刻が遅れ、揚ノード「ａ（１）」の揚荷役の後に積ノード「ｔ（２）」の積荷役を実施することが「（Ｃ）オーダーの日時に関する制約条件」に抵触し、実施不可能となった。以上の理由により、アーク「Ａ６」を削除する。
【００６８】
ここまでの処理により、決定ノード集合「Ｎｓ」及び配船計画「Ｓ」は図１７のようになる。次いで、再び未決定ノードのうち、配船始端ノードに向かうアークを有するノードの集合を選択候補ノード集合とする。現在の配船始端ノードは船舶初期ノード「ｓ（２）」と、積ノード「ｔ（１）」とであるため、図１８に示すように、これらのノードに向かうアークを有する積ノード「ｔ（２）」及び揚ノード「ａ（１）」が選択候補ノード集合に含まれることになる。
【００６９】
その後、選択候補ノード集合の中からノードを１つランダムに選択し、当該選択ノードから配船始端ノードに向かうアークの集合を選択候補アーク集合とする。図１８において、例えば揚ノード「ａ（１）」が選択されたとすると、揚ノード「ａ（１）」から配船始端ノードに向かうアークは、揚ノード「ａ（１）」から積ノード「ｔ（１）」に向かうアーク「Ａ７」のみであるため、アーク「Ａ７」が選択候補アーク集合に含まれることになる。
【００７０】
次いで、選択候補アーク集合からアークを１つランダムに選択して配船計画「Ｓ」に追加するとともに、選択ノードを決定ノード集合「Ｎｓ」に追加する。この結果、図１９に示すように、アーク「Ａ７」が配船計画「Ｓ」に追加されるとともに、揚ノード「ａ（１）」が決定ノード集合「Ｎｓ」に追加されている。
【００７１】
次いで、前述した（Ａ）〜（Ｄ）の制約条件に反するアークを全て削除する。しかし、この時点では、暫定的な配船計画「Ｓ」と矛盾するアークは存在しないため、アークが削除されることはない。
【００７２】
ここまでの処理により、決定ノード集合「Ｎｓ」及び配船計画「Ｓ」は図２０のようになる。次いで、再び未決定ノードのうち、配船始端ノードに向かうアークを有するノードの集合を選択候補ノード集合とする。現在の配船始端ノードは船舶初期ノード「ｓ（２）」と、揚ノード「ａ（１）」とであるため、図２１に示すように、これらのノードに向かうアークを有する積ノード「ｔ（２）」が選択候補ノード集合に含まれることになる。
【００７３】
その後、選択候補ノード集合の中からノードを１つランダムに選択し、当該選択ノードから配船始端ノードに向かうアークの集合を選択候補アーク集合とする。この場合、必ず積ノード「ｔ（２）」が選択されることになるため、積ノード「ｔ（２）」から船舶初期ノード「ｓ（２）」に向かうアーク「Ａ８」が選択候補アーク集合に含まれることになる。
【００７４】
次いで、選択候補アーク集合からアークを１つランダムに選択して配船計画「Ｓ」に追加するとともに、選択ノードを決定ノード集合「Ｎｓ」に追加する。この結果、図２２に示すように、アーク「Ａ８」が配船計画「Ｓ」に追加されるとともに、積ノード「ｔ（２）」が決定ノード集合「Ｎｓ」に追加されている。
【００７５】
次いで、前述した（Ａ）〜（Ｄ）の制約条件に反するアークを全て削除する。しかし、この時点では、暫定的な配船計画「Ｓ」と矛盾するアークは存在しないため、アークが削除されることはない。
【００７６】
次いで、再び未決定ノードのうち、配船始端ノードに向かうアークを有するノードの集合を選択候補ノード集合とする。現在の配船始端ノードは積ノード「ｔ（２）」と、揚ノード「ａ（１）」とであるため、図２３に示すように、これらのノードに向かうアークを有する揚ノード「ａ（２）」が選択候補ノード集合に含まれることになる。
【００７７】
その後、選択候補ノード集合の中からノードを１つランダムに選択し、当該選択ノードから配船始端ノードに向かうアークの集合を選択候補アーク集合とする。この場合、必ず揚ノード「ａ（２）」が選択されることになるため、揚ノード「ａ（２）」から積ノード「ｔ（２）」に向かうアーク「Ａ９」が選択候補アーク集合に含まれることになる。
【００７８】
次いで、選択候補アーク集合からアークを１つランダムに選択して配船計画「Ｓ」に追加するとともに、選択ノードを決定ノード集合「Ｎｓ」に追加する。この結果、図２４に示すように、アーク「Ａ９」が配船計画「Ｓ」に追加されるとともに、積ノード「ａ（２）」が決定ノード集合「Ｎｓ」に追加される。
【００７９】
以上の処理により、未決定ノード集合「Ｎｕ」が空集合となったため、配船計画の探索は終了となる。図２５を見ると、ノードとアークの組合せにより完全マッチング配船ネットワークが形成されており、当該完全マッチング配船ネットワークに含まれるアークの組合せは、妥当な配船計画を構成していることがわかる。
【００８０】
また、図１７を見れば明らかなように、図１６において（Ａ）〜（Ｄ）の制約条件と抵触するアークを削除した時点で、実質的には図２５の配船計画が完成していることがわかる。このように、未選択のアーク群の中から選択したアークを配船計画に追加しながら、暫定的な配船計画と矛盾するアークを未選択のアーク群から削除していく制約理論に基づく手法を採用したことで、実質的に探索するアークの組合せの数を大幅に削減することができ、計算時間を短縮して、効率的に配船計画を作成することが可能となる。
【００８１】
３．実施例
次に、上述した原理に従って配船計画を作成する装置である配船計画作成装置１について説明する。
【００８２】
３−１．構成
図２６は、配船計画作成装置１の機能構成を示すブロック図である。配船計画作成装置１は、ＣＰＵ（Central Processing Unit）１０と、操作部２０と、表示部３０と、通信部４０と、ハードディスク５０と、ＲＡＭ（Random Access Memory）６０とを備え、各部はバス７０で相互にデータ通信可能に接続されて構成されるコンピュータシステムである。
【００８３】
ＣＰＵ１０は、ハードディスク５０に記憶されているシステムプログラム等に従って配船計画作成装置１の各部を統括的に制御するプロセッサである。特に、ＣＰＵ１０は、ハードディスク５０に記憶されている配船計画作成プログラム５０１に従って配船計画作成処理を行って配船計画を作成し、作成した配船計画を表示部３０に表示させる。
【００８４】
操作部２０は、例えばキーボードやタッチパネル等により構成される入力装置であり、押下されたキーやアイコンの信号をＣＰＵ１０に出力する。この操作部２０の操作により、オーダーや船舶、港に関するデータの設定等がなされる。
【００８５】
表示部３０は、ＬＣＤ（Liquid Crystal Display）等により構成され、ＣＰＵ１０から入力される表示信号に基づいた各種表示を行う表示装置である。表示部３０には、作成された配船計画等が表示される。
【００８６】
通信部４０は、ＣＰＵ１０の制御に基づいて、装置内部で利用される情報をインターネット等の通信ネットワークを介して外部とやりとりするための通信装置である。
【００８７】
ハードディスク５０は、磁気ヘッド等を用いてデータの読み書きを行う記憶装置であり、配船計画作成装置１が備える各種機能を実現するためのプログラムやデータ等を記憶している。ハードディスク５０には、例えば、ＣＰＵ１０により読み出され、配船計画作成処理（図３０参照）として実行される配船計画作成プログラム５０１と、設定オーダーデータ５０３と、設定船舶データ５０５と、設定港データ５０７とが記憶されている。
【００８８】
また、配船計画作成プログラム５０１には、配船計画探索処理（図３１参照）として実行される配船計画探索プログラム５０１１と、配船計画決定処理（図３２及び図３３参照）として実行される配船計画決定プログラム５０１３とがサブルーチンとして含まれている。
【００８９】
配船計画作成処理とは、ＣＰＵ１０が、配船計画を探索して航海コストを算出する処理を所定回数（例えば「１０回」）繰り返し実行し、最も航海コストが小さい配船計画を最終的な配船計画として出力する処理である。配船計画作成処理については、フローチャートを用いて詳細に後述する。
【００９０】
図２７は、設定オーダーデータ５０３のデータ構成の一例を示す図である。設定オーダーデータ５０３には、オーダーの番号５０３１と、当該オーダーの貨物の量５０３２と、当該オーダーの貨物の積港５０３３及び揚港５０３４と、当該オーダーの貨物の積日５０３５及び揚日５０３６とが対応付けて記憶されている。
【００９１】
例えば、オーダー「１」の貨物の量は「１５００キロリットル」である。また、積港は「Ｂ港」、揚港は「Ｅ港」であり、積日は「２月２日」、揚日は「２月１０日」である。配船計画作成処理において、ＣＰＵ１０は、操作部２０を介してユーザーにより入力されたオーダーに関するデータを、設定オーダーデータ５０５に設定・記憶させる。
【００９２】
図２８は、設定船舶データ５０５のデータ構成の一例を示す図である。設定船舶データ５０５には、船舶名５０５１と、当該船舶の限界積載量５０５２と、当該船舶の使用開始日時５０５３と、当該船舶の使用開始港５０５４と、当該船舶のコスト基礎値５０５５とが対応付けて記憶される。尚、使用開始日時５０５３及び使用開始港５０５４における船舶名５０５１の船舶は、積載量がゼロである必要がある。
【００９３】
コスト基礎値５０５５は、船舶の燃料消費量や航海の費用等を示す指標である航海コストの基礎値であって、例えば１海里当たりの加算値として定義され、値が小さいほど経済的であることを示す。航海コストは、各配船計画それぞれについて、当該配船計画を構成するアークの組合せに基づいて算出することができ、航海コストが小さい配船計画ほど、効率の良い配船計画であることを意味する。
【００９４】
例えば、船舶「××丸」の限界積載量は「２８００キロリットル」であり、使用開始日時は「１月３１日」、使用開始港は「Ａ港」である。また、コスト基礎値は「１００／海里」であり、１海里進む毎に航海コストに「１００」が加算されることになる。配船計画作成処理において、ＣＰＵ１０は、操作部２０を介してユーザーにより入力された船舶に関するデータを、設定船舶データ５０５に設定・記憶させる。
【００９５】
図２９は、設定港データ５０７のデータ構成の一例を示す図である。設定港データ５０７には、港名５０７１と、当該港の荷役開始最小時刻５０７２及び荷役開始最大時刻５０７３と、当該港の積荷役能力５０７４及び揚荷役能力５０７５とが対応付けて記憶される。
【００９６】
例えば、「Ａ港」の荷役開始最小時刻は「午前８時」であり、荷役開始最大時刻は「午後６時」である。また、「Ａ港」の積荷役能力は「２００キロリットル／時間」であり、揚荷役能力は「１５０キロリットル／時間」である。配船計画作成処理において、ＣＰＵ１０は、操作部２０を介してユーザーにより入力された港に関するデータを、設定港データ５０７に設定・記憶させる。
【００９７】
ＲＡＭ６０は、読み書き可能な揮発性の記憶装置であり、ＣＰＵ１０により実行されるシステムプログラム、各種処理プログラム、各種処理の処理中データ、処理結果などを一時的に記憶するワークエリアを形成している。ＲＡＭ６０には、例えば、配船ネットワークデータ６０１と、処理中データ６０３と、配船計画データ６０５と、航海コストデータ６０７とが記憶される。
【００９８】
配船ネットワークデータ６０１は、例えば図３に示したような配船ネットワークに関するデータである。配船計画作成処理において、ＣＰＵ１０は、前述した原理に従って配船ネットワークを作成して、配船ネットワークデータ６０１に記憶させる。
【００９９】
処理中データ６０３は、未決定ノード集合、決定ノード集合、実行可能アーク集合及び暫定配船計画の複製データが、ＦＩＬＯ（First In Last Out）方式に従って蓄積されるデータである。詳細は後述するが、配船計画決定処理の中では、配船計画決定プログラム５０１３を再帰的に読み出して配船計画決定処理を行う。この際、失敗を返して１つ前の配船計画決定処理に戻る場合は、上述した４つのデータも１つ前の状態に戻す必要がある。そのため、処理中データ６０３のデータ構造は、スタック構造となっている。
【０１００】
配船計画データ６０５は、航海コストが最も小さい配船計画であって、最終的に出力する配船計画のデータであり、配船計画作成処理においてＣＰＵ１０により更新される。
【０１０１】
航海コストデータ６０７は、配船計画データ６０５に記憶された配船計画の航海コストのデータであり、配船計画作成処理においてＣＰＵ１０により更新される。
【０１０２】
３−２．処理の流れ
図３０は、ＣＰＵ１０によりハードディスク５０に記憶されている配船計画作成プログラム５０１が読み出されて実行されることで配船計画作成装置１において実行される配船計画作成処理の流れを示すフローチャートである。
【０１０３】
先ず、ＣＰＵ１０は、初期設定を行う（ステップＡ１）。具体的には、操作部２０を介してユーザーにより入力されたオーダー、船舶及び港に関するデータを、ハードディスク５０の設定オーダーデータ５０３、設定船舶データ５０５及び設定港データ５０７にそれぞれ設定・記憶させる。
【０１０４】
次いで、ＣＰＵ１０は、前述した原理に従って配船ネットワークを作成する配船ネットワーク作成処理を行い、作成した配船ネットワークのデータをＲＡＭ６０の配船ネットワークデータ６０１として記憶させる（ステップＡ３）。そして、ＣＰＵ１０は、ハードディスク５０に記憶されている配船計画探索プログラム５０１１を読み出して実行することで、配船計画探索処理を行う（ステップＡ５）。
【０１０５】
図３１は、配船計画探索処理の流れを示すフローチャートである。
先ず、ＣＰＵ１０は、配船ネットワークの全ての船舶初期ノードを決定ノードとして、決定ノード集合に追加するとともに（ステップＢ１）、船舶初期ノード以外のノードを未決定ノードとして、未決定ノード集合に追加する（ステップＢ３）。
【０１０６】
また、ＣＰＵ１０は、配船ネットワークの全てのアークを実行可能アークとして、実行可能アーク集合に追加する（ステップＢ５）。そして、ハードディスク５０に記憶されている配船計画決定プログラム５０１３を読み出して実行することで配船計画決定処理を行った後（ステップＢ７）、配船計画探索処理を終了する。
【０１０７】
図３２及び図３３は、配船計画決定処理の流れを示すフローチャートである。
先ず、ＣＰＵ１０は、実行可能アーク集合の中から、前述した（Ａ）〜（Ｄ）の制約条件と矛盾するアークを全て削除する（ステップＣ１）。そして、未決定ノード集合に含まれるノードの中に、次の実行可能アーク条件を満たすノードが１つでも存在するか否かを判定する（ステップＣ３）。実行可能アーク条件は、「実行可能アーク集合の中に、当該ノードを始端ノードとするアークが１つも存在しないこと」である。
【０１０８】
ステップＣ３において、実行可能アーク条件を満たすノードが１つも存在しないと判定した場合は（ステップＣ３；Ｎｏ）、ＣＰＵ１０は、未決定ノード集合が空集合であるか否かを判定する（ステップＣ５）。そして、空集合ではないと判定した場合は（ステップＣ５；Ｎｏ）、配船始端ノードに向かうアークが設定されているノードの集合を選択候補ノード集合とする（ステップＣ７）。
【０１０９】
次いで、ＣＰＵ１０は、選択候補ノード集合の中からノードを１つ選択し（ステップＣ９）、当該選択ノードを始端とするアークのうち、配船始端ノードに向かうアークの集合を選択候補アーク集合とする（ステップＣ１１）。
【０１１０】
その後、ＣＰＵ１０は、選択候補アーク集合が空集合であるか否かを判定し（ステップＣ１３）、空集合ではないと判定した場合は（ステップＣ１３；Ｎｏ）、選択候補アーク集合の中からアークを１つ選択する（ステップＣ１５）。
【０１１１】
そして、ＣＰＵ１０は、選択アークを、選択候補アーク集合から削除する（ステップＣ１７）。また、ＣＰＵ１０は、選択アークを暫定配船計画に追加するとともに（ステップＣ１９）、選択ノードを決定ノード集合に追加する（ステップＣ２１）。
【０１１２】
次いで、ＣＰＵ１０は、現在の未決定ノード集合、決定ノード集合、実行可能アーク集合及び暫定配船計画の複製データを、ＦＩＬＯ方式でＲＡＭ６０の処理中データ６０３に蓄積する（ステップＣ２３）。そして、ＣＰＵ１０は、ハードディスク５０に記憶されている配船計画決定プログラム５０１３を再帰的に読み出して実行することで、配船計画決定処理を実行する（ステップＣ２５）。
【０１１３】
一方、ステップＣ３において、未決定ノード集合に含まれるノードの中に、実行可能アーク条件を満たすノードが１つでも存在すると判定した場合は（ステップＣ３；Ｙｅｓ）、ＣＰＵ１０は、１つ前の配船計画決定処理に失敗を返す（リターン）。また、ステップＣ５において、未決定ノード集合が空集合であると判定した場合は（ステップＣ５；Ｙｅｓ）、ＣＰＵ１０は、１つ前の配船計画決定処理に成功を返す（リターン）。
【０１１４】
成功又は失敗を返した場合は、ＣＰＵ１０は、その成否を判定し（ステップＣ２７）、失敗が返ったと判定した場合は（ステップＣ２７；失敗）、ＲＡＭ６０の処理中データ６０３にＦＩＬＯ方式で蓄積されている複製データのうち、最新の未決定ノード集合、決定ノード集合、実行可能アーク集合及び暫定配船計画を取り出し、現在の未決定ノード集合、決定ノード集合、実行可能アーク集合及び暫定配船計画として更新する（ステップＣ２９）。そして、ＣＰＵ１０は、ステップＣ１３に戻る。
【０１１５】
また、ステップＣ２７において成功が返ったと判定した場合は（ステップＣ２７；成功）、ＣＰＵ１０は、１つ前の配船計画決定処理に成功を返す（リターン）。尚、一番最初の配船計画決定処理において成功を返した場合は、配船計画探索処理に成功が返ることになる。
【０１１６】
図３０の配船計画作成処理に戻って、配船計画探索処理を行った後、ＣＰＵ１０は、配船計画の探索の成否を判定し（ステップＡ７）、失敗が返ったと判定した場合は（ステップＡ７；失敗）、ステップＡ１７へと処理を移行する。
【０１１７】
また、成功が返ったと判定した場合は（ステップＡ７；成功）、ＣＰＵ１０は、ハードディスク５０の設定船舶データ５０５に記憶されているコスト基礎値５０５５を用いて、配船計画探索処理で得られた暫定配船計画を構成するアークの組合せから航海コストを算出する（ステップＡ９）。
【０１１８】
そして、ＣＰＵ１０は、算出した航海コストが、ＲＡＭ６０の航海コストデータ６０７に記憶されている航海コストよりも小さいか否かを判定し（ステップＡ１１）、記憶されている航海コスト以上であると判定した場合は（ステップＡ１１；Ｎｏ）、ステップＡ１７へと処理を移行する。
【０１１９】
また、算出したコストが、航海コストデータ６０７に記憶されている航海コストよりも小さいと判定した場合は（ステップＡ１１；Ｙｅｓ）、ＣＰＵ１０は、配船計画探索処理で得られた暫定配船計画を配船計画として、配船計画データ６０５を更新する（ステップＡ１３）。また、ステップＡ９で算出した航海コストで、航海コストデータ６０７を更新する（ステップＡ１５）。
【０１２０】
次いで、ＣＰＵ１０は、配船計画の探索を所定回数（例えば「１０回」）実行したか否かを判定し（ステップＡ１７）、まだ実行していないと判定した場合は（ステップＡ１７；Ｎｏ）、ステップＡ５に戻る。また、所定回数実行したと判定した場合は（ステップＡ１７；Ｙｅｓ）、配船計画データ６０５に記憶されている配船計画を表示部３０に表示させた後（ステップＡ１９）、配船計画作成処理を終了する。
【０１２１】
４．作用効果
本実施形態によれば、オーダー、船舶及び港に関する設定内容から、１）積港及び積日を表す積ノード、２）揚港及び揚日を表す揚ノード、３）船の使用開始日時及び使用開始港を表す船舶初期ノードが列挙されるとともに、これらのノード間を結ぶアークが列挙される。そして、列挙されたアークの中から、列挙されたノードを全て網羅するアークの組合せであって、所定の制約条件を満たすアークの組合せが選出され、選出されたアークの組合せに従い、連接するアークを一の船の航路とした配船計画が出力される。
【０１２２】
貨物の積荷役に対応する積ノードと、貨物の揚荷役に対応する揚ノードと、船舶に対応する船舶初期ノードとを列挙した上で、いわゆる完全マッチングの探索手法に基づいて、列挙したノードを全て網羅するアークの組合せを探索することで、コンピュータを用いて配船計画を作成することが可能となる。また、前述した（Ａ）〜（Ｄ）の制約条件に従ってアークの削除を行うようにしたことで、アークの篩い分けを適切に行うことが可能となり、その結果、演算量を削減した効率の良い配船計画の探索を実現し得る。
【０１２３】
また、未選択のアーク群の中から選択したアークを配船計画に新たに追加しながら、暫定的な配船計画と矛盾するアークを未選択のアーク群から削除していく制約理論に基づく手法を採用したことで、実質的に探索するアークの組合せの数を大幅に削減することができ、計算時間が短縮される。
【０１２４】
本実施形態の内容に沿ったプログラムを構築し、実際の１ヶ月分のオーダーである「２６０オーダー」、船舶「１３隻」に対する配船計画の作成実験を、市販されている一般的なコンピュータを用いて試みた。結果、約１時間で配船計画を作成することができた。作成できた配船計画は、実際に手作業で作成された配船計画（実績）に対して、総移動距離が短く、総使用燃料が少ない配船計画であった。
【０１２５】
尚、オーダーの数が「ｎ個」で、船舶の数が「ｍ個」であるとした場合、各ノードにつき、これを始端とするアークは最大「２ｎ＋ｍ−１通り」考えられる。その中から１つの配船計画における１個のアークの選び方は、最大で「（２ｎ＋ｍ−１）の２ｎ乗通り」の組合せが考えられる。従って、上記の実験の「２６０オーダー」で船舶「１３隻」のケースでも天文学的な組合せとなり、総当たり的な単純な探索処理では実用的な時間内での算出が不可能であることがわかる。
【０１２６】
５．変形例
５−１．選択候補ノード集合の選択
上述した実施形態では、未決定ノードのうち、配船始端ノードに向かうアークが設定されているノードの集合を選択候補ノード集合として配船計画を探索するものとして説明したが、全ての未決定ノードの集合を選択候補ノード集合として配船計画を探索することとしてもよい。この場合は、図３２の配船計画決定処理のステップＣ７を、全ての未決定ノードの集合を選択候補ノード集合とするステップに変更する。但し、この変更は演算量を増加させることとなるため、プログラムを簡素化する等の特段の事情がある場合に採用することとするのがよい。
【０１２７】
５−２．選択候補アーク集合の選択
また、上述した実施形態では、選択候補ノード集合の中から選択されたノード（選択ノード）を始端とするアークのうち、配船始端ノードに向かうアークの集合を選択候補アーク集合として配船計画を探索するものとして説明したが、選択ノードを始端とする全てのアークの集合を選択候補アーク集合として配船計画を探索することとしてもよい。この場合は、図３２の配船計画決定処理のステップＣ１１を、選択ノードを始端とする全てのアークの集合を選択候補アーク集合とするステップに変更する。但し、この変更は演算量を増加させることとなるため、プログラムを簡素化する等の特段の事情がある場合に採用することとするのがよい。
【０１２８】
５−３．タンクの割り当てに関する制約条件
上述した実施形態では、船舶が貨物を搭載するタンクについては言及しなかったが、各船舶が備える各タンクそれぞれの限界積載量をも考慮して配船計画を探索することとしてもよい。この場合は、配船ネットワークからアークを削除する際の制約条件として、タンクの割り当てに関する制約条件を追加すればよい。
【０１２９】
具体的には、複数のタンクを備えた船舶について、各タンクに２個以上のオーダーの貨物を混載することは禁止されているのが一般的であると考えられる。従って、かかる場合は、各オーダーの貨物のタンク割り当てを決定する必要があり、以下の２つの制約条件と矛盾するアークを配船ネットワークから削除する。
（イ）オーダー「ｉ」の積荷役の実施時に、船舶に既に積載されている任意のオーダー「ｊ」の貨物を積載するタンクの集合に含まれるタンクが選ばれることはない。
（ロ）オーダー「ｉ」の貨物を積載するタンクの集合に含まれるタンクの限界積載量の合計は、オーダー「ｉ」の貨物の量以上である。
【０１３０】
５−４．傭船を考慮した配船計画
内航海運業の事業者は、手持ちの船舶だけでは全てのオーダーの貨物の運送を行うことができない場合に、他の事業者から一時的に船舶を借りてきて（以下、この船舶のことを「傭船」という。）、貨物の運送を行う場合がある。この場合は、手持ちの船舶と傭船とを考慮して配船計画を作成する必要があるが、手持ちの船舶に対応する船舶初期ノードの他に、傭船に対応する船舶初期ノードを用意して配船ネットワークを作成することで、上述した原理に則って配船計画を同様に作成することが可能である。
【０１３１】
具体的には、例えば図３０のステップＡ１７で、所定回数の配船計画の探索を実行したが、配船計画を探索できなかった（作成できなかった）場合に、設定船舶データ５０５として傭船のデータを設定して再度配船計画作成処理を実行する。
【０１３２】
５−５．配船計画作成装置
上述した実施形態では、配船計画作成装置を、探索した（作成した）配船計画を最終的な配船計画として出力する装置として説明した。しかし、使用用途によっては、配船計画作成装置により作成された配船計画をもとに、さらに人手によって微調整を行って、最終的な配船計画とする場合もあり得る。その場合には、配船計画作成装置は、配船計画の作成を支援する装置（配船計画作成支援装置）となるが、支援する装置と言えども配船計画作成装置の一種であり、本願発明の一実施形態である。
【０１３３】
５−６．航海コスト
航海コストの算出方法として、各船舶に設定されたコスト基礎値５０５５を用いる方法を例に挙げて説明したが、別の方法で行ってもよいのは勿論である。例えば、配船計画の各船舶の移動距離を合計した総移動距離をコストとしても良い。
【０１３４】
また、コスト基礎値５０５５を、図２８に示したように船舶に対して一意に決定するのではなく、船舶が積載している貨物の数（オーダーの数）や貨物の積載重量をパラメータとする関数で表現することとしてもよい。
【図面の簡単な説明】
【０１３５】
【図１】船舶の航路の一例を示す図。
【図２】ノードの一例を示す図。
【図３】配船ネットワークの一例を示す図。
【図４】完全マッチング配船ネットワークの一例を示す図。
【図５】配船計画の一例を示す図。
【図６】アーク列挙条件の説明図。
【図７】アーク列挙条件の説明図。
【図８】アーク列挙条件の説明図。
【図９】アーク列挙条件の説明図。
【図１０】アーク列挙条件の説明図。
【図１１】アーク列挙条件の説明図。
【図１２】アーク列挙条件の説明図。
【図１３】アーク列挙条件の説明図。
【図１４】配船計画探索の説明図。
【図１５】配船計画探索の説明図。
【図１６】配船計画探索の説明図。
【図１７】配船計画探索の説明図。
【図１８】配船計画探索の説明図。
【図１９】配船計画探索の説明図。
【図２０】配船計画探索の説明図。
【図２１】配船計画探索の説明図。
【図２２】配船計画探索の説明図。
【図２３】配船計画探索の説明図。
【図２４】配船計画探索の説明図。
【図２５】配船計画探索の説明図。
【図２６】配船計画作成装置の機能構成を示すブロック図。
【図２７】設定オーダーデータのデータ構成の一例を示す図。
【図２８】設定船舶データのデータ構成の一例を示す図。
【図２９】設定港データのデータ構成の一例を示す図。
【図３０】配船計画作成処理の流れを示すフローチャート。
【図３１】配船計画探索処理の流れを示すフローチャート。
【図３２】配船計画決定処理の流れを示すフローチャート。
【図３３】配船計画決定処理の流れを示すフローチャート。
【符号の説明】
【０１３６】
１              配船計画作成装置
１０            ＣＰＵ
２０            操作部
３０            表示部
４０            通信部
５０            ハードディスク
５０１          配船計画作成プログラム
５０１１        配船計画探索プログラム
５０１３        配船計画決定プログラム
５０３          設定オーダーデータ
５０５          設定船舶データ
５０７          設定港データ
６０            ＲＡＭ
６０１          配船ネットワークデータ
６０３          処理中データ
６０５          配船計画データ
６０７          航海コストデータ
７０            バス
【図１】
0005339230.tif 000002
【図２】
0005339230.tif 000003
【図３】
0005339230.tif 000004
【図４】
0005339230.tif 000005
【図５】
0005339230.tif 000006
【図６】
0005339230.tif 000007
【図７】
0005339230.tif 000008
【図８】
0005339230.tif 000009
【図９】
0005339230.tif 000010
【図１０】
0005339230.tif 000011
【図１１】
0005339230.tif 000012
【図１２】
0005339230.tif 000013
【図１３】
0005339230.tif 000014
【図１４】
0005339230.tif 000015
【図１５】
0005339230.tif 000016
【図１６】
0005339230.tif 000017
【図１７】
0005339230.tif 000018
【図１８】
0005339230.tif 000019
【図１９】
0005339230.tif 000020
【図２０】
0005339230.tif 000021
【図２１】
0005339230.tif 000022
【図２２】
0005339230.tif 000023
【図２３】
0005339230.tif 000024
【図２４】
0005339230.tif 000025
【図２５】
0005339230.tif 000026
【図２６】
0005339230.tif 000027
【図２７】
0005339230.tif 000028
【図２８】
0005339230.tif 000029
【図２９】
0005339230.tif 000030
【図３０】
0005339230.tif 000031
【図３１】
0005339230.tif 000032
【図３２】
0005339230.tif 000033
【図３３】
0005339230.tif 000034