次の単純なアルゴリズムでは、テストif Ri > T:
を使用すると、L で 30 個の要素、U で 70 個の要素が得られます。T の値が 0.7 に設定されているため、これは問題ありません。
ここで、次のような制約を追加したい場合: L に配置される要素 i は、Ri > T であるという事実に加えて、L に B=20 を超えるものが含まれていないことも必要です (つまり、最後に、i=n の場合、L のサイズは多かれ少なかれ B=20 になります)。
しかし問題は、テストを で置き換えると、if Ri > T:
Lif Ri > T and len(L) < B:
に配置される要素は、ブラウズする最初の要素 i に含まれる可能性が高くなるということです (つまり、要素 i = 87 にはチャンスがありません)。 Lにある)。しかし、i = 1 から n までのすべての要素が L に含まれる可能性が等しいことを望みます (最初の要素だけを有利にするのではありません)。
注:Ri > T
要素をLに配置するための条件は、コードから削除しないでください。これは私にとって重要です。時間 i で $Ri$ が T よりも高かった要素のみが L に存在することが許可されます。len(L) は B を超えてはなりません (多かれ少なかれ)。
import random
T = 0.7 # or any value T in ]0,1[
n = 100 # or any value n > B
B = 20 # or any value B < n
L = []
U = []
for i in range(1,n+1):
xi = input("please give a new data x")
Ri = 1. - random.random() # normally it is Ri = 1. - Proba(xi) depending on xi, but lets simplify using random() ...
if Ri > T:
Pay 1 euro and buy yi the label of xi
L.append((xi, yi))
else:
U.append(xi)
print len(L), L
print
print len(U), U