- ベストアンサー
決められた数字の組み合わせが逆算出来るソフト
- 決められた数字の組み合わせを逆算するソフトやサイトを探しています。商品の組み合わせ方法が決まっており、各商品には在庫があります。
- 商品の種類は10種類で、それぞれ0~9の番号で識別されます。S、M、Lの3種類のセットを作成する際には特定の商品を組み合わせます。
- 500個の商品を無駄なく使い切るために、Sセット、Mセット、Lセットの組み合わせを選びたいと考えています。効率的な組み合わせを自動的に識別できるソフトやサイトを探しています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
前回よりすごくわかりやすくなってます。 確認ですが、 Sセット 【25457】x2セット、【36568】x5セット、【37679】x4セット がありうるかまたは、 Sセット 【25457】、【36568】、【37679】 x5セット Mセット 【14347】、【25458】、【26568】 x8セット Lセット 【03236】、【14347】、【04347】 x7セット となるか。(もし下部であれば【5製品】ごとにした意味は何か。) 何から何を求め、何を優先するのか? ・在庫数、セット数平均、製品配置。 製品配置を最後に求める場合など完全な正解はないですよ。 例 【01234】【56789】【01234】x10セット 【56789】【01234】【56789】x10セット 【01234】【56789】【01234】x10セット ↑ここの0を5に変えてもセット数/在庫数に影響はないどっちも正解となる。 多様な微仕様を追加すれば作れそうだがけっこう手間な為、順算しパターンを試す方が楽ではないでしょうか。この特化仕様はフリーソフトではないと思われます。仕様を詰め作る職人はいっぱいいますが基本高いですよ。 順算であればエクセルで素人作成可能です。 試しで作った順算エクセルが必要な場合声をお掛け下さい。
その他の回答 (5)
- sora1515
- ベストアンサー率58% (54/92)
回答5の補足です。 >出来る限り、自分の作業にて教えて頂い 賛成です。覚えると今後の応用修正が楽になります。 1.C7:L10範囲の関数がちょっとだけ難しいです。 配列数式{}中カッコを使っている(C2とD2とE2の計算結果をさらに足す事) {=SUM(LEN(C2:E2)-LEN(SUBSTITUTE(C2:E2,"0","")))*G2} 2.1をやめる。{}中カッコをなくし、D2とE2の計算をなくす。 =(LEN(C2)-LEN(SUBSTITUTE(C2,"0","")))*G2 ※これは、(C2の桁数 - 0を省いたC2の桁数) * G2 です。 3.B3セルをS2セットと書き換え、2と同じようにC15も変える。(B7やB8もS1/S2セットと変えておく) =(LEN(C3)-LEN(SUBSTITUTE(C3,"0","")))*G3 4.3と同様にS3セットも作る。 5.B5セルに行を6個追加する。差引在庫の上も6行追加する。 6.M123、L123の行をSセットのように追加する。 7.C2内の0を数える(元C7)の関数をコピーし、C2の1の数を数える関数を作る(元D7セル) =(LEN(C2)-LEN(SUBSTITUTE(C2,"0","")))*G2 ↓ =(LEN(C2)-LEN(SUBSTITUTE(C2,"1","")))*G2 8.あとは縦横同じような事を行う。 9.差引在庫などの足し算位置を微調整する。 =C13-SUM(C14:C16) ↓ =C13-SUM(C14:C22) 補足:関数中の$はオートフィルした時に自動でセル位置修正しなくする為のおまじないです。なくてもかまいません。
お礼
参考なるご意見ありがとう御座いました。 なんとか自分でも計算式を付け加えたり、変更する事も出来ました。 今現在の知識では関数の部分が難しいところでもありますが、それも合わせて自分で学習して身に付けていこうと思います。 この度は最初から最後まで丁寧にご回答頂きありがとう御座いました。 このような親切な方に出会えた事も嬉しく思います。
- sora1515
- ベストアンサー率58% (54/92)
回答2の者です。 順算.xlsです。参考までどうぞ http://www7.gigafile.nu/v3/?dda53bb8d333ada14efd243db3bbde1e エクセル2000と古いので動かない場合はまたお問合せ下さい。
お礼
ありがとう御座います。 問題なく利用させて頂く事が出来ました。 これ以上、お願いするのは本当に申し訳無く思うのですが、もし宜しければ以下のような計算方式に変更した物をお伺いさせて頂く事は可能でしょうか? 変更前 Sセット 25457 36568 37679 x 5 Mセット 14347 25458 26568 x 5 Lセット 03236 14347 04347 x 5 変更後 S1セット 25457 x 5 S2セット 36568 x 5 S3セット 37679 x 5 M1セット 14347 x5 M2セット 25458 x 5 M3セット 26568 x 5 L1セット 03236 x 5 L2セット 14347 x 5 L3セット 04347 x 5 以上のような9段にする事で手動入力は増えてしまいますが、各サイズのセット数の微調節も可能なのかなと思っております。 出来る限り、自分の作業にて教えて頂いた数式をご利用させて頂き変更が出来るようにも頑張ってみたいかと思います。 本当に感謝致します。
- ki073
- ベストアンサー率77% (491/634)
組み合わせの場合数が複雑でないのでしたら、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; で条件を追加したのが、二番目の結果です。 このように思うような条件を加えていけば、なんとかなりそうに思います。 興味がありましたら、書き込んでください。要領さえわかれば簡単に改良できます。
お礼
本当に詳しい詳細をご記入頂きありがとう御座います。 制限あり、なしでの作成出来るセット数や計算式も非常に参考になりました。 GLPKのようなソフトも非常に良いものだと思います。こちらも今後とも活用していけたらと思っております。 大変貴重なお時間と適切なご回答を頂き、ありがとう御座いました。
- warumx
- ベストアンサー率0% (0/9)
まず、データの整合性を確認しましょう。 Mセットの最初とLセットの2番目は一致しているので どちらかを修正した方がよいです。 それから、商品9の設定数が少なすぎるようです。 Mセットの組合せを少し変えて解くと80セット程度が 最大のようです。 100セット近くにするには商品の組合せが非常に重要と 思います。
お礼
回答ありがとう御座います。 確かに同じセット内容が重なっていました。 これ以外にも同様のケースで組み合わせを行うために、今後とも自動的に組み合わせを逆算できる物を探しておりました。 商品9の設定も少ないですが、この並びに関してはどうしても変更が出来ないのです。 詳しいご回答ありがとう御座います。
- dejigame
- ベストアンサー率0% (0/2)
数学のカテゴリで聞けば、もしかしたら方程式を作ってくれるかも知れませんよ。 ソフト化というのなら、こんなサイトもあるので、聞いてみては?。 料金安めのソフト開発 http://www.cuore.jp/it/ordermade/ http://www.flex-web.co.jp/soft_index.htm 激安、ボランティア系 http://www.tanomi.com/ http://anago.2ch.net/test/read.cgi/software/1348064199/ http://sadousinjin.blog.fc2.com/
お礼
ご回答頂きありがとう御座います。 確かに数字のカテゴリで質問をさせて頂いていれば方程式を生み出すことが出来たかも知れません。 今回は今後も同じような仕分けがある為に、何か良い計算ソフトがないかと思いご質問させて頂きました。 記載して頂きましたURLも参考にさせて頂きます。 ありがとう御座いました。
お礼
詳しい説明とご回答ありがとう御座います。 選択方法としてはSセット 【25457】x2セット、【36568】x5セット、【37679】x4セットでも問題ありません。 Sセットに属する3パターンは全て同じ内容のセットと考えて頂いても大丈夫です。 求める事としてはセット数をいかに多く作り出すことが出来るかという事です。 なので、1つでも多いセットが作成出来るのであれば、仮にSセットにて【25457】の組み合わせが偏っても構いません。 このような組み合わせを仕分けるソフトが無いという事と、エクセルにて差引在庫を分り易く表示出来る事も教えて頂き本当に感謝です。 作成して頂いたエクセルの計算方式を利用して、各セットの3パターンの数を平等にせず、全ての9パターンのセット数を手入力していけば、差引在庫を見ながら大体の仕分けも出来るかと思います。 もし、お手数でなければ作成をして頂いた計算方式もお伺い出来たら幸いです。 非常に分かり易く、参考になるご回答ありがとう御座います。