• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:決められた数字の組み合わせが逆算出来るソフト)

決められた数字の組み合わせが逆算出来るソフト

ki073の回答

  • ki073
  • ベストアンサー率77% (491/634)
回答No.4

組み合わせの場合数が複雑でないのでしたら、No.2の方法でもよいように思いますが、 複雑になってきて、ある程度最適な組み合わせを見つけたいときには、線形(整数)計画法を使うのが良いかも知れません。 GLPKというフリーのソフトがあり、Unix系OSやWindowsでも使えます。 以前回答したものをリンクしておきますが、はじめて見ると相当手強いと思います。 http://okwave.jp/qa/q7579420.html 実際に質問欄のものでやったプログラムを書いておきます。急いで作ったので間違いがあるようにも思いますが、答えを書いていきます。 まずは制限なしで、セットを最大数作る場合では72セットできるようです。 NumberofSet[L1].val = 0 NumberofSet[L2].val = 0 NumberofSet[L3].val = 17 NumberofSet[M1].val = 15 NumberofSet[M2].val = 19 NumberofSet[M3].val = 12 NumberofSet[S1].val = 9 NumberofSet[S2].val = 0 NumberofSet[S3].val = 0 TotalSetNumber.val = 72 次に制限を加え、LセットとSセットの合計が25個以上になるような条件を加えると69セット NumberofSet[L1].val = 12 NumberofSet[L2].val = 2 NumberofSet[L3].val = 11 NumberofSet[M1].val = 0 NumberofSet[M2].val = 6 NumberofSet[M3].val = 12 NumberofSet[S1].val = 11 NumberofSet[S2].val = 15 NumberofSet[S3].val = 0 TotalSetNumber.val = 69 使ったプログラムは #-----------次から set SetName; # セットの名前 set Index := 1..5; # セットの中の番号 set GoodsID := 0..9; # 詰め合わせる商品の番号 param AssortmentList{SetName, Index}; # 詰め合わせリスト param assortment{p in SetName, g in Index, gi in GoodsID}, binary, := if gi=AssortmentList[p, g] then 1 else 0 ; var NumberofSet{SetName}, >=0, integer; # セットごとの数 var requiredNumber{GoodsID}, >=0, integer; # 必要な商品数 maximize TotalSetNumber: sum{p in SetName}NumberofSet[p]; s.t. TotalN{k in GoodsID} : sum{p in SetName, j in Index}assortment[p, j, k]*NumberofSet[p]=requiredNumber[k]; s.t. required{k in GoodsID} : requiredNumber[k]<=50; solve; display requiredNumber; # 商品ごとの必要数 display NumberofSet; # セットごとの数 display TotalSetNumber; # 作ることのできるセット数合計 data; set SetName := L1, L2, L3, M1, M2, M3, S1, S2, S3; # 詰め合わせリスト param AssortmentList: 1 2 3 4 5:= L1 2 5 4 5 7 L2 3 6 5 6 8 L3 3 7 6 7 9 M1 1 4 3 4 7 M2 2 5 4 5 8 M3 2 6 5 6 8 S1 0 3 2 3 6 S2 1 4 3 4 7 S3 0 4 3 4 7 ; end; #--------この上まで # glpsol --math program.mod # コマンド です。 s.t. SetL : NumberofSet["L1"]+NumberofSet["L2"]+NumberofSet["L3"]>=25; s.t. SetS : NumberofSet["S1"]+NumberofSet["S2"]+NumberofSet["S3"]>=25; で条件を追加したのが、二番目の結果です。 このように思うような条件を加えていけば、なんとかなりそうに思います。 興味がありましたら、書き込んでください。要領さえわかれば簡単に改良できます。

evo9027
質問者

お礼

本当に詳しい詳細をご記入頂きありがとう御座います。 制限あり、なしでの作成出来るセット数や計算式も非常に参考になりました。 GLPKのようなソフトも非常に良いものだと思います。こちらも今後とも活用していけたらと思っております。 大変貴重なお時間と適切なご回答を頂き、ありがとう御座いました。

関連するQ&A

  • 組み合わせについて、教えてください!

    こんばんは。 どなたかにご指南いただければと思い、質問を投稿しました。 宜しくお願いします。 早速ですが、標題の「組み合わせ」についてです。 ある制作物を作成していますが、店舗により掲載する商品、そうでない商品 とあり、何パターン作ればよいか分からず、困っています。 「一部店舗では取り扱いがありません」と注釈をつけて、全商品をと提案してみましたが クライアントの希望でどうにかしてほしい(店舗毎に作ってほしい)とあり何とか叶えたいと思うのですが,,,, 商品が、16商品 店舗数が57店舗 それぞれ、掲載するしない決まっており、期日が明日までとなっておりとても困っています。 どなたか知恵を貸していただけませんでしょうか。 何パターン作ればいいのか、調べる方法や何か良い手があれば、ご指南ください。 教えてください!宜しくお願いします!

  • Excelで、数字の組み合わせの合計が一定数になるパターンの抽出

    Excelで、数字の組み合わせの合計が一定数になるパターンの抽出 たとえば、つぎの配列があるとします。 A(5){10,20,30,40,50}要素数が5つ1..5、{}は内容 このなかで二つ以上の組み合わせで和が60になる組み合わせを出したいとします 答えは パタン1:1,2,3  /* 10+20+30 */ パタン2:1,5 /* 10+50 */ パタン3:2,4 /* 20+40 */ 同じような処理をExcelの関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • エクセルで作成できますか?

    91個の材料を使って商品を作ります。商品にはサイズがS.M.LあってSを1個作るには材料を2個、Mを1個作るには材料を3個、Lを1個作るには、4個それぞれ使います。 91個内で各サイズを作るとき、どのサイズを基準にしてもサイズ毎の作成可能数を表示できるようにエクセルで作成可能でしょうか? 例えば、 Sサイズを18個と入力したら自動でMサイズの作成可能数、Lサイズ作成可能数が計算できるようにしたいのですが。また、基準をSサイズだけでなく、Mサイズ、Lサイズどのサイズを先に入力しても計算できたらなお助かります。

  • [大至急]5つの数字のパターンは?

    1,2,3,4,5 番のスイッチを見立てた数字があり、 これを以下のようなパターンで考えるとどの様な組み合わせ数になるのか? また、それを記述していただいたらうれしいです 1,-,-,-,- 1,2,-,-,- 1,2,3,-,- 1,2,3,4,- 1,2,3,4,5 ※必要ないパターン 2,3,1,4,5 2,-,3,5,- 順番が入れ替わる必要はありません つまり、 1だけがONの時にはこの処理を行う 1と3だけがONの時にはこの処理を行う などの様に、1~5個のスイッチ条件の組み合わせをプログラムで作りたいのです。 よろしくお願いします。

  • 組み合わせ数を教えて下さい。

    組み合わせ数を教えて下さい。 6種類の長さの物を、組み合わせて必ず 6mにした時、何通りあるのか? 教えて下さい。同じ種類を何度つかってもよいです。 (1)=100mm (2)=400mm (3)=300mm (4)=350mm (5)=200mm (6)=1000mm

  • 文字列の組合わせについて

    仕事でこまっています。できるだけ早めに教えていただけると幸いです。 ABCDEFという文字列があるとします。この文字列の組合わせのパターン とそのパターンがいくつあるかしらべたいと思っています。 パターン化する際の条件としては ■重複する文字列のパターンは除く AABCDFとかABBDFDなどは除いてください ■文字数は1文字から6文字までです。 A、Bという組み合わせからABCDEFまでの中からの組合わせになります。 ■順番については、違っていても同一のものとする。 ABCでもBCAでも同じ組合わせということになります。 またこういう作業をする際にどうやって算出するのかも併せて教えて いただけると助かります。 以上よろしくお願いいたします。

  • 組み合わせ数を教えて下さい。

    組み合わせ数を教えて下さい。 6種類の長さの物を、組み合わせて必ず 6mにした時、何通りあるのか? 教えて下さい。 (1)=100cm (2)=400cm (3)=300cm (4)=350cm (5)=200cm (6)=1000cm

  • 軌道に可能な量子数の組み合わせについて

    4p軌道に可能な量子数(n,l,m)の組み合わせをすべて求めよ。 解き方を教えてください。

  • 組み合わせの問題

    ↑ ○○○・・○ | ●●●・・● M △△△・・△ 種 ▲▲▲・・▲ 類 ◆◆◆・・◆ | □□□・・□ ↓ ■■■・・■   ←ーN個ー→ この中からX個を取り出したい。その時の組み合わせの数はいくつになるんでしょう?

  • 在庫の集計VBAについて

    元のエクセルファイルにすべての商品コードとサイズと在庫数が以下のようにあります。 code  サイズ  在庫数 a  S  10 a  M  5 a  L  7 b  26インチ  10 b  27インチ  20 b  28インチ  10 c  S  1 c  M  6 c  L  4 c  LL  20 ・ ・ ・ ・ と2万行ほど。 そこで週2回ほど在庫表が他部署から回ってきます。 しかし、そのファイルには以下のように在庫のあるコードとサイズと個数しか書いていません。 code  サイズ  在庫数 a  M  1 a  L  2 c  M  5 c  LL  11 ・ ・ ・ ・ 期待値としましては、 a  S  0 a  M  1 a  L  2 b  26インチ  0 b  27インチ  0 b  28インチ  0 c  S  0 c  M  5 c  L  0 c  LL  11 ・ ・ ・ ・ となるようにマージしたいです。 元のファイルにはすべてのcodeとサイズが書いてあります。 回ってくる在庫表はすべてのコードとサイズが書いていません(在庫のあるものだけ書いてあります)。 在庫が復活するとまた書き直さないとダメなので、困ってます。 いい方法はないでしょうか。 どうぞ、よろしくお願いします。