Это часть моего кода:
def generateInstruction(Seed, Probability):
random.seed(Seed)
random.seed()
NumberOfAddresses = random.randint(10, 40)
ListOfAdresses = list()
Operations = [1,0]
Probabilities = [Probability, 1-Probability]
Var = random.randint(0, NumberOfAddresses)
if Var not in ListOfAdresses:
Op=0
Instruction = str(Op) + "\t" + str(Var )+ "\n"
ListOfAdresses.append(Var)
else:
Op = numpy.random.choice(Operations, 1, True, Probabilities)
Instruction = str(Op) + "\t" + str(Var )+ "\n"
return Instruction
Эта функция предназначена для генерации инструкции из 2 частей: операции op
и переменной var
, если переменная появляется дляв первый раз операция должна быть равна 0 .В противном случае это может быть либо 0 , либо 1 в соответствии с определенной вероятностью того, что я пройду через командную строку.
Позже в основном я вызываю эту функцию в цикле, а переменные хранятся в списке listOfAdresses
для проверки.Проблема в выводе, моя последовательность все с операциями, которые равны 0, хотя некоторые переменные появляются более одного раза, это заставляет меня задаться вопросом о else части функции, но я не вижу, что с ней не так.Любые замечания?
Это код, где я его называю:
def main():
random.seed(2)
K = random.randint(200, 2000)
print(K)
P=list()
if (len(sys.argv) > 2) :
for i in range(2, len(sys.argv)):
P.append(float(sys.argv[i]))
f= open('Trace.txt' , 'w+')
Seed = float(sys.argv[1])
for j in range(0 , len(sys.argv)-2) :
Probability = P[j]# there something with this index
for Iteration in range(K*j, K*(j+1)):
Instr = generateInstruction(Seed, Probability)
f.write(Instr)
#f.close()
else:
print('Params Error')
Последовательность делится на сегменты, каждый сегмент имеет различную вероятность на входе.Все вероятности передаются в командной строке.