以前にも同じような内容にて質問をさせて頂きましたが、非常に分り難いものなので、改めてご質問させて頂きます。
ある商品において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に変えてもセット数/在庫数に影響はないどっちも正解となる。
多様な微仕様を追加すれば作れそうだがけっこう手間な為、順算しパターンを試す方が楽ではないでしょうか。この特化仕様はフリーソフトではないと思われます。仕様を詰め作る職人はいっぱいいますが基本高いですよ。
順算であればエクセルで素人作成可能です。
試しで作った順算エクセルが必要な場合声をお掛け下さい。
詳しい説明とご回答ありがとう御座います。
選択方法としては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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
- Excel(エクセル) エクセルの表について 3 2023/04/14 18:00
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- メルカリ メルカリの上位表示について質問があります。 私は現在7種類の商品を7個ずつ計49個出品しています。 1 2022/10/10 10:33
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- その他(ビジネス・キャリア) 海外から請求書がきたのですがPC/MCの意味がわからないのとそこの数字があってるのかわからなくて海外 2 2022/11/08 11:32
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- 会社設立・起業・開業 レンタル業を開業予定です。開業前の仕入れでレンタル商品の仕入れ経費について教えてください。 1 2023/01/14 18:27
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- その他(ネットショッピング・通販・ECサイト) 今年購入した制汗クリームで自分の肌には合わなかったのでフリマアプリで出品をしました。 そしたらその日 2 2023/08/09 04:13
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1年分のデータから特定の月分...
-
同一セルに日時があるものを日...
-
EXCELでCSVファイル保存すると...
-
エクセルで数字、文字列混在の...
-
Excelで指定した条件と一致する...
-
COUNTIFの反対の関数はあるので...
-
【Excel】要素数が不定な場合の...
-
excel2013 vba 簡易な処理...
-
5つとびのセルの集計
-
エクセルVBA オートフィルの最...
-
ドロップダウンリストで空白の...
-
1つのセルにまとまっている情報...
-
エクセルで時給計算をしたいと...
-
エクセルシート1にWEBページの...
-
4つの条件が一致するものを抽出...
-
エクセル
-
Excelで連続データを行飛ばしで...
-
【VBA】指定フォルダに格納中の...
-
EXCELについて3つの質問
-
excelでカレンダーから予定を別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一セルに日時があるものを日...
-
1年分のデータから特定の月分...
-
EXCELでCSVファイル保存すると...
-
Excelで指定した条件と一致する...
-
COUNTIFの反対の関数はあるので...
-
ドロップダウンリストで空白の...
-
1つのセルにまとまっている情報...
-
エクセルVBAで、複数セルのデー...
-
エクセルで数字、文字列混在の...
-
エクセルでセルを一括で右詰に...
-
OFFSET関数を使用した印刷範囲...
-
EXCELで年月日の表記から日付部...
-
EXCELで足し算できるのにSUM...
-
【VBA】指定フォルダに格納中の...
-
Excelで連続データを行飛ばしで...
-
複数のシートの日付データを、...
-
excelで平均差を出したい
-
webクエリのurlの変更方法
-
Excel 空白セルの掛け算で答え...
-
エクセルで特定の行を除いて計...
おすすめ情報