EDIT(31-12-2019) - https://jonathan.overholt.org/projects/cutlist
上記は、私が探しています正確に何である自由なプロジェクトのリンクです。私はそれを動作させることができるように、私はちょうど適切な指導を探しています。
私はアルミウィンドウファブリケーターをスライドさせるためのアルミ押し出しカットの無駄を最小限に抑えることに取り組んでいると私は、私は問題のために行くべきアルゴリズム/データ構造を把握することはできませんよ。
私は基礎研究を行って、問題が問題、貪欲アルゴリズムをプログラミング証券(また、1次元切削問題と呼ばれる)問題、リニア切削中に落ちることを見出しました。しかし、私は一緒に行く必要があり、また、どのように開始するかを決めることができません。
問題についての概要:
基本的には、ウィンドウの加工業者は、持っている3つのサイズの購入への材料のオプションを。
12 | 15 | 16 (IN FT)
今、入力はウィンドウの大きさになります。
幅×高さ(IN FT)
1)6×8から10のWindows
X 3 2)9から20のWindows
計算は、(2×幅)+(2×高さ)です。だから、窓の上のサイズから、彼らは次のように押し出しを必要とします。
1)6' (FT)サイズピース - > 2×10 = 20
2)8' (FT)サイズピース - > 2×10 = 20
3)9' (FT)サイズピース - > 2×20 = 40
4)3' (FT)サイズピース - > 2×20 = 40
ナップザックを使用して、我々は組み合わせを見つけることができますが、それは私がカッティングストック問題のための最良の最適な組み合わせを生成したいそのうち3種類のサイズ可能なアウトを持っている唯一のに対し、ここで私の場合は1に大きさの制限があります。
私は、データ構造とアルゴリズムのJavaや他の言語に関しては、上記の問題のために進むべきかで助けを必要とします。数学での私の知識は、マークに起動していないと私はコミュニティからいくつかの助けを得るために、私のプロジェクトではとのようなロジックを実装する際に問題に直面しています理由です。
私は他の回答の感情をエコーされます:この問題の「最も正しい」解決策があるかもしれないが、何が本当に探していることは「正しい十分」ソリューションです。
それは言った、私はあなたが参照するプロジェクト内のコードのヘルプメイクセンスにこの小さな付録を書いた:カットリストジェネレータ設計上の注意
言い換え:
最長の株式の新しいインスタンスを作成し、フィットするよう、そこに多くの部分として配置することによって、各反復開始。株価はその後、選択された作品のすべてが、まだに収まることを最小株に減少しています。何の作品が残っていないまで、これがすべて繰り返されます。
アドバイスのもう一つの単語:を確認してください明確にアルゴリズムにあなたがしている建物の前提条件のすべてを識別します。鉱山は長い在庫が単位あたり安く、それは常に有利だということですが、私は、カットの最小数(バンドル切断)のために最適化するためのバリエーションを求めてきたかを追跡し、最初の以前の実行から切りくずを使用することを好むしていることを前提としています。
いつものように:仮定を設定する前に、非常に明確に顧客のプロセスを理解します。