首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python & SCOOP:每个节点的不同结果/名人堂?

Python & SCOOP:每个节点的不同结果/名人堂?
EN

Stack Overflow用户
提问于 2018-06-26 16:19:23
回答 1查看 978关注 0票数 1

我在用

  • Python 3.6.4 / Anaconda自定义(64位) GCC 7.2.0在linux上
  • 独家0.7.2.0
  • DEAP 1.2.2

要运行遗传算法示例,请从onemax.py中获取/ example /deap_ga_onemax.py

在使用SLURM脚本的HPC集群上,请参见下面发布的代码。

请注意,deap_ga_onemax.py中的第71行已被注释为:#random.seed(64)

Python代码:

代码语言:javascript
复制
"""
Code from the deap framework, available at:
https://code.google.com/p/deap/source/browse/examples/ga/onemax_short.py
Conversion to its parallel form took two lines:
from scoop import futures
toolbox.register("map", futures.map)
"""
import array
import random

import numpy

from deap import algorithms
from deap import base
from deap import creator
from deap import tools
from scoop import futures

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", array.array, typecode='b',                 
fitness=creator.FitnessMax)

toolbox = base.Toolbox()

# Attribute generator
toolbox.register("attr_bool", random.randint, 0, 100)

# Structure initializers
toolbox.register("individual", tools.initRepeat, creator.Individual,     
toolbox.attr_bool, 100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

def evalOneMax(individual):
    return sum(individual),

toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
toolbox.register("map", futures.map)

def main():
    #random.seed(64)

    pop = toolbox.population(n=100)
    hof = tools.HallOfFame(1)
    stats = tools.Statistics(lambda ind: ind.fitness.values)
    stats.register("avg", numpy.mean)
    stats.register("std", numpy.std)
    stats.register("min", numpy.min)
    stats.register("max", numpy.max)

    pop, log = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=10,stats=stats, halloffame=hof, verbose=True)

        return pop, log, hof

if __name__ == "__main__":
    pop, log, hof = main()
    print(hof)

SLURM脚本:

代码语言:javascript
复制
#!/bin/bash

#SBATCH -J xxx
#SBATCH -A xxx
#SBATCH -N 4
#SBATCH -n 4
#SBATCH --time=00:03:00
#SBATCH --mem-per-cpu=1024M

#echo "ERROR"
hosts=$(srun bash -c hostname)
srun /projects/p_thermo_dat/software/python36/bin/python -m scoop --host $hosts -v scoop_deap_test.py > $(date +"%Y%m%d_%I%M%p")_log_scoop_deap_test.txt

exit

问题:在4个节点上并行运行deap_ga_onemax.py,每个处理器在4个不同的名人堂中运行。运行在3个节点上,产生3个不同的名人堂等。这样,每个节点都有自己的名人堂。

我如何才能获得一个包含所有节点的结果的名人堂?

任何洞察都会很有帮助..。

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 13:41:14

“任择议定书”还就DEAP的github问题提出了这个问题。作为一个DEAP开发人员,我认为它更适合在那里,这里是一个与对话的链接。

https://github.com/DEAP/deap/issues/285

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51047445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档