马尔可夫链条发生器

时间:2018-11-22 01:01:50

标签: python generator markov-chains markov

生成器应采用起点(整数)。随着生成的生成器对象的每次通过,都应执行从返回的最后一个点(或起点(如果尚未返回任何点))的随机步骤。执行此步骤后,应返回此步骤的结果。

import random

def markov(start: int):
  for i in range (1):
     yield random.randint(i-1, i+1)

我的代码有什么问题?

2 个答案:

答案 0 :(得分:0)

我介绍了一个易于测试的计数,但是您可以无休止地循环。这将比最后一步后退一步或前进更多,或者停留在最后一步。

import random

def markov(start: int):
  step = start
  count = 0
  while count<20:
     step = random.randint(step-1, step+1)
     yield step
     count += 1

例如,您可以通过list(markov(1))测试这是否是您想要的。如果您始终希望它移动,我可以将step = random.randint(step-1, step+1)替换为step = random.choice([step-1, step+1])

答案 1 :(得分:0)

您在正确的轨道上。假设步长为1(在任一方向上),则应该完全摆脱i计数器:

>>> import random
>>>
>>>
>>> def markov(start: int):
...     location = start
...     while True:
...         yield location
...         location += random.randint(-1, 1)
...
>>>
>>> gen = markov(5)
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
6
>>> next(gen)
7
>>> next(gen)
6
>>> next(gen)
5
>>> next(gen)
4
>>> next(gen)
4
>>> next(gen)
3