とりあえず、単純に
(1) 各リストからの全ての組み合わせを求める
(2) 上記の組み合わせから条件で絞る
(3) その中からランダムでN個サンプルする
をそのまま組んでみるとよいのではないでしょうか
(1)は iteratools.product()
にて実装できます
直積集合を求める
https://docs.python.jp/3/library/itertools.html#itertools.product
Python
1v0 = variables['variable1']
2v1 = variables['variable2']
3v2 = variables['variable3']
4p1 = itertools.product(v0,v1,v2)
(2)は単純にループや内包表記などで実装できます
Python
1p2 = [d for d in p1 if d[1]+d[2]<=35]
2print(p2)
(3)はrandom.sample()
で実装できます
リストの中から重複なしのN個の要素を返す
https://docs.python.jp/3/library/random.html#random.sample
Python
1N = 10
2res = random.sample(p2, N)
3print(res)
4
ということで、まとめるとこんな感じ
Python
1from itertools import product
2from random import sample
3
4number_of_samples = 10
5variables = {
6 'variable1': [1, 2, 3, 4, 5],
7 'variable2': [0, 10, 20, 30],
8 'variable3': [5, 10, 15, 20, 100]
9}
10
11v0 = variables['variable1']
12v1 = variables['variable2']
13v2 = variables['variable3']
14res = sample([p for p in product(v0,v1,v2) if p[1]+p[2]<=35], number_of_samples)
15# [(2, 10, 20), (3, 10, 15), (5, 10, 15), (1, 20, 10), (1, 30, 5), (4, 10, 10), (5, 0, 15), (3, 0, 10), (4, 10, 5), (4, 0, 15)]