使用下面的简单算法,如果使用测试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:
替换if Ri > T and len(L) < B:
为在 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