家のトリム モールディングを切断していますが、さまざまな長さのトリム ピースがあり、無駄を最小限に抑えるためにそれらを最適にグループ化したいと考えています。基本的に、必要な長さを利用可能なより長い長さに最適にグループ化 (またはパック) しようとしています。
私はこれにアプローチする方法に少し困惑しており、現在は手作業で行っていますが、間違いが原因で操作全体をやり直すことになります。私は Java をある程度知っていますが、最近はもっぱら R を使用しているので、現時点では R が最もなじみのある言語です。これにアプローチする方法についての提案はありますか?
このようなアルゴリズムを手動でループするよりも、これを行うためのより良い方法はありますか (私はアイデアをスケッチしているだけです。正しい構文を探してはいけません):
trim_lengths <- c(44, 57, 86, 86, 40, 88, 88, 41, 40, 40,
62, 62, 54, 54, 55, 55, 63, 63, 75, 75, 100, 100)
avail_lengths <- c(120, 103, rep(100, 9), 98, rep(97, 4),
95, rep(88, 3), 85, 65)
while(length(trim_lengths) > 0) {
current_max <- max(trim_lengths)
current_min <- min(trim_lengths)
if(current_max + current_min > max(avail_lengths) {
find smallest value in avail_lengths that's greater than current_max
store current_max and optimal value from avail_lengths in list or vector
to indicate the pairing/grouping
}
else {
group <- c(current_max, current_min)
current_max <- trim_lengths minux elements in group
if <- sum(group) + current_max > max(avail_lengths) {
store group and corresponding avail_length element in list/vector
}
else{
basically, keep trying to group until solved
}
}
ベクトルの「外側」からチェックしているため、それが最適ではないことはすでにわかっていtrim_lengths
ます。手作業で行ったペアリングでは、小さいレベルと中間レベルの値を、非常に見やすい利用可能な長さにペアリングすることがよくあります。上記のペアリングより2つ長い。
とにかく、それは興味深い問題であり、解決策として心に浮かぶ参考文献や明白な提案があるかどうか疑問に思いました. 関連する質問のいくつかでは、最初のコメントで「何を試しましたか」という質問がよく寄せられました。私は本当にそうではありません... 私は今困惑しているので. 私が考えた他の唯一のことは、組み合わせをランダムにブルートフォースし、無駄を最小限に抑えるソリューションを保存することでした.
これをベクトル化された方法で解決するためのいくつかの提案が欲しいです-ある種の行列演算、またはおそらく問題の線形モデル表現。私も引き続き考えてみます。