![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
以前にも同じような内容にて質問をさせて頂きましたが、非常に分り難いものなので、改めてご質問させて頂きます。
ある商品において10種類の物が存在するとします。その10種類の商品は0~9という番号にて識別します。
その10種類の商品をセット販売すると仮定します。
S,M,Lの3種類のセットを作成する上で、組み合わせる商品が決まっています。
商品名を0~9という数字で割り当てます。
各商品の在庫数は50個ずつ。なので、10*50=500個の商品があります。
その中で組み合わせ方法として各3パターンの以下のような9パターンの組み合わせより作成をします。
Sセット 【25457】、【36568】、【37679】
Mセット 【14347】、【25458】、【26568】
Lセット 【03236】、【14347】、【04347】
この組み合わせの中で4番や5番などのよく使う商品があります。
なので、500個の商品を100セットにして使い切ることは不可能かと思います。
出来る限り、Sセット、Mセット、Lセットの数を同じくらいに作成したいのですが、どのような組み合わせを選択することにより500個の商品を無駄なく使うことが出来るでしょうか?
そんな、組み合わせを1セットでも多く自動的に識別する事の出来るソフトやサイトなどを探しています。
No.2ベストアンサー
- 回答日時:
前回よりすごくわかりやすくなってます。
確認ですが、
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に変えてもセット数/在庫数に影響はないどっちも正解となる。
多様な微仕様を追加すれば作れそうだがけっこう手間な為、順算しパターンを試す方が楽ではないでしょうか。この特化仕様はフリーソフトではないと思われます。仕様を詰め作る職人はいっぱいいますが基本高いですよ。
順算であればエクセルで素人作成可能です。
試しで作った順算エクセルが必要な場合声をお掛け下さい。
![「決められた数字の組み合わせが逆算出来るソ」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/5/1313492_5497f15f50483/M.jpg)
詳しい説明とご回答ありがとう御座います。
選択方法としてはSセット 【25457】x2セット、【36568】x5セット、【37679】x4セットでも問題ありません。
Sセットに属する3パターンは全て同じ内容のセットと考えて頂いても大丈夫です。
求める事としてはセット数をいかに多く作り出すことが出来るかという事です。
なので、1つでも多いセットが作成出来るのであれば、仮にSセットにて【25457】の組み合わせが偏っても構いません。
このような組み合わせを仕分けるソフトが無いという事と、エクセルにて差引在庫を分り易く表示出来る事も教えて頂き本当に感謝です。
作成して頂いたエクセルの計算方式を利用して、各セットの3パターンの数を平等にせず、全ての9パターンのセット数を手入力していけば、差引在庫を見ながら大体の仕分けも出来るかと思います。
もし、お手数でなければ作成をして頂いた計算方式もお伺い出来たら幸いです。
非常に分かり易く、参考になるご回答ありがとう御座います。
No.6
- 回答日時:
回答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)
補足:関数中の$はオートフィルした時に自動でセル位置修正しなくする為のおまじないです。なくてもかまいません。
参考なるご意見ありがとう御座いました。
なんとか自分でも計算式を付け加えたり、変更する事も出来ました。
今現在の知識では関数の部分が難しいところでもありますが、それも合わせて自分で学習して身に付けていこうと思います。
この度は最初から最後まで丁寧にご回答頂きありがとう御座いました。
このような親切な方に出会えた事も嬉しく思います。
No.5
- 回答日時:
回答2の者です。
順算.xlsです。参考までどうぞ
http://www7.gigafile.nu/v3/?dda53bb8d333ada14efd …
エクセル2000と古いので動かない場合はまたお問合せ下さい。
ありがとう御座います。
問題なく利用させて頂く事が出来ました。
これ以上、お願いするのは本当に申し訳無く思うのですが、もし宜しければ以下のような計算方式に変更した物をお伺いさせて頂く事は可能でしょうか?
変更前
Sセット254573656837679x5
Mセット143472545826568x5
Lセット032361434704347x5
変更後
S1セット25457x5
S2セット 36568x5
S3セット 37679x5
M1セット 14347 x5
M2セット 25458 x5
M3セット 26568 x5
L1セット 03236 x5
L2セット 14347 x5
L3セット 04347 x5
以上のような9段にする事で手動入力は増えてしまいますが、各サイズのセット数の微調節も可能なのかなと思っております。
出来る限り、自分の作業にて教えて頂いた数式をご利用させて頂き変更が出来るようにも頑張ってみたいかと思います。
本当に感謝致します。
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;
で条件を追加したのが、二番目の結果です。
このように思うような条件を加えていけば、なんとかなりそうに思います。
興味がありましたら、書き込んでください。要領さえわかれば簡単に改良できます。
本当に詳しい詳細をご記入頂きありがとう御座います。
制限あり、なしでの作成出来るセット数や計算式も非常に参考になりました。
GLPKのようなソフトも非常に良いものだと思います。こちらも今後とも活用していけたらと思っております。
大変貴重なお時間と適切なご回答を頂き、ありがとう御座いました。
No.3
- 回答日時:
まず、データの整合性を確認しましょう。
Mセットの最初とLセットの2番目は一致しているので
どちらかを修正した方がよいです。
それから、商品9の設定数が少なすぎるようです。
Mセットの組合せを少し変えて解くと80セット程度が
最大のようです。
100セット近くにするには商品の組合せが非常に重要と
思います。
回答ありがとう御座います。
確かに同じセット内容が重なっていました。
これ以外にも同様のケースで組み合わせを行うために、今後とも自動的に組み合わせを逆算できる物を探しておりました。
商品9の設定も少ないですが、この並びに関してはどうしても変更が出来ないのです。
詳しいご回答ありがとう御座います。
No.1
- 回答日時:
数学のカテゴリで聞けば、もしかしたら方程式を作ってくれるかも知れませんよ。
ソフト化というのなら、こんなサイトもあるので、聞いてみては?。
料金安めのソフト開発
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/1348 …
http://sadousinjin.blog.fc2.com/
ご回答頂きありがとう御座います。
確かに数字のカテゴリで質問をさせて頂いていれば方程式を生み出すことが出来たかも知れません。
今回は今後も同じような仕分けがある為に、何か良い計算ソフトがないかと思いご質問させて頂きました。
記載して頂きましたURLも参考にさせて頂きます。
ありがとう御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同一セルに日時があるものを日...
-
Excelで指定した条件と一致する...
-
EXCELでCSVファイル保存すると...
-
ドロップダウンリストで空白の...
-
エクセルVBAで、複数セルのデー...
-
エクセル数式・等間隔ごとの範...
-
エクセルでセルを一括で右詰に...
-
複数のシートの日付データを、...
-
OFFSET関数を使用した印刷範囲...
-
エクセルで数字、文字列混在の...
-
Excelで、表紙に、住所を自動で...
-
1年分のデータから特定の月分...
-
excel 数値の桁数によって切捨...
-
COUNTIFの反対の関数はあるので...
-
エクセル
-
エクセルで数列を使う方法はあ...
-
1つのセルにまとまっている情報...
-
4つの条件が一致するものを抽出...
-
Excel 空白セルの掛け算で答え...
-
エクセルでエラー値を表示させ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一セルに日時があるものを日...
-
1年分のデータから特定の月分...
-
EXCELでCSVファイル保存すると...
-
Excelで指定した条件と一致する...
-
COUNTIFの反対の関数はあるので...
-
エクセルでセルを一括で右詰に...
-
エクセルで数字、文字列混在の...
-
EXCELで年月日の表記から日付部...
-
ドロップダウンリストで空白の...
-
エクセルVBAで、複数セルのデー...
-
OFFSET関数を使用した印刷範囲...
-
1つのセルにまとまっている情報...
-
複数のシートの日付データを、...
-
Excelで連続データを行飛ばしで...
-
エクセル数式・等間隔ごとの範...
-
webクエリのurlの変更方法
-
セルの着色を認識する関数って...
-
エクセル
-
セル内の改行された文字列を分割
-
EXCELで足し算できるのにSUM...
おすすめ情報