Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 scipy差分进化优化失败,工人不是1_Python_Python 3.x_Parallel Processing_Scipy_Differential Evolution - Fatal编程技术网

python scipy差分进化优化失败,工人不是1

python scipy差分进化优化失败,工人不是1,python,python-3.x,parallel-processing,scipy,differential-evolution,Python,Python 3.x,Parallel Processing,Scipy,Differential Evolution,我正在尝试使用的workers参数 当我把它设为1时,我的脚本运行没有问题。 如果我放置了不同的内容,它将失败,并进行以下回溯: 回溯(最近一次呼叫最后一次): 文件“/home/ubuntu/.local/lib/python3.6/site-packages/scipy/_-lib/_-util.py”,第419行,在调用中__ 返回self.\u mapfunc(func,iterable) 文件“/usr/lib/python3.6/multiprocessing/pool.py”,第2

我正在尝试使用的
workers
参数

当我把它设为1时,我的脚本运行没有问题。 如果我放置了不同的内容,它将失败,并进行以下回溯:

回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/.local/lib/python3.6/site-packages/scipy/_-lib/_-util.py”,第419行,在调用中__
返回self.\u mapfunc(func,iterable)
文件“/usr/lib/python3.6/multiprocessing/pool.py”,第266行,在地图中
返回self.\u map\u async(func、iterable、mapstar、chunksize).get()
get中第644行的文件“/usr/lib/python3.6/multiprocessing/pool.py”
提升自我价值
文件“/usr/lib/python3.6/multiprocessing/pool.py”,第424行,在任务处理中
放置(任务)
文件“/usr/lib/python3.6/multiprocessing/connection.py”,第206行,在send中
self.\u发送\u字节(\u ForkingPickler.dumps(obj))
文件“/usr/lib/python3.6/multiprocessing/reduce.py”,第51行,转储
cls(buf,协议).dump(obj)
TypeError:无法序列化'\u io.TextIOWrapper'对象
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/.local/lib/python3.6/site packages/scipy/optimize/_differentialevolution.py”,第878行,在_compute_population_energies中
参数_pop[0:nfevs]))
文件“/home/ubuntu/.local/lib/python3.6/site-packages/scipy/_-lib/_-util.py”,第422行,在调用中__
raise TypeError(“类似映射的可调用对象必须为”
TypeError:map-like callable的格式必须为f(func,iterable)
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“main_parallel.py”,第323行,在
优化器(args.asset_类、udl、tenor、args.criteria、params_decage、params、coach_服务器、args.num_workers)
文件“main_parallel.py”,第269行,在优化器中
maxiter=5,workers=num_workers,突变=(0.5,1.5),重组=0.8)
文件“/home/ubuntu/.local/lib/python3.6/site packages/scipy/optimize/_differentialevolution.py”,第306行,在differential_evolution中
ret=solver.solve()
文件“/home/ubuntu/.local/lib/python3.6/site packages/scipy/optimize/_differentialevolution.py”,第745行,在solve中
自总体[自可行])
文件“/home/ubuntu/.local/lib/python3.6/site packages/scipy/optimize/\u differential evolution.py”,第883行,在计算人口能量中
raise RUNTIMERROR(“类似映射的可调用对象必须为”
RuntimeError:map-like callable的格式必须为f(func,iterable),返回一个与“iterable”长度相同的数字序列
请有人解释一下如何使用这个参数(具体的目标函数?其他约束条件?)

另外,使用多核的简单python差分进化优化示例也值得赞赏。

关于worker使用的关键部分是警告,当
worker!=1时,它

[…]要求
func
可酸洗

出现的错误中有几个提示表明
func
不可pickle,即

self.\u映射函数(func,iterable)
...
self.\u发送\u字节(\u ForkingPickler.dumps(obj))
...
TypeError:无法序列化'\u io.TextIOWrapper'对象
显然,有人试图对
func
进行酸洗,但失败的原因可能是
func
不可酸洗。文档中的另一个签名表明,
workers
似乎试图被解释为类似于映射的或可调用的。可以预见,这也会失败,因为
workers
是实际上是一个
int

文档中包含一个where
workers!=1
,它工作正常

来自scipy.optimize import differential_evolution的
,rosen
边界=[(0,2)、(0,2)、(0,2)、(0,2)、(0,2)、(0,2)]
结果=差异进化(rosen,bounds,Updated='deferred',
工人=-1)
result.x,result.fun

如果您将
scipy.optimize.differential_evolution
中使用的
func
重构为可通过序列化,您应该能够成功地使用
workers!=1

谢谢您的帮助。您如何知道罪魁祸首是args.asset_类?它只是一个字符串,所以我假设它的处理是内置的。@Chapo Tha这是一个错误,我误读了错误语句。我需要看看你如何调用
scipy.optimize.differential\u evolution
,告诉你酸洗
result\u diff\u evo=differential\u evolution需要重构什么(func=optimizer\u函数,bounds=bounds,args=(init\u参数名称,df,条件,参数衰减[udl][tenor][“第一个日期”]、参数衰变[udl][tenor][busdays]、参数衰变[udl][tenor][coeff”]、参数衰变[udl][tenor][spot_start”]、参数衰变[udl][tenor][iv_start”]、参数[“verbose”]、文件夹、测试参数、、初始值=pop_denorm、最大值=5、工人数=num_工人、突变=(0.5、1.5),重组=0.8,打印=True)
为实际值line@Chapo您的问题的解决方案是重构
optimizer\u函数
,通过pickling将其序列化所有参数都相当简单,除了
tested\u参数
,它是通过
tested\u params=open(f“tested\u params.csv”,“w”)获得的
。这可能是问题所在吗?