主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

カッティングストック問題:問題ベース

この例は,幂线路计画法のサブルーチン形形计画法をしてて,カッティングストック問題を解く方法をを明します。この例では,問題ベースの最適化の設定のアプローチを使用します。ソルバーベースのアプローチについては,カッティングストック问题:ソルバーベースを参照してください。

問題概要

製材所は,木から固定長の木材を切り出すことから始めます。木材の固定長を指定します。

logLength = 40;

その後,以降の処理に適した固定長に木材を切ります。問題は,製材所が最小限の木材で一連の注文に対応できるように,どのように木材を切り出すかということです。

これらの固定長と長さごとの注文の数量を指定します。

lengthlist = [8;12;16;20);数量= (90;111;55;30);nLengths =长度(lengthlist);

ます

線形計画法の定式化

福特とFulkerson[1]およびGilmoreとGomory[2]を含む複数の著者が以下の手順を提案しています。これを次のセクションで実装します。カッティングパターンとは1本の木材から切り出すことができる長さのセットです。

すべての考えられるカッティングパターンを生成するより,部分問題の解としてカッティングパターンを生成する方が効率的です。カッティングパターンの基本セットから始め,既存のパターンを使用したカッティングで要求を満たすという制約の下で,使用する木材数を最小限にする線形計画問題を解きます。

その问题を解いた后,幂线路计画法の问题を解いて新闻パターンを生成します。このこの分问题しますななパターン,つまり,つまり,,考えられるさ合并のlogLengthを総和が上回らないように,欢乐列表の各长さででの木材ををますます。最最化するためます数量卷,新闻パターンの被约费使用であり,现处于の解ラグランジュラグランジュと新闻カッティングパターンの积の和を,1から引いたものです。この数量ががの合,そのパターンを线计画问题持ち込むと,その目的关键词。�ますこの例の问题,负の被约费问题パターンがないときにしし。列生成アルゴリズムとその参考文献をししください。

この方法で線形計画問題を解くと,非整数解が得られることがあります。したがって,生成されたパターンを使用し,変数が整数値を持つという制約の下で,もう一度問題を解きます。

Matlab问题ベースでのの定式化

この定式化では,パターンは欢乐列表の各长さカット(切り出し切り出し木材)数を含む含むのベクトルです。模式を準備します。行列の各列が1つのパターンを表します。たとえば,

模式 = ( 2 0 0 2 0 1 1 0 ]

最初のパターン(列)は長さ8の2本のカットと長さ20の1本のカットを表します。2番目のパターンは,長さ12の2本のカットと長さ16の1本のカットを表します。それぞれは,カットの長さの合計がlogLength= 40を上回らないため,実行可能なパターンです。

このこの定式化で,xが,各パターンの使用回数を含む整数の列ベクトルである場合,* x模式は各タイプのカット数を示す列ベクトルとなります。要求を満たすための制約は,模式* x > =数量です。たとえば,前出の行列模式を使用して, x = ( 45 56 ] であると仮定します(このxは101本の木材を使用します)。この場合

模式 * x = ( 90 112 56 45 ] ,

これは要求を上回っているため,実行可能な解を表しています。

数量 = ( 90 111 55 30. ]

初期の実行可能なカッティングパターンを得るため,カットの長さが1つだけの最も簡単なパターンを使用します。その長さで,木材に対して実行可能なだけ多くのカット数を使用します。

模式=诊断接头(地板(logLength. / lengthlist));nPatterns =大小(模式2);

現在のラグランジュ乗数に基づいて既存のパターンから新しいパターンを生成するには,部分問題を解きます。それ以上の改善が見つからなくなるまで,ループ内で部分問題を呼び出してパターンを生成します。部分問題の目的関数は,現在のラグランジュ乗数のみに依存します。変数は,各長さのカット数を表す非負の整数です。唯一の制約は1つのパターン内のカットの長さの合計が木材の長さを超えないことです。

子问题= optimproblem ();削减= optimvar (“削减”nLengths 1“类型”,'整数',下界的,零(nlengths,1));subproblex = dot(lengthlist,cuts)<= logLength;

ソルバーからの不要なフィードバックを避けるために,外側のループと内側の部分問題の解の両方に対して显示オプションを'离开'に設定します。

lpopts = optimoptions (“linprog”,'展示','离开');ipopts = optimoptions ('intlinprog',LPOPTS);

ループループ分数ををます。

SDENTCOST = -INF;SDREETCOSTTOLERANCE = -0.0001;EXITFLAG = 1;

ループを呼び出します。

尽管logprob =最优问题(“描述”,“减少日志”);%创建表示所使用的每个模式数量的变量x = optimvar (“x”nPatterns 1下界的, 0);%目标是使用的日志数logprob.Objective。logsUsed = (x)之和;限制条件是削减满足了需求logprob.Constraints。需求=模式*x >=数量;(价值观、nLogs exitflag ~,λ)=解决(logprob,'选项',LPOPTS);如果exitflag > 0 fprintf(“使用% g日志\ n”, nLogs);如果可能的话,%现在产生新模式子问题。目标= 1.0 -点(lambda.Constraints.Demand,cuts);(价值观、reducedCost pexitflag) =解决(子问题,'选项', ipopts);newpattern = round(值.Cuts);如果Double(PexitFlag)> 0 && DepentCost 结束结束结束
使用97.5日志使用89.9167日志使用88.3日志的日志

これで,线路计画问题のが得られます。解を完全なににためため,最终パターンでもう一个,最终パターンでもう,解の幂xを整数型に変えて問題を解きます。また,各パターンと問題全体について,使用されない木材の数量(フィート単位)として無駄を計算します。

如果exitflag <= 0“列生成阶段的错误”)其他的x.Type ='整数';[值,logsused,ExitFlag] =求解(LogProb,'选项', ipopts);如果Double(ExitFlag)> 0值.x = round(值.x);在某些值不完全整数的情况下%logsused = sum(值.x);流(“最佳解决方案使用%g log \n”, logsUsed);totalwaste =((模式*值之和。x -数量)。* lengthlist);由于过量生产而浪费j = 1:大小(值.x)如果值.x(j)> 0 fprintf('Cut %g logs with pattern\n'values.x (j));w = 1:尺寸(模式1)如果模式(w,j) > 0 fprintf(' %g cut(s) of length %d\n',模式(w,j),lengthlist(w));结束结束浪费j = logLength - dot(patterns(:,j),lengthlist);%由于图案效率低下而造成的浪费totalwaste = totalwaste +废物j;流('此模式的浪费为%g\n', wastej);结束结束流(这个问题完全是浪费。,totalwaste);其他的DISP(“最终优化中的错误”)结束结束
最优解决方案使用89条日志
用图案剪切15个日志
长度为20的2段
此模式的浪费为0
用图案切割18个日志
1长度为8 2切割长度16的切割(S)
此模式的浪费为0
用花纹切割37根原木
长度为8的2次切割长度为12的2次切割
此模式的浪费为0
用图案切割19个日志
长度12的2次切割长度16的1次切割
此模式的浪费为0
这个问题的总浪费是28。

無駄の一部は過剰生産が原因です。製材所は1本の木材から3本の12フィートの木材を切り出しますが,1本しか使用しないためです。無駄の一部はパターンの非効率性が原因です。3本の12フィートの木材は,全長の40フィートより4フィート短いためです。

参考文献

[1]福特,L.R.,Jr.和D. R.Fulkerson。多商品网络最大流量的一种建议计算方法。管理科学5,1958,第97-101页。

Gilmore, p.c.和R. E. Gomory。切割股票问题的线性规划方法 - 第二部分。运营研究11,6,1963,PP。863-888。

关键词トピック