• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(VBA) 部分集合和問題)

(VBA) 部分集合和問題

このQ&Aのポイント
  • TVを録画した複数の動画ファイルをBDにムーブするための、組み合わせの手法を説明します。
  • Excel VBAのコードを使用して、複数の動画ファイルを25GBに収まるように組み合わせます。
  • 部分集合和問題を解決するためのアルゴリズムを提供します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

> 組み合わせの中で一度利用したデーターを削除する必要は無いと思いますが ? 一度だけの計算でしたら問題はありません。 NuboChanさんがテストした画像の14作で一度だけ計算し、選択されなかった残り7作は次の選択肢にはいれないというのでしたら削除しなくてもいいと思います。 同一データで複数回計算するのでしたら、たとえば 質問で参考としてあげているサイトの最初に出てくる4つの画像の右上で見ると A1の値になる組み合わせを2行目から10行目まで各行で求めていて、同じ値が選択されています。 たとえば、3行5行6行目でF列の765が選択されています。 > 求める指定も最大容量、最大総額、最大重量と3つを指定するようになっています。 最大値を超えないように設定するだけみたいですから、データの方の価格をファイルサイズにして後は1にし、最大は全て25600にしたらいけると思います。 Const N = 5 ' データの数 はそのままでデータの数ですのでテスト画像の場合は14です。 添付画像は質問のテスト画像の、結果の方の順番にデータを入れて最初の4940を4939にしています。

NuboChan
質問者

お礼

解説ありがとうございます。 「ナップザック問題解答マクロ」の利用方法が理解できました。 少し試して上手く組み合わせが出来ているようです。 以下参考画像 https://imgur.com/DxMc6dh 利便性から考えると (VBA) 部分集合和問題 (2)で試したコードのほうが視覚的に分かりやすいので 昨日のコードと袋詰問題()のコードを合わせて利用したいと思います。 今回もお世話になりありがとうございます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

部分集合和問題は完全一致するかどうか判定するものだと思いますので結果 > 組み合わせが目標値と同じ値になる場合しか結果が表示されません。 だと思います。 また、改変して超過しない近似値を出せたとしても、もとのデータで既に選択されたものは削除しなければいけないのではないでしょうか。同じものが以降の選択結果の中に入っていますから。 > ナップサック問題とは、n 種類の品物(各々、価値 vi、重量 wi)が与えられたとき 回答にも書きましたが、価値を全て同じ値(たとえば「1」)にすれば重量だけで計算するのと同じになると思います。 > 「ナップザック問題解答用Excelマクロ」は、使い方が記載されていないので >  利用方法が判りません。 ダウンロードしたZIP内の ReadMe.txt に簡単な説明があります。

NuboChan
質問者

補足

何度もありがとうございます。 >改変して超過しない近似値を出せたとしても、もとのデータで既に選択されたものは削除しなければいけないのではないでしょうか。 >同じものが以降の選択結果の中に入っていますから。 一番近い近似値を出せれば、そこで計算がそこで終了しても実用上は問題有りません。 (一番近いが、最初に計算されるかどうかは不明なら鶏が先、卵が先の問題になりますが。。。。) 意味が不明なのですが、  組み合わせの中で一度利用したデーターを削除する必要は無いと思いますが ?  結果を求める仕組み(アルゴリズム)で、一度利用したデーターは除かないとだめな場合はあきらめます。   >価値を全て同じ値(たとえば「1」)にすれば重量だけで計算するのと同じになると思います。 全て「1」にすると、重量だけの計算になるんですね。 他の方法をもう少し探してみますが、 面倒でも、ファイル数が増減するたびに  データ分だけセル構造を調整する必要があり手間が掛かかるので  こちらは正直避けたいです。   >ダウンロードしたZIP内のReadMe.txtに簡単な説明があります。 確かに、以下の説明があり「使い方が記載されていない」は、正確ではなく誤りです。 このテキストファイルは、見ましたが残念ながら私が見て理解できないのです。 前にも記載しましたが、「ナップザック問題」は条件が、複雑です。 つまり、「ナップザック問題解答用Excelマクロ」は、   価格、容積、重量、個数と要素が4つも有り   求める指定も最大容量、最大総額、最大重量と3つを指定するようになっています。   (私の場合、要素はファイルサイズだけで指定値も一つだけです。) 使い方  マクロの記述されているブック『ナップザック問題解答マクロ.xls』を開くと『ナップザック問題』というワークシートが表示されます。  最初から例を示すために値が入っていますが、御自分の用途に合わせて数値を自由に変えてください  もし、商品の数が足りないと感じたら、『knapsack』マクロの『Const N = 5 ' データの数』とある列を自分の目的とするデータの数に書き直してください。 ----------------

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

あと ナップザック問題解答用Excelマクロ https://www.vector.co.jp/soft/data/edu/se504980.html これを改変して利用できるかもしれせん。 ただ、PCのデータサイスで実サイズとディスク利用サイズの差があるように、BDの方でそのような事がないのでしょうかという気もします。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

ナップサック問題をEXCELワークシート関数で解く https://www.yomogi2017.xyz/entry/2019/01/08/123558 この表を利用して価値は全て1として重量をサイズに置き換えて解決できないでしょうか。 サイトでは15列だけなので25列とか30列まで右の表は伸ばして下方向はデータ分だけ伸ばす必要がありますし、一つ解決するたびにヒットしたデータをメモして削除していくという手間はかかりますが。

NuboChan
質問者

補足

回答ありがとうございます。 前日の質問(VBA フォルダー内のファイル名・サイズの書き出し)は、  本質問をする上での事前処理を行うのに必要な相談でした。 まず、回答にある「ナップザック問題」と言うのが  さっぱり分からなかったの調べてみました。   ナップサック問題とは、n 種類の品物(各々、価値 vi、重量 wi)が与えられたとき、   重量の合計が W を超えない範囲で品物のいくつかをナップサックに入れて、   その入れた品物の価値の合計を最大化するには入れる品物の組み合わせを選び出す問題のようです。 提示頂いた「ナップザック問題」は条件が、複雑ですし  「ナップサック問題をEXCELワークシート関数で解く」は、  kkkkkmさんも述べられているようにファイル数が増減するたびに  データ分だけセル構造を調整する必要があり手間が掛かります。  又、「ナップザック問題解答用Excelマクロ」は、使い方が記載されていないので  利用方法が判りません。  (改変まで進みません。) ------------------------------------------- 私には、コードが長く、複雑で判らないのですが  「kent201.zip」でのコード中のどこかで   = を >=(又は、<=)に書き換えれば良さそうな気がするのですがどうでしょうか ?