- ベストアンサー
こういう計算はエクセルで可能でしょうか。
お尋ねします。 10本のサイズがバラバラの棒(例えば150cm,220cm,86cm,310cm・・・) を1本4mの棒から取るに当り、出来る限り無駄な切れ端が出ないような 組み合わせを計算したいのですが、そんな関数?があるのでしょうか。 関数でなく何か他の方法がありましたらありがたいのですが。 当方エクセルに関しては素人です。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>そんな関数?があるのでしょうか ありません。 >関数でなく何か他の方法がありましたらありがたいのですが WEBで「ナップサック問題」で照会して、記事を読んでみてください。 動的計画法や遺伝アルゴリズムなどのことが出てきます。 多分初めて聴く言葉で何のことか判らないでしょう。 (本質問はナップサック問題の価格に当たるものは平等でやや単純ですが) 情報系学部の大学の勉強・研究テーマのようです。 http://www.kochi-tech.ac.jp/library/ron/2003/2003info/1040277.pdf >エクセルに関しては素人です ピンとはずれです。エクセルで解くのがふさわしい問題ではないようです。エクセルの知識は必須のものではない。解法アルゴリズムがわかれば、プログラムを組んで処理するでしょう。エクセルは計算道具なので、プログラムで繰り返しやるところを、シートの各行にデータを変化させ(6.5万行の制約あり)エクセルで繰り返し的演算でできるかもしれませんが、本筋の解き方ではない。 http://www.zatsugaku.com/archives/2001/11/20011108.html より この種の問題に対して、最適の答えを見つける公式、というか解法というか、(略)しらみつぶしにあたっていくほかないんじゃないかと考えられている 「ナップサック問題 エクセル」でWEB照会してもあまり良い回答は見つからない。
その他の回答 (2)
- zap35
- ベストアンサー率44% (1383/3079)
補足要求です 150cmや210cmの棒から4mの棒はとれません。 4mは分割されていても良いというなら、10本の棒を長い方から順に並べて4mずつ区切れば良いように思いますが、そういう意味ではないのでしょうか? 何か最適条件が抜けていませんか?
お礼
ありがとうございます。 解り安くする為に棒に例えましたが、要するに規格の4mの棒から 色々な寸法を如何に無駄なく取るか、と言うことです。 No.2さんのお考え通りです。 質問の書き方が少し悪かったかもしれません、すみません。 ありがとうございました。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
この質問を読んで、自信は無いが、まず関数は無いだろうと思っていました。 総当たり戦であってそれ以上のような、回乗のようでそうでないような、 最適な組み合わせを見つける方法は、「なんたら公式」といった名前があるのかな? と思っていました。 #1さんの回答を見て、それが「ナップサック問題」ということを知りました。 #1さん、ありがとうございました勉強になりました。 1枚の板から家具を作るのに効率の良い切り方、1枚の布から服を作るのに効率の良い切り方、と同じように何かソフトがある様な気がします。 たぶんそれは高額なソフトでしょうね。 たかが10種類のサイズの棒でも、組み合わせを考えたら天文学的な組み合わせの数になるような、 さらに、例えば現在310cmの棒は在庫があるから対象外にするとか、86cmは在庫が無いから優先して作るとか、切り取る優先順位を考慮しないといけないのでは無いかな?と思います。 それくらい難しい問題を含んでいます。 もし自分がこの問題を依頼されたら、 まず1ヶ月の時間をいただき何回かの打ち合わせの場を持っていただける条件で、検討してみます。 と答えるでしょう。 難しいですよ! とても「エクセルに関して素人です」が手を付けて何とかなるような問題ではない。と思います。 仕事場に出入りしているコンピュータのプロに相談される事を薦めます。
お礼
ご回答ありがとうございます。 質問の内容はあなたの考えているとうり、まったくそのものです。 今まで電卓で面倒くさいなあ・・と思いながら、山と積まれた 切れ端を見ている毎日です。 結局電卓作業が一番早いのかもしれませんね。 ありがとうございました。
お礼
ご回答ありがとうございます。 ああやっぱりな・・と言う気持ちです。 色々な関数を見ていて(見てもさっぱり解りませんが) その中にひょっとしたらと言う気持ちで質問してみましたが、 一度その「ナップサック問題」で調べて見ます。 ありがとうございました。