【问题标题】:How to refresh a dictionary with random values?如何用随机值刷新字典?
【发布时间】:2020-03-07 12:28:06
【问题描述】:

我正在研究基于锦标赛选择的遗传算法,并且需要同时运行多个群体。我的问题是我有一本包含个人随机值的字典,但是当我循环检查这些值时,它们是相同的。

有什么方法可以刷新字典以改变随机值?

我的字典:

individuals = {

    'a': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'b': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'c': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'd': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'e': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'f': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'g': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'h': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)],
    'i': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)]
}

我的循环:

def run_generation():
    global random_individuals, fitness_scores
    for k in range(tournamentSize):
        randchoice = random.sample(list(individuals), 1)[0] #update individual list so values are different??!
        randchoice = individuals.get(randchoice)
        random_individuals.append(randchoice)

目前,我只是在每次形成新人口时重新定义字典(只是复制粘贴字典),但这似乎不经济,一旦人口增长就会变得迟缓。

【问题讨论】:

    标签: python python-3.x function dictionary


    【解决方案1】:

    您可以使用简单的列表推导轻松地动态生成字典:

    individuals = { i : [random.randint(-4,4) for _ in range(6)] for i in 'abcdefghi' }
    

    【讨论】:

      【解决方案2】:

      你可以把它变成一个函数,这样每次调用它时,它都会返回一个新的随机数字字典。

      def individuals():
          return { 
              'a': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'b': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'c': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'd': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'e': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'f': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'g': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'h': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)], 
              'i': [random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4),random.randint(-4,4)] }
      

      【讨论】:

      • 感谢您的反馈 - 但是,我收到 TypeError: 'dict' object is not callable
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2018-05-07
      相关资源
      最近更新 更多