以前にも同じような質問をしたのですが、計算時間がものすごくかかりそうで、事実上難しいので、再度、同様のご相談させていただければ幸いです。
下記のようなvariablesに格納された50個の変数があります。
これは元のcsvファイルから取ってきた関係もあり、このように格納しています。
variables =
{'variable1': [0.0, 25.0, 50.0, 75.0],
'variable2': [0.0],
'variable3': [0.0, 30.0, 90.0, 60.0],
'variable4': [0.0, 150.0, 235.0],
'variable5': [50.0, 100.0, 200.0, 400.0, 600.0]
...
'variable50': [0.0, 15.0, 30.0]}
ここから、各要素を①つずつ"ランダムに"選択して、100万個サンプルを発生させたいと考えています。
[例]
[25, 0, 30, 235, 100, ..., 15]
しかし、下記の制約条件があります。
①variable1と3の和は120以下
②全ての50個の要素の和を 980 〜 1020 の幅でおさめる
ということで、初めは下記のような流れを想定しました。
number_of_samples = 1000000
v = []
for i in range(len(v)):
v.append(variables['variable'+str(i+1)])
res = sample([p for p in product(v0, v1, v2, v3, v4,,,,v50) if p[1]+p[3]<=120 and "全ての和が980 ~ 120" ], number_of_samples)
最後はcsvファイルに格納
all_samples = pd.DataFrame(res)
all_samples.to_csv('all_samples.csv', header=False, index=False)
というように、絞って発生させようと思ったのですが、計算コスト的に1個ずつ上記の2つの制約条件をチェックしながら積み上げ方式で発生させたい(全部発生させてから(とは言っても天文学的な数字)絞るのでは難しい)と考えております。
(また、v0, v1, ... と全て50個書いていくのも、もう少しシンプルにできないかと考えております。)
また、3つ目の制約条件として、③以前発生させたサンプルと重複しているものは除きながら、
と、色々複雑な条件が絡んでいます。
下記のような少し似たようなウェブサイトや
https://code.i-harness.com/ja/q/126f36
itertools.productなどについても調べたりしているのですが、上記の3つを合致したコードがなかなかイメージできずにいます。
初心者的な質問で恐縮ですが、可能な範囲で、3つのうちの1つ2つでも構いませんので、サジェスチョンをいただけると幸いです。
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/17 15:28