首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >出现__init__错误的PyGMO自定义类

出现__init__错误的PyGMO自定义类
EN

Stack Overflow用户
提问于 2017-01-16 17:59:54
回答 1查看 131关注 0票数 0

我正在用PyGMO解决一个并行化优化问题。不幸的是,这些文档并不是很有用。根据these guidelines的说法,我将我的问题陈述为

代码语言:javascript
复制
import PyGMO as pygmo
class my_problem(pygmo.base):
    def __init__(self,model,config,pars,**kwargs):
        # Does some parameter definition according to input arguments model, config etc...
        ...

        # Invoke base class as required by PyGMO
        super(my_problem,self).__init__(self.__dim)

    def _objfun_impl(self,x):
        ...
        f = ...  # Cost function to optimize
        return (f,)

# Main
model = 'ei'
config = 'x1'
args = (...)
prob = my_problem(model,config,args)
algo = pygmo.algorithm.de(gen=20)
isl = pygmo.island(algo,prob,20)
print isl.population.champion.f
isl.evolve(10)
print isl.population.champion.f

这不起作用,并产生以下错误:

代码语言:javascript
复制
File     "/home/maurizio/Dropbox/Stability_Analysis_network/mymain.py", line 643, in main_routine
isl = pygmo.island(algo,prob,20)
File "/usr/lib/python2.7/site-packages/PyGMO/core/__init__.py", line 239, in island
return _generic_island_ctor(None, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/PyGMO/core/__init__.py", line 132, in _generic_island_ctor
return py_island(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/PyGMO/core/__init__.py", line 119, in _generic_island_ctor
super(type(self), self).__init__(*ctor_args)
File "/usr/lib/python2.7/site-packages/PyGMO/core/__init__.py", line 48, in __init__
_core._base_island.__init__(self, *args)
File "/usr/lib/python2.7/site-packages/PyGMO/problem/_base.py", line 36, in __get_deepcopy__
return deepcopy(self)
File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib64/python2.7/copy.py", line 329, in _reconstruct
y = callable(*args)
TypeError: __init__() takes exactly 4 arguments (1 given)

你知道__init__指的是什么吗?缺少哪些参数?我怀疑这是我的类定义的问题。

EN

回答 1

Stack Overflow用户

发布于 2017-01-17 16:55:21

该问题是由于my_problem.__init__(...) (即子类)和base.__init__ (即父类)的输入参数不匹配导致的。如果未提供这些参数的默认值,则super(my_problem,self)base继承__init__会导致冲突。实际上,修正后的工作版本是:

代码语言:javascript
复制
import PyGMO as pygmo
class my_problem(pygmo.base):
    def __init__(self,model='ei',config='conf1',pars=[1]*20):
        # Does some parameter definition according to input arguments model, config etc...
    ...

    self.__dim = 3
    ...

    # Invoke base class as required by PyGMO
    super(my_problem,self).__init__(self.__dim)

    def _objfun_impl(self,x):
        ...
        f = ...  # Cost function to optimize
        return (f,)

# Main
...

**kwargs传递给子类是不可能的,因为base是硬编码的,应该根据this post进行相应的更改。

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

https://stackoverflow.com/questions/41673710

复制
相关文章

相似问题

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