生成具有约束

问题描述:

随机数的相关名单,我有以下的代码生成一些随机数字:但是生成具有约束

import random 
random.seed(1) 

lambdaj = [] 
tauj = [] 

for i in range(30): 
    lambdaj.append(random.randint(2, 15)) 
    tauj.append(random.uniform(10/365, 40/365)) 

#What I want is: 

for i in range(len(tauj)): 
    if lambdaj[i]*tauj[i] >= 1: 
     #RECALCULATE lambdaj and tauj by increasing the random.seed by 1 

所以,我想要做的是我想拥有的lambdajtauj一些列表,我不想要相关lambdaj[i]*tau[j] >= 1。他们应该都是< 1。所以,我认为,我需要增加我的种子,让它找到一些满足我的要求的种子价值。但是,我无法想出一个能够做到的循环工作。任何建议表示赞赏。

您的问题意味着任何拉姆达乘以任何头必须小于1(i * j),但您的测试意味着,实际上你只关心有关lambda表达式和TAUS(i * i):

lambdaj[i] * tauj[j] (In words) 
lambdaj[i] * tauj[i] (Your code test) 

假设你的代码是你的意思,那么就没有必要找好种子:刚刚重新生成“坏”指数:

for i in range(len(tauj)): 
    while lambdaj[i] * tauj[i] >= 1: 
     lambdaj[i] = random.randint(2, 15) 
     tauj[i] = random.uniform(10/365, 40/365) 

或者,只是这样做而产生的数据:

for i in range(30): 
    l = j = 5 # something larger than 1 
    while l * j >= 1: 
     l = random.randint(2, 15) 
     j = random.uniform(10/365, 40/365) 
    lambdaj.append(l) 
    tauj.append(j) 

事实上,如果你正在寻找真正的随机数据,然后永远不要设置你的种子。通过这种方法,并且通过不设置种子(例如,.seed(1)),您的约束被保证为您的数据对于每个脚本调用都是随机的。

+0

这是一个措辞错误,只是编辑它。 – user8028576

+0

我相信答案仍然是目标。 – hunteke

+0

第二个替代工作正常。然而,即使我尝试了不同的方式,第一个也没有工作。不过,非常感谢你;你绝对解决了我的问题。 – user8028576