Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DEAP和Windows上的多处理:AttributeError_Python_Python 3.x_Windows_Multiprocessing_Deap - Fatal编程技术网

Python DEAP和Windows上的多处理:AttributeError

Python DEAP和Windows上的多处理:AttributeError,python,python-3.x,windows,multiprocessing,deap,Python,Python 3.x,Windows,Multiprocessing,Deap,我有以下情况: 视窗10 Python 3.7 deap 1.3.1 有一个main.py与 def main(): ... schedule.schedule() ... if __name__== "__main__": main() 然后,我还有一个文件schedule.py def schedule() ... toolbox = base.Toolbox() creator.create("FitnessMin", bas

我有以下情况:

  • 视窗10
  • Python 3.7
  • deap 1.3.1
有一个main.py与

def main():
    ...
    schedule.schedule()
    ...

if __name__== "__main__":
    main()
然后,我还有一个文件schedule.py

def schedule()
   ...
    toolbox = base.Toolbox()

    creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
    creator.create("Individual", list, fitness=creator.FitnessMin)

    toolbox.register('individual', init_indiv, creator.Individual, bounds=bounds)
    toolbox.register("population", tools.initRepeat, list, toolbox.individual)

    toolbox.register("evaluate", fitness, data=args)
    toolbox.register("mate", tools.cxTwoPoint)
    toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
    toolbox.register("select", tools.selTournament, tournsize=3)

    # Further parameters
    cxpb = 0.7
    mutpb = 0.2

    # Measure how long it takes to caluclate 1 generation
    MAX_HOURS_GA = parameter._MAX_HOURS_GA
    POPSIZE_GA = parameter._POPSIZE_GA
    pool = multiprocessing.Pool(processes=4)
    toolbox.register("map", pool.map)
    pop = toolbox.population(n=POPSIZE_GA * len(bounds))
    result = algorithms.eaSimple(pop, toolbox, cxpb, mutpb, 1, verbose=False)
现在,执行此操作会产生以下错误:

Process SpawnPoolWorker-1:
Traceback (most recent call last):
  File "C:\Users\...\lib\multiprocessing\process.py", line 297, in _bootstrap
    self.run()
  File "C:\Users\...\lib\multiprocessing\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\...\lib\multiprocessing\pool.py", line 110, in worker
    task = get()
  File "C:\Users\...\lib\multiprocessing\queues.py", line 354, in get
    return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'Individual' on <module 'deap.creator' from 'C:\\Users...
对大多数人没有帮助

似乎还有其他人有类似的问题,即使是最近()。对他们中的大多数人来说,似乎存在某种变通方法,但似乎没有一种适合我的情况,或者至少我不知道如何让它们发挥作用。 我也尝试过注册函数和初始化池的顺序,但没有成功。我也尝试过用勺子代替,但效果相似

有什么想法吗

解决方案是在全局范围内创建“FitnessMin”和“Individual”,即在main.py中:

import ...

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)

def main():
    ...
    schedule.schedule()
    ...

if __name__== "__main__":
    main()
import ...

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)

def main():
    ...
    schedule.schedule()
    ...

if __name__== "__main__":
    main()