部材取りシステム及び部材取りプログラム
【目的】演算時間を短縮しながら、使用する原資材の総コスト及び/又は発生する破材長さを抑えることができる部材取りシステム及び部材取りプログラムを提供すること。
【解決手段】部材取りシステム(部材取りプログラム)は、所定のクラスに属するカットパターンから余分な部材を出さないカットパターンを探索し(I101)、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか(I102)、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し(I106)、当該探索ノードを探索リストに追加して(I107)探索リストを作成する前方探索手段(前方探索手順)を備える。
【解決手段】部材取りシステム(部材取りプログラム)は、所定のクラスに属するカットパターンから余分な部材を出さないカットパターンを探索し(I101)、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか(I102)、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し(I106)、当該探索ノードを探索リストに追加して(I107)探索リストを作成する前方探索手段(前方探索手順)を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、部材取りシステム及び部材取りプログラムに関し、更に詳しくは、多種類の複数原資材から、長さの異なる種々の部材を必要本数切り出す場合に、使用する原資材の総コスト及び/又は発生する破材の長さ(以下「破材長さ」という)を抑える切断方法に関する。
【背景技術】
【0002】
原資材の長さを超えない範囲で、かつ、発生する破材長さを最小に抑えるように切り出す部材を選択したり(ナップザック問題)、一種類の複数原資材から長さの異なる種々の部材を必要本数切り出すときに、使用する原資材の本数を最小にするにはどうするかを決めること(ビンパッキング問題、カッティングストック問題)については、多くの研究がなされている。しかしながら、入力サイズが実用的であっても実用的な時間内で最適解を求めることが困難であり、多くの近似解法が提案されている(非特許文献1,2等参照)。
【0003】
そして、建設業界においては、上記に加え、多種類の複数原資材に対して、使用する原資材の総コスト及び/又は発生する破材長さをできるだけ抑えることが求められている。そこで、非特許文献3〜6の部材取り手法に関する技術等が提案されている。例えば、非特許文献3には、破材が極力小さくなるように切り出す部材の組合せを求めるときに「プライオリティ」という概念を導入することにより、切り出す部材のプライオリティの合計が最大になるような組合せを求める技術が提案されている。これは、数の多い部材ほどプライオリティを高く設定することで、数の少ない部材があまり選択されなくなるため、選択の幅を操作しうるという利点がある。
【0004】
また、対象物を切り出すという観点によれば、特許文献1、2に開示されたシートの断裁方法や定規取り装置といった技術も見受けられる。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】Yue M., "A simple proof of the inequality FFD(L) ? (11/9)OPT(L) + 1, for all L, for the FFD bin-packing algorithm", Acta Mathematicae Applicatae Sinica 7, pp. 321-331, 1991.
【非特許文献2】Dosa G., "The Tight Bound of First Fit Decreasing Bin-Packing Algorithm Is FFD(I)?(11/9)OPT(I)+6/9", ESCAPE 2007, Springer LNCS 4614, pp. 1-11, 2007.
【非特許文献3】Paul Maschinenfabrik GmbH & Co. KG, “CNC CROSS-CUT SYSTEMマニュアル”, 2006.
【非特許文献4】SuperMab.com, “Blizzardマニュアル”.
【非特許文献5】株式会社コムコーポレーション, “鋼材部材取りシステムマニュアル”, 2003.
【非特許文献6】株式会社カルテック, “材料取り最適化プログラム尺取虫マニュアル”.
【特許文献】
【0006】
【特許文献1】特開2007−136577号公報
【特許文献2】特開平7−246595号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献3〜6に開示された、多種類の複数原資材から複数部材を切り出すための部材取り手法は、結局のところ、単純な近似解法を用いた精度の低いものにしかすぎないという問題がある。従って、最適解を求めたり、高精度な近似解を求めることが困難である。
更に、特許文献1、2に開示された技術は、多種類の複数原資材から複数部材と切り出す技術とは異なる。
【0008】
本発明は、上記事情に鑑みてなされたものであり、その目的は、原資材データベースに入力されている原資材から建築図面に記載されている部材を切り出すときに、効率的に演算を行いながら、使用する原資材の総コスト及び/又は発生する破材長さを抑えることができる部材取りシステム及び部材取りプログラムを提供することにある。そのために、最適解法と近似解法とを組み合わせた新規なアルゴリズムが利用される。
【課題を解決するための手段】
【0009】
上記課題を解決するために本発明に係る部材取りシステム(プログラム)は、
原資材から[部材(例えば、部材長さが挙げられるが、これに限定されるものではなく、部材を特定できるものであればよい、以下同じ),必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算するシステム(プログラム)であって、
[原資材(例えば、原資材長さが挙げられるが、これに限定されるものではなく、原資材を特定できるものであればよい、以下同じ),切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手段(手順)(C100)と、
前記各カットパターンをクラスに分類するカットパターン分類手段(手順)(D100)と、
所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索し(I101)、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか(I102)、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し(I106)、当該探索ノードを探索リストに追加して探索リストを作成する(I107)前方探索手段(手順)(H102、H114、H109)とを備えたことを要旨とする。
この場合に、前記カットパターンリスト作成手段(手順)は、
(a1)切り方フィールドは、部材が長さの降順に並んだものである、
(a2)原資材フィールドは、切り方フィールドの部材を全て足し合わせたものに対して最も破材長さが短くなる原資材である、
という条件(C102)を満たすカットパターンを全て作成し、それらを切り方フィールドをキーとして長さにおける辞書式順序の降順(長い方から短い方を意味する)に並べたカットパターンリストを作成するものであることが望ましい(C103)。
また前記カットパターン分類手段(手順)は、そのカットパターンリストの第1行目から順にカットパターンを取り出し、
(b1)取り出した分類すべきカットパターンの原資材フィールド及び切り方フィールドの代表長さが既分類のカットパターンのものと同一である、
(b2)取り出した分類すべきカットパターンの切り方フィールドの部材の数が既分類のカットパターンのものと同一又はこれよりも少ない、
という条件(D103)を全て満たす場合にはその既存クラスに分類し(D104)、存在しなければ新たなクラスを作成してそこに分類する(D106)ものであることが望ましい。
また、前記前方探索手段(手順)における「余分な部材を出さないカットパターン」とは、
(c1)あるクラス番号に分類されているカットパターン[原資材長さ,切り方]を適用したときに部材リストの必要本数を超えて部材を切り出さないそのようなカットパターン[原資材長さ,切り方]、
(c2)カットパターン[原資材長さ,切り方]中の各切り方の各本数が部材リストの当該長さの各必要本数以下であるそのようなカットパターン[原資材長さ,切り方]、
(c3)カットパターンに従って(原資材から)部材を切り出したときに、部材リストの必要本数を超えて不要な部材や余分な部材を切り出さないそのようなカットパターン[原資材長さ,切り方]を意味する。
そして、前記前方探索手段(手順)は、所定のクラスに属する余分な部材を出さないカットパターンの中から最も破材長さの短いカットパターンを一つ選択するものであることが望ましい。
【0010】
そして、前記前方探索手段(手順)は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることが望ましい(H113→H114、H107→H108→H109)。
更に、前記前方探索手段(手順)は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることが望ましい(H113→H114、H107→H108→H109)。この場合に、前記前方探索手段(手順)は、前記最長部材が属するクラスに属するカットパターンのうち先頭カットパターンから優先的に探索するものであることが望ましい(I102)。
【0011】
更に、前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合(I106)、又は、前記部材リストの必要本数が0となった場合には(H105)、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す(J105)又は何もしない(J102:=))しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかる(H107:<)まで当該探索リストから当該探索ノードを削減する(J101)後方探索手段(手順)(J100)を備えることが望ましい。
【0012】
更に、前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合(B105:≧)に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する(B107)分割手段(手順)を備えることが望ましい。
【0013】
更に、前記カットパターンリスト作成手段(手順)、前記カットパターン分類手段(手順)による処理を行った(行わせた)後、前記分割手段(手順)による処理を行って(行わせて)分割ポイントを求め、得られた長部材リストに対して、前記前方探索手段(手順)、前記後方探索手段(手順)による処理を行い(行わせ)、前記長部材リストの必要本数が全て0になったところ(H110:YES)で得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする(H111)最適解計算手段(手順)を備えることが望ましい。
この場合に、前記最適解計算手段(手順)は、前記長部材リストに対して近似解法(例えば、グリーディ法)によって求めた初期解(F104)で要するコスト未満の場合(H110:YES)に前記全探索ノードによって特定される[原資材,切り方]を最適解とし(H111)、そのコスト以上の場合に前記初期解を当該最適解とする(F104)ことが望ましい。
【0014】
更に、前記最適解に短部材を1本ずつ挿入する(K112)第一短部材挿入手段(手順)と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解(L103)を確定解とする第一確定手段(手順)と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し(L101)、再度、当該部材リストについて前記分割手段(手順)による分割処理を行い(行わせ)、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする(A110)分割ポイント確定手段(手順)とを備えることが望ましく、更に、
前記分割ポイント確定手段(手順)による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する(M103)第二確定手段(手順)と、
切り方が決まっていない短部材を挿入パターン化(N101)して当該確定解に挿入する(N113)第二短部材挿入手段(手順)と、
切り方が決まっていない短部材を近似解法(グリーディ法)に基づいて挿入パターン化し(P103)、当該確定解に挿入(P113)又は追加(P116)して最終確定解を得る最終短部材挿入手段(手順)とを備えることが望ましく、更に、
前記最終確定解を切断機に送信する確定解送信手段(手順)と、
前記最終確定解に基づいて原資材から所定長さの部材を切断する切断手段(手順)とを備えることが望ましい。
【発明の効果】
【0015】
本発明に係る部材取りシステム(プログラム)は、所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索するものであるから発生する破材長さを抑えることができるという効果がある。よって、コストダウンに寄与するという効果がある。
【0016】
本発明に係る部材取りシステム(プログラム)は、所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索するものであるから、効率的に演算を行うことができ、よって、演算時間を短縮することができ、コストダウンに寄与するという効果がある。本発明に係る部材取りシステム(プログラム)において、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索したり、更に、そのようなクラスのうち先頭クラスから優先的に探索することにより、更なる演算時間の短縮化が期待できるという効果がある。
【0017】
本発明に係る部材取りシステム(手順)は、後方探索手段(手順)を備えることにより、あらゆるカットパターンが探索対象候補となり得るため、演算精度を高めることができるという効果があり、更に、カットパターンリスト自体を予め所定の条件に従って配列させておけば、破材長さやコストを更に抑制できるだけではなく、破材長さが長くなったりコストアップになるようなカットパターンの探索を途中で打ち切る制御ができるという効果がある。
【0018】
本発明に係る部材取りシステム(プログラム)は、部材リストを長部材リストと短部材リストに分割して、長部材については最適解計算手段(手順)により最適解を求める一方、短部材についてはこれをその最適解に挿入又は追加する形式で最終的に確定解を求めるものであるから、演算量を膨大にすることなく、効率的に演算を行うことができるという効果がある。
【図面の簡単な説明】
【0019】
【図1】本発明の一実施形態に係る部材取りシステム1のハードウエア・ソフトウエア構成を概略的に示すシステム構成図である。
【図2】本発明の一実施形態に係る部材取りプログラムPGで用いられるパラメータ・リスト・手続・関数等の定義を示す一覧表である。
【図3】第一の実施形態に係るメインプログラムA100のフローチャートである。
【図4】部材リスト分割プログラムB100のフローチャートである。
【図5】カットパターンリスト作成プログラムC100のフローチャートである。
【図6】カットパターンリスト分類プログラムD100のフローチャートである。
【図7】部分最適解計算部プログラムE100のフローチャートである。
【図8】初期解生成プログラムF100のフローチャートである。
【図9】グリーディ法プログラムG100のフローチャートである。
【図10】最適解探索プログラムH100のフローチャートである。
【図11】探索プログラムI100のフローチャートである。
【図12】バックトラックプログラムJ100のフローチャートである。
【図13】短部材挿入部1プログラムK100のフローチャートである。
【図14】解の確定1プログラムL100のフローチャートである。
【図15】解の確定2プログラムM100のフローチャートである。
【図16】短部材挿入部2プログラムN100のフローチャートである。
【図17】挿入カットパターン作成プログラムO100のフローチャートである。
【図18】最終挿入プログラムP100のフローチャートである。
【図19】第二の実施形態に係るメインプログラムQ100のフローチャートである。
【発明を実施するための形態】
【0020】
以下に図面を参照して、本発明の一実施形態に係る部材取りシステム及び部材取りプログラムについて詳細に説明する。
【0021】
(第一の実施形態)
(部材取りシステム1)
図1は部材取りシステム1のハードウエア・ソフトウエア構成を概略的に示すシステム構成図である。同図において、部材取りシステム1は、原資材リストMLに登録・記憶されている多種類の複数原資材から、部材リストCLに登録・記憶されている長さの異なる種々の部材を必要本数切り出す場合に、使用する原資材の総コスト又は発生する破材長さを抑える切断方法を求め、複数原資材から種々の部材を必要本数切り出すシステムである。
【0022】
図1に示すように、部材取りシステム1は、コンピュータ2を備える。コンピュータ2は、部材取りプログラムPGと、原資材データベース3(以下「原資材DB3」という)と、部材データベース4(以下「部材DB4」という)とを備える。ここで、部材取りプログラムPGは、図2に示す定義や手続・関数に従って作成された図3〜図19(ただし、図19は第二の実施形態)に示す各種プログラムを総称したものである。部材取りシステム1は、更に、建築CADシステム5と、資材切断システム6を備える。建築CADシステム5及び資材切断システム6は、LAN7(又は公衆回線8)によって、通信用インタフェース(図示省略)を介してコンピュータ2とデータの送信及び/又は受信が可能に有線又は無線で接続される。
【0023】
コンピュータ2は、記憶部2a、制御部2b、キーボード・マウス等の入力部2c、モニタ画面2d等を備える。
記憶部2aは、ROMやRAM、上記の原資材DB3、部材DB4によって構成され、原資材DB3には原資材リストMLが記憶され、部材DB4には部材リストCLが記憶される。また、記憶部2aは、部材取りプログラムPGその他の各種プログラムを記憶するほか、部材取りプログラムPGの実行に際して使用する、各種パラメータとして、
(1)原資材DB3及び原資材リストMLのファイル名・パス名、
(2)部材DB4及び部材リストCLのファイル名・パス名、
(3)建築図面KZ(建築図面データベース9(以下単に「建築図面DB9」という)に記憶される)のファイル名・パス名、
(4)鋸厚TH(鋸厚とは、原資材の切断に用いる「鋸の厚さ」をいう、以下同じ)、
(5)端切長HL(端切長とは、原資材の端から一定の長さが切断されるその長さをいう、以下同じ)、
(6)コスト破材選択フラグFL(コスト破材選択フラグとは、部材取りプログラムPGの実行によって抑える対象をコストにするのか破材にするのかを選択するフラグをいう、以下同じ))、を記憶する。
【0024】
ここで、原資材DB3は、任意のデータベースを適用でき、図1に示すように、コンピュータ2の記憶部2aに記憶されたものに限定されず、外付けタイプのもの、建築CADシステム5や資材切断システム6に記憶させたものでもよい。原資材DB3の内容に基づいて、原資材リストMLが作成され、原資材DB3は、原資材リストMLを記憶する。
【0025】
原資材リストMLは、表1に示すように、原資材の長さ(以下「原資材長さ」という)のフィールドからなるリストである。ここで、「原資材」とは、以下に説明する部材が切り出される母材であり、在庫品や購入可能な母材をいう。
原資材リストMLの原資材長さとしては、原資材DB3に格納されている各原資材長さから端切長HLを引いたものが登録・記憶される。
原資材リストMLの原資材コストとしては、使用する原資材の総コストが最小化される場合(コスト破材選択フラグFLがコストを示す場合)は、各原資材コストが登録・記憶され、発生する破材が最小化される場合(コスト破材選択フラグFLが破材を示す場合)には各原資材長さが登録・記憶される。
【0026】
【表1】
【0027】
部材DB4は、建築図面KZに基づいて作成された部材リストCLを備えるデータベースである。部材DB4は、図1に示すように、コンピュータ2の記憶部2aに記憶されたものに限定されず、外付けタイプのもの、建築CADシステム5や資材切断システム6に記憶させたものでもよい。また、部材リストCLは、建築物毎に備えられるものでもよいし、建築対象・顧客・費用請求の方法等に応じて任意に構成されうるものでもよい。
【0028】
部材リストCLは、表2に示すように、部材の長さ(以下「部材長さ」という)と部材の必要本数のフィールドからなるリストである。ここで、「部材」とは、建築図面DB9に表された建築物を建てるのに必要な原資材から切り出されるサイズが決まった材料である。部材リストCLの部材長さとしては、建築図面KZに基づいて判断された各部材長さに鋸厚THを加えた値が登録・記憶される。部材リストCLの部材の必要本数としては、建築図面KZに基づいて判断された各部材の必要本数が登録・記憶される。
【0029】
【表2】
【0030】
建築図面KZは、部材取りシステム1を機能させるための基本的な設定事項の一つとして入力される建築図面を示す。建築図面KZとしては、任意の建築図面が登録・記憶され、これに基づいて、部材リストCLが自動作成又は手入力作成される。
鋸厚THは、部材取りシステム1を機能させるための基本的なパラメータの一つとして入力される値であり、切断部6cに設けられる鋸の厚さを示す。鋸厚THは、部材リストCLの作成時において必要とされる部材長さに自動的に加算される。
【0031】
端切長HLは、部材取りシステム1を機能させるための基本的なパラメータの一つとして入力される値であり、原資材の端からカットすべき長さを示す。端切長HLは、原資材リストMLの作成時において原資材長さから自動的に減算される。
コスト破材選択フラグFLは、部材取りシステム1を機能させるための基本的なパラメータの一つとして指定される値であり、最小化の対象が原資材コストか破材長さかを示す。
【0032】
また、記憶部2aは演算を行う際の一時記憶領域としても用いられる。建築図面KZに関するデータは、本実施形態においてはLAN7(又は公衆回線8)を介して受信されるが記憶部2aに記憶してもよい。
【0033】
制御部2bは、記憶部2a、入力部2c、モニタ画面2d、原資材DB3、部材DB4、建築CADシステム5、資材切断システム6等とデータ受信及び/又は送信可能に直接又は間接的に有線又は無線で接続され、装置各部を制御する。すなわち、制御部2bは、部材取りプログラムPGは勿論のことその他の各種プログラムを読み出して実行し、部材取りシステム1を構成する機器各部を作動させるとともに、機器各部の状況を検知し、その状況判断及び必要な命令の装置各部への送出を実行する。
【0034】
入力部2cは、原資材DB3のファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLを入力するのに用いられる。更に、入力部2cは、原資材リストMLや部材リストCLを手入力する場合、制御部2bに各種演算・各種判断を行わせる場合、必要な命令を送出させるトリガとなる信号を送出させる場合に用いられる。
モニタ画面2dは、原資材DB3のファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLの値入力を促す入力ボックスや、原資材リストMLや部材リストCLの一覧・演算結果を表示する。
【0035】
建築CADシステム5は、記憶部5a、制御部5b、入力部5c、モニタ画面5d等を備え、コンピュータによって構築可能なシステムである。建築CADシステム5は、建築図面KZに基づいて部材リストCLを作成することができるフォーマットで(すなわち、建築図面KZをモニタ画面5d,2dで見ることによりどのサイズの部材が何本使用されるかがわかるフォーマットで)、建築図面KZを建築図面DB9に記憶させるものであれば、特に限定されず、建築対象・顧客等に応じて任意に採用しうる。また、建築CADシステム5は、部材取りシステム1を構成するコンピュータ2により構築してもよい。
【0036】
資材切断システム6は、記憶部6a、制御部6b、切断部6c等を備え、コンピュータ2によって演算された切断方法に従って資材を切断するシステムである。コンピュータ2によって演算された切断方法は、例えば、用いる[原資材(使用する原資材の長さ),切り方(切り出す長さ)]のフィールドからなる切り出しリスト(例えば、後述する確定解Solution)として、LAN7(又は公衆回線8)を介してコンピュータ2から資材切断システム6へ送られる。制御部6bは、切り出しリスト(確定解Solution)に基づいて資材を切断するよう切断部6cを制御する。切り出す順番等は、最適化が図られる。尚、制御部2bによってこれを制御してもよい。
【0037】
(部材取りシステム1の動作及び部材取りプログラムPGの処理手順)
本発明の一実施形態に係る部材取りシステム1の動作及び部材取りプログラムPGの処理手順について、図2に示すパラメータ・リスト・手続・関数及び図3〜図18に示すフローチャート等を参照して説明する。尚、その処理手順は、制御部2bが記憶部2aに記憶された部材取りプログラムPG(メインプログラムA100等)を読み出して実行することにより実現され、これにより、コンピュータ等を部材取りシステム1として機能させ、動作させる。また、本実施形態は、最適解法(図10参照)と近似解法(図8、図13〜図18等参照)とを組み合わせた新規なアルゴリズムであり、効率的に演算を行いながら、使用する原資材の総コスト及び/又は発生する破材長さの抑制を実現する。
【0038】
(メインプログラムA100の概略)
第一の実施形態に係るメインプログラムA100は、
(A1)部材リストを長部材と短部材に分割する(A103)→
(A2-1)長部材リストに対してカットパターンリストを作成し、クラス分けをする(A103)→
(A2-2)カットパターンリストに分枝限定法を適用し、部分最適解を求める(A106)→
(A2-3)短部材を1本ずつ、既定の条件を満たす場合に限り(A2-2)の解に挿入する(A107)→
(A3)ここまでで得られている解の中から確定パターン(例えば、最長原資材を使用し、かつ、破材長さが原資材長さの1%以下になっているもの)のみを保存し、この確定パターンで切り出されることが決定された部材はその分だけ部材リストから減少させる(A108)→
(A4)再び部材リストの分割を行うが(A3)の実行により部材リストが縮小し、長部材の範囲が増える場合があるため、その場合は(A2-1)に戻って繰り返す(A104〜A110)→
(A5)短部材を何本かまとめて、既定の条件を満たす場合に限り(A4)の解に挿入する(A112)→
(A6)最後に残った短部材を、(A5)の解にうまく挿入する(A113)という手順による。
【0039】
(A101:初期設定部)
A101においては、初期設定画面(図示省略)が表示される。初期設定画面においては、原資材DB3及び原資材リストMLのファイル名・パス名、部材DB4及び部材リストCLのファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLを設定するための入力ボックス(図示省略)が表示され、オペレータによってこれらのパラメータが入力される。入力された各パラメータは、記憶部2aに登録・記憶される。そして、A101においては、上記のユーザ入力に基づいて、原資材リストML、部材リストCLが認識され、あるいは、作成される。原資材リストML及び部材リストCLの一例は、上記表1、表2の通りである。
【0040】
表1に示す原資材リストMLは、原資材DB3の各原資材のデータに基づいて、[原資材長さ,原資材コスト]というフィールドからなるリスト形式で登録・記憶される。そのうち、「原資材長さ」は、「各原資材長さから端切長HLを減じた値」が登録・記憶されたものである。また、「原資材コスト」のフィールドには、コスト破材選択フラグFLの値に応じ、原則として「原資材コスト」を登録・記憶させるが、「原資材の破材長さ」を登録・記憶させてもよい。
表2に示す部材リストCLは、建築図面KZに基づいて、[部材長さ,必要本数]というフィールドを備えたリスト形式で登録・記憶される。ここで、「部材長さ」は、「実際に必要な部材長さに鋸厚THを加えた値」が登録・記憶されたものである。
【0041】
更に、部材リストCLは、部材長さをキーとして降順(長さが長いものから短いものになる順番)にソートされる。後述するA103の部材リスト分割処理の前提として部材リストCLが部材長さの降順でソートされているとよいためである。A101の処理が終わると、A102の処理に進む。
【0042】
(A102:解を格納するリストSolutionの生成)
A102においては、部材取りプログラムPGの実行過程に得られる一応の結果や、最終的に得られる結果を格納するリストとしてSolutionが生成される。
Solutionは、[原資材長さ,切り方]、すなわち、(m,P)=(m,(l1,l2,l3,…,ln))で表されるフィールドを備えたカットパターンによって構成される。尚、「切り方」とは、少なくとも1の切断長さを含む切断長さの集まりである。A102の処理が終わると、A103の処理に進む。
【0043】
(A103:部材リスト分割処理の概要)
A103においては、部材リスト分割プログラムB100が呼び出され、その実行により、分割ポイント(B101〜B106のループ脱出条件を満たすp、本プログラムでは、部材リストCLの第p行目以降が短部材となる)が求められ(B105)、部材リストCLの第1行目〜第(p-1)行目の長部材からなる長部材リストCLLと、部材リストCLの第p行目〜第size(CL)行目の短部材からなる短部材リストCLSとが作成される(B107)。長部材リストCLL及び短部材リストCLSは、部材リストCLと同様に、[部材長さ,必要本数]のフィールドを備える。
そして、長部材リストCLLからカットパターンリストPLが作成され(B108)、B108で作成されたカットパターンリストPLを構成する各カットパターン(m,P)がクラス分けされ、分類後のカットパターンリストClassが作成される(B109)。以下にこれらの処理について詳細に説明する。
【0044】
(A103:部材リスト分割処理の詳細)
B101においては、ループ脱出条件を判断するためにパラメータpが採用される。ここで、パラメータpは、分割ポイント(B105)を意味する他、「部材リストCLの第何行目までを対象として、B103におけるカットパターンを作成するかを示す値であり、第1行目を初期値としてB106を介してB101に戻る毎に1ずつインクリメントされ、部材リストCLの行数が上限となる」パラメータである。
B102においては、長部材を格納する長部材リストCLLと、短部材を格納する短部材リストCLSとが生成される。すなわち、B102においては、パラメータi(=1〜p)の値に応じて、部材リストCLの第1行目〜第p行目までを対象とする長部材リストCLLが作成され(push(CLL,CL[i]))、部材リストCLの第(p+1)行目〜部材リストCLの最終行目(第size(CL)行目)までを対象とする短部材リストCLSが作成される(push(CLS,CL[i]))。
【0045】
(B103:カットパターンリスト作成処理の概要)
B103においては、カットパターンリスト作成プログラムC100が呼び出され、原資材リストMLと長部材リストCLLに基づいて可能な切り方が列挙されたカットパターン(m,P)が作成され(C102)、ソートされたカットパターンリストPLが作成される(C103)。
【0046】
(B103:カットパターンリスト作成処理の詳細)
C101においては、カットパターンを格納するためのリストとして、カットパターンリストPLが生成される。カットパターンリストPLは、[原資材長さ,切り方]=(m,P)=(m,(l1,…,ln))のフィールドを備えたリストである。
C102においては、長さmの原資材から、「C102の条件」を満たすようにカットパターン(m,P)が生成され、カットパターンリストPLに格納される。尚、カットパターン(m,P)は、部材リストCLに含まれる少なくとも1の部材を1本用いたあらゆる組み合わせ、すなわち、部材リストCLの第1行目〜第p行目までのいずれかを使用して生成された少なくとも1本の切り方を含むものであればよい。「C102の条件」は、カットパターン(m,P)の生成毎又はその生成後のタイミングで判断される。「C102の条件」は次の通りである。
【0047】
<C102の条件>
(C102の条件1)「m=suite(sum(P))」とは、C102で生成されるカットパターン(m,P)を構成する各切り方P(=l1,…,ln)を加算した値(=l1+…+ln)以上の最短長さの原資材長さがカットパターン(m,P)の原資材長さmと等しいことを要することを意味する。この判断により、切り方を加算してそれよりも長い最短の原資材があることがわかり、コストや破材長さを抑えることができる。
【0048】
(C102の条件2)「sum(P)≦原資材の最大長」とは、C102で生成されるカットパターン(m,P)を構成する各切り方P(=l1,…,ln)を加算した値(=l1+…+ln)が原資材の最大長以下であることを要することを意味する。切り方を加算すると原資材の最大長を超えるカットパターンはあり得ないため、これを除外するためである。
【0049】
(C102の条件3)「possible(P,CLL)」とは、カットパターン(m,P)の切り方Pを構成する各長さl(=l1,…,ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「長部材リストCLLの当該部材長さl(=l1,…,ln)の各必要本数以下」であることを要することを意味する。切り方Pを構成する各長さl(=l1,…,ln)の各本数が長部材リストCLLの当該部材長さの必要本数を超えると不要な部材(余分な部材)をカットすることになり、コストや破材が増加するためである。尚、「count(l,P)」について補足すると、切り方Pを構成する各長さl(=l1,…,ln)の各本数は、その切り方Pにおける各長さの各合計本数であって、種類の数を意味するものではない。
【0050】
(C102の条件4)「P[1]≧…≧P[n]」とは、切り方Pを構成する各長さ(l1,…,ln)が長さの長いものから短いものへと降順にソートされている(すなわち、l1>,…,>ln)ことを要することを意味する。長いものから切り方を決めるという観点、及び、演算の効率化、コスト・破材を抑制する観点によるものである。
【0051】
尚、C102におけるカットパターン(m,P)は、B102で機械的に長部材リストCLLに格納された部材(CLL[i]、ここで、i=1〜p)について作成される(未だ、分割されていないのに長部材リストとしているが、以下のように、分割ポイントは演算過程で判明するため便宜上長部材リストへ格納される、そこで、機械的といっている)。
表2の場合には、size(CL)が19であるから、p=1〜19の値をとりうる。ここで、「p=1〜19の値をとりうる」との表現をしたのは、部材リスト分割プログラムB100は、後述するB105において、そのパラメータpを用いて分割ポイントpが設定されるが、これは、p=size(CL)まで到達しないうちに、部材リストCLの分割ポイントpが設定され、ループを脱出して(B105:≧)、次のB107に進むからである。
【0052】
さて、C103においては、C102で作成したカットパターンリストPLが、「C103の条件」、すなわち、カットパターンリストPLを構成する各カットパターン(m,P)が降順になるようにソートされる。従って、各カットパターン(m,P)同士では、一つめの切り方が異なればそれらを比較して降順とされ、n(ここで、nはn>1の整数)番目の切り方が同じであれば(n+1)番目の切り方同士を比較して降順とされる。尚、n番目の切り方が同じだが一方に(n+1)番目の切り方が無い場合には、(n+1)番目の切り方が無い方が後方に位置するようにソートされる。
表3は、B103の処理によって作成されるカットパターンリストPLの一例(p=14の場合)を示す。その後、B104の処理に進む。
【0053】
【表3】
【0054】
(B104:カットパターンリスト分類処理の概要)
B104においては、カットパターンリスト分類プログラムD100が呼び出され、カットパターンリストPLを構成する類似するカットパターン同士が後述する「D103の条件」により、同一クラスに分類される。分類後のものを「カットパターンリストClass」、単に「Class」ともいう。
【0055】
(B104:カットパターンリスト分類処理の詳細)
D101においては、各カットパターン(m,P)が分類されるClass番号(表4参照)を示すパラメータcnに0が代入される。
D102〜D105のループ処理においては、カットパターンリストPLを構成する全行の[原資材長さ,切り方]=(m,P(l1,…,ln))について、第1行目から順番に「D103の条件」が判断され、その判断結果に基づいて分類分けがなされる(D103〜D104,D106)。「D103の条件」は、以下の通りである。
【0056】
<D103の条件>
「P=(l1,…,ln),Class[i][1]=(m',(l'1,…,l'n'))としたとき」のうち、「P=(l1,…,ln)」は、B103で作成したカットパターンリストPLの各行のカットパターン(m,P)のうち処理対象となるまさに分類しようとするカットパターン(m,P)の切り方Pを示す。また、「Class[i][1]=(m',(l'1,…,l'n')」は、D102〜D105のループ処理で作成された(ただし、最初にD103を行う場合にはClass[i][1]は未だない)、分類後のカットパターンリストClass(表4参照)のうち、Class[i]の第1行目の行、すなわち、Class[i]の代表カットパターン(m',P')を示し、「l'1」は、Class[i]の代表長さを示す(表4参照)。
【0057】
例えば、Class[i][1]は、表4でいえば、Class[1][1]がClass[1]の(5486,(5430))を示し、Class[2][1]がClass[2]の第1行目の(6096,(4286,1790))を示し、…、Class[18][1]がClass[18]の第1行目の(6096,(2920,2752))を示す。D103においては、パラメータiは、「クラス番号iで示される全てのカットパターンリストClass」と比較をするという意味(D103の処理によれば、1≦∃i≦cnとされていることで、iが取り得る最大値が既作成のClass番号の末尾番号となることがわかる)で用いられる。
【0058】
(D103の条件1)「m=m'」は、カットパターンリストPLの分類対象となる行の原資材長さm(表3参照)と、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターンの原資材長さm'(表4参照)とが等しいことを要することを意味する。換言すれば、「m=m'」は、分類済みのカットパターンリストClass[i]に新たな行(カットパターン)を追加する場合には、原資材が同じ長さのものであることを要すること、逆に言えば、原資材の長さが異なるクラスしか存在しない場合には、新たなクラスが生成され、この新たなクラスに分類されることを意味する。「m=m'」の条件を導入したのは、後述する探索プログラム(H100)において、出力結果の最適性を保証しつつ探索範囲を限定し、演算効率を高めるためである。
従って、m=m'である場合には、他の「D103の条件」を満たすことで、該当する既存Classに新たな行が追加され、既存Classに分類される(D104)。一方、すべての既存クラスにおいてm≠m'である場合には、新たなClassが生成され、その生成されたClassの第1行目に行が代表カットパターンとして追加される(D105)。
【0059】
(D103の条件2)「n≦n'」は、カットパターンリストPLの分類対象となる行のカットパターン(m,P)に含まれる部材の全本数nが、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターン(m',P')に含まれる部材の全本数n'以下であることを要することを意味する。尚、分類対象となっているPLのカットパターン(m,P)は、(m,(l1,…,ln))、比較対象となっている既存Classのカットパターン(m',P')は、(m',(l'1,…,l'n'))で表されるため、n,n'がそれぞれの部材の全本数をも表すことは明らかである。
換言すれば、「n≦n'」は、既存Class[i]に新たな行を追加する場合には、切り方Pを構成する本数が既存Classの代表カットパターンの切り方P'を構成する本数以下であることを要すること、逆に言えば、切り方Pを構成する本数が代表カットパターンの切り方P'を構成する本数より多いようなClassしか存在しない場合には、新たなClassが生成されることを意味する。「n≦n'」の条件を導入したのは、出力結果の最適性を保証しつつ探索範囲を限定し、演算効率を高めるためである。
【0060】
(D103の条件3)「l1=l'1」は、カットパターンリストPLの分類対象となる行のカットパターン(m,P)に含まれる代表長さl1が、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターン(m',P')に含まれる代表長さl'1と等しいことを要することを意味する。
換言すれば、「l1=l'1」は、既存Class[i]に新たな行を追加する場合には、追加される切り方Pの代表長さl1がClass[i]の代表カットパターンの切り方P'の代表長さと同じことを要すること、逆に言えば、切り方Pの代表長さが代表カットパターンの切り方P'の代表長さと異なるようなClassしか存在しない場合には、新たなClassが生成されることを意味する。「l1=l'1」の条件を導入したのは、切り方の代表長さの長いカットパターンを優先的に探索することで、演算効率を高めるためである。
【0061】
そして、「D103の条件」を全て満たすと判断された場合には(D103:YES)、D104に進み、既存Class[i]の末尾に分類対象となっているカットパターン(m,P)が追加される。その後、D105に進み、ループ脱出条件(すなわち、カットパターンリストPLの全行について分類分けを終了するという条件)を満たすまで、D102の処理に戻って上記処理が行われる。
また、「D103の条件」を一つでも満たさないと判断された場合には(D103:NO)、D106に進み、クラス番号を示すカウンタcnがインクリメントされるとともに、新たな「分類後のカットパターンクラスClass[cn]」が生成され、そこに、分類対象となっているカットパターン(m,P)が新たなClassの代表カットパターンとして追加される。その後、D105に進み、カットパターンリストPLの全行についてクラス分類が終了するまで、D102の処理に戻って、D102〜D105のループ処理が行われる。
【0062】
以上の処理により、B104においては、B103で作成されたカットパターンリストPLが分類分けされた「分類後のカットパターンリストClass」が得られる。カットパターンリストPLが既にC102の条件及びC103の条件によりソートされているため、分類後のカットパターンリストClassは、各カットパターン(m,P)が代表長さに基づいて降順にソートされたものとなり、各カットパターン(m,P)を構成する切り方Pも降順にソートされたものとなる。
表4は、B104の処理によって作成される分類後のカットパターンリストClassの一例(p=14の場合)を示す。その後、B105の処理に進む。
【0063】
【表4】
【0064】
(B105〜B109:分割ポイント判定処理、長部材リストCLL及び短部材リストCLS作成処理、カットパターンリスト作成処理、カットパターンリスト分類処理の概要)
B105においては、「ある種類数(1又は2以上の種類数)のクラスを用いてある長さの部材を必要本数切り出す」のに何通りあるかが重複組合せの理論によって求められ(部材リスト分割プログラムB100においては、#(p)Hrpのように示す記号が重複組み合わせの記号)、これを、必要な各部材毎に求め、各部材毎の重複組み合わせの数を全て掛け合わせたもの(#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp)が、切り出し方の総数(=treesize(p,Class))として求められ、その総数が所定の閾値以上か否かが判断される(B105)。ここで、treesize(p,Class)は後述する最適解探索プログラムH100における全探索のサイズを見積もるための概算値を意味しており、「所定の閾値」とは、現実的な時間内で探索が可能な限界サイズを示す。「所定の閾値」は、1014〜1016の範囲が望ましく、B105では1015としたが、計算機の性能に応じて調整すればよい。
【0065】
そして、B105において、treesize(p,Class)が所定の閾値未満である場合(B105:<)には、B101に戻ってpがインクリメントされ、B101〜B106のループ処理が再び行われる。B101〜B106のループ処理は、B105において、treesize(p,Class)が所定の閾値以上である(B105:≧)と判断されるまで行われる。
【0066】
ここで、B105においてtreesize(p,Class)≧1015と判断された場合に、カットパターンリストPLの第1行目〜第何行目までが長部材となり、第何行目〜第size(CL)行目までが短部材とされるかについて説明する。B105においてtreesize(p,Class)≧1015との判断により、「第1行目〜第p行目までを長部材とすると、演算量の目安となるtreesize(p,Class)の値が所定値を超過することが判明する」ため、B107において、部材リストCLの第1行目〜第(p-1)行目が長部材として長部材リストCLLにコピーされ、部材リストCLの第p行目〜第size(CL)行目までが短部材として短部材リストCLSにコピーされる(B107)。
【0067】
表5は、B107における処理の結果の一例を示す。すなわち、表1の原資材リストMLを用いて表2の部材リストCLの各部材を切り出す場合には、直近のB103やB104で求めたカットパターンリストPLや分類後のカットパターンリストClassを用いて演算すると、p=15でB105の脱出条件が満たされ、B107の処理がなされ、その結果、表5の長部材リストCLLと短部材リストCLSが得られる。
【0068】
【表5】
【0069】
そして、B108及びB109においては、B103及びB104と同様にカットパターンリストPL(表6参照)及び分類後のカットパターンリストClass(表7参照)が作成し直され、A104以降の処理に供される。
表6は、表5に示す長部材リストCLLについて、B108において作成されるカットパターンリストPLを示す。尚、表6作成時のパラメータp値は、表3作成時のパラメータp値と異なるが、表6は表3と同一である。これは、B104においては部材リストCLの第1行目〜第p行目が、B107においては部材リストCLの第1行目〜第(p-1)行目が、それぞれ、長部材リストCLLに格納されるためである。
【0070】
【表6】
【0071】
表7は、表6のカットパターンリストPLについて、B109において作成される分類後のカットパターンリストClassを示す。尚、表7作成時のパラメータp値は、表4作成時のパラメータp値と異なるが、表7は表4と同一である。これは、B104においては部材リストCLの第1行目〜第p行目が、B107においては部材リストCLの第1行目〜第(p-1)行目が、それぞれ、長部材リストCLLに格納されるためである。
【0072】
【表7】
【0073】
以下に、B105〜B109の処理を更に詳細に説明する。
(B105:分割ポイント判定処理の詳細)
B105において用いるtreesize(p,Class)について説明する。パラメータpは、B101におけるパラメータpと同義であるが、確認すると、部材クラスCLの第1行目〜第p行目(すなわち、長部材リストCLLに格納された方)が処理対象であることを示す。そして、分類後のカットパターンリストClassとしては、直近のB104で作成されたものが用いられる。
【0074】
次に、「treesize(p,Class)=#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp,
ここで,1≦k≦pについて(lk, rk) = CL[k]とすると,
rk = 0のとき
#(k) = 1
rk > 0のとき
#(k) = tk - hk + 1
ここで,(hk, tk) = range(lk, Class)」について説明する。
【0075】
まず、パラメータkは、1≦k≦p、すなわち、部材リストCLの第1行目〜第p行目を意味する。また、CL[k]は、部材リストCLの第k行目を示し、(lk,rk)=(第k行目の部材長さ,第k行目の必要本数)を示す。従って、#(k)Hrkにおける右側のrkは、「部材リストCLの第k行目の長さlkの部材の必要本数」を示す。#(k)Hrkにおける左側の#(k)は、部材リストCLの第k行目の長さlkの部材を切り出すために用いられる、直近のB104で作成された分類後のカットパターンリストClass(表4参照)を参照して求められる、「クラスの種類数」を示す。従って、#(k)は、直近のB104で作成された分類後のカットパターンリストClassを参照して、「第k行目の必要本数rk=0のときは、#(k)=1(重複組合せで考慮する必要がなく、計算上の理由から)とされ、第k行目の必要本数rk>0のときは、#(k)=tk-hk+1」とされる。
【0076】
ここで、「#(k)=tk-hk+1」が何故「クラスの種類数」を示すのかについて説明する。(hk,tk)=range(lk,Class)により求められる「hk,tk」は、分類後のカットパターンリストClassの第1行目から順番に、すなわち、Class[1]、Class[2]…と順番に見たときに、「hk」が「長さlkが代表長さとして先頭(head)に出てくるClass番号」を意味し、「tk」が「長さlkが代表長さとして末尾(tail)に出てくるClass番号」を意味する。よって、(#k)がクラスの種類数となる。
【0077】
そして、「#(k)Hrk」は、いわゆる「重複組み合わせ」の総数を意味し、「第k行目の長さlkの部材を#(k)種類のクラスから重複を許してrk個を切り出すときの切り方の総数」を意味する。従って、1≦k≦pである場合に、「treesize(p,Class)=#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp」の意味するところは、「部材リストCLの第1行目〜第p行目までの各長さの部材の切り方の組合せ数(重複組み合わせを用いた切り方の組合せ数)を乗算したもの、すなわち、「部材リストCLの第1行目〜第p行目までの切り方の重複組合せ総数」となる。そして、treesize(p,Class)の値は、後述する最適解探索プログラムH100における演算量を判断する目安となり、上限が1014〜1016である場合にその演算量を実用的な範囲に収めることができる。
【0078】
(B107:長部材リストCLL及び短部材リストCLS作成処理の詳細)
B105において所定の閾値以上であると判断された後(B105:≧)、B107においては、その時点でのp値ではtreesize(p,Class)が所定の閾値を超えてしまうので、再度、長部材リストCLL及び短部材リストCLSが作成し直される。このため、部材リストCLの第1行目〜第(p-1)行目が長部材リストCLLとして作成(すなわち、コピー)され、部材リストCLの第p行目〜第size(CL)行目が短部材リストCLSとして作成(すなわち、コピー)される。
【0079】
表5は、長部材リストCLL及び短部材リストCLSの一例を示す。この例は、表2の部材リストCLについて、B101〜B107を実行した結果得られたものである。
表2の部材リストCLについて、部材リスト分割プログラムB100をpを1からインクリメントさせながら実行させると、B101〜B106のループ処理において、p=14の場合には、ループ脱出条件を満たすまでの一過程として、B103において表3のカットパターンリストPLが作成されるとともに、B104において表4の分類後のカットパターンリストClassが作成される。しかしながら、p=14の場合には、B105におけるループ脱出条件が満たさない。
【0080】
従って、p=14からループで戻り、p=15となった時のB102において、p=14の時に作成された表3のカットパターンリストPL及び表4の分類後のカットパターンリストClassにp=15の場合のものが上書きされ、p=14のときのカットパターンリストPL(表3参照)や分類後のカットパターンリストClass(表4参照)が破棄される。そして、B103やB104においては、p=15とした場合におけるカットパターンリストPLや分類後のカットパターンリストClassが作成された状態で、B105においてループ脱出条件が満たされる。従って、B105においては、p=15でループを脱出させると判断されるがp=15のままでは先ほどのtreesize(15,Class)が所定の閾値を超えるため、部材リストCLの第1行目〜第14(=p-1)行目が長部材、第15(=p)行目〜第19(=size(CL))行目が短部材に分割される(B107)。
そして、部材リストCLの第1行目〜第14行目が長部材リストCLLとして作成(コピー)され、部材リストCLの第15行目〜第19行目が短部材リストCLSとして作成(コピー)される(B107)。
【0081】
(B108:カットパターンリストPL作成処理の詳細)
B108においては、カットパターンリスト作成プログラムC100が呼び出され、分割ポイント(p=15)で分割した長部材リストCLL(本実施形態では、部材リストCLの第1行目〜第14行目)について、カットパターンリストPLが再度生成される。その詳細は、B103における説明と同様であるため、その説明をもってこれに代える。
【0082】
(B109:カットパターンリスト分類処理の詳細)
B109においては、カットパターンリスト分類プログラムD100が呼び出され、分割ポイント(p=15)で分割した長部材リストCLL(本実施形態では、部材リストCLの第1行目〜第14行目)について、B108で作成されたカットパターンリストPLの各行が再度分類される。その詳細は、B104における説明と同様であるため、その説明をもってこれに代える。
【0083】
(A104〜A110)
B109の処理が終わると、A104〜A110のループ処理に進む。A104及びA105においては、パラメータの初期設定が行われる。A105においては、A103で分割ポイントとされたパラメータpの値がパラメータp'にマーキングされる。後述するA109においても部材リスト分割処理がなされるが、そこで求められる新たな分割ポイントの基準となるパラメータpの値と比較し、同一値である場合に真の分割ポイントとして確定させ、A104〜A110のループ処理を脱出させるためである。
【0084】
(A106:部分最適解計算処理)
A106においては、部分最適解計算部プログラムE100が呼び出され、その実行により、長部材リストCLLの各長部材を必要本数切り出す部分的な最適解として[原資材長さ,切り方]のフィールドを備えた最適解Resultが求められる。尚、ここで、部分最適解という名称を用いているのは、A106が近似解法(E101)と最適解法(E102)とを組み合わせたものであり、しかも、部材リストCLの一部について最適解法を適用しているためである。更に詳しく述べれば、部分最適解計算処理は、グリーディ法を応用したE101の初期解生成処理(近似解法)、分枝限定法を応用したE102の最適解探索処理(最適解法)から構成され、E101の初期解生成処理により一応の目安としての初期解(Result)が求められ、その上で、E102の最適解探索処理により最適解(Result)が求められる。これら両者をResultとしているのは、初期解よりも破材長さが少ない、コスト安であるという条件を満たした場合には、E102で求めた最適解が初期解に上書きされてResultとされるが、そのような条件を満たさない場合には、E101の初期解がResultとされるためである。
【0085】
尚、E101の初期解生成処理は、必須の構成ではなく、これを行わずにE102の最適解探索処理を行ってもよい。E101の初期解生成処理の存在意義は、一応の目安となる初期解及びコストが求まること、並びに、初期解及びコストを求めた上でE102の最適解探索処理を行うと初期解でのコストとの比較により余計な演算を打ち切ることができ、演算処理を効率化できることにある。
【0086】
(E101:初期解生成処理)
E101の初期解生成処理においては、初期解生成プログラムF100が呼び出され、その実行により、原資材リストMLと長部材リストCLLから初期解([原資材長さ,切り方]のフィールドを備えたカットパターンリスト)が求められ、Resultに格納される。ここでは、グリーディ法を応用して長部材リストCLLに対する近似解が高速に求められる。
【0087】
F101〜F105のループ処理は、長部材リストCLL(表5参照)に切り方が定まらずに部材が残っている限り(要するに必要本数のフィールドが0超(r>0))、繰り返し実行される。そして、F102においては、長部材リストCLLがCutlistにコピーされるとともに(F103のグリーディ法で使用するための準備であり、F101〜F105のループ処理でループする度に最新のCutlist(F104で切り方が決まったものは長部材リストCLLから削減されるから)がF103のグリーディ法に渡される)、トータルコストを示すパラメータmincostに初期設定として0が代入される。
【0088】
(G100:グリーディ法)
F103においては、グリーディ法プログラムG100が呼び出され、グリーディ法を用いて、できるだけ原資材の余りが少なく、かつ、単位長さ当たりのコストが安くなるようにカットパターン(m,P)=[原資材長さ,切り方]が求められる。
【0089】
G101においては、最小コストを表すパラメータminに初期設定として原資材の最高コストが代入される。そして、G102〜G106のループ処理においては、原資材リストMLの全ての原資材長さm(原資材リストMLの第1行目〜最終行を対象として順番に、すなわち、表1の場合、第1巡目のループではm=2438の原資材が処理対象となり、第2巡目のループではm=3048の原資材が処理対象となり、最後のループではm=6096の原資材が処理対象となる)について、G103〜G105の処理が行われる。
そして、G103においては、当該原資材長さmを用いた場合における「G103の条件」を満たす切り方P(=l1,…,ln)が求められる。ここで、「G103の条件」は以下の通りである。
【0090】
<G103の条件>
以下の(1)、(2)の条件を満たすものの中で、sum(P)の値が最大であることを要する。
(1)possible(P,Cutlist)が真であること。
(2)sum(P)≦mを満たすこと。
ここで、possible(P,Cutlist)が真であるということは、分類後のカットパターンリストClassの各カットパターン(m,P)の切り方Pを構成する各長さ(l=l1,…ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「Cutlistの当該部材長さ(l=l1,…ln)の各必要本数以下」であることを要することを意味する。不要な部材をカットしないためである。
【0091】
sum(P)≦mを満たすということは、切り方Pを構成する各長さ(=l1,…ln)を加算した値(=l1+…+ln)が当該原資材長さm以下であることを要することを意味する。切り方を加算すると当該原資材長さmを超える切り方Pはあり得ないため、これを除外するためである。
そして、これらの条件を満たすものの中でsum(P)の値が最大であるということは、当該原資材m(原資材長さmの長さである原資材をいう、以下同じ)において発生する破材が最も少ないことを意味し、破材長さの抑制、コストダウンに寄与することとなる。
【0092】
そして、G104においては、当該原資材mを用いて計算されたG103の切り方Pを用いた場合における原資材mの単位長さ当たりのコストが求められ、その値がminよりも小さいか否かが判断される。第1巡目のループでは初期設定としてminには原資材の最高コストが代入されているため、必ずG105を介してG102に戻ってG103〜G105が実行される。しかし、ループの第2巡目以降におけるG104においては、前回ループ以前における最も安い「原資材mの単位長さ当たりのコストmin」と比較される。従って、G104において、そのminよりも更に安いと判断されれば(G104:YES)、G105においては、minに新たな「原資材mの単位長さ当たりのコスト(=price(m)/sum(P))」が代入されるとともに、当該原資材長さmがパラメータmpに、直近のG103で計算された切り方PがパラメータPpに代入される。
以上の処理がCutlistを対象に全ての原資材mを用いて行われると、G106でループから脱出する。グリーディ法プログラムG100の実行により、発生する破材が最小で、単位長さ当たりのコストも最小のカットパターン(mp,Pp)、すなわち、F102での最新のCutlistに対する唯一の(mp,Pp)=[原資材長さ,切り方]が得られる。そして、F104に進む。
【0093】
F104においては、Resultに(mp,Pp)が追加される。下記の表8の場合、第1行目の(5486,(2752,2724))は、F101〜F105の第1巡目のループ処理の実行により(mp,Pp)として追加されたものである。更に、F104においては、パラメータmincostに原資材コストprice(mp)として、5486mmのコスト5486円が加算される。また、Resultに追加されたカットパターン(mp,Pp)を構成する切り方(Pp=l1,…,ln)は、長部材リストCLLの長部材を切り出す切り方の初期解として採用されるものとするため、長部材リストCLLの各部材長さの各必要本数から各々1デクリメントする(r=r-1)処理がなされる。例えば、表8の場合、第1行目の(5486,(2752,2724))がF101〜F105の第1巡目のループ処理の実行により(mp,Pp)として追加されるため、表5の長部材リストCLLの2752mmの必要本数が2とあるのが1にデクリメントされ(r=r-1により)、同じく2724mmの必要本数が5とあるのが4にデクリメントされる。
【0094】
そして、F105においては、F104で切り方として採用される初期解が決まって必要本数が徐々にデクリメントされる過程において、長部材リストCLLの全ての部材長さの必要本数が0になったか否かが判断され、0超ならば切り方が決まっていない長部材が残っているためF101に戻る。すなわち、長部材リストCLLの全ての長部材について採用すべき切り方、すなわち、初期解が決まるまで、F101〜F105のループ処理が実行される。
その結果得られる初期解Resultを表8に示す。表8は、初期解生成プログラムF100を本実施形態における原資材リストML(表1参照)、長部材リストCLL(表5参照)を用いて実際に実行した結果であり、各行がカットパターン(m,P)=[原資材長さm,切り方P]のフィールドを備える。表8の各行はF101〜F105のループ処理を一巡する毎に、一行毎作成される。
【0095】
【表8】
【0096】
F106〜F108のループ処理においては、長部材リストCLLの必要本数を元に戻す演算が行われる。これは、Result中のl(=l1,…,ln)が何本あるかをカウントすることにより行われる。尚、ここでは、パラメータmincostには直近のF104で求めたトータルコストが格納され、この値が、後述する最適解探索プログラムH100での累積コストたるcostと比較される(H110)。さて、F106〜F108のループ処理により長部材リストCLLが表5に示す初期状態に戻されると、F108でループから脱出し、E102に進む。
【0097】
(H100:最適解探索プログラムの概要)
E102においては、最適解探索プログラムH100が呼び出され、その実行により、分類後のカットパターンリストClassに基づいて最適解法により最適解が計算され、上記F100の初期解生成処理により得られたmincostよりもコストcostが安いと判断される場合に、その最適解がResultに格納される。
最適解探索プログラムH100においては、カットパターンリスト分類プログラムD100の実行により得られたクラスを用いて、各カットパターンが探索ノード(u,v)=[クラス番号,カットパターン特定番号]、すなわち、(u,v)=[クラス番号,当該クラスの何行目かを示す行番号]とすることにより特定される。
【0098】
例えば、表7の各カットパターンは、探索ノード(u,v)を用いて、
Class[1]の(m,P)=(5486,(5430))が(u,v)=(1,1)で表され、
Class[2]の第1行目の(m,P)=(6096,(4286,1790))が(u,v)=(2,1)で表され、
Class[2]の第2行目の(m,P)=(6096,(4286,1776))が(u,v)=(2,2)で表され、
Class[18]の第1行目の(m,P)=(6096,(2920,2752))が(u,v)=(18,1)で表され、
Class[18]の第2行目の(m,P)=(6096,(2920,2724))が(u,v)=(18,2)で表され、
Class[18]の第3行目の(m,P)=(6096,(2920,2648))が(u,v)=(18,3)で表される。
【0099】
そして、最適解探索プログラムH100では、探索ノード及びこれを格納した探索リストを用いて、最適解が求められる(分枝限定法)。ここで、カットパターンそのものではなく、探索ノードを用いたのは、系統的な探索を行う上ではカットパターンを番号で管理する方が容易であり、演算量の縮小による演算効率向上も見込めるからである。
【0100】
表9は、最適解探索プログラムH100を表5の長部材リストCLL、表7の分類後のカットパターンリストClassに適用して得られた最適解Resultを示す。
【0101】
【表9】
【0102】
表10は、最適解Resultが得られた後、長部材リストCLLの必要数量がすべて0にされた長部材リストCLL(H115)を示す。
【0103】
【表10】
【0104】
(H100:最適解探索プログラムの詳細)
H101においては、累計コストを示すパラメータcostに初期設定として0が代入されるとともに、探索リストSが生成される。ちなみに、後述から明かであるが探索リストSを構成する探索ノード(u,v)は、[当該クラス番号,カットパターン特定番号]のフィールドを備えてカットパターンを特定するとともに、[当該クラス番号,カットパターン不存在表示]のフィールドを備えて当該カットパターン不存在を特定する。
H101においては、また、クラス番号を示すパラメータuに1が代入される。表7でいえば、そのClass[1]からカットパターンを探索するという意味である。これにより、H102の探索プログラムI100を呼び出す準備ができ、H102に進む。
【0105】
H102においては、探索プログラムI100が呼び出される。
まず、I101においてはClass[1]を構成する全てのカットパターン(m,P1)…(m,Pn)のうち、possible(Pk,CLL)を満たすk(1≦k≦n)が存在するか否かが判断される。すなわち、「所定のクラス(Class[1])に属するカットパターンの中に余分な部材を出さないカットパターンが存在するか否か」が判断される。具体的には、「クラス番号1に分類されている[原資材長さ,切り方]を適用したときに長部材リストCLLの必要本数を超えて部材を切り出さないそのような[原資材長さ,切り方]が存在するか否か」、換言すれば、「カットパターン中の各切り方の各本数が長部材リストCLLの当該長さの各必要本数以下であるか否か」、更に換言すれば、「カットパターンに従って(原資材から)部材を切り出したときに、長部材リストCLLの必要本数を超えて不要な部材や余分な部材を切り出さないか否か」が判断される。
【0106】
I101の条件を満たす場合には(I101:YES)、I102に進み、Class[1]のうちI101の条件を満たす最小(若い番号)のk、すなわち、クラス番号1の中で優先順位が高い第k行目のカットパターン[原資材長さ,切り方]が採用され、(m,P)に代入される。そして、パラメータcostにClass[1]の第k行目で使用する原資材mのコストが加算される。更に、後述するバックトラックプログラムJ100の実行有無の判断フラグとなるstateにforward(バックトラックを行わず前方探索を続けるを意味)が代入される。
従って、Class[1][1](クラス1の第1行目)のカットパターンを用いて切り出すと余分な部材(不要な部材)が出る場合には、不要な部材が出ず、かつ、1≦k≦nの中で最小の第k行目のカットパターンが選ばれる。
【0107】
このようにして、I102においては、長部材リストCLLで必要とされる部材のいくつかの切り方として、クラス番号1の第k行目で規定されるカットパターン[原資材長さ,切り方]を採用することが暫定的に決められる。その後、I103〜I105のループ処理へ進むと、そのカットパターンに含まれる各長さの部材全ての必要本数を長部材リストCLLから1デクリメントする処理(I104)がなされる。尚、カットパターンの中に同一長さの部材が複数ある場合には、同一長さが複数存在するので当該長さについては当該複数回数分デクリメントされる。
そして、I107においては、探索リストSに(1,1)=(Class[1]のクラス番号1,Class[1]の第1行目の行番号1)=[当該クラス番号,カットパターン特定番号]が追加される。
表7のClassについては、H101〜H102が実行されると、(u,v)=(1,1)が探索リストSに追加される。
【0108】
一方、I101の条件を満たさない場合(I101:NO)、すなわち、Class[1]を構成するカットパターンで部材を切り出すとその時点における長部材リストCLLでは不要な部材まで切り出してしまう場合には、I106に進み、クラス番号1の行番号を示すパラメータvに0がカットパターン不存在表示として代入される。このことは、Class[1]には適当なカットパターンが存在しないこと、すなわち、Class[1]に属するカットパターンを用いて部材を切り出すと、余分な部材が出てしまうことを意味する。また、フラグstateにはバックトラックプログラムJ101の実行を意味するbackが代入される。そして、I107においては、探索リストSに(u,v)=(1,0)が追加される。v=0であっても探索リストSに追加するのは、その後、H106のバックトラックでこれまでの演算結果が一つ戻されるからである(J101のpop(S)、J102:=)。そして、その上でカットパターンを探索すべきクラス番号uが代表長さが同じ別のクラスになるように1インクリメントされた(H108)上で探索(H109)される。
以上のようにして、I105又はI106を実行した後、I107を実行し、H103〜H112のループ処理に進む。
【0109】
先ほどのH102の探索プログラムI100では、長部材リストCLLの切り方として「どのクラスの何行目のカットパターン」を採用するかが決められるが、H103〜H112のループ処理においても、引き続き、長部材リストCLLに残っている長部材に採用すべきカットパターンが決められる。
【0110】
(H103〜H112のループ処理及びH115の処理の概要)
ここで、H104の説明を行う前にH103〜H112のループ処理及びH115の処理について簡単に説明する。
H103〜H112のループ処理の脱出条件は探索リストSが0(空)になることであるが、以下に説明するように、このループでは、
(1)長部材リストCLLが空になるまで、探索リストSに(u,v)、すなわち、[当該クラス番号u,カットパターン特定番号v]=[クラス番号u,当該クラス番号の第k行目の行番号v]が追加(I107)され(この間にH106のバックトラック等を介するときはバックトラックの間は探索リストSの探索ノードが削減され又は削減され続け、優先度の低いクラスから探索されることはある)、その後は、
(2)H106のバックトラックを介して、探索リストSの削減と長部材リストCLLへの戻しを行いつつ、カットパターンを探索すべき優先度の低いクラスが存在しないかを判定し(探索すべき優先度の低いクラスが存在しない場合にはH107:≧)、そのような優先度の低いクラスが存在する場合には(H107:<)、再度長部材リストCLLが空になるまで、探索リストSに(u,v)を追加しながら、コストや破材長さを抑えることができるカットパターンを探索しつつ、
(3)最終的には、カットパターンを探索すべき優先度の低いクラスが全く存在しない(H107:≧)という判断がされ続ける状態になり、結果、探索リストSが0(空)になるまで探索ノードが全て削減され(J101)、探索リストSが空になる。
【0111】
従って、H103〜H112のループ処理においては、探索リストSが空になる前に長部材リストCLLに残っている部材がなくなる(必要本数が全て0、すなわち、長部材リストCLLの部材全てのカットパターンを特定する探索ノードが探索リストSに追加されている状態)タイミングが少なくとも1回はあるが、そのタイミングにおける累積コストcostが従前に求めたmincost(直近のF104又は直近のH110で求めたmincost)より安い場合には、探索リストSを構成する全探索ノードによって特定される[原資材長さ,切り方]が最適解としてResultに追加(コピー)される(H111)。逆の言い方をすれば、最適解探索プログラムH100を実行しても初期解生成プログラムF100で求めた初期解としてのResultよりもコスト抑制可能な切り方が存在しない場合には、初期解としてのResultが最適解探索プログラムH100においても結果的に維持される。
もっとも、初期解探索プログラムF100を実行しないようにしてもよい。この場合には、mincostには十分大きな値を最初から設定しておくことにより、最適解探索プログラムH100で探索しうる中で最低コストを実現するResultが必ず得られる。
以上のH101〜H112の処理により、長部材リストCLLのカットパターンが全て暫定的に定まる。従って、H115においては長部材リストCLLの各部材の各必要本数に全て0が代入される。
【0112】
(H104)
さて、話を元に戻す。次に、H104においては、(u,v)、すなわち、(Class[u]のクラス番号u,Class[u]の第k行目の行番号v)に探索リストSの末尾の探索ノードが代入される。どのClassを探索するかの基準にするためである。
【0113】
次に、H105に進むと、
(1)state=forward、すなわち、フラグstateがforward(前方探索)である、
(2)∃(l,r) in CLL, r>0、すなわち、長部材リストCLLの必要本数が0超である部材(すなわち、切り方が決まっていない長部材)が存在する、
(3)cost<mincost、すなわち、累積コストcostが直近のF104又はH111で求めたmincost(初期解探索プログラムF100が実行されない場合には、十分に大きな値が設定されたmincost)よりも小さい、
という条件が全て満たされるか否かが判断される。
【0114】
(H105:YES)
これらの条件が全て満たされると判断された場合(H105:YES)には、H113に進む。H113においては、まず、longest(CLL)が実行されることにより、長部材リストCLLに残っている切り方を決めるべき部材(すなわち、必要本数rが0超の部材)のうち、最長部材がどれかが求められる。そして、次に、range(longest(CLL), Class)が実行されることにより、その最長部材長さが代表長さl1であるClassが第何クラスh〜第何クラスtに存在するかが求められる。すなわち、h(headの略)、t(tailの略)で、hにはその最長部材長さが代表長さl1である先頭のクラス番号が代入され、tにはその最長部材長さが代表長さl1である末尾のクラス番号が代入される。
【0115】
次いで、max(u,h)が求められる。max(u,h)は、uとhのうち値が大きい方を返す(同じ値の場合にはその値を返す)という関数である。max(u,h)=uとなる場合は、長部材リストCLLに残っている切り方を決めるべき部材のうち、最長部材が既に探索対象(H102、H114、H109のいずれか)としたクラス番号uの代表長さl1と同じものがまだ残っている場合である。一方、max(u,h)=hとなる場合は、長部材リストCLLに残っている切り方を決めるべき部材のうち、最長部材が既に探索対象(H102、H114、H109のいずれか)としたクラス番号uに残っていない場合である(前回の最長部材は既に暫定的に切り方が決まってしまったため長部材リストCLLから削減されている)。従って、H113の処理により、長部材リストCLLに残っている切り方を決めるべき部材に採用すべきカットパターンを、長い部材を備えるクラスに属するカットパターンから優先的に探索することが決められる。そのようなクラス番号uとして、長部材リストCLLに残っている切り方を決めるべき最長部材が属するクラス番号が代入される(H113)。
【0116】
H114においては、探索プログラムI100が呼び出される。
まず、I101においてはClass[u]を構成する全てのカットパターン(m,P1)…(m,Pn)のうち、possible(Pk,CLL)を満たすk(1≦k≦n)が存在するか否かが判断される。すなわち、「所定のクラスに属するカットパターンの中に余分な部材を出さないカットパターンが存在するか否か」が判断される。具体的には、「クラス番号uに分類されている[原資材長さ,切り方]を適用したときに長部材リストCLLの必要本数を超えて部材を切り出さないそのような[原資材長さ,切り方]が存在するか否か」、換言すれば、「カットパターン中の各切り方の各本数が長部材リストCLLの当該長さの各必要本数以下であるか否か」、更に換言すれば、「カットパターンに従って(原資材から)部材を切り出したときに、長部材リストCLLの必要本数を超えて不要な部材や余分な部材を切り出さないか否か」が判断される。
【0117】
I101の条件を満たす場合には(I101:YES)、I102に進み、Class[u]のうちI101の条件を満たす最小(若い番号)のk、すなわち、クラス番号uの中で優先順位が高い第k行目のカットパターン[原資材長さ,切り方]が採用され、(m,P)に代入される。そして、パラメータcostにClass[u]の第k行目で使用する原資材mのコストが加算される。更に、後述するバックトラックプログラムJ100の実行有無の判断フラグとなるstateにforward(バックトラックを行わず前方探索を続ける意味)が代入される。
従って、Class[u][1](クラスuの第1行目)のカットパターンを用いて切り出すと余分な部材(不要な部材)が出る場合には、不要な部材が出ず、かつ、1≦k≦nの中で最小の第k行目のカットパターンが選ばれる。
【0118】
このようにして、I102においては、長部材リストCLLで必要とされる部材のいくつかの切り方として、クラス番号uの第k行目で規定されるカットパターン[原資材長さ,切り方]を採用することが暫定的に決められる。その後、I103〜I105のループ処理へ進むと、そのカットパターンに含まれる各長さの部材全ての必要本数を長部材リストCLLから1デクリメントする処理(I104)がなされる。尚、カットパターンの中に同一長さの部材が複数ある場合には、同一長さが複数存在するので当該長さについては当該複数回数分デクリメントされる。
そして、I107においては、探索リストSに(u,v)=(Class[u]のクラス番号u,Class[u]の第k行目の行番号v)=[当該クラス番号,カットパターン特定番号]が追加される。
表7のClassについては、H114が実行されると、例えば、(u,v)=(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(2,1),(2,1),(4,1),(6,1),(6,1),(8,1),(8,1),(10,1),(12,1),(12,0)…等が探索リストSに追加される。
【0119】
一方、I101の条件を満たさない場合(I101:NO)、すなわち、Class[u]を構成するカットパターンで部材を切り出すとその時点における長部材リストCLLでは不要な部材まで切り出してしまう場合には、I106に進み、クラス番号uの行番号を示すパラメータvに0がカットパターン不存在表示として代入される。このことは、Class[u]には適当なカットパターンが存在しないこと、すなわち、Class[u]に属するカットパターンを用いて部材を切り出すと、余分な部材が出てしまうことを意味する。また、フラグstateにはバックトラックプログラムJ101の実行を意味するbackが代入される。そして、I107においては、探索リストSに(u,v)=(Class[u]のクラス番号u,0)がプッシュされる。v=0であっても探索リストSにプッシュするのは、その後、H106のバックトラックでこれまでの演算結果が一つ戻されるからである(J101のpop(S)、J102:=)。そして、その上でカットパターンを探索すべきクラス番号uが代表長さが同じ別のクラスになるように1インクリメントされた(H108)上で探索(H109)される。
【0120】
以上のようにして、I105又はI106を実行した後、I107を実行し、H110に進む。
H110においては、
(1)長部材リストCLLの全ての部材の必要本数が0であり(0である場合は、長部材リストCLLの全ての部材のカットパターンが探索ノードによって特定されている状態である)、かつ、
(2)その時点の最適解探索プログラムH100における累計コストを意味するパラメータcostが最低コストを示すパラメータmincost(直近のF114又はH111で求めたmincost)よりも安いと判断されると(H110:YES)、H111に進む。
【0121】
そして、H111においては、最適解を格納するリストResultが生成される(これまでの初期解としてのResultが破棄される)。また、最低コストmincostに累計コストcostが代入される。更に、これが重要であるが、分類後のカットパターンリストClass[i][j]、すなわち、探索リストSの探索ノード(i,j)=(クラス番号i,当該クラス番号iの行番号j)=[当該クラス番号,カットパターン特定番号]によって特定されるカットパターン[原資材長さ,切り方]が生成されたResultに格納される。
【0122】
(H105:NO)
一方、H105に規定する条件が一つでも満たされない場合には、H106のバックトラックに進み、バックトラックプログラムJ100が呼び出される。ちなみに、H105に規定する条件が一つでも満たされない場合として、
(1-1)フラグstateがbackである場合のうち、直近で呼び出された前方探索の探索プログラム(H102、H114、H109のいずれか)において、対象とするClass[u]には適当なvがなかった場合(Class[u]に属するどのカットパターンを用いても長部材リストCLLでは不要な部材、余分な部材を切り出すことになる場合)(J102:=);
【0123】
(1-2)フラグstateがbackである場合のうち、直近で呼び出された後方探索のバックトラック(H106)において、対象とするClass[u]には適当なvが存在するもののそれより優先度が低いクラスに適用しうるカットパターンがなかった場合(J102:>)(補足すると、その後、H105でYESと判断されたところから前方探索が始まる、また、後方探索がずっと続き探索リストSが空になると既にResultにコピーされている探索ノードによって特定されるカットパターンが最適解となる);
(2)長部材リストCLLの全ての部材についての切り方が探索ノードによって特定されて、必要本数が全て0(r=0)になった場合;
(3)最適解探索プログラムH100における累計コストcostが最低コストmincost以上になった場合、が挙げられる。
【0124】
(H106〜H109)
さて、H106→J101においては、(u,v)、すなわち、[当該クラス番号,カットパターン特定番号]に探索リストSの末尾(直近、最新)の探索ノードが代入される。その上で、pop(S)により探索リストSが一つ前の状態に戻されるとともに、フラグstateにbackが代入される(以降stateにforwardが代入されるまでバックトラックにより後方から、探索可能な優先度の低い他のクラスの存在の有無が探索される)。
J102においては、J101で末尾にあった探索ノード(u,v)のvが0か否かが判断される。0の場合には(J102:=)、前回の探索(H102、H114、H109のいずれか)ではそのクラス番号uの中に適用しうるカットパターンが無かったことを意味するため(I101:NO)、何もせず(J101のpop(S)で一つ前の状態に戻っているため)、バックトラックプログラムJ100を抜ける。
【0125】
一方、J101で末尾にあった探索ノード(u,v)のvが0超の場合には(J102:>)、前回の探索(H102、H114、H109のいずれか)ではそのクラス番号uの中に適用しうるカットパターンが有り、その(u,v)によって特定されるカットパターンを構成する切り方が長部材リストCLLの必要本数からデクリメントされていることを意味する。
従って、そのデクリメントされたカットパターンについて、J103の累計コストを元に戻す処理及びJ104〜J106の必要本数を元に戻すループ処理が行われる。これにより、クラス番号uで示されるクラス以降のクラスに属するカットパターンから、長部材リストCLL(元に戻された必要本数を含む)に残っている部材に適用しうるカットパターンを探索可能な状態となる。
【0126】
尚、J103においては、具体的には、
(1)(m,P)には累計コスト及び長部材リストCLLを一つ前の状態に戻すために用いるカットパターンを示すClass[u][v]の[原資材m,切り方P]が代入されるとともに、
(2)累計コストcostには、そのコスト(=price(m))を減じたコストが代入されて累計コストが一つ前の状態に戻され、
J104〜J106のループ処理においては、具体的には、J103で規定したカットパターン(m,P)の切り方Pを構成する各長さの本数が1本ずつ長部材リストCLLの該当部材の必要本数に1インクリメントされる(要するに1本ずつ元に戻す)処理がなされ必要本数が一つ前の状態に戻される。
その後、H107に進む。
【0127】
(H107)
H107においては、longest(CLL)を実行することにより、H106で部材を元に戻した場合及び戻さない場合を含め、長部材リストCLLに残っている切り方を決めるべき部材(すなわち、必要本数が0超の部材)のうち、最長部材が求められる。そして、次に、range(longest(CLL), Class)が実行されることにより、その最長部材長さが代表長さl1であるClassが第何クラスh〜第何クラスtに存在するかが求められる。これにより、h(head)にはその最長部材長さが代表長さl1である先頭のクラス番号が代入され、t(tail)にはその最長部材長さが代表長さl1である末尾のクラス番号が代入される。
【0128】
(H107:<)
次いで、uとtとが比較される。u<tの場合(Class[u]とClass[t]とを比べたときに、代表長さが異なる場合、原資材が異なる場合等)には(H107:<)、これまで探索されなかった優先度の低いClassが後続クラスに存在する。そこで、その優先度の低いClassから長部材リストCLLに適用すべきカットパターンを探索すべく、探索すべきクラスを優先度の低いクラスに変更すべくu=u+1の処理がなされる。ここで、「優先度の低いクラス」について補足する。例えば、H113のクラス特定手法(uを決める手法)では、最長部材が属するクラスの先頭クラスを優先度の高い探索対象としたため、先頭クラス以外のクラスは、探索対象とはならない。そのため、u=u+1が優先度の低いクラスを探索対象とすることを意味する。
【0129】
そして、H109の処理に進み、探索プログラムI100が呼び出される。I101においては、H108で指定された新たなClass[u]の中から長部材リストCLLの必要本数を超えない最小の行番号vのカットパターン、すなわち、余分な部材を出さないカットパターンの存在の有無が判断され、vが見つかることにより、そのようなカットパターンが存在すると判断されると(I101:YES)、そのカットパターンの切り方と同じ長さの部材の必要本数が長部材リストCLLの必要本数から減じる処理がなされ、その新たな探索ノード(u,v)が探索リストSに追加される(I107)。
そして、H110に進むと、長部材リストCLLの部材の切り方が全て決まり、しかも、累積コストが最小である場合には、H111に進むが、そうではない場合(H110:NO)には、H103〜H112のループ処理の先頭に戻り、探索リストSが空になるまで、H103〜H112の処理が行われる。
【0130】
(H107:≧)
一方、u≧tである場合(Class[u]とClass[t]とが同じ場合等)には(H107:≧)、当該最長部材における探索対象となるクラスは優先度が高いクラスから優先度の低いクラスまで探索され尽くしたことを意味する。そこで、探索はなされず、H103〜H112のループ処理の先頭に戻る。
【0131】
ここで、補足すれば、H107でしばらく≧と判断され続ける状態(H105→H106→H107→H104→H105の繰り返し)が存在する。この状態が後方探索であり、探索可能な優先度の低いクラスが存在するか否かが長部材リストCLLに必要部材が1カットパターン毎に戻されつつ(J103〜J106)、判断される。そして、あるところでH107で<との判断がなされると、そこからまた前方探索が始まり、その後、いずれ後方探索が始まる。このような前方探索又は後方探索を行う過程において、長部材リストCLLの必要部材が全て0になったときに(H110)、その累積コストが更に安い場合にはそれらがResult及びmincostに格納される(H111)。最終的には、H107でしばらく≧と判断され続ける状態(H105→H106→H107→H104→H105の繰り返し)が探索リストSが全て空になるまで継続する状態になる。探索すべき優先度の低いクラスが無くなるからである。そして、探索リストSが全て空になると、H103〜H112のループ処理を脱出する。先ほど述べたように、Resultにはコスト安(mincostで裏付けられる)な最適解が格納されている。
【0132】
このように、長部材リストCLLの必要部材が全て0になった後においては、H106のバックトラック処理を介して探索リストSから探索ノードを末尾から1つずつ減らしつつ、優先度の低い探索可能なクラスが見つかる度に他のカットパターンが探索されるとともに(H109,H114)、コスト計算をしながら(H110)、探索リストSが0になるまで、H103〜H112のループ処理が行われる。
【0133】
以上の処理を、表1の原資材リストML、表5の長部材リストCLLに基づいて表7のClassに適用した結果が上記の表9のResultである。
その後、H103〜H112のループ処理を脱出すると、長部材リストCLLの部材のカットパターンがバックトラック(H106)により全部埋まった状態である。しかし、長部材リストCLLの部材の切り方は既に求まり(H111)、Resultに格納されている。そこで、H115においては、長部材リストCLLの部材の必要本数が全て0とされる。
【0134】
(A107:短部材挿入部1プログラムK100の概要)
A107においては、A106の部分最適解計算部で得られた長部材リストCLLについてのResultに対して、短部材リストCLSの各短部材が最適性を極力失わない方法によって挿入される。すなわち、この挿入は、短部材リストCLSの中から短部材が1本ずつ最適解Resultに挿入される(例えば、Resultの切り方に短部材が1本追加される)ことによりなされ、その挿入(追加)は、所定の条件(K106,K108,K111)が満たされる場合に実行される。
【0135】
(A107:短部材挿入部1プログラムK100の詳細)
K101においては、短部材リストCLSの第何行目の部材が処理対象であるかを示すパラメータiに初期値として1が代入される(まずは第1行目の短部材が処理対象とされる)。
K102〜K114のループ処理は、短部材リストCLSの部材の挿入に関する処理が各行についてなされる度にループする処理であり、短部材リストCLSの全ての部材(K102では脱出条件として全ての部材と規定される)について実行される。更に、K103においては、コスト増加分を示すパラメータminincに初期値として原資材の最高コスト(原資材リストMLでは6096円)が代入されるとともに、短部材が挿入されるResultの挿入行番号をマーキングしておくパラメータupに0が代入される(ちなみに、挿入可否の判断時(K111)にはパラメータupが0である場合には挿入されない)。更に、処理対象とする短部材リストCLSの第i行目の部材長さ及び必要本数が、それぞれ、パラメータl,rに代入される。
【0136】
K104〜K110のループ処理は、短部材リストCLSの第i行目の短部材について、Resultの第1行目〜最終行(第size(Result)行目)のうち最適な挿入位置及び/又はその挿入是非を判断する処理である。K104においては、K104〜K110のループ処理の脱出条件が規定される。パラメータuがResultの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
K105においては、挿入位置の候補となるResult[u]の[原資材長さ,切り方]が(m,(l1,…,ln))に代入されるとともに、Resultの第u行目のカットパターンの長さの合計(=l1+…+ln)と短部材リストCLSの第i行目の長さ(=l)とが加算され、これが、第i番行目の短部材を挿入した場合の全長さを示すパラメータtotalに代入される。
K106においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(K106:YES)、K107に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、K108に進む。
【0137】
K108においては、「K108の条件」が判断される。ここで、「K108の条件」とは次の通りである。
<K108の条件>
(K108の条件1)短部材リストCLSの第i行目の部材の必要本数がそもそも0である場合には、挿入するまでもないため、そのような短部材については処理を行わないようにするため、r>0であること。
(K108の条件2)K105で短部材リストCLSの第i番目の短部材を加算した場合におけるその破材長さ(=m'-total)が、その短部材を挿入する前の破材長さ(=m-(l1+...+ln))以下であること、すなわち、短部材リストCLSの第i番目の短部材を挿入しても破材長さが長くならないこと。破材長さを抑えることでコスト抑制に寄与するためである。
(K108の条件3)K105で短部材リストCLSの第i行目の部材を加算し、それに伴いK107で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であること。コスト増加を抑えることでコスト抑制に寄与するためである。
【0138】
さて、K108において各条件が満たされる場合には(K108:YES)、K109に進む。K109においては、最小コストを示すパラメータminincの値が新たにパラメータincの値に置き換えられる。更に、短部材の挿入位置を示すパラメータup(Resultの第何行目かを示す)にその時点で挿入位置として判断対象となっているResultの行番号を示すパラメータuの値が代入される。更に、原資材m'の値、すなわち、原資材長さm'が、新しく用いられる原資材長さを示すパラメータmp(Resultの第u行目の原資材mに代えて新たに置き換えられる値)に代入される。K109の処理により短部材リストCLSの第i行目をResultの第u行目に挿入する準備がなされ、K104〜K110のループ処理の先頭に戻る。
一方、K108の条件を満たさないと判断された場合には(K108:NO)、挿入位置が無いと判断されるため、K109の処理がなされず、K104〜K110のループ処理の先頭に戻る。
【0139】
以上のようにして、短部材リストCLSの第i行目の短部材を挿入しても良いかがResultの第1行目〜最終行(第size(Result)行目)の全ての行について1つずつ判断され、挿入しても良いと判断されればK107及びK109において該当するResultの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupには0以外のu値(Resultの第u行目)が入る。ちなみに、Resultの第1行目〜最終行(第size(Result)行目)のいずれの行においても挿入不可(K106:NO又はK108:NO)と判断されればK107及びK109において挿入準備がなされないためパラメータupの値が0のままである。
【0140】
そして、K104〜K109のループ処理が終了すると、K111においては、パラメータupが0か否かが判断される。
上記のようにパラメータupが0の場合には、短部材リストCLSの第i行目の挿入余地が無いため、K113へ進み、挿入可否の判断対象が次の短部材(i=i+1)に設定され(K113)、iがsize(CLS)を超えるまで、K102〜K114のループ処理の先頭に戻る。尚、処理対象となっている短部材リストCLSの第i番目の必要本数が0になっている場合においては、K106の条件が満たされたとしても、K108のr>0が満たされないことになる。これらの処理を経ることにより、Resultの全行について挿入可否が判断された後、結果、K113に進んで、iが1インクリメントされる。
【0141】
一方、パラメータupに0以外の値が入っている場合には(K111:>)、短部材リストCLSの第i行目を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、K112に進む。
K112においては、短部材リストCLSの第i行目の短部材が次のようにして挿入される。すなわち、Resultの第u行目(短部材を挿入する位置)であるResult[up]の原資材長さを示すパラメータmに原資材長さmp(K107で最適長さm'が求められ、K109でマーキングされたパラメータmp)が代入される。また、Resultの第up行目(短部材を挿入する位置)であるResult[up]の切り方Pの末尾にパラメータlの値が挿入される(これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l)となる)。このようにして挿入が終わると、短部材リストCLSの第i行目の短部材の切り方が決まったものとして必要本数が1デクリメントされる(r=r-1)。パラメータiがsize(CLS)を超えない限り、K102〜K114のループ処理の先頭に戻る。
【0142】
表11は、表9のResult(最適解探索プログラムH100の実行後)に短部材リストCLSの短部材を挿入した例を示す。表11のResultのうち短部材が挿入されたのは、(m,P)=(原資材,カットパターン)=(4876mm,(3964,894))、(4876mm,(3781,932))、(4876mm,(3781,932))である。表11は、破材が増える挿入ができないという条件(K108の条件)により、結果的に表5の短部材リストCLSの第1行目と第3行目の短部材が挿入され、Resultの原資材も変更されたことを示す。
【0143】
【表11】
【0144】
上記のように、短部材リストCLSの短部材がResultへ挿入された場合には(K112)、短部材リストCLSの挿入された短部材の必要本数がデクリメントされる(K112)。
表12は、表11で挿入した短部材の必要本数を表5の短部材リストCLSから減らした例を示す。
【0145】
【表12】
【0146】
(A108:解の確定1プログラム)
A108においては、解の確定1プログラムL100が呼び出され、リストResultの中から、最長の原資材を使用し、かつ、破材長さがその原資材長さの1%以下であるものだけが抜き出され、確定解としてSolutionに保存される。また、確定解Solutionに含まれている部材について、部材リストCLLの必要本数が更新される。
L101においては、その時点における長部材リストCLLと短部材リストCLSとを結合させる(具体的には表10と表12とが結合される)。
L102〜L106のループ処理は、Result(H111,K112参照)中の全行についてなされ、Resultの全行のうち「最長原資材を使用し、かつ、破材長さがその原資材長さの1%以下であるもの」が確定解として抜き出す対象とされ(L103:YES)、Solutionに追加される(L105)。尚、L103において「sum(P)/m≧0.99」は、切り方の合計長さ(sum(P))が原資材mの長さの0.99以上の長さを占める(換言すれば、破材長さが1%未満である)ことを意味する。
【0147】
一方、「最長原資材を使用していない及び/又は破材長さがその原資材長さの1%超であるという場合」には(L103:NO)、Resultから部材リストCL(L101で再結合した部材リストCL)に長部材及び/又は短部材を戻す処理、すなわち、Resultで規定する切り方(長さ)と同じ長さの長部材又は短部材の必要本数が1インクリメントされる処理がなされる(L104)。分割ポイントに基づくループ脱出の判断(A109、A110)に供するためである。
表13は、表11のResultのうち、Solutionに追加される(L105)確定解と、L101で再結合された部材リストCLにResultから長部材及び/又は短部材が復元された結果(L104)としても部材リストCLを示す。
表13によれば「Solutionに追加された部材以外の部材」が部材リストCLに復元されていることがわかる。尚、同表に「最長原資材を用いて2本カット」とあるのは、1デクリメントする際の根拠となるSolutionのあるカットパターンの切り方に同じ長さが2度含まれている場合と、Solutionの別のカットパターンにその長さがそれぞれ含まれている場合とがある(同表の場合は、後者の方)。
【0148】
【表13】
【0149】
(A109:部材リスト分割部)
A108の解の確定1の処理が終了すると、A109の部材リスト分割部の処理に進む。
A109の処理は上記したA103と同様の処理であるが、A109がA103と異なるのは、L104でResultから部材を戻すことにより得られた部材リストCL(表13参照)を対象として実行されることである。かかる処理を行うのは、確定解Solutionとして追加した分(L105)だけ部材リストCLの必要本数が減少しているため分割ポイントに変化が生じている可能性があるためである。従って、上記のA108の解の確定1を実行してもなお、分割ポイントに変更が生じないような分割ポイントが見つかるまでL101で部材リストCLを再結合しながらA104〜A110のループ処理がなされる。すなわち、A109の部材リスト分割部を実行することによって長部材の範囲が従来より増加した場合には、A106の部分最適解計算部の処理に戻り、範囲が変化しなかった場合はループを抜ける。
【0150】
表14は、L104で復元された部材リストCL(表13参照)についてA109の部材リスト分割処理を行った結果として、部材リストCLの第1行目〜第14行目が長部材リストCLLにコピーされ、部材リストCLの第15行目〜第19行目が短部材リストCLSにコピーされた例を示す。
【0151】
【表14】
【0152】
同表に示す例によれば部材リスト分割部のpのループはp=15のときに脱出条件が満たされる。つまり、p=15は、前回部材リスト分割を実行したときにA105でマーキングしたパラメータp'と同じ値である。従って、表2(直接的には表13)の部材リストCLの場合に上記手順を実行すると、最終的には、p=15でA104〜A110のループ処理の脱出条件が満たされ、A111の処理に進む。
【0153】
(A111:解の確定2プログラム)
A111においては、解の確定2プログラムM100が呼び出され、A107の短部材挿入部1で得られたResultのうち(M101)、A108の解の確定1の処理でSolutionに追加されなかったもの(m≠最長原資材)、又は、Resultを構成するカットパターンの切り方Pの合計長さが原資材長さの99%未満であるもの(すなわち、sum(P)/m<0.99、換言すれば、破材長さが原資材長さの1%超であるもの)が確定解として抜き出す対象とされ(M102:YES)、Solutionに追加される(M103)。また、Solutionに追加された長部材及び/又は短部材は、長部材リストCLL及び/又は短部材リストCLSから除外(r=r-1、すなわち、それらの必要本数が1デクリメント)される(M103)。
【0154】
表15は、A111の解の確定2の処理をResult(表11参照)、Solution(表13参照)及び部材リストCLL,CLS(表14参照)を対象に実行することにより得られたSolution、長部材リストCLL及び短部材リストCLSを示す。同表に示すように、長部材リストCLLは切り方が確定する一方、短部材リストCLSには切り方を決めるべき短部材が未だ残っている状態であり、後述する処理によって残っている短部材の切り方が決められる。
【0155】
【表15】
【0156】
(A112:短部材挿入部2の概要)
A112の短部材挿入部2の処理においては短部材挿入2プログラムN100が呼び出され、短部材リストCLSに残っている短部材が複数本まとめて(場合によっては単数本)挿入される。ここで、複数本まとめての挿入が可能なのはN101の挿入パターン作成処理において挿入カットパターン作成プログラムO100が呼び出されその実行により残っている短部材が挿入カットパターン化されるためである。
【0157】
N101においては、挿入カットパターン作成プログラムO100が呼び出され、挿入パターン作成処理と、挿入パターン分類処理とがなされる。より具体的には、
(1)挿入パターン作成処理として、原資材リストMLと短部材リストCLS(未だ切り方が決まっていない短部材が残っている)に基づいて可能な切り方が列挙された挿入パターンPが作成され(O102)、ソートされた挿入パターンリストPL(但し、上記のように[原資材m,切り方P]を要素とするものではなく、挿入パターン=[切り方P]のみが要素となる、上記と同様(m,P)でもよいがその必要がないため)が作成される処理がなされ(O103);その後、
(2)挿入パターン分類処理として、O103でソートされた挿入パターンリストPLが分類分け、すなわち、挿入パターンリストPLの各行で代表長さが同じ挿入パターンが類似する挿入パターンとして同一クラスに分類される一方(O106→O107)、代表長さが異なる挿入パターンが異なるクラスに分類される処理がなされる(O106→O109)。尚、分類後のものを「分類後の挿入パターンリストClass」という。
【0158】
(A112:短部材挿入部2の詳細)
これらの処理について更に詳細に説明する。
O101においては、挿入パターンを格納するためのリストとして、挿入パターンリストPLが生成される。挿入パターンリストPLは、[切り方]=P=(l1,…,ln)のフィールドを備えたリストである。
O102においては、「O102の条件」を満たすように挿入パターンPが生成され、挿入パターンリストPLに格納される。尚、挿入パターンPは、A111の解の確定2の処理を行った後、未だ切り方が定まらずに短部材リストCLSに残っている短部材を用いて作成される。また、挿入パターンPは、短部材リストCLSに含まれる少なくとも1の短部材を1本用いたあらゆる組み合わせ、すなわち、短部材リストCLSの第1行目〜最終行目までのいずれかを使用して生成された少なくとも1本の切り方を含むものであればよい。「O102の条件」は、挿入パターンPの生成毎又はその生成後のタイミングで判断される。「O102の条件」は次の通りである。
【0159】
<O102の条件>
(O102の条件1)「size(P)≦60/size(CLS)+1」とは、1つの挿入パターンPに含まれる切り方の数が最大でも61以下であることを要することを意味する。size(P)を無制限にすると組み合わせの数が大きくなりすぎ演算過程でオーバーフローするため、これを回避するためである。「60」は特に限定されるものではなく、任意の数値が適用可能である。
【0160】
(O102の条件2)「sum(P)≦原資材の最大長」とは、O102で生成される挿入パターン(=P(l1,…,ln))を構成する各切り方を加算した値(=l1+…+ln)が原資材の最大長以下であることを要することを意味する。切り方を加算すると原資材の最大長を超える挿入パターンはあり得ないため、これを除外するためである。
【0161】
(O102の条件3)「possible(P,CLS)」とは、「挿入パターンPを構成する各長さl(=l1,…,ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「短部材リストCLSの当該部材長さl(=l1,…,ln)の各必要本数以下」であることを要することを意味する。挿入パターンPを構成する各長さl(=l1,…,ln)の各本数が短部材リストCLLの当該部材長さの必要本数を超えると不要な部材(余分な部材)をカットすることになり、コストや破材が増加するためである。尚、「count(l,P)」について補足すると、挿入パターンPを構成する各長さl(=l1,…,ln)の各本数は、その挿入パターンPにおける各長さの合計本数であって、種類の数を意味するものではない。
【0162】
(O102の条件4)「P[1]≧…≧P[n]」とは、挿入パターンPを構成する各長さ(l1,…,ln)が長さの長いものから短いものへと降順にソートされている(すなわち、l1>,…,>ln)ことを要することを意味する。長いものから切り方を決めるという観点、及び、演算の効率化、コスト・破材を抑制する観点によるものである。
【0163】
さて、O103においては、O102で作成した挿入パターンリストPLが、「O103の条件」、すなわち、挿入パターンリストPLを構成する各挿入パターンPが降順になるようにソートされる。従って、各挿入パターンP同士では、一つめの切り方が異なればそれらを比較して降順とされ、n(ここで、nはn>1の整数)番目の切り方が同じであれば(n+1)番目の切り方同士を比較して降順とされる。尚、n番目の切り方が同じだが一方に(n+1)番目の切り方が無い場合には、(n+1)番目の切り方が無い方が後方に位置するようにソートされる。
【0164】
O104においては、各挿入パターンリストPLが分類されるClass番号を示すパラメータcnに0が代入される。
O105〜O108のループ処理においては、まず、O106において、挿入パターンリストPLを構成する全各行の挿入パターンP(l1,…,ln)について、第1行目から順番にClass[i][1][1]=P[1]であるものがクラス番号1〜cnのClassのいずれかに存在するか否かが判断される。ここで、Class[i][1][1]=P[1]は、挿入パターンリストPLの分類対象となる行の挿入パターンPに含まれる代表長さP[1]が、分類後の挿入パターンリストClass[i](1≦i≦cn)の第1行目(Class[i][1])の代表長さClass[i][1][1]と等しいことを意味する。
【0165】
従って、O106において分類対象とされる挿入パターンの代表長さP[1]が既生成のクラスの代表長さClass[i][1][1](1≦i≦cn)のいずれかと等しいと判断された場合には(O106:YES)、O107に進み、分類後の挿入パターンリストClass[i]に新たな行として挿入パターンPが追加される(O107)。
一方、O106において分類対象とされる挿入パターンの代表長さP[1]が既生成のクラスの代表長さClass[i][1][1](1≦i≦cn)のいずれとも等しくないと判断された場合には(O106:NO)、O109に進み、新たなClassが生成され(cn=cn+1、create(Class[cn]))、その新たなClassに挿入パターンPが追加される(O109)。Class[i][1][1]=P[1]の条件を導入したのは、演算効率を高めるためである。
【0166】
このようにして、ループ脱出条件(すなわち、挿入パターンリストPLの全各行について分類分けを終了するという条件)を満たすまで、O105に戻って上記処理が行われる。
以上の処理により、N101の挿入パターン作成処理においては、A111の解の確定2の処理後に未だ切り方が定まらなかった短部材について、挿入パターン及びその分類分けがなされた「分類後の挿入パターンリストClass」が得られる。上記から明かであるが分類後の挿入パターンリストClassは、各行が代表長さによって降順にソートされたものとなり、各挿入パターンを構成する切り方も降順にソートされたものとなる。尚、各挿入パターンPは、単数本又は複数本のいずれもあり得る。
以上のようにして、N101の処理が終了する。
【0167】
(N102及びN103〜N115のループ処理の概要)
N102及びN103〜N115のループ処理においては、A111の解の確定2の処理を行うことによって得られている確定解Solutionに対して、N101で作成された挿入パターンリストClassの各挿入パターン(切り方)が最適性を極力失わない方法によって挿入される。すなわち、この挿入は、挿入パターンリストClassの第1クラス〜最終クラス(ここで、size(Class)はクラス数を意味する)のうちClass[i]を構成する各挿入パターンが1つずつ確定解Solutionに挿入される(例えば、Solution中のカットパターンの切り方の末尾に挿入パターンが追加される)ことによりなされ(N113)、その挿入(追加)は、所定の条件(N107,N109)が満たされる場合に実行される。
【0168】
(N102及びN103〜N115のループ処理の詳細)
N102においては、挿入パターンリストClassの第何クラスが処理対象であるかを示すパラメータiに初期値として1が代入される。これにより、第1(=i)クラスの挿入パターンが処理対象とされる。
N103〜N115のループ処理は、挿入パターンリストClassの部材の挿入に関する処理が各クラスについてなされる毎にループする処理であり、挿入パターンリストClassの全てのパターンについて実行される(N103,N105参照)。更に、N104においては、コスト増加分を示すパラメータminincに初期値として原資材の最高コスト(原資材リストMLでは6096円)が代入されるとともに、挿入パターンが挿入されるSolutionの挿入行番号をマーキングしておくパラメータupに0が代入される(ちなみに、挿入可否の判断時(N112)にはパラメータupが0である場合には挿入されない)。
【0169】
N105〜N111のループ処理は、挿入パターンリストClassの第iクラスの挿入パターンP'、すなわち、その第iクラスの第1行目〜最終行目までを順番(順番に行う点はフローチャート上では省略、実際にはP'用のループがある)に、確定解Solutionの第1行目〜最終行(第size(Solution)行目)のうちどこに挿入したら良いか(最適な挿入位置)、そして更に、挿入すべきか否か(挿入是非)を判断する処理である。尚、上記説明より明らかであるが、N105〜N111のループ処理は、挿入パターンリストClassの第iクラスを構成する挿入パターンP'が複数パターン存在する場合には当該複数回繰り返されることによりなされる。
【0170】
N105においては、N105〜N111のループ処理の脱出条件が規定される。パラメータuがSolutionの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
N106においては、挿入位置の候補となるSolution[u]のカットパターン[原資材長さ,切り方]が、(m, P)に代入されるとともに、Solutionの第u行目のカットパターンの長さの合計sum(P)と挿入パターンリストClassの第iクラスに属するいずれかの挿入パターンの長さの合計sum(P')とが加算され、これが、当該挿入パターンP'を挿入した場合の全長さを示すパラメータtotalに代入される。
【0171】
N107においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(N107:YES)、N108に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、N109に進む。
【0172】
N109においては、「N109の条件」が判断される。ここで、「N109の条件」とは次の通りである。
<N109の条件>
(N109の条件1)「possible(P',CLS)」とは、挿入パターンリストClassの第iクラスの処理対象たる挿入パターンP'の切り方を構成する各長さの各本数が「短部材リストCLSの当該部材長さの各必要本数以下」であることを要することを意味する。これは、不要な部材(余分な部材)を切り出さないようにするためである。換言すれば、挿入パターンリストClassの第iクラスのカットパターンを切り方が決まらず残っている短部材に適用したときに、短部材リストCLSの必要本数がそもそも0である短部材についてまで切り出してしまうことがないようにするためである。
【0173】
(N109の条件2)N106で挿入パターンリストClassの第iクラスの挿入パターンを加算した場合におけるその破材長さ(=m'-total)が、その挿入パターンを挿入する前の破材長さ(=m-sum(P))以下であること、すなわち、挿入パターンリストClassの第iクラスの挿入パターンを挿入することによって破材長さが長くならないことを要することを意味する。破材長さを抑えることでコスト抑制に寄与するためである。
(N109の条件3)N106で挿入パターンリストClassの第iクラスの部材長さを加算し、それに伴いN108で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であることを要することを意味する。コスト増加を抑えることでコスト抑制に寄与するためである。
【0174】
さて、N109において各条件が満たされる場合には(N109:YES)、N110に進む。N110においては、新たにパラメータincの値が最小コストを示すパラメータminincに代入される。更に、挿入パターンの挿入位置を示すパラメータup(Solutionの第何行目かを示す)にその時点で挿入位置として判断対象となっているSolutionの行番号を示すパラメータuの値が代入される。更に、原資材長さm'がパラメータmpに代入される。これにより、Solutionの第u行目の原資材長さmが原資材長さmpに変更される。また、挿入パターンリストClassの第iクラスの挿入パターンP'がパラメータPpに代入される。N110の処理により挿入パターンリストClassの第iクラスの挿入パターンP'をSolutionの第u行目に挿入する準備がなされ、N105〜N111のループ処理の先頭に戻る。
一方、N109の条件を満たさないと判断された場合には(N109:NO)、挿入できないと判断されるため、N110の処理がなされず、N105〜N111のループ処理の先頭に戻る。
【0175】
以上のようにして、挿入パターンリストClassの第iクラスの挿入パターンP'を挿入しても良いかがSolutionの第1行目〜最終行(第size(Solution)行目)の全ての行について1つずつ判断され、挿入しても良いと判断されればN108及びN110において該当するSolutionの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupには0以外のu値(Solutionの第u行目)が入る。ちなみに、Solutionの第1行目〜最終行(第size(Solution)行目)のいずれの行においても挿入不可(N107:NO又はP109:NO)と判断されればN108及びN110において挿入準備がなされないためパラメータupの値が0のままである。
【0176】
そして、N105〜N111のループ処理が終了すると、N112においては、パラメータupが0か否かが判断される。
上記のようにパラメータupが0の場合には、挿入パターンリストClassの第iクラスを挿入する余地が無いため、N114へ進み、挿入可否の判断対象が次の挿入パターンリストClassの第(i=i+1)クラスに設定され(N114)、iがsize(Class)を超えるまで、N103〜N115のループ処理の先頭に戻る。また、処理対象となっている挿入パターンClassの第iクラスの必要本数が0になっている場合においては、N107の条件が満たされたとしても、N109のpossible(P',CLS)が偽となる。結果、N114に進んで、iが1インクリメントされる。
【0177】
一方、パラメータupに0以外の値が入っている場合には(N112:>)、挿入パターンリストClassの第iクラスの挿入パターンP'を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、N113に進む。
N113においては、挿入パターンリストClassの第iクラスの挿入パターンP'が次のようにして挿入される。すなわち、Solutionの第up行目(挿入パターンを挿入する位置)の原資材を示すパラメータmに原資材長さmp(N108で原資材長さm'が求められ、N110でマーキングされたパラメータmp)が代入される。また、Solutionの第up行目(挿入パターンを挿入する位置)であるSolution[up]のカットパターンの切り方Pの末尾にパラメータPpを構成する全ての長さl(切り方l)の値が追加(挿入)される。これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l…)となる。このようにして挿入が終わると、挿入パターンリストClassの第iクラスを構成する該当する挿入パターンP'を構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。N113で切り方が確定したためである。そして、全てのクラスについての挿入又は挿入可否の判断を実行し終えるまで、パラメータiがsize(Class)を超えない限り、N103〜N115のループ処理の先頭に戻る。
【0178】
表16は、挿入パターンリストClassを利用して、表15に示すSolutionに短部材リストCLSに残っている短部材をN101で作成した挿入パターンにより挿入して得られるSolution、及び、その挿入がなされたことにより(N113)、必要本数が減算された短部材リストCLSを示す。表16のSolutionのうち短部材が挿入パターンにより挿入されたのは、(m,P)=(原資材,カットパターン)=(4876mm,(3432,918,451))、(4876mm,(3432,451,451,451))であり、それらに対応する短部材の必要本数が短部材リストCLSでデクリメントされていることがわかる。尚、N101〜N115の処理が終了すると、A113に進む。
【0179】
【表16】
【0180】
(A113:最終挿入部の概要及び詳細)
A113においては、最終挿入プログラムP100が呼び出され、P101〜P115のループ処理がなされ、これにより、A112の短部材挿入部2を実行しても未だ切り方が決まらずに短部材リストCLSに残っている短部材の挿入パターン(mp,Pp)がグリーディ法によって1本単位で求められ、その求めたカットパターン(mp,Pp)がコストを最も抑えることができるように確定解Solutionに挿入(P113:切り方だけ挿入)又は追加(P116:カットパターン自体を追加)する処理がなされる。
【0181】
P101においては、短部材リストCLSが空になるまで、P101〜P115のループ処理が実行されることが規定されている。P102においては、短部材リストCLSがCutlistにコピーされる(P103のグリーディ法で使用するための準備)。
【0182】
P103においては、グリーディ法プログラムG100が呼び出され、グリーディ法を用いて、できるだけ原資材の余りが少なく、かつ、単位長さ当たりのコストが安くなるように[原資材,切り方]=(mp,Pp)が求められる。ここでは、P102で短部材リストCLSをCultlistにコピーしているため、切り方が決まらずに短部材リストCLSに残っている短部材について挿入パターン(mp,Pp)が得られる。P113で挿入する場合には、切り方Ppのみが使用され、P116でSolutionの末尾に追加する場合には挿入パターン(mp,Pp)が使用される。尚、P103におけるグリーディ法の処理は上述と同様であるため、その説明を省略する。
【0183】
P104においては、P105〜P111のループ処理の初期設定として、
(1)グリーディ法で求めた挿入パターン(mp,Pp)の原資材mpのコストprice(mp)がパラメータminincに代入されるとともに、
(2)「挿入パターン(mp,Pp)の切り方Ppを確定解Solutionに挿入するかその末尾に追加するかを示すとともに、挿入するとすればその挿入位置を示す」パラメータupにsize(Solution)+1が代入される。すなわち、パラメータupの値が、P112においてもsize(Solution)+1のままであったら、挿入パターン(mp,Pp)が確定解Solutionの末尾に追加される。
【0184】
P105〜P111のループ処理は、挿入パターン(mp,Pp)を確定解Solutionの第1行目〜最終行(第size(Solution)行目)のうちどこに挿入したら良いか(最適な挿入位置)、そして更に、挿入すべきか否か(挿入是非)を判断する処理である。
P105においては、P105〜P111のループ処理の脱出条件が規定される。パラメータuがSolutionの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
P106においては、挿入位置の候補となるSolution[u]のカットパターン[原資材長さ,切り方]が(m, P)に代入されるとともに、Solutionの第u行目の切り方の合計sum(P)と挿入パターンの切り方Ppの合計sum(Pp)とが加算され、これが、当該切り方Ppを挿入した場合の全長さを示すパラメータtotalに代入される。
【0185】
P107においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(P107:YES)、P108に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、P109に進む。
【0186】
P109においては、P106で挿入パターンの切り方Ppの合計長さを加算し、それに伴いP108で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であるか否かが判断される。コスト増加を抑えることでコスト抑制に寄与するためである。この場合に、コスト安となると判断された場合には(P109:YES)、P110に進む。
【0187】
P110においては、新たにパラメータincの値が最小コストを示すパラメータminincに代入される。更に、挿入パターンの挿入位置を示すパラメータup(Solutionの第何行目かを示す)にその時点で挿入位置として判断対象となっているSolutionの行番号を示すパラメータuの値が代入される。更に、原資材長さm'がパラメータmpに代入される。これにより、Solutionの第u行目の原資材長さmが原資材長さmpに変更される。P110の処理により挿入パターン(mp,Pp)をSolutionの第u行目に挿入する準備がなされ、P105〜P111のループ処理の先頭に戻る。
【0188】
一方、P109の条件を満たさないと判断された場合には(P109:NO)、Solutionのu行目に挿入できないと判断されるため、P110の処理がなされず、P105〜P111のループ処理の先頭に戻る。
【0189】
以上のようにして、挿入パターン(mp,Pp)を挿入しても良いかがSolutionの第1行目〜最終行(第size(Solution)行目)の全ての行について判断され、挿入しても良いと判断されればP108及びP110において該当するSolutionの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupにはP104で設定された「size(Solution)+1」以外のu値(Solutionの第u行目)が入る。ちなみに、Solutionの第1行目〜最終行(第size(Solution)行目)のいずれの行においても挿入不可(P107:NO又はP109:NO)と判断されれば、N108及びN110における挿入準備はなされない。しかし、最終挿入プログラムP100では、必ず切り方を決めなければならないため、P107又はP109でNOと判断され続けても、Solutionの末尾への追加を実行すべくパラメータupの値は「size(Solution)+1」のままとされる。
【0190】
そして、P105〜P111のループ処理が終了すると、P112においては、パラメータupが「size(Solution)」以下かこの値を超えるかが判断される。
P112において、パラメータupが「size(Solution)+1」の場合には(P112:>)、P116へ進み、push(Solution,(mp,Pp))が実行され、Solutionの末尾に挿入パターン(mp,Pp)が追加される。そして、P114に進む。P114においては、P116で挿入した切り方Ppを構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。P116において切り方が確定したためである。そして、短部材リストCLSに切り方が決まらずに残っている短部材が無くなるまで(∃(l,r) in CLS. r>0が成立しなくなるまで)、P101〜P115のループ処理の先頭に戻る。
【0191】
一方、パラメータupに「size(Solution)以下の値」が入っている場合には(P112:≦)、挿入パターン(mp,Pp)を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、P113に進む。
P113においては、挿入パターン(mp,Pp)が次のようにして挿入される。すなわち、Solutionの第up行目(切り方Ppを挿入する位置)の原資材を示すパラメータmに原資材長さmp(P108で最適長さm'が求められ、N110でマーキングされたパラメータmp)が代入される。また、Solutionの第up行目(挿入パターンを挿入する位置)であるSolution[up]の切り方Pの末尾に切り方Ppを構成する全ての長さl(切り方l)の値が挿入される(これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l…)となる)。P114においては、P113で挿入した切り方Ppを構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。P113において切り方が確定したためである。そして、短部材リストCLSに切り方が決まらずに残っている短部材が無くなるまで(∃(l,r) in CLS. r>0が成立しなくなるまで)、P101〜P115のループ処理の先頭に戻る。
【0192】
表17は、最終挿入プログラムP100を実行した結果得られるSolutionと短部材リストCLSの状態を示し、具体的には、表16のSolutionに同表の短部材リストCLSに残っている短部材を挿入した結果を示す。
【0193】
【表17】
【0194】
最終挿入プログラムP100においては「破材が増えるような挿入をしてはいけない」という条件はなく、また、新しい原資材を使って切り出すということも可能である。かかる条件設定において、表16に示すSolutionに同表の短部材リストCLSに残っている短部材を挿入するために最終挿入プログラムP100を実行すると、表16に示すSolutionの(5486,(2752,2724))に短部材リストCLSに最後に残った437を挿入すると最もコスト上昇が低く抑えられる。挿入した結果、表17に示すように(6096,(2752,2724,437))とされる。また、短部材リストCLS中の437の必要本数が1デクリメントされている。
【0195】
A114においては、表17に示した結果が出力される。この出力結果は、資材切断システム6に送信され、資材切断システム6においては、この出力結果に従って部材の切断が行われる。部材取りプログラムPGを用いて部材の切り方を求めているため、発生する破材長さ及びコストが抑制される。
【0196】
(第二の実施形態)
第二の実施形態は、メインプログラムQ100に示す通りであるが、
(B1)上記A1同じ(Q103)→
(B2)上記A2-1〜A2-3と同じ(Q103,Q104,Q105)→
(B3)短部材を何本かまとめて、既定の条件を満たす場合に限り(B2)の解に挿入する(Q108)→
(B4)最後に残った短部材を、(B3)の解にうまく挿入する(Q109)という手順による。従って、第一の実施形態を簡略化したものであり、部材リストの規模が小さい場合に特に有効である。尚、メインプログラムQ100で呼び出される各サブルーチンは、上記のサブルーチンと同一のものを用いることができるため、詳細な説明を省略する。
【0197】
メインプログラムQ100を用いて、表18に示す原資材から同表の部材を切り出す場合について具体例を示す。
Q101においては、初期設定として、部材リストCLの入力がなされるほか、A101と同様の入力がなされる。Q102においては、解を格納するSolutionが生成される。
【0198】
【表18】
【0199】
Q103において部材リスト分割プログラムB100が呼び出されて実行される。すると、その実行過程において、表19に示すようにカットパターンがクラス分けされるとともに、前後するが、表18に示した分割ポイントで長部材と短部材とに分割される。
【0200】
【表19】
【0201】
Q104においては、部分最適解計算部プログラムE100が呼び出されて実行される。表20は、クラス分類に基づいて長部材に適用した結果を示す。
【0202】
【表20】
【0203】
Q105においては、短部材挿入部1プログラムK100が呼び出され実行される。表21は、短部材挿入部1プログラムK100を実行することにより得られた結果を示す。
【0204】
【表21】
【0205】
Q106、Q107においては、解の確定1プログラムL100、解の確定2プログラムM100が呼び出され、実行される。
Q109においては、最終挿入プログラムP100が呼び出され実行される。表22にその結果を示す。
【0206】
【表22】
【0207】
Q110においては、表22に示した結果が出力される。この出力結果は、資材切断システム6に送信され、資材切断システム6においては、この出力結果に従って部材の切断が行われる。部材取りプログラムPGを用いて部材の切り方を求めているため、発生する破材長さ及びコストが抑制される。
【0208】
(第一及び第二の実施形態の破材長さ、コストパフォーマンス、演算効率等)
いずれの実施形態においても、結果出力に要する時間は、一般的なパーソナルコンピュータで10秒程度であり、演算時間の短縮が図られている。
そして、表17(第一の実施形態)及び表22(第二の実施形態)に示した出力結果は次の通りである。
第一の実施形態によれば、原資材の総額が195,049円、破材長さの合計が5,743mmとなる。尚、最適解は194,441円であり、その破材長さの合計は5,135mmとなることが証明できることから、この出力結果は最適解に非常に近い値であり、誤差は0.313%以内であることが保証される。
第二の実施形態によれば、最適解を出力することができる。
【0209】
(その他の変形例)
第一の実施形態と第二の実施形態とを比較すると、前者は部材リストの規模が比較的大きい場合に適用するとよく、後者は部材リストの規模が比較的小さい場合に適用するとよい。従って、クラス概念の導入を前提とした探索を行ったり、長部材と短部材の分割等と組み合わせる等、各サブルーチンの組み合わせ方や組み合わせ回数等を適宜変更することにより、必要な部材リストに応じた部材取り手法を演算により求めることが可能となる。
【産業上の利用可能性】
【0210】
本発明に係る部材取りシステム及び部材取りプログラムは、原資材データベースに入力されている原資材から建築図面に記載されている部材を切り出すときに、発生する破材長さ及び/又は使用する原資材の総コストを抑えることができるため、環境資源を有効活用でき産業上極めて有益である。
【符号の説明】
【0211】
1 部材取りシステム
2 コンピュータ
3 原資材DB
4 部材DB
5 建築CADシステム
6 資材切断システム
PG 部材取りプログラム
ML 原資材リスト
CL 部材リスト
KZ 建築図面
【技術分野】
【0001】
本発明は、部材取りシステム及び部材取りプログラムに関し、更に詳しくは、多種類の複数原資材から、長さの異なる種々の部材を必要本数切り出す場合に、使用する原資材の総コスト及び/又は発生する破材の長さ(以下「破材長さ」という)を抑える切断方法に関する。
【背景技術】
【0002】
原資材の長さを超えない範囲で、かつ、発生する破材長さを最小に抑えるように切り出す部材を選択したり(ナップザック問題)、一種類の複数原資材から長さの異なる種々の部材を必要本数切り出すときに、使用する原資材の本数を最小にするにはどうするかを決めること(ビンパッキング問題、カッティングストック問題)については、多くの研究がなされている。しかしながら、入力サイズが実用的であっても実用的な時間内で最適解を求めることが困難であり、多くの近似解法が提案されている(非特許文献1,2等参照)。
【0003】
そして、建設業界においては、上記に加え、多種類の複数原資材に対して、使用する原資材の総コスト及び/又は発生する破材長さをできるだけ抑えることが求められている。そこで、非特許文献3〜6の部材取り手法に関する技術等が提案されている。例えば、非特許文献3には、破材が極力小さくなるように切り出す部材の組合せを求めるときに「プライオリティ」という概念を導入することにより、切り出す部材のプライオリティの合計が最大になるような組合せを求める技術が提案されている。これは、数の多い部材ほどプライオリティを高く設定することで、数の少ない部材があまり選択されなくなるため、選択の幅を操作しうるという利点がある。
【0004】
また、対象物を切り出すという観点によれば、特許文献1、2に開示されたシートの断裁方法や定規取り装置といった技術も見受けられる。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】Yue M., "A simple proof of the inequality FFD(L) ? (11/9)OPT(L) + 1, for all L, for the FFD bin-packing algorithm", Acta Mathematicae Applicatae Sinica 7, pp. 321-331, 1991.
【非特許文献2】Dosa G., "The Tight Bound of First Fit Decreasing Bin-Packing Algorithm Is FFD(I)?(11/9)OPT(I)+6/9", ESCAPE 2007, Springer LNCS 4614, pp. 1-11, 2007.
【非特許文献3】Paul Maschinenfabrik GmbH & Co. KG, “CNC CROSS-CUT SYSTEMマニュアル”, 2006.
【非特許文献4】SuperMab.com, “Blizzardマニュアル”.
【非特許文献5】株式会社コムコーポレーション, “鋼材部材取りシステムマニュアル”, 2003.
【非特許文献6】株式会社カルテック, “材料取り最適化プログラム尺取虫マニュアル”.
【特許文献】
【0006】
【特許文献1】特開2007−136577号公報
【特許文献2】特開平7−246595号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献3〜6に開示された、多種類の複数原資材から複数部材を切り出すための部材取り手法は、結局のところ、単純な近似解法を用いた精度の低いものにしかすぎないという問題がある。従って、最適解を求めたり、高精度な近似解を求めることが困難である。
更に、特許文献1、2に開示された技術は、多種類の複数原資材から複数部材と切り出す技術とは異なる。
【0008】
本発明は、上記事情に鑑みてなされたものであり、その目的は、原資材データベースに入力されている原資材から建築図面に記載されている部材を切り出すときに、効率的に演算を行いながら、使用する原資材の総コスト及び/又は発生する破材長さを抑えることができる部材取りシステム及び部材取りプログラムを提供することにある。そのために、最適解法と近似解法とを組み合わせた新規なアルゴリズムが利用される。
【課題を解決するための手段】
【0009】
上記課題を解決するために本発明に係る部材取りシステム(プログラム)は、
原資材から[部材(例えば、部材長さが挙げられるが、これに限定されるものではなく、部材を特定できるものであればよい、以下同じ),必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算するシステム(プログラム)であって、
[原資材(例えば、原資材長さが挙げられるが、これに限定されるものではなく、原資材を特定できるものであればよい、以下同じ),切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手段(手順)(C100)と、
前記各カットパターンをクラスに分類するカットパターン分類手段(手順)(D100)と、
所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索し(I101)、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか(I102)、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し(I106)、当該探索ノードを探索リストに追加して探索リストを作成する(I107)前方探索手段(手順)(H102、H114、H109)とを備えたことを要旨とする。
この場合に、前記カットパターンリスト作成手段(手順)は、
(a1)切り方フィールドは、部材が長さの降順に並んだものである、
(a2)原資材フィールドは、切り方フィールドの部材を全て足し合わせたものに対して最も破材長さが短くなる原資材である、
という条件(C102)を満たすカットパターンを全て作成し、それらを切り方フィールドをキーとして長さにおける辞書式順序の降順(長い方から短い方を意味する)に並べたカットパターンリストを作成するものであることが望ましい(C103)。
また前記カットパターン分類手段(手順)は、そのカットパターンリストの第1行目から順にカットパターンを取り出し、
(b1)取り出した分類すべきカットパターンの原資材フィールド及び切り方フィールドの代表長さが既分類のカットパターンのものと同一である、
(b2)取り出した分類すべきカットパターンの切り方フィールドの部材の数が既分類のカットパターンのものと同一又はこれよりも少ない、
という条件(D103)を全て満たす場合にはその既存クラスに分類し(D104)、存在しなければ新たなクラスを作成してそこに分類する(D106)ものであることが望ましい。
また、前記前方探索手段(手順)における「余分な部材を出さないカットパターン」とは、
(c1)あるクラス番号に分類されているカットパターン[原資材長さ,切り方]を適用したときに部材リストの必要本数を超えて部材を切り出さないそのようなカットパターン[原資材長さ,切り方]、
(c2)カットパターン[原資材長さ,切り方]中の各切り方の各本数が部材リストの当該長さの各必要本数以下であるそのようなカットパターン[原資材長さ,切り方]、
(c3)カットパターンに従って(原資材から)部材を切り出したときに、部材リストの必要本数を超えて不要な部材や余分な部材を切り出さないそのようなカットパターン[原資材長さ,切り方]を意味する。
そして、前記前方探索手段(手順)は、所定のクラスに属する余分な部材を出さないカットパターンの中から最も破材長さの短いカットパターンを一つ選択するものであることが望ましい。
【0010】
そして、前記前方探索手段(手順)は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることが望ましい(H113→H114、H107→H108→H109)。
更に、前記前方探索手段(手順)は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることが望ましい(H113→H114、H107→H108→H109)。この場合に、前記前方探索手段(手順)は、前記最長部材が属するクラスに属するカットパターンのうち先頭カットパターンから優先的に探索するものであることが望ましい(I102)。
【0011】
更に、前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合(I106)、又は、前記部材リストの必要本数が0となった場合には(H105)、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す(J105)又は何もしない(J102:=))しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかる(H107:<)まで当該探索リストから当該探索ノードを削減する(J101)後方探索手段(手順)(J100)を備えることが望ましい。
【0012】
更に、前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合(B105:≧)に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する(B107)分割手段(手順)を備えることが望ましい。
【0013】
更に、前記カットパターンリスト作成手段(手順)、前記カットパターン分類手段(手順)による処理を行った(行わせた)後、前記分割手段(手順)による処理を行って(行わせて)分割ポイントを求め、得られた長部材リストに対して、前記前方探索手段(手順)、前記後方探索手段(手順)による処理を行い(行わせ)、前記長部材リストの必要本数が全て0になったところ(H110:YES)で得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする(H111)最適解計算手段(手順)を備えることが望ましい。
この場合に、前記最適解計算手段(手順)は、前記長部材リストに対して近似解法(例えば、グリーディ法)によって求めた初期解(F104)で要するコスト未満の場合(H110:YES)に前記全探索ノードによって特定される[原資材,切り方]を最適解とし(H111)、そのコスト以上の場合に前記初期解を当該最適解とする(F104)ことが望ましい。
【0014】
更に、前記最適解に短部材を1本ずつ挿入する(K112)第一短部材挿入手段(手順)と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解(L103)を確定解とする第一確定手段(手順)と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し(L101)、再度、当該部材リストについて前記分割手段(手順)による分割処理を行い(行わせ)、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする(A110)分割ポイント確定手段(手順)とを備えることが望ましく、更に、
前記分割ポイント確定手段(手順)による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する(M103)第二確定手段(手順)と、
切り方が決まっていない短部材を挿入パターン化(N101)して当該確定解に挿入する(N113)第二短部材挿入手段(手順)と、
切り方が決まっていない短部材を近似解法(グリーディ法)に基づいて挿入パターン化し(P103)、当該確定解に挿入(P113)又は追加(P116)して最終確定解を得る最終短部材挿入手段(手順)とを備えることが望ましく、更に、
前記最終確定解を切断機に送信する確定解送信手段(手順)と、
前記最終確定解に基づいて原資材から所定長さの部材を切断する切断手段(手順)とを備えることが望ましい。
【発明の効果】
【0015】
本発明に係る部材取りシステム(プログラム)は、所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索するものであるから発生する破材長さを抑えることができるという効果がある。よって、コストダウンに寄与するという効果がある。
【0016】
本発明に係る部材取りシステム(プログラム)は、所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索するものであるから、効率的に演算を行うことができ、よって、演算時間を短縮することができ、コストダウンに寄与するという効果がある。本発明に係る部材取りシステム(プログラム)において、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索したり、更に、そのようなクラスのうち先頭クラスから優先的に探索することにより、更なる演算時間の短縮化が期待できるという効果がある。
【0017】
本発明に係る部材取りシステム(手順)は、後方探索手段(手順)を備えることにより、あらゆるカットパターンが探索対象候補となり得るため、演算精度を高めることができるという効果があり、更に、カットパターンリスト自体を予め所定の条件に従って配列させておけば、破材長さやコストを更に抑制できるだけではなく、破材長さが長くなったりコストアップになるようなカットパターンの探索を途中で打ち切る制御ができるという効果がある。
【0018】
本発明に係る部材取りシステム(プログラム)は、部材リストを長部材リストと短部材リストに分割して、長部材については最適解計算手段(手順)により最適解を求める一方、短部材についてはこれをその最適解に挿入又は追加する形式で最終的に確定解を求めるものであるから、演算量を膨大にすることなく、効率的に演算を行うことができるという効果がある。
【図面の簡単な説明】
【0019】
【図1】本発明の一実施形態に係る部材取りシステム1のハードウエア・ソフトウエア構成を概略的に示すシステム構成図である。
【図2】本発明の一実施形態に係る部材取りプログラムPGで用いられるパラメータ・リスト・手続・関数等の定義を示す一覧表である。
【図3】第一の実施形態に係るメインプログラムA100のフローチャートである。
【図4】部材リスト分割プログラムB100のフローチャートである。
【図5】カットパターンリスト作成プログラムC100のフローチャートである。
【図6】カットパターンリスト分類プログラムD100のフローチャートである。
【図7】部分最適解計算部プログラムE100のフローチャートである。
【図8】初期解生成プログラムF100のフローチャートである。
【図9】グリーディ法プログラムG100のフローチャートである。
【図10】最適解探索プログラムH100のフローチャートである。
【図11】探索プログラムI100のフローチャートである。
【図12】バックトラックプログラムJ100のフローチャートである。
【図13】短部材挿入部1プログラムK100のフローチャートである。
【図14】解の確定1プログラムL100のフローチャートである。
【図15】解の確定2プログラムM100のフローチャートである。
【図16】短部材挿入部2プログラムN100のフローチャートである。
【図17】挿入カットパターン作成プログラムO100のフローチャートである。
【図18】最終挿入プログラムP100のフローチャートである。
【図19】第二の実施形態に係るメインプログラムQ100のフローチャートである。
【発明を実施するための形態】
【0020】
以下に図面を参照して、本発明の一実施形態に係る部材取りシステム及び部材取りプログラムについて詳細に説明する。
【0021】
(第一の実施形態)
(部材取りシステム1)
図1は部材取りシステム1のハードウエア・ソフトウエア構成を概略的に示すシステム構成図である。同図において、部材取りシステム1は、原資材リストMLに登録・記憶されている多種類の複数原資材から、部材リストCLに登録・記憶されている長さの異なる種々の部材を必要本数切り出す場合に、使用する原資材の総コスト又は発生する破材長さを抑える切断方法を求め、複数原資材から種々の部材を必要本数切り出すシステムである。
【0022】
図1に示すように、部材取りシステム1は、コンピュータ2を備える。コンピュータ2は、部材取りプログラムPGと、原資材データベース3(以下「原資材DB3」という)と、部材データベース4(以下「部材DB4」という)とを備える。ここで、部材取りプログラムPGは、図2に示す定義や手続・関数に従って作成された図3〜図19(ただし、図19は第二の実施形態)に示す各種プログラムを総称したものである。部材取りシステム1は、更に、建築CADシステム5と、資材切断システム6を備える。建築CADシステム5及び資材切断システム6は、LAN7(又は公衆回線8)によって、通信用インタフェース(図示省略)を介してコンピュータ2とデータの送信及び/又は受信が可能に有線又は無線で接続される。
【0023】
コンピュータ2は、記憶部2a、制御部2b、キーボード・マウス等の入力部2c、モニタ画面2d等を備える。
記憶部2aは、ROMやRAM、上記の原資材DB3、部材DB4によって構成され、原資材DB3には原資材リストMLが記憶され、部材DB4には部材リストCLが記憶される。また、記憶部2aは、部材取りプログラムPGその他の各種プログラムを記憶するほか、部材取りプログラムPGの実行に際して使用する、各種パラメータとして、
(1)原資材DB3及び原資材リストMLのファイル名・パス名、
(2)部材DB4及び部材リストCLのファイル名・パス名、
(3)建築図面KZ(建築図面データベース9(以下単に「建築図面DB9」という)に記憶される)のファイル名・パス名、
(4)鋸厚TH(鋸厚とは、原資材の切断に用いる「鋸の厚さ」をいう、以下同じ)、
(5)端切長HL(端切長とは、原資材の端から一定の長さが切断されるその長さをいう、以下同じ)、
(6)コスト破材選択フラグFL(コスト破材選択フラグとは、部材取りプログラムPGの実行によって抑える対象をコストにするのか破材にするのかを選択するフラグをいう、以下同じ))、を記憶する。
【0024】
ここで、原資材DB3は、任意のデータベースを適用でき、図1に示すように、コンピュータ2の記憶部2aに記憶されたものに限定されず、外付けタイプのもの、建築CADシステム5や資材切断システム6に記憶させたものでもよい。原資材DB3の内容に基づいて、原資材リストMLが作成され、原資材DB3は、原資材リストMLを記憶する。
【0025】
原資材リストMLは、表1に示すように、原資材の長さ(以下「原資材長さ」という)のフィールドからなるリストである。ここで、「原資材」とは、以下に説明する部材が切り出される母材であり、在庫品や購入可能な母材をいう。
原資材リストMLの原資材長さとしては、原資材DB3に格納されている各原資材長さから端切長HLを引いたものが登録・記憶される。
原資材リストMLの原資材コストとしては、使用する原資材の総コストが最小化される場合(コスト破材選択フラグFLがコストを示す場合)は、各原資材コストが登録・記憶され、発生する破材が最小化される場合(コスト破材選択フラグFLが破材を示す場合)には各原資材長さが登録・記憶される。
【0026】
【表1】
【0027】
部材DB4は、建築図面KZに基づいて作成された部材リストCLを備えるデータベースである。部材DB4は、図1に示すように、コンピュータ2の記憶部2aに記憶されたものに限定されず、外付けタイプのもの、建築CADシステム5や資材切断システム6に記憶させたものでもよい。また、部材リストCLは、建築物毎に備えられるものでもよいし、建築対象・顧客・費用請求の方法等に応じて任意に構成されうるものでもよい。
【0028】
部材リストCLは、表2に示すように、部材の長さ(以下「部材長さ」という)と部材の必要本数のフィールドからなるリストである。ここで、「部材」とは、建築図面DB9に表された建築物を建てるのに必要な原資材から切り出されるサイズが決まった材料である。部材リストCLの部材長さとしては、建築図面KZに基づいて判断された各部材長さに鋸厚THを加えた値が登録・記憶される。部材リストCLの部材の必要本数としては、建築図面KZに基づいて判断された各部材の必要本数が登録・記憶される。
【0029】
【表2】
【0030】
建築図面KZは、部材取りシステム1を機能させるための基本的な設定事項の一つとして入力される建築図面を示す。建築図面KZとしては、任意の建築図面が登録・記憶され、これに基づいて、部材リストCLが自動作成又は手入力作成される。
鋸厚THは、部材取りシステム1を機能させるための基本的なパラメータの一つとして入力される値であり、切断部6cに設けられる鋸の厚さを示す。鋸厚THは、部材リストCLの作成時において必要とされる部材長さに自動的に加算される。
【0031】
端切長HLは、部材取りシステム1を機能させるための基本的なパラメータの一つとして入力される値であり、原資材の端からカットすべき長さを示す。端切長HLは、原資材リストMLの作成時において原資材長さから自動的に減算される。
コスト破材選択フラグFLは、部材取りシステム1を機能させるための基本的なパラメータの一つとして指定される値であり、最小化の対象が原資材コストか破材長さかを示す。
【0032】
また、記憶部2aは演算を行う際の一時記憶領域としても用いられる。建築図面KZに関するデータは、本実施形態においてはLAN7(又は公衆回線8)を介して受信されるが記憶部2aに記憶してもよい。
【0033】
制御部2bは、記憶部2a、入力部2c、モニタ画面2d、原資材DB3、部材DB4、建築CADシステム5、資材切断システム6等とデータ受信及び/又は送信可能に直接又は間接的に有線又は無線で接続され、装置各部を制御する。すなわち、制御部2bは、部材取りプログラムPGは勿論のことその他の各種プログラムを読み出して実行し、部材取りシステム1を構成する機器各部を作動させるとともに、機器各部の状況を検知し、その状況判断及び必要な命令の装置各部への送出を実行する。
【0034】
入力部2cは、原資材DB3のファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLを入力するのに用いられる。更に、入力部2cは、原資材リストMLや部材リストCLを手入力する場合、制御部2bに各種演算・各種判断を行わせる場合、必要な命令を送出させるトリガとなる信号を送出させる場合に用いられる。
モニタ画面2dは、原資材DB3のファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLの値入力を促す入力ボックスや、原資材リストMLや部材リストCLの一覧・演算結果を表示する。
【0035】
建築CADシステム5は、記憶部5a、制御部5b、入力部5c、モニタ画面5d等を備え、コンピュータによって構築可能なシステムである。建築CADシステム5は、建築図面KZに基づいて部材リストCLを作成することができるフォーマットで(すなわち、建築図面KZをモニタ画面5d,2dで見ることによりどのサイズの部材が何本使用されるかがわかるフォーマットで)、建築図面KZを建築図面DB9に記憶させるものであれば、特に限定されず、建築対象・顧客等に応じて任意に採用しうる。また、建築CADシステム5は、部材取りシステム1を構成するコンピュータ2により構築してもよい。
【0036】
資材切断システム6は、記憶部6a、制御部6b、切断部6c等を備え、コンピュータ2によって演算された切断方法に従って資材を切断するシステムである。コンピュータ2によって演算された切断方法は、例えば、用いる[原資材(使用する原資材の長さ),切り方(切り出す長さ)]のフィールドからなる切り出しリスト(例えば、後述する確定解Solution)として、LAN7(又は公衆回線8)を介してコンピュータ2から資材切断システム6へ送られる。制御部6bは、切り出しリスト(確定解Solution)に基づいて資材を切断するよう切断部6cを制御する。切り出す順番等は、最適化が図られる。尚、制御部2bによってこれを制御してもよい。
【0037】
(部材取りシステム1の動作及び部材取りプログラムPGの処理手順)
本発明の一実施形態に係る部材取りシステム1の動作及び部材取りプログラムPGの処理手順について、図2に示すパラメータ・リスト・手続・関数及び図3〜図18に示すフローチャート等を参照して説明する。尚、その処理手順は、制御部2bが記憶部2aに記憶された部材取りプログラムPG(メインプログラムA100等)を読み出して実行することにより実現され、これにより、コンピュータ等を部材取りシステム1として機能させ、動作させる。また、本実施形態は、最適解法(図10参照)と近似解法(図8、図13〜図18等参照)とを組み合わせた新規なアルゴリズムであり、効率的に演算を行いながら、使用する原資材の総コスト及び/又は発生する破材長さの抑制を実現する。
【0038】
(メインプログラムA100の概略)
第一の実施形態に係るメインプログラムA100は、
(A1)部材リストを長部材と短部材に分割する(A103)→
(A2-1)長部材リストに対してカットパターンリストを作成し、クラス分けをする(A103)→
(A2-2)カットパターンリストに分枝限定法を適用し、部分最適解を求める(A106)→
(A2-3)短部材を1本ずつ、既定の条件を満たす場合に限り(A2-2)の解に挿入する(A107)→
(A3)ここまでで得られている解の中から確定パターン(例えば、最長原資材を使用し、かつ、破材長さが原資材長さの1%以下になっているもの)のみを保存し、この確定パターンで切り出されることが決定された部材はその分だけ部材リストから減少させる(A108)→
(A4)再び部材リストの分割を行うが(A3)の実行により部材リストが縮小し、長部材の範囲が増える場合があるため、その場合は(A2-1)に戻って繰り返す(A104〜A110)→
(A5)短部材を何本かまとめて、既定の条件を満たす場合に限り(A4)の解に挿入する(A112)→
(A6)最後に残った短部材を、(A5)の解にうまく挿入する(A113)という手順による。
【0039】
(A101:初期設定部)
A101においては、初期設定画面(図示省略)が表示される。初期設定画面においては、原資材DB3及び原資材リストMLのファイル名・パス名、部材DB4及び部材リストCLのファイル名・パス名、建築図面KZのファイル名・パス名、鋸厚TH、端切長HL、コスト破材選択フラグFLを設定するための入力ボックス(図示省略)が表示され、オペレータによってこれらのパラメータが入力される。入力された各パラメータは、記憶部2aに登録・記憶される。そして、A101においては、上記のユーザ入力に基づいて、原資材リストML、部材リストCLが認識され、あるいは、作成される。原資材リストML及び部材リストCLの一例は、上記表1、表2の通りである。
【0040】
表1に示す原資材リストMLは、原資材DB3の各原資材のデータに基づいて、[原資材長さ,原資材コスト]というフィールドからなるリスト形式で登録・記憶される。そのうち、「原資材長さ」は、「各原資材長さから端切長HLを減じた値」が登録・記憶されたものである。また、「原資材コスト」のフィールドには、コスト破材選択フラグFLの値に応じ、原則として「原資材コスト」を登録・記憶させるが、「原資材の破材長さ」を登録・記憶させてもよい。
表2に示す部材リストCLは、建築図面KZに基づいて、[部材長さ,必要本数]というフィールドを備えたリスト形式で登録・記憶される。ここで、「部材長さ」は、「実際に必要な部材長さに鋸厚THを加えた値」が登録・記憶されたものである。
【0041】
更に、部材リストCLは、部材長さをキーとして降順(長さが長いものから短いものになる順番)にソートされる。後述するA103の部材リスト分割処理の前提として部材リストCLが部材長さの降順でソートされているとよいためである。A101の処理が終わると、A102の処理に進む。
【0042】
(A102:解を格納するリストSolutionの生成)
A102においては、部材取りプログラムPGの実行過程に得られる一応の結果や、最終的に得られる結果を格納するリストとしてSolutionが生成される。
Solutionは、[原資材長さ,切り方]、すなわち、(m,P)=(m,(l1,l2,l3,…,ln))で表されるフィールドを備えたカットパターンによって構成される。尚、「切り方」とは、少なくとも1の切断長さを含む切断長さの集まりである。A102の処理が終わると、A103の処理に進む。
【0043】
(A103:部材リスト分割処理の概要)
A103においては、部材リスト分割プログラムB100が呼び出され、その実行により、分割ポイント(B101〜B106のループ脱出条件を満たすp、本プログラムでは、部材リストCLの第p行目以降が短部材となる)が求められ(B105)、部材リストCLの第1行目〜第(p-1)行目の長部材からなる長部材リストCLLと、部材リストCLの第p行目〜第size(CL)行目の短部材からなる短部材リストCLSとが作成される(B107)。長部材リストCLL及び短部材リストCLSは、部材リストCLと同様に、[部材長さ,必要本数]のフィールドを備える。
そして、長部材リストCLLからカットパターンリストPLが作成され(B108)、B108で作成されたカットパターンリストPLを構成する各カットパターン(m,P)がクラス分けされ、分類後のカットパターンリストClassが作成される(B109)。以下にこれらの処理について詳細に説明する。
【0044】
(A103:部材リスト分割処理の詳細)
B101においては、ループ脱出条件を判断するためにパラメータpが採用される。ここで、パラメータpは、分割ポイント(B105)を意味する他、「部材リストCLの第何行目までを対象として、B103におけるカットパターンを作成するかを示す値であり、第1行目を初期値としてB106を介してB101に戻る毎に1ずつインクリメントされ、部材リストCLの行数が上限となる」パラメータである。
B102においては、長部材を格納する長部材リストCLLと、短部材を格納する短部材リストCLSとが生成される。すなわち、B102においては、パラメータi(=1〜p)の値に応じて、部材リストCLの第1行目〜第p行目までを対象とする長部材リストCLLが作成され(push(CLL,CL[i]))、部材リストCLの第(p+1)行目〜部材リストCLの最終行目(第size(CL)行目)までを対象とする短部材リストCLSが作成される(push(CLS,CL[i]))。
【0045】
(B103:カットパターンリスト作成処理の概要)
B103においては、カットパターンリスト作成プログラムC100が呼び出され、原資材リストMLと長部材リストCLLに基づいて可能な切り方が列挙されたカットパターン(m,P)が作成され(C102)、ソートされたカットパターンリストPLが作成される(C103)。
【0046】
(B103:カットパターンリスト作成処理の詳細)
C101においては、カットパターンを格納するためのリストとして、カットパターンリストPLが生成される。カットパターンリストPLは、[原資材長さ,切り方]=(m,P)=(m,(l1,…,ln))のフィールドを備えたリストである。
C102においては、長さmの原資材から、「C102の条件」を満たすようにカットパターン(m,P)が生成され、カットパターンリストPLに格納される。尚、カットパターン(m,P)は、部材リストCLに含まれる少なくとも1の部材を1本用いたあらゆる組み合わせ、すなわち、部材リストCLの第1行目〜第p行目までのいずれかを使用して生成された少なくとも1本の切り方を含むものであればよい。「C102の条件」は、カットパターン(m,P)の生成毎又はその生成後のタイミングで判断される。「C102の条件」は次の通りである。
【0047】
<C102の条件>
(C102の条件1)「m=suite(sum(P))」とは、C102で生成されるカットパターン(m,P)を構成する各切り方P(=l1,…,ln)を加算した値(=l1+…+ln)以上の最短長さの原資材長さがカットパターン(m,P)の原資材長さmと等しいことを要することを意味する。この判断により、切り方を加算してそれよりも長い最短の原資材があることがわかり、コストや破材長さを抑えることができる。
【0048】
(C102の条件2)「sum(P)≦原資材の最大長」とは、C102で生成されるカットパターン(m,P)を構成する各切り方P(=l1,…,ln)を加算した値(=l1+…+ln)が原資材の最大長以下であることを要することを意味する。切り方を加算すると原資材の最大長を超えるカットパターンはあり得ないため、これを除外するためである。
【0049】
(C102の条件3)「possible(P,CLL)」とは、カットパターン(m,P)の切り方Pを構成する各長さl(=l1,…,ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「長部材リストCLLの当該部材長さl(=l1,…,ln)の各必要本数以下」であることを要することを意味する。切り方Pを構成する各長さl(=l1,…,ln)の各本数が長部材リストCLLの当該部材長さの必要本数を超えると不要な部材(余分な部材)をカットすることになり、コストや破材が増加するためである。尚、「count(l,P)」について補足すると、切り方Pを構成する各長さl(=l1,…,ln)の各本数は、その切り方Pにおける各長さの各合計本数であって、種類の数を意味するものではない。
【0050】
(C102の条件4)「P[1]≧…≧P[n]」とは、切り方Pを構成する各長さ(l1,…,ln)が長さの長いものから短いものへと降順にソートされている(すなわち、l1>,…,>ln)ことを要することを意味する。長いものから切り方を決めるという観点、及び、演算の効率化、コスト・破材を抑制する観点によるものである。
【0051】
尚、C102におけるカットパターン(m,P)は、B102で機械的に長部材リストCLLに格納された部材(CLL[i]、ここで、i=1〜p)について作成される(未だ、分割されていないのに長部材リストとしているが、以下のように、分割ポイントは演算過程で判明するため便宜上長部材リストへ格納される、そこで、機械的といっている)。
表2の場合には、size(CL)が19であるから、p=1〜19の値をとりうる。ここで、「p=1〜19の値をとりうる」との表現をしたのは、部材リスト分割プログラムB100は、後述するB105において、そのパラメータpを用いて分割ポイントpが設定されるが、これは、p=size(CL)まで到達しないうちに、部材リストCLの分割ポイントpが設定され、ループを脱出して(B105:≧)、次のB107に進むからである。
【0052】
さて、C103においては、C102で作成したカットパターンリストPLが、「C103の条件」、すなわち、カットパターンリストPLを構成する各カットパターン(m,P)が降順になるようにソートされる。従って、各カットパターン(m,P)同士では、一つめの切り方が異なればそれらを比較して降順とされ、n(ここで、nはn>1の整数)番目の切り方が同じであれば(n+1)番目の切り方同士を比較して降順とされる。尚、n番目の切り方が同じだが一方に(n+1)番目の切り方が無い場合には、(n+1)番目の切り方が無い方が後方に位置するようにソートされる。
表3は、B103の処理によって作成されるカットパターンリストPLの一例(p=14の場合)を示す。その後、B104の処理に進む。
【0053】
【表3】
【0054】
(B104:カットパターンリスト分類処理の概要)
B104においては、カットパターンリスト分類プログラムD100が呼び出され、カットパターンリストPLを構成する類似するカットパターン同士が後述する「D103の条件」により、同一クラスに分類される。分類後のものを「カットパターンリストClass」、単に「Class」ともいう。
【0055】
(B104:カットパターンリスト分類処理の詳細)
D101においては、各カットパターン(m,P)が分類されるClass番号(表4参照)を示すパラメータcnに0が代入される。
D102〜D105のループ処理においては、カットパターンリストPLを構成する全行の[原資材長さ,切り方]=(m,P(l1,…,ln))について、第1行目から順番に「D103の条件」が判断され、その判断結果に基づいて分類分けがなされる(D103〜D104,D106)。「D103の条件」は、以下の通りである。
【0056】
<D103の条件>
「P=(l1,…,ln),Class[i][1]=(m',(l'1,…,l'n'))としたとき」のうち、「P=(l1,…,ln)」は、B103で作成したカットパターンリストPLの各行のカットパターン(m,P)のうち処理対象となるまさに分類しようとするカットパターン(m,P)の切り方Pを示す。また、「Class[i][1]=(m',(l'1,…,l'n')」は、D102〜D105のループ処理で作成された(ただし、最初にD103を行う場合にはClass[i][1]は未だない)、分類後のカットパターンリストClass(表4参照)のうち、Class[i]の第1行目の行、すなわち、Class[i]の代表カットパターン(m',P')を示し、「l'1」は、Class[i]の代表長さを示す(表4参照)。
【0057】
例えば、Class[i][1]は、表4でいえば、Class[1][1]がClass[1]の(5486,(5430))を示し、Class[2][1]がClass[2]の第1行目の(6096,(4286,1790))を示し、…、Class[18][1]がClass[18]の第1行目の(6096,(2920,2752))を示す。D103においては、パラメータiは、「クラス番号iで示される全てのカットパターンリストClass」と比較をするという意味(D103の処理によれば、1≦∃i≦cnとされていることで、iが取り得る最大値が既作成のClass番号の末尾番号となることがわかる)で用いられる。
【0058】
(D103の条件1)「m=m'」は、カットパターンリストPLの分類対象となる行の原資材長さm(表3参照)と、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターンの原資材長さm'(表4参照)とが等しいことを要することを意味する。換言すれば、「m=m'」は、分類済みのカットパターンリストClass[i]に新たな行(カットパターン)を追加する場合には、原資材が同じ長さのものであることを要すること、逆に言えば、原資材の長さが異なるクラスしか存在しない場合には、新たなクラスが生成され、この新たなクラスに分類されることを意味する。「m=m'」の条件を導入したのは、後述する探索プログラム(H100)において、出力結果の最適性を保証しつつ探索範囲を限定し、演算効率を高めるためである。
従って、m=m'である場合には、他の「D103の条件」を満たすことで、該当する既存Classに新たな行が追加され、既存Classに分類される(D104)。一方、すべての既存クラスにおいてm≠m'である場合には、新たなClassが生成され、その生成されたClassの第1行目に行が代表カットパターンとして追加される(D105)。
【0059】
(D103の条件2)「n≦n'」は、カットパターンリストPLの分類対象となる行のカットパターン(m,P)に含まれる部材の全本数nが、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターン(m',P')に含まれる部材の全本数n'以下であることを要することを意味する。尚、分類対象となっているPLのカットパターン(m,P)は、(m,(l1,…,ln))、比較対象となっている既存Classのカットパターン(m',P')は、(m',(l'1,…,l'n'))で表されるため、n,n'がそれぞれの部材の全本数をも表すことは明らかである。
換言すれば、「n≦n'」は、既存Class[i]に新たな行を追加する場合には、切り方Pを構成する本数が既存Classの代表カットパターンの切り方P'を構成する本数以下であることを要すること、逆に言えば、切り方Pを構成する本数が代表カットパターンの切り方P'を構成する本数より多いようなClassしか存在しない場合には、新たなClassが生成されることを意味する。「n≦n'」の条件を導入したのは、出力結果の最適性を保証しつつ探索範囲を限定し、演算効率を高めるためである。
【0060】
(D103の条件3)「l1=l'1」は、カットパターンリストPLの分類対象となる行のカットパターン(m,P)に含まれる代表長さl1が、分類後のカットパターンリストClass[i](1≦i≦cn)の代表カットパターン(m',P')に含まれる代表長さl'1と等しいことを要することを意味する。
換言すれば、「l1=l'1」は、既存Class[i]に新たな行を追加する場合には、追加される切り方Pの代表長さl1がClass[i]の代表カットパターンの切り方P'の代表長さと同じことを要すること、逆に言えば、切り方Pの代表長さが代表カットパターンの切り方P'の代表長さと異なるようなClassしか存在しない場合には、新たなClassが生成されることを意味する。「l1=l'1」の条件を導入したのは、切り方の代表長さの長いカットパターンを優先的に探索することで、演算効率を高めるためである。
【0061】
そして、「D103の条件」を全て満たすと判断された場合には(D103:YES)、D104に進み、既存Class[i]の末尾に分類対象となっているカットパターン(m,P)が追加される。その後、D105に進み、ループ脱出条件(すなわち、カットパターンリストPLの全行について分類分けを終了するという条件)を満たすまで、D102の処理に戻って上記処理が行われる。
また、「D103の条件」を一つでも満たさないと判断された場合には(D103:NO)、D106に進み、クラス番号を示すカウンタcnがインクリメントされるとともに、新たな「分類後のカットパターンクラスClass[cn]」が生成され、そこに、分類対象となっているカットパターン(m,P)が新たなClassの代表カットパターンとして追加される。その後、D105に進み、カットパターンリストPLの全行についてクラス分類が終了するまで、D102の処理に戻って、D102〜D105のループ処理が行われる。
【0062】
以上の処理により、B104においては、B103で作成されたカットパターンリストPLが分類分けされた「分類後のカットパターンリストClass」が得られる。カットパターンリストPLが既にC102の条件及びC103の条件によりソートされているため、分類後のカットパターンリストClassは、各カットパターン(m,P)が代表長さに基づいて降順にソートされたものとなり、各カットパターン(m,P)を構成する切り方Pも降順にソートされたものとなる。
表4は、B104の処理によって作成される分類後のカットパターンリストClassの一例(p=14の場合)を示す。その後、B105の処理に進む。
【0063】
【表4】
【0064】
(B105〜B109:分割ポイント判定処理、長部材リストCLL及び短部材リストCLS作成処理、カットパターンリスト作成処理、カットパターンリスト分類処理の概要)
B105においては、「ある種類数(1又は2以上の種類数)のクラスを用いてある長さの部材を必要本数切り出す」のに何通りあるかが重複組合せの理論によって求められ(部材リスト分割プログラムB100においては、#(p)Hrpのように示す記号が重複組み合わせの記号)、これを、必要な各部材毎に求め、各部材毎の重複組み合わせの数を全て掛け合わせたもの(#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp)が、切り出し方の総数(=treesize(p,Class))として求められ、その総数が所定の閾値以上か否かが判断される(B105)。ここで、treesize(p,Class)は後述する最適解探索プログラムH100における全探索のサイズを見積もるための概算値を意味しており、「所定の閾値」とは、現実的な時間内で探索が可能な限界サイズを示す。「所定の閾値」は、1014〜1016の範囲が望ましく、B105では1015としたが、計算機の性能に応じて調整すればよい。
【0065】
そして、B105において、treesize(p,Class)が所定の閾値未満である場合(B105:<)には、B101に戻ってpがインクリメントされ、B101〜B106のループ処理が再び行われる。B101〜B106のループ処理は、B105において、treesize(p,Class)が所定の閾値以上である(B105:≧)と判断されるまで行われる。
【0066】
ここで、B105においてtreesize(p,Class)≧1015と判断された場合に、カットパターンリストPLの第1行目〜第何行目までが長部材となり、第何行目〜第size(CL)行目までが短部材とされるかについて説明する。B105においてtreesize(p,Class)≧1015との判断により、「第1行目〜第p行目までを長部材とすると、演算量の目安となるtreesize(p,Class)の値が所定値を超過することが判明する」ため、B107において、部材リストCLの第1行目〜第(p-1)行目が長部材として長部材リストCLLにコピーされ、部材リストCLの第p行目〜第size(CL)行目までが短部材として短部材リストCLSにコピーされる(B107)。
【0067】
表5は、B107における処理の結果の一例を示す。すなわち、表1の原資材リストMLを用いて表2の部材リストCLの各部材を切り出す場合には、直近のB103やB104で求めたカットパターンリストPLや分類後のカットパターンリストClassを用いて演算すると、p=15でB105の脱出条件が満たされ、B107の処理がなされ、その結果、表5の長部材リストCLLと短部材リストCLSが得られる。
【0068】
【表5】
【0069】
そして、B108及びB109においては、B103及びB104と同様にカットパターンリストPL(表6参照)及び分類後のカットパターンリストClass(表7参照)が作成し直され、A104以降の処理に供される。
表6は、表5に示す長部材リストCLLについて、B108において作成されるカットパターンリストPLを示す。尚、表6作成時のパラメータp値は、表3作成時のパラメータp値と異なるが、表6は表3と同一である。これは、B104においては部材リストCLの第1行目〜第p行目が、B107においては部材リストCLの第1行目〜第(p-1)行目が、それぞれ、長部材リストCLLに格納されるためである。
【0070】
【表6】
【0071】
表7は、表6のカットパターンリストPLについて、B109において作成される分類後のカットパターンリストClassを示す。尚、表7作成時のパラメータp値は、表4作成時のパラメータp値と異なるが、表7は表4と同一である。これは、B104においては部材リストCLの第1行目〜第p行目が、B107においては部材リストCLの第1行目〜第(p-1)行目が、それぞれ、長部材リストCLLに格納されるためである。
【0072】
【表7】
【0073】
以下に、B105〜B109の処理を更に詳細に説明する。
(B105:分割ポイント判定処理の詳細)
B105において用いるtreesize(p,Class)について説明する。パラメータpは、B101におけるパラメータpと同義であるが、確認すると、部材クラスCLの第1行目〜第p行目(すなわち、長部材リストCLLに格納された方)が処理対象であることを示す。そして、分類後のカットパターンリストClassとしては、直近のB104で作成されたものが用いられる。
【0074】
次に、「treesize(p,Class)=#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp,
ここで,1≦k≦pについて(lk, rk) = CL[k]とすると,
rk = 0のとき
#(k) = 1
rk > 0のとき
#(k) = tk - hk + 1
ここで,(hk, tk) = range(lk, Class)」について説明する。
【0075】
まず、パラメータkは、1≦k≦p、すなわち、部材リストCLの第1行目〜第p行目を意味する。また、CL[k]は、部材リストCLの第k行目を示し、(lk,rk)=(第k行目の部材長さ,第k行目の必要本数)を示す。従って、#(k)Hrkにおける右側のrkは、「部材リストCLの第k行目の長さlkの部材の必要本数」を示す。#(k)Hrkにおける左側の#(k)は、部材リストCLの第k行目の長さlkの部材を切り出すために用いられる、直近のB104で作成された分類後のカットパターンリストClass(表4参照)を参照して求められる、「クラスの種類数」を示す。従って、#(k)は、直近のB104で作成された分類後のカットパターンリストClassを参照して、「第k行目の必要本数rk=0のときは、#(k)=1(重複組合せで考慮する必要がなく、計算上の理由から)とされ、第k行目の必要本数rk>0のときは、#(k)=tk-hk+1」とされる。
【0076】
ここで、「#(k)=tk-hk+1」が何故「クラスの種類数」を示すのかについて説明する。(hk,tk)=range(lk,Class)により求められる「hk,tk」は、分類後のカットパターンリストClassの第1行目から順番に、すなわち、Class[1]、Class[2]…と順番に見たときに、「hk」が「長さlkが代表長さとして先頭(head)に出てくるClass番号」を意味し、「tk」が「長さlkが代表長さとして末尾(tail)に出てくるClass番号」を意味する。よって、(#k)がクラスの種類数となる。
【0077】
そして、「#(k)Hrk」は、いわゆる「重複組み合わせ」の総数を意味し、「第k行目の長さlkの部材を#(k)種類のクラスから重複を許してrk個を切り出すときの切り方の総数」を意味する。従って、1≦k≦pである場合に、「treesize(p,Class)=#(1)Hr1×#(2)Hr2,…(,×#(k)Hrk×,)…,×#(p)Hrp」の意味するところは、「部材リストCLの第1行目〜第p行目までの各長さの部材の切り方の組合せ数(重複組み合わせを用いた切り方の組合せ数)を乗算したもの、すなわち、「部材リストCLの第1行目〜第p行目までの切り方の重複組合せ総数」となる。そして、treesize(p,Class)の値は、後述する最適解探索プログラムH100における演算量を判断する目安となり、上限が1014〜1016である場合にその演算量を実用的な範囲に収めることができる。
【0078】
(B107:長部材リストCLL及び短部材リストCLS作成処理の詳細)
B105において所定の閾値以上であると判断された後(B105:≧)、B107においては、その時点でのp値ではtreesize(p,Class)が所定の閾値を超えてしまうので、再度、長部材リストCLL及び短部材リストCLSが作成し直される。このため、部材リストCLの第1行目〜第(p-1)行目が長部材リストCLLとして作成(すなわち、コピー)され、部材リストCLの第p行目〜第size(CL)行目が短部材リストCLSとして作成(すなわち、コピー)される。
【0079】
表5は、長部材リストCLL及び短部材リストCLSの一例を示す。この例は、表2の部材リストCLについて、B101〜B107を実行した結果得られたものである。
表2の部材リストCLについて、部材リスト分割プログラムB100をpを1からインクリメントさせながら実行させると、B101〜B106のループ処理において、p=14の場合には、ループ脱出条件を満たすまでの一過程として、B103において表3のカットパターンリストPLが作成されるとともに、B104において表4の分類後のカットパターンリストClassが作成される。しかしながら、p=14の場合には、B105におけるループ脱出条件が満たさない。
【0080】
従って、p=14からループで戻り、p=15となった時のB102において、p=14の時に作成された表3のカットパターンリストPL及び表4の分類後のカットパターンリストClassにp=15の場合のものが上書きされ、p=14のときのカットパターンリストPL(表3参照)や分類後のカットパターンリストClass(表4参照)が破棄される。そして、B103やB104においては、p=15とした場合におけるカットパターンリストPLや分類後のカットパターンリストClassが作成された状態で、B105においてループ脱出条件が満たされる。従って、B105においては、p=15でループを脱出させると判断されるがp=15のままでは先ほどのtreesize(15,Class)が所定の閾値を超えるため、部材リストCLの第1行目〜第14(=p-1)行目が長部材、第15(=p)行目〜第19(=size(CL))行目が短部材に分割される(B107)。
そして、部材リストCLの第1行目〜第14行目が長部材リストCLLとして作成(コピー)され、部材リストCLの第15行目〜第19行目が短部材リストCLSとして作成(コピー)される(B107)。
【0081】
(B108:カットパターンリストPL作成処理の詳細)
B108においては、カットパターンリスト作成プログラムC100が呼び出され、分割ポイント(p=15)で分割した長部材リストCLL(本実施形態では、部材リストCLの第1行目〜第14行目)について、カットパターンリストPLが再度生成される。その詳細は、B103における説明と同様であるため、その説明をもってこれに代える。
【0082】
(B109:カットパターンリスト分類処理の詳細)
B109においては、カットパターンリスト分類プログラムD100が呼び出され、分割ポイント(p=15)で分割した長部材リストCLL(本実施形態では、部材リストCLの第1行目〜第14行目)について、B108で作成されたカットパターンリストPLの各行が再度分類される。その詳細は、B104における説明と同様であるため、その説明をもってこれに代える。
【0083】
(A104〜A110)
B109の処理が終わると、A104〜A110のループ処理に進む。A104及びA105においては、パラメータの初期設定が行われる。A105においては、A103で分割ポイントとされたパラメータpの値がパラメータp'にマーキングされる。後述するA109においても部材リスト分割処理がなされるが、そこで求められる新たな分割ポイントの基準となるパラメータpの値と比較し、同一値である場合に真の分割ポイントとして確定させ、A104〜A110のループ処理を脱出させるためである。
【0084】
(A106:部分最適解計算処理)
A106においては、部分最適解計算部プログラムE100が呼び出され、その実行により、長部材リストCLLの各長部材を必要本数切り出す部分的な最適解として[原資材長さ,切り方]のフィールドを備えた最適解Resultが求められる。尚、ここで、部分最適解という名称を用いているのは、A106が近似解法(E101)と最適解法(E102)とを組み合わせたものであり、しかも、部材リストCLの一部について最適解法を適用しているためである。更に詳しく述べれば、部分最適解計算処理は、グリーディ法を応用したE101の初期解生成処理(近似解法)、分枝限定法を応用したE102の最適解探索処理(最適解法)から構成され、E101の初期解生成処理により一応の目安としての初期解(Result)が求められ、その上で、E102の最適解探索処理により最適解(Result)が求められる。これら両者をResultとしているのは、初期解よりも破材長さが少ない、コスト安であるという条件を満たした場合には、E102で求めた最適解が初期解に上書きされてResultとされるが、そのような条件を満たさない場合には、E101の初期解がResultとされるためである。
【0085】
尚、E101の初期解生成処理は、必須の構成ではなく、これを行わずにE102の最適解探索処理を行ってもよい。E101の初期解生成処理の存在意義は、一応の目安となる初期解及びコストが求まること、並びに、初期解及びコストを求めた上でE102の最適解探索処理を行うと初期解でのコストとの比較により余計な演算を打ち切ることができ、演算処理を効率化できることにある。
【0086】
(E101:初期解生成処理)
E101の初期解生成処理においては、初期解生成プログラムF100が呼び出され、その実行により、原資材リストMLと長部材リストCLLから初期解([原資材長さ,切り方]のフィールドを備えたカットパターンリスト)が求められ、Resultに格納される。ここでは、グリーディ法を応用して長部材リストCLLに対する近似解が高速に求められる。
【0087】
F101〜F105のループ処理は、長部材リストCLL(表5参照)に切り方が定まらずに部材が残っている限り(要するに必要本数のフィールドが0超(r>0))、繰り返し実行される。そして、F102においては、長部材リストCLLがCutlistにコピーされるとともに(F103のグリーディ法で使用するための準備であり、F101〜F105のループ処理でループする度に最新のCutlist(F104で切り方が決まったものは長部材リストCLLから削減されるから)がF103のグリーディ法に渡される)、トータルコストを示すパラメータmincostに初期設定として0が代入される。
【0088】
(G100:グリーディ法)
F103においては、グリーディ法プログラムG100が呼び出され、グリーディ法を用いて、できるだけ原資材の余りが少なく、かつ、単位長さ当たりのコストが安くなるようにカットパターン(m,P)=[原資材長さ,切り方]が求められる。
【0089】
G101においては、最小コストを表すパラメータminに初期設定として原資材の最高コストが代入される。そして、G102〜G106のループ処理においては、原資材リストMLの全ての原資材長さm(原資材リストMLの第1行目〜最終行を対象として順番に、すなわち、表1の場合、第1巡目のループではm=2438の原資材が処理対象となり、第2巡目のループではm=3048の原資材が処理対象となり、最後のループではm=6096の原資材が処理対象となる)について、G103〜G105の処理が行われる。
そして、G103においては、当該原資材長さmを用いた場合における「G103の条件」を満たす切り方P(=l1,…,ln)が求められる。ここで、「G103の条件」は以下の通りである。
【0090】
<G103の条件>
以下の(1)、(2)の条件を満たすものの中で、sum(P)の値が最大であることを要する。
(1)possible(P,Cutlist)が真であること。
(2)sum(P)≦mを満たすこと。
ここで、possible(P,Cutlist)が真であるということは、分類後のカットパターンリストClassの各カットパターン(m,P)の切り方Pを構成する各長さ(l=l1,…ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「Cutlistの当該部材長さ(l=l1,…ln)の各必要本数以下」であることを要することを意味する。不要な部材をカットしないためである。
【0091】
sum(P)≦mを満たすということは、切り方Pを構成する各長さ(=l1,…ln)を加算した値(=l1+…+ln)が当該原資材長さm以下であることを要することを意味する。切り方を加算すると当該原資材長さmを超える切り方Pはあり得ないため、これを除外するためである。
そして、これらの条件を満たすものの中でsum(P)の値が最大であるということは、当該原資材m(原資材長さmの長さである原資材をいう、以下同じ)において発生する破材が最も少ないことを意味し、破材長さの抑制、コストダウンに寄与することとなる。
【0092】
そして、G104においては、当該原資材mを用いて計算されたG103の切り方Pを用いた場合における原資材mの単位長さ当たりのコストが求められ、その値がminよりも小さいか否かが判断される。第1巡目のループでは初期設定としてminには原資材の最高コストが代入されているため、必ずG105を介してG102に戻ってG103〜G105が実行される。しかし、ループの第2巡目以降におけるG104においては、前回ループ以前における最も安い「原資材mの単位長さ当たりのコストmin」と比較される。従って、G104において、そのminよりも更に安いと判断されれば(G104:YES)、G105においては、minに新たな「原資材mの単位長さ当たりのコスト(=price(m)/sum(P))」が代入されるとともに、当該原資材長さmがパラメータmpに、直近のG103で計算された切り方PがパラメータPpに代入される。
以上の処理がCutlistを対象に全ての原資材mを用いて行われると、G106でループから脱出する。グリーディ法プログラムG100の実行により、発生する破材が最小で、単位長さ当たりのコストも最小のカットパターン(mp,Pp)、すなわち、F102での最新のCutlistに対する唯一の(mp,Pp)=[原資材長さ,切り方]が得られる。そして、F104に進む。
【0093】
F104においては、Resultに(mp,Pp)が追加される。下記の表8の場合、第1行目の(5486,(2752,2724))は、F101〜F105の第1巡目のループ処理の実行により(mp,Pp)として追加されたものである。更に、F104においては、パラメータmincostに原資材コストprice(mp)として、5486mmのコスト5486円が加算される。また、Resultに追加されたカットパターン(mp,Pp)を構成する切り方(Pp=l1,…,ln)は、長部材リストCLLの長部材を切り出す切り方の初期解として採用されるものとするため、長部材リストCLLの各部材長さの各必要本数から各々1デクリメントする(r=r-1)処理がなされる。例えば、表8の場合、第1行目の(5486,(2752,2724))がF101〜F105の第1巡目のループ処理の実行により(mp,Pp)として追加されるため、表5の長部材リストCLLの2752mmの必要本数が2とあるのが1にデクリメントされ(r=r-1により)、同じく2724mmの必要本数が5とあるのが4にデクリメントされる。
【0094】
そして、F105においては、F104で切り方として採用される初期解が決まって必要本数が徐々にデクリメントされる過程において、長部材リストCLLの全ての部材長さの必要本数が0になったか否かが判断され、0超ならば切り方が決まっていない長部材が残っているためF101に戻る。すなわち、長部材リストCLLの全ての長部材について採用すべき切り方、すなわち、初期解が決まるまで、F101〜F105のループ処理が実行される。
その結果得られる初期解Resultを表8に示す。表8は、初期解生成プログラムF100を本実施形態における原資材リストML(表1参照)、長部材リストCLL(表5参照)を用いて実際に実行した結果であり、各行がカットパターン(m,P)=[原資材長さm,切り方P]のフィールドを備える。表8の各行はF101〜F105のループ処理を一巡する毎に、一行毎作成される。
【0095】
【表8】
【0096】
F106〜F108のループ処理においては、長部材リストCLLの必要本数を元に戻す演算が行われる。これは、Result中のl(=l1,…,ln)が何本あるかをカウントすることにより行われる。尚、ここでは、パラメータmincostには直近のF104で求めたトータルコストが格納され、この値が、後述する最適解探索プログラムH100での累積コストたるcostと比較される(H110)。さて、F106〜F108のループ処理により長部材リストCLLが表5に示す初期状態に戻されると、F108でループから脱出し、E102に進む。
【0097】
(H100:最適解探索プログラムの概要)
E102においては、最適解探索プログラムH100が呼び出され、その実行により、分類後のカットパターンリストClassに基づいて最適解法により最適解が計算され、上記F100の初期解生成処理により得られたmincostよりもコストcostが安いと判断される場合に、その最適解がResultに格納される。
最適解探索プログラムH100においては、カットパターンリスト分類プログラムD100の実行により得られたクラスを用いて、各カットパターンが探索ノード(u,v)=[クラス番号,カットパターン特定番号]、すなわち、(u,v)=[クラス番号,当該クラスの何行目かを示す行番号]とすることにより特定される。
【0098】
例えば、表7の各カットパターンは、探索ノード(u,v)を用いて、
Class[1]の(m,P)=(5486,(5430))が(u,v)=(1,1)で表され、
Class[2]の第1行目の(m,P)=(6096,(4286,1790))が(u,v)=(2,1)で表され、
Class[2]の第2行目の(m,P)=(6096,(4286,1776))が(u,v)=(2,2)で表され、
Class[18]の第1行目の(m,P)=(6096,(2920,2752))が(u,v)=(18,1)で表され、
Class[18]の第2行目の(m,P)=(6096,(2920,2724))が(u,v)=(18,2)で表され、
Class[18]の第3行目の(m,P)=(6096,(2920,2648))が(u,v)=(18,3)で表される。
【0099】
そして、最適解探索プログラムH100では、探索ノード及びこれを格納した探索リストを用いて、最適解が求められる(分枝限定法)。ここで、カットパターンそのものではなく、探索ノードを用いたのは、系統的な探索を行う上ではカットパターンを番号で管理する方が容易であり、演算量の縮小による演算効率向上も見込めるからである。
【0100】
表9は、最適解探索プログラムH100を表5の長部材リストCLL、表7の分類後のカットパターンリストClassに適用して得られた最適解Resultを示す。
【0101】
【表9】
【0102】
表10は、最適解Resultが得られた後、長部材リストCLLの必要数量がすべて0にされた長部材リストCLL(H115)を示す。
【0103】
【表10】
【0104】
(H100:最適解探索プログラムの詳細)
H101においては、累計コストを示すパラメータcostに初期設定として0が代入されるとともに、探索リストSが生成される。ちなみに、後述から明かであるが探索リストSを構成する探索ノード(u,v)は、[当該クラス番号,カットパターン特定番号]のフィールドを備えてカットパターンを特定するとともに、[当該クラス番号,カットパターン不存在表示]のフィールドを備えて当該カットパターン不存在を特定する。
H101においては、また、クラス番号を示すパラメータuに1が代入される。表7でいえば、そのClass[1]からカットパターンを探索するという意味である。これにより、H102の探索プログラムI100を呼び出す準備ができ、H102に進む。
【0105】
H102においては、探索プログラムI100が呼び出される。
まず、I101においてはClass[1]を構成する全てのカットパターン(m,P1)…(m,Pn)のうち、possible(Pk,CLL)を満たすk(1≦k≦n)が存在するか否かが判断される。すなわち、「所定のクラス(Class[1])に属するカットパターンの中に余分な部材を出さないカットパターンが存在するか否か」が判断される。具体的には、「クラス番号1に分類されている[原資材長さ,切り方]を適用したときに長部材リストCLLの必要本数を超えて部材を切り出さないそのような[原資材長さ,切り方]が存在するか否か」、換言すれば、「カットパターン中の各切り方の各本数が長部材リストCLLの当該長さの各必要本数以下であるか否か」、更に換言すれば、「カットパターンに従って(原資材から)部材を切り出したときに、長部材リストCLLの必要本数を超えて不要な部材や余分な部材を切り出さないか否か」が判断される。
【0106】
I101の条件を満たす場合には(I101:YES)、I102に進み、Class[1]のうちI101の条件を満たす最小(若い番号)のk、すなわち、クラス番号1の中で優先順位が高い第k行目のカットパターン[原資材長さ,切り方]が採用され、(m,P)に代入される。そして、パラメータcostにClass[1]の第k行目で使用する原資材mのコストが加算される。更に、後述するバックトラックプログラムJ100の実行有無の判断フラグとなるstateにforward(バックトラックを行わず前方探索を続けるを意味)が代入される。
従って、Class[1][1](クラス1の第1行目)のカットパターンを用いて切り出すと余分な部材(不要な部材)が出る場合には、不要な部材が出ず、かつ、1≦k≦nの中で最小の第k行目のカットパターンが選ばれる。
【0107】
このようにして、I102においては、長部材リストCLLで必要とされる部材のいくつかの切り方として、クラス番号1の第k行目で規定されるカットパターン[原資材長さ,切り方]を採用することが暫定的に決められる。その後、I103〜I105のループ処理へ進むと、そのカットパターンに含まれる各長さの部材全ての必要本数を長部材リストCLLから1デクリメントする処理(I104)がなされる。尚、カットパターンの中に同一長さの部材が複数ある場合には、同一長さが複数存在するので当該長さについては当該複数回数分デクリメントされる。
そして、I107においては、探索リストSに(1,1)=(Class[1]のクラス番号1,Class[1]の第1行目の行番号1)=[当該クラス番号,カットパターン特定番号]が追加される。
表7のClassについては、H101〜H102が実行されると、(u,v)=(1,1)が探索リストSに追加される。
【0108】
一方、I101の条件を満たさない場合(I101:NO)、すなわち、Class[1]を構成するカットパターンで部材を切り出すとその時点における長部材リストCLLでは不要な部材まで切り出してしまう場合には、I106に進み、クラス番号1の行番号を示すパラメータvに0がカットパターン不存在表示として代入される。このことは、Class[1]には適当なカットパターンが存在しないこと、すなわち、Class[1]に属するカットパターンを用いて部材を切り出すと、余分な部材が出てしまうことを意味する。また、フラグstateにはバックトラックプログラムJ101の実行を意味するbackが代入される。そして、I107においては、探索リストSに(u,v)=(1,0)が追加される。v=0であっても探索リストSに追加するのは、その後、H106のバックトラックでこれまでの演算結果が一つ戻されるからである(J101のpop(S)、J102:=)。そして、その上でカットパターンを探索すべきクラス番号uが代表長さが同じ別のクラスになるように1インクリメントされた(H108)上で探索(H109)される。
以上のようにして、I105又はI106を実行した後、I107を実行し、H103〜H112のループ処理に進む。
【0109】
先ほどのH102の探索プログラムI100では、長部材リストCLLの切り方として「どのクラスの何行目のカットパターン」を採用するかが決められるが、H103〜H112のループ処理においても、引き続き、長部材リストCLLに残っている長部材に採用すべきカットパターンが決められる。
【0110】
(H103〜H112のループ処理及びH115の処理の概要)
ここで、H104の説明を行う前にH103〜H112のループ処理及びH115の処理について簡単に説明する。
H103〜H112のループ処理の脱出条件は探索リストSが0(空)になることであるが、以下に説明するように、このループでは、
(1)長部材リストCLLが空になるまで、探索リストSに(u,v)、すなわち、[当該クラス番号u,カットパターン特定番号v]=[クラス番号u,当該クラス番号の第k行目の行番号v]が追加(I107)され(この間にH106のバックトラック等を介するときはバックトラックの間は探索リストSの探索ノードが削減され又は削減され続け、優先度の低いクラスから探索されることはある)、その後は、
(2)H106のバックトラックを介して、探索リストSの削減と長部材リストCLLへの戻しを行いつつ、カットパターンを探索すべき優先度の低いクラスが存在しないかを判定し(探索すべき優先度の低いクラスが存在しない場合にはH107:≧)、そのような優先度の低いクラスが存在する場合には(H107:<)、再度長部材リストCLLが空になるまで、探索リストSに(u,v)を追加しながら、コストや破材長さを抑えることができるカットパターンを探索しつつ、
(3)最終的には、カットパターンを探索すべき優先度の低いクラスが全く存在しない(H107:≧)という判断がされ続ける状態になり、結果、探索リストSが0(空)になるまで探索ノードが全て削減され(J101)、探索リストSが空になる。
【0111】
従って、H103〜H112のループ処理においては、探索リストSが空になる前に長部材リストCLLに残っている部材がなくなる(必要本数が全て0、すなわち、長部材リストCLLの部材全てのカットパターンを特定する探索ノードが探索リストSに追加されている状態)タイミングが少なくとも1回はあるが、そのタイミングにおける累積コストcostが従前に求めたmincost(直近のF104又は直近のH110で求めたmincost)より安い場合には、探索リストSを構成する全探索ノードによって特定される[原資材長さ,切り方]が最適解としてResultに追加(コピー)される(H111)。逆の言い方をすれば、最適解探索プログラムH100を実行しても初期解生成プログラムF100で求めた初期解としてのResultよりもコスト抑制可能な切り方が存在しない場合には、初期解としてのResultが最適解探索プログラムH100においても結果的に維持される。
もっとも、初期解探索プログラムF100を実行しないようにしてもよい。この場合には、mincostには十分大きな値を最初から設定しておくことにより、最適解探索プログラムH100で探索しうる中で最低コストを実現するResultが必ず得られる。
以上のH101〜H112の処理により、長部材リストCLLのカットパターンが全て暫定的に定まる。従って、H115においては長部材リストCLLの各部材の各必要本数に全て0が代入される。
【0112】
(H104)
さて、話を元に戻す。次に、H104においては、(u,v)、すなわち、(Class[u]のクラス番号u,Class[u]の第k行目の行番号v)に探索リストSの末尾の探索ノードが代入される。どのClassを探索するかの基準にするためである。
【0113】
次に、H105に進むと、
(1)state=forward、すなわち、フラグstateがforward(前方探索)である、
(2)∃(l,r) in CLL, r>0、すなわち、長部材リストCLLの必要本数が0超である部材(すなわち、切り方が決まっていない長部材)が存在する、
(3)cost<mincost、すなわち、累積コストcostが直近のF104又はH111で求めたmincost(初期解探索プログラムF100が実行されない場合には、十分に大きな値が設定されたmincost)よりも小さい、
という条件が全て満たされるか否かが判断される。
【0114】
(H105:YES)
これらの条件が全て満たされると判断された場合(H105:YES)には、H113に進む。H113においては、まず、longest(CLL)が実行されることにより、長部材リストCLLに残っている切り方を決めるべき部材(すなわち、必要本数rが0超の部材)のうち、最長部材がどれかが求められる。そして、次に、range(longest(CLL), Class)が実行されることにより、その最長部材長さが代表長さl1であるClassが第何クラスh〜第何クラスtに存在するかが求められる。すなわち、h(headの略)、t(tailの略)で、hにはその最長部材長さが代表長さl1である先頭のクラス番号が代入され、tにはその最長部材長さが代表長さl1である末尾のクラス番号が代入される。
【0115】
次いで、max(u,h)が求められる。max(u,h)は、uとhのうち値が大きい方を返す(同じ値の場合にはその値を返す)という関数である。max(u,h)=uとなる場合は、長部材リストCLLに残っている切り方を決めるべき部材のうち、最長部材が既に探索対象(H102、H114、H109のいずれか)としたクラス番号uの代表長さl1と同じものがまだ残っている場合である。一方、max(u,h)=hとなる場合は、長部材リストCLLに残っている切り方を決めるべき部材のうち、最長部材が既に探索対象(H102、H114、H109のいずれか)としたクラス番号uに残っていない場合である(前回の最長部材は既に暫定的に切り方が決まってしまったため長部材リストCLLから削減されている)。従って、H113の処理により、長部材リストCLLに残っている切り方を決めるべき部材に採用すべきカットパターンを、長い部材を備えるクラスに属するカットパターンから優先的に探索することが決められる。そのようなクラス番号uとして、長部材リストCLLに残っている切り方を決めるべき最長部材が属するクラス番号が代入される(H113)。
【0116】
H114においては、探索プログラムI100が呼び出される。
まず、I101においてはClass[u]を構成する全てのカットパターン(m,P1)…(m,Pn)のうち、possible(Pk,CLL)を満たすk(1≦k≦n)が存在するか否かが判断される。すなわち、「所定のクラスに属するカットパターンの中に余分な部材を出さないカットパターンが存在するか否か」が判断される。具体的には、「クラス番号uに分類されている[原資材長さ,切り方]を適用したときに長部材リストCLLの必要本数を超えて部材を切り出さないそのような[原資材長さ,切り方]が存在するか否か」、換言すれば、「カットパターン中の各切り方の各本数が長部材リストCLLの当該長さの各必要本数以下であるか否か」、更に換言すれば、「カットパターンに従って(原資材から)部材を切り出したときに、長部材リストCLLの必要本数を超えて不要な部材や余分な部材を切り出さないか否か」が判断される。
【0117】
I101の条件を満たす場合には(I101:YES)、I102に進み、Class[u]のうちI101の条件を満たす最小(若い番号)のk、すなわち、クラス番号uの中で優先順位が高い第k行目のカットパターン[原資材長さ,切り方]が採用され、(m,P)に代入される。そして、パラメータcostにClass[u]の第k行目で使用する原資材mのコストが加算される。更に、後述するバックトラックプログラムJ100の実行有無の判断フラグとなるstateにforward(バックトラックを行わず前方探索を続ける意味)が代入される。
従って、Class[u][1](クラスuの第1行目)のカットパターンを用いて切り出すと余分な部材(不要な部材)が出る場合には、不要な部材が出ず、かつ、1≦k≦nの中で最小の第k行目のカットパターンが選ばれる。
【0118】
このようにして、I102においては、長部材リストCLLで必要とされる部材のいくつかの切り方として、クラス番号uの第k行目で規定されるカットパターン[原資材長さ,切り方]を採用することが暫定的に決められる。その後、I103〜I105のループ処理へ進むと、そのカットパターンに含まれる各長さの部材全ての必要本数を長部材リストCLLから1デクリメントする処理(I104)がなされる。尚、カットパターンの中に同一長さの部材が複数ある場合には、同一長さが複数存在するので当該長さについては当該複数回数分デクリメントされる。
そして、I107においては、探索リストSに(u,v)=(Class[u]のクラス番号u,Class[u]の第k行目の行番号v)=[当該クラス番号,カットパターン特定番号]が追加される。
表7のClassについては、H114が実行されると、例えば、(u,v)=(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(2,1),(2,1),(4,1),(6,1),(6,1),(8,1),(8,1),(10,1),(12,1),(12,0)…等が探索リストSに追加される。
【0119】
一方、I101の条件を満たさない場合(I101:NO)、すなわち、Class[u]を構成するカットパターンで部材を切り出すとその時点における長部材リストCLLでは不要な部材まで切り出してしまう場合には、I106に進み、クラス番号uの行番号を示すパラメータvに0がカットパターン不存在表示として代入される。このことは、Class[u]には適当なカットパターンが存在しないこと、すなわち、Class[u]に属するカットパターンを用いて部材を切り出すと、余分な部材が出てしまうことを意味する。また、フラグstateにはバックトラックプログラムJ101の実行を意味するbackが代入される。そして、I107においては、探索リストSに(u,v)=(Class[u]のクラス番号u,0)がプッシュされる。v=0であっても探索リストSにプッシュするのは、その後、H106のバックトラックでこれまでの演算結果が一つ戻されるからである(J101のpop(S)、J102:=)。そして、その上でカットパターンを探索すべきクラス番号uが代表長さが同じ別のクラスになるように1インクリメントされた(H108)上で探索(H109)される。
【0120】
以上のようにして、I105又はI106を実行した後、I107を実行し、H110に進む。
H110においては、
(1)長部材リストCLLの全ての部材の必要本数が0であり(0である場合は、長部材リストCLLの全ての部材のカットパターンが探索ノードによって特定されている状態である)、かつ、
(2)その時点の最適解探索プログラムH100における累計コストを意味するパラメータcostが最低コストを示すパラメータmincost(直近のF114又はH111で求めたmincost)よりも安いと判断されると(H110:YES)、H111に進む。
【0121】
そして、H111においては、最適解を格納するリストResultが生成される(これまでの初期解としてのResultが破棄される)。また、最低コストmincostに累計コストcostが代入される。更に、これが重要であるが、分類後のカットパターンリストClass[i][j]、すなわち、探索リストSの探索ノード(i,j)=(クラス番号i,当該クラス番号iの行番号j)=[当該クラス番号,カットパターン特定番号]によって特定されるカットパターン[原資材長さ,切り方]が生成されたResultに格納される。
【0122】
(H105:NO)
一方、H105に規定する条件が一つでも満たされない場合には、H106のバックトラックに進み、バックトラックプログラムJ100が呼び出される。ちなみに、H105に規定する条件が一つでも満たされない場合として、
(1-1)フラグstateがbackである場合のうち、直近で呼び出された前方探索の探索プログラム(H102、H114、H109のいずれか)において、対象とするClass[u]には適当なvがなかった場合(Class[u]に属するどのカットパターンを用いても長部材リストCLLでは不要な部材、余分な部材を切り出すことになる場合)(J102:=);
【0123】
(1-2)フラグstateがbackである場合のうち、直近で呼び出された後方探索のバックトラック(H106)において、対象とするClass[u]には適当なvが存在するもののそれより優先度が低いクラスに適用しうるカットパターンがなかった場合(J102:>)(補足すると、その後、H105でYESと判断されたところから前方探索が始まる、また、後方探索がずっと続き探索リストSが空になると既にResultにコピーされている探索ノードによって特定されるカットパターンが最適解となる);
(2)長部材リストCLLの全ての部材についての切り方が探索ノードによって特定されて、必要本数が全て0(r=0)になった場合;
(3)最適解探索プログラムH100における累計コストcostが最低コストmincost以上になった場合、が挙げられる。
【0124】
(H106〜H109)
さて、H106→J101においては、(u,v)、すなわち、[当該クラス番号,カットパターン特定番号]に探索リストSの末尾(直近、最新)の探索ノードが代入される。その上で、pop(S)により探索リストSが一つ前の状態に戻されるとともに、フラグstateにbackが代入される(以降stateにforwardが代入されるまでバックトラックにより後方から、探索可能な優先度の低い他のクラスの存在の有無が探索される)。
J102においては、J101で末尾にあった探索ノード(u,v)のvが0か否かが判断される。0の場合には(J102:=)、前回の探索(H102、H114、H109のいずれか)ではそのクラス番号uの中に適用しうるカットパターンが無かったことを意味するため(I101:NO)、何もせず(J101のpop(S)で一つ前の状態に戻っているため)、バックトラックプログラムJ100を抜ける。
【0125】
一方、J101で末尾にあった探索ノード(u,v)のvが0超の場合には(J102:>)、前回の探索(H102、H114、H109のいずれか)ではそのクラス番号uの中に適用しうるカットパターンが有り、その(u,v)によって特定されるカットパターンを構成する切り方が長部材リストCLLの必要本数からデクリメントされていることを意味する。
従って、そのデクリメントされたカットパターンについて、J103の累計コストを元に戻す処理及びJ104〜J106の必要本数を元に戻すループ処理が行われる。これにより、クラス番号uで示されるクラス以降のクラスに属するカットパターンから、長部材リストCLL(元に戻された必要本数を含む)に残っている部材に適用しうるカットパターンを探索可能な状態となる。
【0126】
尚、J103においては、具体的には、
(1)(m,P)には累計コスト及び長部材リストCLLを一つ前の状態に戻すために用いるカットパターンを示すClass[u][v]の[原資材m,切り方P]が代入されるとともに、
(2)累計コストcostには、そのコスト(=price(m))を減じたコストが代入されて累計コストが一つ前の状態に戻され、
J104〜J106のループ処理においては、具体的には、J103で規定したカットパターン(m,P)の切り方Pを構成する各長さの本数が1本ずつ長部材リストCLLの該当部材の必要本数に1インクリメントされる(要するに1本ずつ元に戻す)処理がなされ必要本数が一つ前の状態に戻される。
その後、H107に進む。
【0127】
(H107)
H107においては、longest(CLL)を実行することにより、H106で部材を元に戻した場合及び戻さない場合を含め、長部材リストCLLに残っている切り方を決めるべき部材(すなわち、必要本数が0超の部材)のうち、最長部材が求められる。そして、次に、range(longest(CLL), Class)が実行されることにより、その最長部材長さが代表長さl1であるClassが第何クラスh〜第何クラスtに存在するかが求められる。これにより、h(head)にはその最長部材長さが代表長さl1である先頭のクラス番号が代入され、t(tail)にはその最長部材長さが代表長さl1である末尾のクラス番号が代入される。
【0128】
(H107:<)
次いで、uとtとが比較される。u<tの場合(Class[u]とClass[t]とを比べたときに、代表長さが異なる場合、原資材が異なる場合等)には(H107:<)、これまで探索されなかった優先度の低いClassが後続クラスに存在する。そこで、その優先度の低いClassから長部材リストCLLに適用すべきカットパターンを探索すべく、探索すべきクラスを優先度の低いクラスに変更すべくu=u+1の処理がなされる。ここで、「優先度の低いクラス」について補足する。例えば、H113のクラス特定手法(uを決める手法)では、最長部材が属するクラスの先頭クラスを優先度の高い探索対象としたため、先頭クラス以外のクラスは、探索対象とはならない。そのため、u=u+1が優先度の低いクラスを探索対象とすることを意味する。
【0129】
そして、H109の処理に進み、探索プログラムI100が呼び出される。I101においては、H108で指定された新たなClass[u]の中から長部材リストCLLの必要本数を超えない最小の行番号vのカットパターン、すなわち、余分な部材を出さないカットパターンの存在の有無が判断され、vが見つかることにより、そのようなカットパターンが存在すると判断されると(I101:YES)、そのカットパターンの切り方と同じ長さの部材の必要本数が長部材リストCLLの必要本数から減じる処理がなされ、その新たな探索ノード(u,v)が探索リストSに追加される(I107)。
そして、H110に進むと、長部材リストCLLの部材の切り方が全て決まり、しかも、累積コストが最小である場合には、H111に進むが、そうではない場合(H110:NO)には、H103〜H112のループ処理の先頭に戻り、探索リストSが空になるまで、H103〜H112の処理が行われる。
【0130】
(H107:≧)
一方、u≧tである場合(Class[u]とClass[t]とが同じ場合等)には(H107:≧)、当該最長部材における探索対象となるクラスは優先度が高いクラスから優先度の低いクラスまで探索され尽くしたことを意味する。そこで、探索はなされず、H103〜H112のループ処理の先頭に戻る。
【0131】
ここで、補足すれば、H107でしばらく≧と判断され続ける状態(H105→H106→H107→H104→H105の繰り返し)が存在する。この状態が後方探索であり、探索可能な優先度の低いクラスが存在するか否かが長部材リストCLLに必要部材が1カットパターン毎に戻されつつ(J103〜J106)、判断される。そして、あるところでH107で<との判断がなされると、そこからまた前方探索が始まり、その後、いずれ後方探索が始まる。このような前方探索又は後方探索を行う過程において、長部材リストCLLの必要部材が全て0になったときに(H110)、その累積コストが更に安い場合にはそれらがResult及びmincostに格納される(H111)。最終的には、H107でしばらく≧と判断され続ける状態(H105→H106→H107→H104→H105の繰り返し)が探索リストSが全て空になるまで継続する状態になる。探索すべき優先度の低いクラスが無くなるからである。そして、探索リストSが全て空になると、H103〜H112のループ処理を脱出する。先ほど述べたように、Resultにはコスト安(mincostで裏付けられる)な最適解が格納されている。
【0132】
このように、長部材リストCLLの必要部材が全て0になった後においては、H106のバックトラック処理を介して探索リストSから探索ノードを末尾から1つずつ減らしつつ、優先度の低い探索可能なクラスが見つかる度に他のカットパターンが探索されるとともに(H109,H114)、コスト計算をしながら(H110)、探索リストSが0になるまで、H103〜H112のループ処理が行われる。
【0133】
以上の処理を、表1の原資材リストML、表5の長部材リストCLLに基づいて表7のClassに適用した結果が上記の表9のResultである。
その後、H103〜H112のループ処理を脱出すると、長部材リストCLLの部材のカットパターンがバックトラック(H106)により全部埋まった状態である。しかし、長部材リストCLLの部材の切り方は既に求まり(H111)、Resultに格納されている。そこで、H115においては、長部材リストCLLの部材の必要本数が全て0とされる。
【0134】
(A107:短部材挿入部1プログラムK100の概要)
A107においては、A106の部分最適解計算部で得られた長部材リストCLLについてのResultに対して、短部材リストCLSの各短部材が最適性を極力失わない方法によって挿入される。すなわち、この挿入は、短部材リストCLSの中から短部材が1本ずつ最適解Resultに挿入される(例えば、Resultの切り方に短部材が1本追加される)ことによりなされ、その挿入(追加)は、所定の条件(K106,K108,K111)が満たされる場合に実行される。
【0135】
(A107:短部材挿入部1プログラムK100の詳細)
K101においては、短部材リストCLSの第何行目の部材が処理対象であるかを示すパラメータiに初期値として1が代入される(まずは第1行目の短部材が処理対象とされる)。
K102〜K114のループ処理は、短部材リストCLSの部材の挿入に関する処理が各行についてなされる度にループする処理であり、短部材リストCLSの全ての部材(K102では脱出条件として全ての部材と規定される)について実行される。更に、K103においては、コスト増加分を示すパラメータminincに初期値として原資材の最高コスト(原資材リストMLでは6096円)が代入されるとともに、短部材が挿入されるResultの挿入行番号をマーキングしておくパラメータupに0が代入される(ちなみに、挿入可否の判断時(K111)にはパラメータupが0である場合には挿入されない)。更に、処理対象とする短部材リストCLSの第i行目の部材長さ及び必要本数が、それぞれ、パラメータl,rに代入される。
【0136】
K104〜K110のループ処理は、短部材リストCLSの第i行目の短部材について、Resultの第1行目〜最終行(第size(Result)行目)のうち最適な挿入位置及び/又はその挿入是非を判断する処理である。K104においては、K104〜K110のループ処理の脱出条件が規定される。パラメータuがResultの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
K105においては、挿入位置の候補となるResult[u]の[原資材長さ,切り方]が(m,(l1,…,ln))に代入されるとともに、Resultの第u行目のカットパターンの長さの合計(=l1+…+ln)と短部材リストCLSの第i行目の長さ(=l)とが加算され、これが、第i番行目の短部材を挿入した場合の全長さを示すパラメータtotalに代入される。
K106においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(K106:YES)、K107に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、K108に進む。
【0137】
K108においては、「K108の条件」が判断される。ここで、「K108の条件」とは次の通りである。
<K108の条件>
(K108の条件1)短部材リストCLSの第i行目の部材の必要本数がそもそも0である場合には、挿入するまでもないため、そのような短部材については処理を行わないようにするため、r>0であること。
(K108の条件2)K105で短部材リストCLSの第i番目の短部材を加算した場合におけるその破材長さ(=m'-total)が、その短部材を挿入する前の破材長さ(=m-(l1+...+ln))以下であること、すなわち、短部材リストCLSの第i番目の短部材を挿入しても破材長さが長くならないこと。破材長さを抑えることでコスト抑制に寄与するためである。
(K108の条件3)K105で短部材リストCLSの第i行目の部材を加算し、それに伴いK107で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であること。コスト増加を抑えることでコスト抑制に寄与するためである。
【0138】
さて、K108において各条件が満たされる場合には(K108:YES)、K109に進む。K109においては、最小コストを示すパラメータminincの値が新たにパラメータincの値に置き換えられる。更に、短部材の挿入位置を示すパラメータup(Resultの第何行目かを示す)にその時点で挿入位置として判断対象となっているResultの行番号を示すパラメータuの値が代入される。更に、原資材m'の値、すなわち、原資材長さm'が、新しく用いられる原資材長さを示すパラメータmp(Resultの第u行目の原資材mに代えて新たに置き換えられる値)に代入される。K109の処理により短部材リストCLSの第i行目をResultの第u行目に挿入する準備がなされ、K104〜K110のループ処理の先頭に戻る。
一方、K108の条件を満たさないと判断された場合には(K108:NO)、挿入位置が無いと判断されるため、K109の処理がなされず、K104〜K110のループ処理の先頭に戻る。
【0139】
以上のようにして、短部材リストCLSの第i行目の短部材を挿入しても良いかがResultの第1行目〜最終行(第size(Result)行目)の全ての行について1つずつ判断され、挿入しても良いと判断されればK107及びK109において該当するResultの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupには0以外のu値(Resultの第u行目)が入る。ちなみに、Resultの第1行目〜最終行(第size(Result)行目)のいずれの行においても挿入不可(K106:NO又はK108:NO)と判断されればK107及びK109において挿入準備がなされないためパラメータupの値が0のままである。
【0140】
そして、K104〜K109のループ処理が終了すると、K111においては、パラメータupが0か否かが判断される。
上記のようにパラメータupが0の場合には、短部材リストCLSの第i行目の挿入余地が無いため、K113へ進み、挿入可否の判断対象が次の短部材(i=i+1)に設定され(K113)、iがsize(CLS)を超えるまで、K102〜K114のループ処理の先頭に戻る。尚、処理対象となっている短部材リストCLSの第i番目の必要本数が0になっている場合においては、K106の条件が満たされたとしても、K108のr>0が満たされないことになる。これらの処理を経ることにより、Resultの全行について挿入可否が判断された後、結果、K113に進んで、iが1インクリメントされる。
【0141】
一方、パラメータupに0以外の値が入っている場合には(K111:>)、短部材リストCLSの第i行目を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、K112に進む。
K112においては、短部材リストCLSの第i行目の短部材が次のようにして挿入される。すなわち、Resultの第u行目(短部材を挿入する位置)であるResult[up]の原資材長さを示すパラメータmに原資材長さmp(K107で最適長さm'が求められ、K109でマーキングされたパラメータmp)が代入される。また、Resultの第up行目(短部材を挿入する位置)であるResult[up]の切り方Pの末尾にパラメータlの値が挿入される(これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l)となる)。このようにして挿入が終わると、短部材リストCLSの第i行目の短部材の切り方が決まったものとして必要本数が1デクリメントされる(r=r-1)。パラメータiがsize(CLS)を超えない限り、K102〜K114のループ処理の先頭に戻る。
【0142】
表11は、表9のResult(最適解探索プログラムH100の実行後)に短部材リストCLSの短部材を挿入した例を示す。表11のResultのうち短部材が挿入されたのは、(m,P)=(原資材,カットパターン)=(4876mm,(3964,894))、(4876mm,(3781,932))、(4876mm,(3781,932))である。表11は、破材が増える挿入ができないという条件(K108の条件)により、結果的に表5の短部材リストCLSの第1行目と第3行目の短部材が挿入され、Resultの原資材も変更されたことを示す。
【0143】
【表11】
【0144】
上記のように、短部材リストCLSの短部材がResultへ挿入された場合には(K112)、短部材リストCLSの挿入された短部材の必要本数がデクリメントされる(K112)。
表12は、表11で挿入した短部材の必要本数を表5の短部材リストCLSから減らした例を示す。
【0145】
【表12】
【0146】
(A108:解の確定1プログラム)
A108においては、解の確定1プログラムL100が呼び出され、リストResultの中から、最長の原資材を使用し、かつ、破材長さがその原資材長さの1%以下であるものだけが抜き出され、確定解としてSolutionに保存される。また、確定解Solutionに含まれている部材について、部材リストCLLの必要本数が更新される。
L101においては、その時点における長部材リストCLLと短部材リストCLSとを結合させる(具体的には表10と表12とが結合される)。
L102〜L106のループ処理は、Result(H111,K112参照)中の全行についてなされ、Resultの全行のうち「最長原資材を使用し、かつ、破材長さがその原資材長さの1%以下であるもの」が確定解として抜き出す対象とされ(L103:YES)、Solutionに追加される(L105)。尚、L103において「sum(P)/m≧0.99」は、切り方の合計長さ(sum(P))が原資材mの長さの0.99以上の長さを占める(換言すれば、破材長さが1%未満である)ことを意味する。
【0147】
一方、「最長原資材を使用していない及び/又は破材長さがその原資材長さの1%超であるという場合」には(L103:NO)、Resultから部材リストCL(L101で再結合した部材リストCL)に長部材及び/又は短部材を戻す処理、すなわち、Resultで規定する切り方(長さ)と同じ長さの長部材又は短部材の必要本数が1インクリメントされる処理がなされる(L104)。分割ポイントに基づくループ脱出の判断(A109、A110)に供するためである。
表13は、表11のResultのうち、Solutionに追加される(L105)確定解と、L101で再結合された部材リストCLにResultから長部材及び/又は短部材が復元された結果(L104)としても部材リストCLを示す。
表13によれば「Solutionに追加された部材以外の部材」が部材リストCLに復元されていることがわかる。尚、同表に「最長原資材を用いて2本カット」とあるのは、1デクリメントする際の根拠となるSolutionのあるカットパターンの切り方に同じ長さが2度含まれている場合と、Solutionの別のカットパターンにその長さがそれぞれ含まれている場合とがある(同表の場合は、後者の方)。
【0148】
【表13】
【0149】
(A109:部材リスト分割部)
A108の解の確定1の処理が終了すると、A109の部材リスト分割部の処理に進む。
A109の処理は上記したA103と同様の処理であるが、A109がA103と異なるのは、L104でResultから部材を戻すことにより得られた部材リストCL(表13参照)を対象として実行されることである。かかる処理を行うのは、確定解Solutionとして追加した分(L105)だけ部材リストCLの必要本数が減少しているため分割ポイントに変化が生じている可能性があるためである。従って、上記のA108の解の確定1を実行してもなお、分割ポイントに変更が生じないような分割ポイントが見つかるまでL101で部材リストCLを再結合しながらA104〜A110のループ処理がなされる。すなわち、A109の部材リスト分割部を実行することによって長部材の範囲が従来より増加した場合には、A106の部分最適解計算部の処理に戻り、範囲が変化しなかった場合はループを抜ける。
【0150】
表14は、L104で復元された部材リストCL(表13参照)についてA109の部材リスト分割処理を行った結果として、部材リストCLの第1行目〜第14行目が長部材リストCLLにコピーされ、部材リストCLの第15行目〜第19行目が短部材リストCLSにコピーされた例を示す。
【0151】
【表14】
【0152】
同表に示す例によれば部材リスト分割部のpのループはp=15のときに脱出条件が満たされる。つまり、p=15は、前回部材リスト分割を実行したときにA105でマーキングしたパラメータp'と同じ値である。従って、表2(直接的には表13)の部材リストCLの場合に上記手順を実行すると、最終的には、p=15でA104〜A110のループ処理の脱出条件が満たされ、A111の処理に進む。
【0153】
(A111:解の確定2プログラム)
A111においては、解の確定2プログラムM100が呼び出され、A107の短部材挿入部1で得られたResultのうち(M101)、A108の解の確定1の処理でSolutionに追加されなかったもの(m≠最長原資材)、又は、Resultを構成するカットパターンの切り方Pの合計長さが原資材長さの99%未満であるもの(すなわち、sum(P)/m<0.99、換言すれば、破材長さが原資材長さの1%超であるもの)が確定解として抜き出す対象とされ(M102:YES)、Solutionに追加される(M103)。また、Solutionに追加された長部材及び/又は短部材は、長部材リストCLL及び/又は短部材リストCLSから除外(r=r-1、すなわち、それらの必要本数が1デクリメント)される(M103)。
【0154】
表15は、A111の解の確定2の処理をResult(表11参照)、Solution(表13参照)及び部材リストCLL,CLS(表14参照)を対象に実行することにより得られたSolution、長部材リストCLL及び短部材リストCLSを示す。同表に示すように、長部材リストCLLは切り方が確定する一方、短部材リストCLSには切り方を決めるべき短部材が未だ残っている状態であり、後述する処理によって残っている短部材の切り方が決められる。
【0155】
【表15】
【0156】
(A112:短部材挿入部2の概要)
A112の短部材挿入部2の処理においては短部材挿入2プログラムN100が呼び出され、短部材リストCLSに残っている短部材が複数本まとめて(場合によっては単数本)挿入される。ここで、複数本まとめての挿入が可能なのはN101の挿入パターン作成処理において挿入カットパターン作成プログラムO100が呼び出されその実行により残っている短部材が挿入カットパターン化されるためである。
【0157】
N101においては、挿入カットパターン作成プログラムO100が呼び出され、挿入パターン作成処理と、挿入パターン分類処理とがなされる。より具体的には、
(1)挿入パターン作成処理として、原資材リストMLと短部材リストCLS(未だ切り方が決まっていない短部材が残っている)に基づいて可能な切り方が列挙された挿入パターンPが作成され(O102)、ソートされた挿入パターンリストPL(但し、上記のように[原資材m,切り方P]を要素とするものではなく、挿入パターン=[切り方P]のみが要素となる、上記と同様(m,P)でもよいがその必要がないため)が作成される処理がなされ(O103);その後、
(2)挿入パターン分類処理として、O103でソートされた挿入パターンリストPLが分類分け、すなわち、挿入パターンリストPLの各行で代表長さが同じ挿入パターンが類似する挿入パターンとして同一クラスに分類される一方(O106→O107)、代表長さが異なる挿入パターンが異なるクラスに分類される処理がなされる(O106→O109)。尚、分類後のものを「分類後の挿入パターンリストClass」という。
【0158】
(A112:短部材挿入部2の詳細)
これらの処理について更に詳細に説明する。
O101においては、挿入パターンを格納するためのリストとして、挿入パターンリストPLが生成される。挿入パターンリストPLは、[切り方]=P=(l1,…,ln)のフィールドを備えたリストである。
O102においては、「O102の条件」を満たすように挿入パターンPが生成され、挿入パターンリストPLに格納される。尚、挿入パターンPは、A111の解の確定2の処理を行った後、未だ切り方が定まらずに短部材リストCLSに残っている短部材を用いて作成される。また、挿入パターンPは、短部材リストCLSに含まれる少なくとも1の短部材を1本用いたあらゆる組み合わせ、すなわち、短部材リストCLSの第1行目〜最終行目までのいずれかを使用して生成された少なくとも1本の切り方を含むものであればよい。「O102の条件」は、挿入パターンPの生成毎又はその生成後のタイミングで判断される。「O102の条件」は次の通りである。
【0159】
<O102の条件>
(O102の条件1)「size(P)≦60/size(CLS)+1」とは、1つの挿入パターンPに含まれる切り方の数が最大でも61以下であることを要することを意味する。size(P)を無制限にすると組み合わせの数が大きくなりすぎ演算過程でオーバーフローするため、これを回避するためである。「60」は特に限定されるものではなく、任意の数値が適用可能である。
【0160】
(O102の条件2)「sum(P)≦原資材の最大長」とは、O102で生成される挿入パターン(=P(l1,…,ln))を構成する各切り方を加算した値(=l1+…+ln)が原資材の最大長以下であることを要することを意味する。切り方を加算すると原資材の最大長を超える挿入パターンはあり得ないため、これを除外するためである。
【0161】
(O102の条件3)「possible(P,CLS)」とは、「挿入パターンPを構成する各長さl(=l1,…,ln)の各本数(=count(l,P)=count(l,(l1,…,ln)))が「短部材リストCLSの当該部材長さl(=l1,…,ln)の各必要本数以下」であることを要することを意味する。挿入パターンPを構成する各長さl(=l1,…,ln)の各本数が短部材リストCLLの当該部材長さの必要本数を超えると不要な部材(余分な部材)をカットすることになり、コストや破材が増加するためである。尚、「count(l,P)」について補足すると、挿入パターンPを構成する各長さl(=l1,…,ln)の各本数は、その挿入パターンPにおける各長さの合計本数であって、種類の数を意味するものではない。
【0162】
(O102の条件4)「P[1]≧…≧P[n]」とは、挿入パターンPを構成する各長さ(l1,…,ln)が長さの長いものから短いものへと降順にソートされている(すなわち、l1>,…,>ln)ことを要することを意味する。長いものから切り方を決めるという観点、及び、演算の効率化、コスト・破材を抑制する観点によるものである。
【0163】
さて、O103においては、O102で作成した挿入パターンリストPLが、「O103の条件」、すなわち、挿入パターンリストPLを構成する各挿入パターンPが降順になるようにソートされる。従って、各挿入パターンP同士では、一つめの切り方が異なればそれらを比較して降順とされ、n(ここで、nはn>1の整数)番目の切り方が同じであれば(n+1)番目の切り方同士を比較して降順とされる。尚、n番目の切り方が同じだが一方に(n+1)番目の切り方が無い場合には、(n+1)番目の切り方が無い方が後方に位置するようにソートされる。
【0164】
O104においては、各挿入パターンリストPLが分類されるClass番号を示すパラメータcnに0が代入される。
O105〜O108のループ処理においては、まず、O106において、挿入パターンリストPLを構成する全各行の挿入パターンP(l1,…,ln)について、第1行目から順番にClass[i][1][1]=P[1]であるものがクラス番号1〜cnのClassのいずれかに存在するか否かが判断される。ここで、Class[i][1][1]=P[1]は、挿入パターンリストPLの分類対象となる行の挿入パターンPに含まれる代表長さP[1]が、分類後の挿入パターンリストClass[i](1≦i≦cn)の第1行目(Class[i][1])の代表長さClass[i][1][1]と等しいことを意味する。
【0165】
従って、O106において分類対象とされる挿入パターンの代表長さP[1]が既生成のクラスの代表長さClass[i][1][1](1≦i≦cn)のいずれかと等しいと判断された場合には(O106:YES)、O107に進み、分類後の挿入パターンリストClass[i]に新たな行として挿入パターンPが追加される(O107)。
一方、O106において分類対象とされる挿入パターンの代表長さP[1]が既生成のクラスの代表長さClass[i][1][1](1≦i≦cn)のいずれとも等しくないと判断された場合には(O106:NO)、O109に進み、新たなClassが生成され(cn=cn+1、create(Class[cn]))、その新たなClassに挿入パターンPが追加される(O109)。Class[i][1][1]=P[1]の条件を導入したのは、演算効率を高めるためである。
【0166】
このようにして、ループ脱出条件(すなわち、挿入パターンリストPLの全各行について分類分けを終了するという条件)を満たすまで、O105に戻って上記処理が行われる。
以上の処理により、N101の挿入パターン作成処理においては、A111の解の確定2の処理後に未だ切り方が定まらなかった短部材について、挿入パターン及びその分類分けがなされた「分類後の挿入パターンリストClass」が得られる。上記から明かであるが分類後の挿入パターンリストClassは、各行が代表長さによって降順にソートされたものとなり、各挿入パターンを構成する切り方も降順にソートされたものとなる。尚、各挿入パターンPは、単数本又は複数本のいずれもあり得る。
以上のようにして、N101の処理が終了する。
【0167】
(N102及びN103〜N115のループ処理の概要)
N102及びN103〜N115のループ処理においては、A111の解の確定2の処理を行うことによって得られている確定解Solutionに対して、N101で作成された挿入パターンリストClassの各挿入パターン(切り方)が最適性を極力失わない方法によって挿入される。すなわち、この挿入は、挿入パターンリストClassの第1クラス〜最終クラス(ここで、size(Class)はクラス数を意味する)のうちClass[i]を構成する各挿入パターンが1つずつ確定解Solutionに挿入される(例えば、Solution中のカットパターンの切り方の末尾に挿入パターンが追加される)ことによりなされ(N113)、その挿入(追加)は、所定の条件(N107,N109)が満たされる場合に実行される。
【0168】
(N102及びN103〜N115のループ処理の詳細)
N102においては、挿入パターンリストClassの第何クラスが処理対象であるかを示すパラメータiに初期値として1が代入される。これにより、第1(=i)クラスの挿入パターンが処理対象とされる。
N103〜N115のループ処理は、挿入パターンリストClassの部材の挿入に関する処理が各クラスについてなされる毎にループする処理であり、挿入パターンリストClassの全てのパターンについて実行される(N103,N105参照)。更に、N104においては、コスト増加分を示すパラメータminincに初期値として原資材の最高コスト(原資材リストMLでは6096円)が代入されるとともに、挿入パターンが挿入されるSolutionの挿入行番号をマーキングしておくパラメータupに0が代入される(ちなみに、挿入可否の判断時(N112)にはパラメータupが0である場合には挿入されない)。
【0169】
N105〜N111のループ処理は、挿入パターンリストClassの第iクラスの挿入パターンP'、すなわち、その第iクラスの第1行目〜最終行目までを順番(順番に行う点はフローチャート上では省略、実際にはP'用のループがある)に、確定解Solutionの第1行目〜最終行(第size(Solution)行目)のうちどこに挿入したら良いか(最適な挿入位置)、そして更に、挿入すべきか否か(挿入是非)を判断する処理である。尚、上記説明より明らかであるが、N105〜N111のループ処理は、挿入パターンリストClassの第iクラスを構成する挿入パターンP'が複数パターン存在する場合には当該複数回繰り返されることによりなされる。
【0170】
N105においては、N105〜N111のループ処理の脱出条件が規定される。パラメータuがSolutionの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
N106においては、挿入位置の候補となるSolution[u]のカットパターン[原資材長さ,切り方]が、(m, P)に代入されるとともに、Solutionの第u行目のカットパターンの長さの合計sum(P)と挿入パターンリストClassの第iクラスに属するいずれかの挿入パターンの長さの合計sum(P')とが加算され、これが、当該挿入パターンP'を挿入した場合の全長さを示すパラメータtotalに代入される。
【0171】
N107においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(N107:YES)、N108に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、N109に進む。
【0172】
N109においては、「N109の条件」が判断される。ここで、「N109の条件」とは次の通りである。
<N109の条件>
(N109の条件1)「possible(P',CLS)」とは、挿入パターンリストClassの第iクラスの処理対象たる挿入パターンP'の切り方を構成する各長さの各本数が「短部材リストCLSの当該部材長さの各必要本数以下」であることを要することを意味する。これは、不要な部材(余分な部材)を切り出さないようにするためである。換言すれば、挿入パターンリストClassの第iクラスのカットパターンを切り方が決まらず残っている短部材に適用したときに、短部材リストCLSの必要本数がそもそも0である短部材についてまで切り出してしまうことがないようにするためである。
【0173】
(N109の条件2)N106で挿入パターンリストClassの第iクラスの挿入パターンを加算した場合におけるその破材長さ(=m'-total)が、その挿入パターンを挿入する前の破材長さ(=m-sum(P))以下であること、すなわち、挿入パターンリストClassの第iクラスの挿入パターンを挿入することによって破材長さが長くならないことを要することを意味する。破材長さを抑えることでコスト抑制に寄与するためである。
(N109の条件3)N106で挿入パターンリストClassの第iクラスの部材長さを加算し、それに伴いN108で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であることを要することを意味する。コスト増加を抑えることでコスト抑制に寄与するためである。
【0174】
さて、N109において各条件が満たされる場合には(N109:YES)、N110に進む。N110においては、新たにパラメータincの値が最小コストを示すパラメータminincに代入される。更に、挿入パターンの挿入位置を示すパラメータup(Solutionの第何行目かを示す)にその時点で挿入位置として判断対象となっているSolutionの行番号を示すパラメータuの値が代入される。更に、原資材長さm'がパラメータmpに代入される。これにより、Solutionの第u行目の原資材長さmが原資材長さmpに変更される。また、挿入パターンリストClassの第iクラスの挿入パターンP'がパラメータPpに代入される。N110の処理により挿入パターンリストClassの第iクラスの挿入パターンP'をSolutionの第u行目に挿入する準備がなされ、N105〜N111のループ処理の先頭に戻る。
一方、N109の条件を満たさないと判断された場合には(N109:NO)、挿入できないと判断されるため、N110の処理がなされず、N105〜N111のループ処理の先頭に戻る。
【0175】
以上のようにして、挿入パターンリストClassの第iクラスの挿入パターンP'を挿入しても良いかがSolutionの第1行目〜最終行(第size(Solution)行目)の全ての行について1つずつ判断され、挿入しても良いと判断されればN108及びN110において該当するSolutionの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupには0以外のu値(Solutionの第u行目)が入る。ちなみに、Solutionの第1行目〜最終行(第size(Solution)行目)のいずれの行においても挿入不可(N107:NO又はP109:NO)と判断されればN108及びN110において挿入準備がなされないためパラメータupの値が0のままである。
【0176】
そして、N105〜N111のループ処理が終了すると、N112においては、パラメータupが0か否かが判断される。
上記のようにパラメータupが0の場合には、挿入パターンリストClassの第iクラスを挿入する余地が無いため、N114へ進み、挿入可否の判断対象が次の挿入パターンリストClassの第(i=i+1)クラスに設定され(N114)、iがsize(Class)を超えるまで、N103〜N115のループ処理の先頭に戻る。また、処理対象となっている挿入パターンClassの第iクラスの必要本数が0になっている場合においては、N107の条件が満たされたとしても、N109のpossible(P',CLS)が偽となる。結果、N114に進んで、iが1インクリメントされる。
【0177】
一方、パラメータupに0以外の値が入っている場合には(N112:>)、挿入パターンリストClassの第iクラスの挿入パターンP'を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、N113に進む。
N113においては、挿入パターンリストClassの第iクラスの挿入パターンP'が次のようにして挿入される。すなわち、Solutionの第up行目(挿入パターンを挿入する位置)の原資材を示すパラメータmに原資材長さmp(N108で原資材長さm'が求められ、N110でマーキングされたパラメータmp)が代入される。また、Solutionの第up行目(挿入パターンを挿入する位置)であるSolution[up]のカットパターンの切り方Pの末尾にパラメータPpを構成する全ての長さl(切り方l)の値が追加(挿入)される。これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l…)となる。このようにして挿入が終わると、挿入パターンリストClassの第iクラスを構成する該当する挿入パターンP'を構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。N113で切り方が確定したためである。そして、全てのクラスについての挿入又は挿入可否の判断を実行し終えるまで、パラメータiがsize(Class)を超えない限り、N103〜N115のループ処理の先頭に戻る。
【0178】
表16は、挿入パターンリストClassを利用して、表15に示すSolutionに短部材リストCLSに残っている短部材をN101で作成した挿入パターンにより挿入して得られるSolution、及び、その挿入がなされたことにより(N113)、必要本数が減算された短部材リストCLSを示す。表16のSolutionのうち短部材が挿入パターンにより挿入されたのは、(m,P)=(原資材,カットパターン)=(4876mm,(3432,918,451))、(4876mm,(3432,451,451,451))であり、それらに対応する短部材の必要本数が短部材リストCLSでデクリメントされていることがわかる。尚、N101〜N115の処理が終了すると、A113に進む。
【0179】
【表16】
【0180】
(A113:最終挿入部の概要及び詳細)
A113においては、最終挿入プログラムP100が呼び出され、P101〜P115のループ処理がなされ、これにより、A112の短部材挿入部2を実行しても未だ切り方が決まらずに短部材リストCLSに残っている短部材の挿入パターン(mp,Pp)がグリーディ法によって1本単位で求められ、その求めたカットパターン(mp,Pp)がコストを最も抑えることができるように確定解Solutionに挿入(P113:切り方だけ挿入)又は追加(P116:カットパターン自体を追加)する処理がなされる。
【0181】
P101においては、短部材リストCLSが空になるまで、P101〜P115のループ処理が実行されることが規定されている。P102においては、短部材リストCLSがCutlistにコピーされる(P103のグリーディ法で使用するための準備)。
【0182】
P103においては、グリーディ法プログラムG100が呼び出され、グリーディ法を用いて、できるだけ原資材の余りが少なく、かつ、単位長さ当たりのコストが安くなるように[原資材,切り方]=(mp,Pp)が求められる。ここでは、P102で短部材リストCLSをCultlistにコピーしているため、切り方が決まらずに短部材リストCLSに残っている短部材について挿入パターン(mp,Pp)が得られる。P113で挿入する場合には、切り方Ppのみが使用され、P116でSolutionの末尾に追加する場合には挿入パターン(mp,Pp)が使用される。尚、P103におけるグリーディ法の処理は上述と同様であるため、その説明を省略する。
【0183】
P104においては、P105〜P111のループ処理の初期設定として、
(1)グリーディ法で求めた挿入パターン(mp,Pp)の原資材mpのコストprice(mp)がパラメータminincに代入されるとともに、
(2)「挿入パターン(mp,Pp)の切り方Ppを確定解Solutionに挿入するかその末尾に追加するかを示すとともに、挿入するとすればその挿入位置を示す」パラメータupにsize(Solution)+1が代入される。すなわち、パラメータupの値が、P112においてもsize(Solution)+1のままであったら、挿入パターン(mp,Pp)が確定解Solutionの末尾に追加される。
【0184】
P105〜P111のループ処理は、挿入パターン(mp,Pp)を確定解Solutionの第1行目〜最終行(第size(Solution)行目)のうちどこに挿入したら良いか(最適な挿入位置)、そして更に、挿入すべきか否か(挿入是非)を判断する処理である。
P105においては、P105〜P111のループ処理の脱出条件が規定される。パラメータuがSolutionの第何行目について挿入可否及び/又は挿入位置を判断しているかを示すパラメータであり、最終行目について挿入可否及び/又は挿入位置を判断し終わるとループを脱出することがわかる。
P106においては、挿入位置の候補となるSolution[u]のカットパターン[原資材長さ,切り方]が(m, P)に代入されるとともに、Solutionの第u行目の切り方の合計sum(P)と挿入パターンの切り方Ppの合計sum(Pp)とが加算され、これが、当該切り方Ppを挿入した場合の全長さを示すパラメータtotalに代入される。
【0185】
P107においては、total値が原資材の最大長以内であるか否かが判断される。最大長を超えない場合には(P107:YES)、P108に進み、total値以上の最小の原資材長さ(=suite(total))がパラメータm'に代入される。更に、原資材m'のコストと原資材mのコスト差がパラメータincに代入される。そして、P109に進む。
【0186】
P109においては、P106で挿入パターンの切り方Ppの合計長さを加算し、それに伴いP108で求め直した原資材m'を用いることによるコスト増加分(=inc)がそれまでの処理におけるコスト増加分の最小値(=mininc)以下であるか否かが判断される。コスト増加を抑えることでコスト抑制に寄与するためである。この場合に、コスト安となると判断された場合には(P109:YES)、P110に進む。
【0187】
P110においては、新たにパラメータincの値が最小コストを示すパラメータminincに代入される。更に、挿入パターンの挿入位置を示すパラメータup(Solutionの第何行目かを示す)にその時点で挿入位置として判断対象となっているSolutionの行番号を示すパラメータuの値が代入される。更に、原資材長さm'がパラメータmpに代入される。これにより、Solutionの第u行目の原資材長さmが原資材長さmpに変更される。P110の処理により挿入パターン(mp,Pp)をSolutionの第u行目に挿入する準備がなされ、P105〜P111のループ処理の先頭に戻る。
【0188】
一方、P109の条件を満たさないと判断された場合には(P109:NO)、Solutionのu行目に挿入できないと判断されるため、P110の処理がなされず、P105〜P111のループ処理の先頭に戻る。
【0189】
以上のようにして、挿入パターン(mp,Pp)を挿入しても良いかがSolutionの第1行目〜最終行(第size(Solution)行目)の全ての行について判断され、挿入しても良いと判断されればP108及びP110において該当するSolutionの第1行目〜最終行(第size(Result)行目)のいずれかに挿入準備がなされ、パラメータupにはP104で設定された「size(Solution)+1」以外のu値(Solutionの第u行目)が入る。ちなみに、Solutionの第1行目〜最終行(第size(Solution)行目)のいずれの行においても挿入不可(P107:NO又はP109:NO)と判断されれば、N108及びN110における挿入準備はなされない。しかし、最終挿入プログラムP100では、必ず切り方を決めなければならないため、P107又はP109でNOと判断され続けても、Solutionの末尾への追加を実行すべくパラメータupの値は「size(Solution)+1」のままとされる。
【0190】
そして、P105〜P111のループ処理が終了すると、P112においては、パラメータupが「size(Solution)」以下かこの値を超えるかが判断される。
P112において、パラメータupが「size(Solution)+1」の場合には(P112:>)、P116へ進み、push(Solution,(mp,Pp))が実行され、Solutionの末尾に挿入パターン(mp,Pp)が追加される。そして、P114に進む。P114においては、P116で挿入した切り方Ppを構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。P116において切り方が確定したためである。そして、短部材リストCLSに切り方が決まらずに残っている短部材が無くなるまで(∃(l,r) in CLS. r>0が成立しなくなるまで)、P101〜P115のループ処理の先頭に戻る。
【0191】
一方、パラメータupに「size(Solution)以下の値」が入っている場合には(P112:≦)、挿入パターン(mp,Pp)を挿入することに加えてその挿入位置がパラメータupによって示される。そこで、P113に進む。
P113においては、挿入パターン(mp,Pp)が次のようにして挿入される。すなわち、Solutionの第up行目(切り方Ppを挿入する位置)の原資材を示すパラメータmに原資材長さmp(P108で最適長さm'が求められ、N110でマーキングされたパラメータmp)が代入される。また、Solutionの第up行目(挿入パターンを挿入する位置)であるSolution[up]の切り方Pの末尾に切り方Ppを構成する全ての長さl(切り方l)の値が挿入される(これにより、それまでは、P=(l1,…,ln)だったものが、P=(l1,…,ln,l…)となる)。P114においては、P113で挿入した切り方Ppを構成する長さと同一長さの短部材(短部材リストCLSに残っている短部材)の必要本数が1デクリメントされる(r=r-1)。P113において切り方が確定したためである。そして、短部材リストCLSに切り方が決まらずに残っている短部材が無くなるまで(∃(l,r) in CLS. r>0が成立しなくなるまで)、P101〜P115のループ処理の先頭に戻る。
【0192】
表17は、最終挿入プログラムP100を実行した結果得られるSolutionと短部材リストCLSの状態を示し、具体的には、表16のSolutionに同表の短部材リストCLSに残っている短部材を挿入した結果を示す。
【0193】
【表17】
【0194】
最終挿入プログラムP100においては「破材が増えるような挿入をしてはいけない」という条件はなく、また、新しい原資材を使って切り出すということも可能である。かかる条件設定において、表16に示すSolutionに同表の短部材リストCLSに残っている短部材を挿入するために最終挿入プログラムP100を実行すると、表16に示すSolutionの(5486,(2752,2724))に短部材リストCLSに最後に残った437を挿入すると最もコスト上昇が低く抑えられる。挿入した結果、表17に示すように(6096,(2752,2724,437))とされる。また、短部材リストCLS中の437の必要本数が1デクリメントされている。
【0195】
A114においては、表17に示した結果が出力される。この出力結果は、資材切断システム6に送信され、資材切断システム6においては、この出力結果に従って部材の切断が行われる。部材取りプログラムPGを用いて部材の切り方を求めているため、発生する破材長さ及びコストが抑制される。
【0196】
(第二の実施形態)
第二の実施形態は、メインプログラムQ100に示す通りであるが、
(B1)上記A1同じ(Q103)→
(B2)上記A2-1〜A2-3と同じ(Q103,Q104,Q105)→
(B3)短部材を何本かまとめて、既定の条件を満たす場合に限り(B2)の解に挿入する(Q108)→
(B4)最後に残った短部材を、(B3)の解にうまく挿入する(Q109)という手順による。従って、第一の実施形態を簡略化したものであり、部材リストの規模が小さい場合に特に有効である。尚、メインプログラムQ100で呼び出される各サブルーチンは、上記のサブルーチンと同一のものを用いることができるため、詳細な説明を省略する。
【0197】
メインプログラムQ100を用いて、表18に示す原資材から同表の部材を切り出す場合について具体例を示す。
Q101においては、初期設定として、部材リストCLの入力がなされるほか、A101と同様の入力がなされる。Q102においては、解を格納するSolutionが生成される。
【0198】
【表18】
【0199】
Q103において部材リスト分割プログラムB100が呼び出されて実行される。すると、その実行過程において、表19に示すようにカットパターンがクラス分けされるとともに、前後するが、表18に示した分割ポイントで長部材と短部材とに分割される。
【0200】
【表19】
【0201】
Q104においては、部分最適解計算部プログラムE100が呼び出されて実行される。表20は、クラス分類に基づいて長部材に適用した結果を示す。
【0202】
【表20】
【0203】
Q105においては、短部材挿入部1プログラムK100が呼び出され実行される。表21は、短部材挿入部1プログラムK100を実行することにより得られた結果を示す。
【0204】
【表21】
【0205】
Q106、Q107においては、解の確定1プログラムL100、解の確定2プログラムM100が呼び出され、実行される。
Q109においては、最終挿入プログラムP100が呼び出され実行される。表22にその結果を示す。
【0206】
【表22】
【0207】
Q110においては、表22に示した結果が出力される。この出力結果は、資材切断システム6に送信され、資材切断システム6においては、この出力結果に従って部材の切断が行われる。部材取りプログラムPGを用いて部材の切り方を求めているため、発生する破材長さ及びコストが抑制される。
【0208】
(第一及び第二の実施形態の破材長さ、コストパフォーマンス、演算効率等)
いずれの実施形態においても、結果出力に要する時間は、一般的なパーソナルコンピュータで10秒程度であり、演算時間の短縮が図られている。
そして、表17(第一の実施形態)及び表22(第二の実施形態)に示した出力結果は次の通りである。
第一の実施形態によれば、原資材の総額が195,049円、破材長さの合計が5,743mmとなる。尚、最適解は194,441円であり、その破材長さの合計は5,135mmとなることが証明できることから、この出力結果は最適解に非常に近い値であり、誤差は0.313%以内であることが保証される。
第二の実施形態によれば、最適解を出力することができる。
【0209】
(その他の変形例)
第一の実施形態と第二の実施形態とを比較すると、前者は部材リストの規模が比較的大きい場合に適用するとよく、後者は部材リストの規模が比較的小さい場合に適用するとよい。従って、クラス概念の導入を前提とした探索を行ったり、長部材と短部材の分割等と組み合わせる等、各サブルーチンの組み合わせ方や組み合わせ回数等を適宜変更することにより、必要な部材リストに応じた部材取り手法を演算により求めることが可能となる。
【産業上の利用可能性】
【0210】
本発明に係る部材取りシステム及び部材取りプログラムは、原資材データベースに入力されている原資材から建築図面に記載されている部材を切り出すときに、発生する破材長さ及び/又は使用する原資材の総コストを抑えることができるため、環境資源を有効活用でき産業上極めて有益である。
【符号の説明】
【0211】
1 部材取りシステム
2 コンピュータ
3 原資材DB
4 部材DB
5 建築CADシステム
6 資材切断システム
PG 部材取りプログラム
ML 原資材リスト
CL 部材リスト
KZ 建築図面
【特許請求の範囲】
【請求項1】
原資材から[部材,必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算する部材取りシステムであって、
[原資材,切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手段と、
前記各カットパターンをクラスに分類するカットパターン分類手段と、
所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索し、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し、当該探索ノードを探索リストに追加して探索リストを作成する前方探索手段とを備えたことを特徴とする部材取りシステム。
【請求項2】
前記前方探索手段は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることを特徴とする請求項1に記載の部材取りシステム。
【請求項3】
前記前方探索手段は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることを特徴とする請求項2に記載の部材取りシステム。
【請求項4】
前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合、又は、前記部材リストの必要本数が0となった場合には、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す又は何もしない)しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかるまで当該探索リストから当該探索ノードを削減する後方探索手段を備えたことを特徴とする請求項1から3のいずれかに記載の部材取りシステム。
【請求項5】
前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する分割手段を備えることを特徴とする請求項1から4のいずれかに記載の部材取りシステム。
【請求項6】
前記カットパターンリスト作成手段、前記カットパターン分類手段による処理を行った後、前記分割手段による処理を行って分割ポイントを求め、得られた長部材リストに対して、前記前方探索手段、前記後方探索手段による処理を行い、前記長部材リストの必要本数が全て0になったところで得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする最適解計算手段を備えたことを特徴とする請求項5に記載の部材取りシステム。
【請求項7】
前記最適解計算手段は、前記長部材リストに対して近似解法によって求めた初期解で要するコスト未満の場合に前記全探索ノードによって特定される[原資材,切り方]を最適解とし、そのコスト以上の場合に前記初期解を当該最適解とすることを特徴とする請求項6に記載の部材取りシステム。
【請求項8】
前記最適解に短部材を1本ずつ挿入する第一短部材挿入手段と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解を確定解とする第一確定手段と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し、再度、当該部材リストについて前記分割手段による分割処理を行い、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする分割ポイント確定手段とを備えたことを特徴とする請求項7に記載の部材取りシステム。
【請求項9】
前記分割ポイント確定手段による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する第二確定手段と、
切り方が決まっていない短部材を挿入パターン化して当該確定解に挿入する第二短部材挿入手段と、
切り方が決まっていない短部材を近似解法に基づいて挿入パターン化し、当該確定解に挿入又は追加して最終確定解を得る最終短部材挿入手段とを備えたことを特徴とする請求項8に記載の部材取りシステム。
【請求項10】
前記最終確定解を切断機に送信する確定解送信手段と、
前記最終確定解に基づいて原資材から所定長さの部材を切断する切断手段と、
を備えたことを特徴とする請求項9に記載の部材取りシステム。
【請求項11】
原資材から[部材,必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算する手段としてコンピュータを機能させる部材取りプログラムは、
[原資材,切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手順、
前記各カットパターンをクラスに分類するカットパターン分類手順、
所定のクラスに属するカットパターンから余分な部材を出さないカットパターンを探索し、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し、当該探索ノードを探索リストに追加して探索リストを作成する前方探索手順を前記コンピュータに実行させることを特徴とする部材取りプログラム。
【請求項12】
前記前方探索手順は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることを特徴とする請求項11に記載の部材取りプログラム。
【請求項13】
前記前方探索手順は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることを特徴とする請求項12に記載の部材取りプログラム。
【請求項14】
前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合、又は、前記部材リストの必要本数が0となった場合には、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す又は何もしない)しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかるまで当該探索リストから当該探索ノードを削減する後方探索手順を備えたことを特徴とする請求項11から13のいずれかに記載の部材取りプログラム。
【請求項15】
前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する分割手順を備えることを特徴とする請求項11から14のいずれかに記載の部材取りプログラム。
【請求項16】
前記カットパターンリスト作成手順、前記カットパターン分類手順による処理を行わせた後、前記分割手順による処理を行わせて分割ポイントを求め、得られた長部材リストに対して、前記前方探索手順、前記後方探索手順による処理を行わせ、前記長部材リストの必要本数が全て0になったところで得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする最適解計算手順を備えたことを特徴とする請求項15に記載の部材取りプログラム。
【請求項17】
前記最適解計算手順は、前記長部材リストに対してグリーディ法によって求めた初期解で要するコスト以下の場合に前記全探索ノードによって特定される[原資材,切り方]を最適解とし、そのコスト超の場合に前記初期解を当該最適解とすることを特徴とする請求項16に記載の部材取りプログラム。
【請求項18】
前記最適解に短部材を1本ずつ挿入する第一短部材挿入手順と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解を確定解とする第一確定手順と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し、再度、当該部材リストについて前記分割手順による分割処理を行わせ、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする分割ポイント確定手順とを備えたことを特徴とする請求項17に記載の部材取りプログラム。
【請求項19】
前記分割ポイント確定手順による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する第二確定手順と、
切り方が決まっていない短部材を挿入パターン化して当該確定解に挿入する第二短部材挿入手順と、
切り方が決まっていない短部材を近似解法に基づいて挿入パターン化し、当該確定解に挿入又は追加して最終確定解を得る最終短部材挿入手順とを備えたことを特徴とする請求項18に記載の部材取りプログラム。
【請求項20】
前記最終確定解を切断機に送信する確定解送信手順と、
前記最終確定解に基づいて原資材から所定長さの部材を切断させる切断手順とを備えたことを特徴とする請求項19に記載の部材取りプログラム。
【請求項1】
原資材から[部材,必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算する部材取りシステムであって、
[原資材,切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手段と、
前記各カットパターンをクラスに分類するカットパターン分類手段と、
所定のクラスに属するカットパターンの中から余分な部材を出さないカットパターンを探索し、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し、当該探索ノードを探索リストに追加して探索リストを作成する前方探索手段とを備えたことを特徴とする部材取りシステム。
【請求項2】
前記前方探索手段は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることを特徴とする請求項1に記載の部材取りシステム。
【請求項3】
前記前方探索手段は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることを特徴とする請求項2に記載の部材取りシステム。
【請求項4】
前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合、又は、前記部材リストの必要本数が0となった場合には、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す又は何もしない)しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかるまで当該探索リストから当該探索ノードを削減する後方探索手段を備えたことを特徴とする請求項1から3のいずれかに記載の部材取りシステム。
【請求項5】
前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する分割手段を備えることを特徴とする請求項1から4のいずれかに記載の部材取りシステム。
【請求項6】
前記カットパターンリスト作成手段、前記カットパターン分類手段による処理を行った後、前記分割手段による処理を行って分割ポイントを求め、得られた長部材リストに対して、前記前方探索手段、前記後方探索手段による処理を行い、前記長部材リストの必要本数が全て0になったところで得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする最適解計算手段を備えたことを特徴とする請求項5に記載の部材取りシステム。
【請求項7】
前記最適解計算手段は、前記長部材リストに対して近似解法によって求めた初期解で要するコスト未満の場合に前記全探索ノードによって特定される[原資材,切り方]を最適解とし、そのコスト以上の場合に前記初期解を当該最適解とすることを特徴とする請求項6に記載の部材取りシステム。
【請求項8】
前記最適解に短部材を1本ずつ挿入する第一短部材挿入手段と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解を確定解とする第一確定手段と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し、再度、当該部材リストについて前記分割手段による分割処理を行い、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする分割ポイント確定手段とを備えたことを特徴とする請求項7に記載の部材取りシステム。
【請求項9】
前記分割ポイント確定手段による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する第二確定手段と、
切り方が決まっていない短部材を挿入パターン化して当該確定解に挿入する第二短部材挿入手段と、
切り方が決まっていない短部材を近似解法に基づいて挿入パターン化し、当該確定解に挿入又は追加して最終確定解を得る最終短部材挿入手段とを備えたことを特徴とする請求項8に記載の部材取りシステム。
【請求項10】
前記最終確定解を切断機に送信する確定解送信手段と、
前記最終確定解に基づいて原資材から所定長さの部材を切断する切断手段と、
を備えたことを特徴とする請求項9に記載の部材取りシステム。
【請求項11】
原資材から[部材,必要本数]のフィールドを備えた部材リスト(長部材リスト、短部材リストを含む)に記憶された当該各[部材,必要本数]の部材(長部材、短部材を含む)を切り出すのに用いられるカットパターンを演算する手段としてコンピュータを機能させる部材取りプログラムは、
[原資材,切り方]のフィールドを備えたカットパターンからなるカットパターンリストを作成するカットパターンリスト作成手順、
前記各カットパターンをクラスに分類するカットパターン分類手順、
所定のクラスに属するカットパターンから余分な部材を出さないカットパターンを探索し、当該カットパターンを[当該クラス番号,カットパターン特定番号]のフィールドを備えた探索ノードによって特定するか、又は、当該カットパターン不存在を[当該クラス番号,カットパターン不存在表示]のフィールドを備えた探索ノードによって特定し、当該探索ノードを探索リストに追加して探索リストを作成する前方探索手順を前記コンピュータに実行させることを特徴とする部材取りプログラム。
【請求項12】
前記前方探索手順は、前記部材リストの必要本数が0超の最長部材が属するクラスを前記所定クラスとして探索し、前記探索ノードによって特定される前記部材リストの必要本数を調整(減じる又は何もしない)するものであることを特徴とする請求項11に記載の部材取りプログラム。
【請求項13】
前記前方探索手順は、前記部材リストの必要本数が0超の最長部材が属するクラスのうち先頭クラスから優先的に探索するものであることを特徴とする請求項12に記載の部材取りプログラム。
【請求項14】
前記探索ノードが[当該クラス番号,カットパターン不存在表示]である場合、又は、前記部材リストの必要本数が0となった場合には、当該探索ノードによって特定される前記部材リストの必要本数を調整(戻す又は何もしない)しながら、当該探索ノードによって特定されるクラスより優先度が低いクラスに前記部材リストの必要本数が0超の最長部材が属することが見つかるまで当該探索リストから当該探索ノードを削減する後方探索手順を備えたことを特徴とする請求項11から13のいずれかに記載の部材取りプログラム。
【請求項15】
前記部材リストの第1行目〜第p行目(処理対象行、以下同じ)までの各長さが代表長さとなる各クラス数から重複を許して当該各長さの部材を各必要本数切り出すときの各カットパターンの総数を乗算して得た値が所定の閾値を超えた場合に、前記第p行目を分割ポイントとして、当該部材リストの第1行目〜第(p-1)行目を長部材リスト、当該部材リストの第p行目〜最終行目を短部材リストに分割する分割手順を備えることを特徴とする請求項11から14のいずれかに記載の部材取りプログラム。
【請求項16】
前記カットパターンリスト作成手順、前記カットパターン分類手順による処理を行わせた後、前記分割手順による処理を行わせて分割ポイントを求め、得られた長部材リストに対して、前記前方探索手順、前記後方探索手順による処理を行わせ、前記長部材リストの必要本数が全て0になったところで得られた探索リストを構成する全探索ノードによって特定される[原資材,切り方]を最適解とする最適解計算手順を備えたことを特徴とする請求項15に記載の部材取りプログラム。
【請求項17】
前記最適解計算手順は、前記長部材リストに対してグリーディ法によって求めた初期解で要するコスト以下の場合に前記全探索ノードによって特定される[原資材,切り方]を最適解とし、そのコスト超の場合に前記初期解を当該最適解とすることを特徴とする請求項16に記載の部材取りプログラム。
【請求項18】
前記最適解に短部材を1本ずつ挿入する第一短部材挿入手順と、
得られた最適解のうち、最長部材を用い、かつ、破材長さが基準値以下である解を確定解とする第一確定手順と、
前記第一確定解を削減した長部材リスト及び短部材リストを結合することにより、部材リストを作成し、再度、当該部材リストについて前記分割手順による分割処理を行わせ、前回の分割ポイントと、新たな分割ポイントとが合致する場合に真の分割ポイントとする分割ポイント確定手順とを備えたことを特徴とする請求項17に記載の部材取りプログラム。
【請求項19】
前記分割ポイント確定手順による処理によって、真の分割ポイントが確定した場合には、得られた最適解のうち最長部材以外の部材を用いているもの、又は、破材長さが基準値超のものを前記確定解に追加する第二確定手順と、
切り方が決まっていない短部材を挿入パターン化して当該確定解に挿入する第二短部材挿入手順と、
切り方が決まっていない短部材を近似解法に基づいて挿入パターン化し、当該確定解に挿入又は追加して最終確定解を得る最終短部材挿入手順とを備えたことを特徴とする請求項18に記載の部材取りプログラム。
【請求項20】
前記最終確定解を切断機に送信する確定解送信手順と、
前記最終確定解に基づいて原資材から所定長さの部材を切断させる切断手順とを備えたことを特徴とする請求項19に記載の部材取りプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2010−266991(P2010−266991A)
【公開日】平成22年11月25日(2010.11.25)
【国際特許分類】
【出願番号】特願2009−116456(P2009−116456)
【出願日】平成21年5月13日(2009.5.13)
【出願人】(304026696)国立大学法人三重大学 (270)
【出願人】(396026400)株式会社鈴工 (9)
【Fターム(参考)】
【公開日】平成22年11月25日(2010.11.25)
【国際特許分類】
【出願日】平成21年5月13日(2009.5.13)
【出願人】(304026696)国立大学法人三重大学 (270)
【出願人】(396026400)株式会社鈴工 (9)
【Fターム(参考)】
[ Back to top ]