小编Eiy*_*uyf的帖子

进化算法“方法”之间的主要区别是什么?

所以我正在阅读进化算法并且很困惑。

我相信在现代,进化编程、进化策略和遗传算法之间的“传统”差异是什么?

我的理解是遗传算法会改变“基因”以产生结果,进化策略会改变参数,从而以某种方式改变个体。完全numerical parameters按照(http://en.wikipedia.org/wiki/Evolutionary_algorithm)是什么意思 ?那么进化规划主要因实数的变异而变化?

进化编程和遗传编程是寻找解决问题的程序的方法,而遗传算法和进化策略是使用候选人寻找问题解决方案的方法吗?我看不到这种区别,我在进化策略与遗传算法中看到的唯一区别是参数列表与染色体以及实数与整数?

谢谢。

artificial-intelligence evolutionary-algorithm

3
推荐指数
1
解决办法
2998
查看次数

访问python中函数内的函数

给定函数内的函数,如何从外部函数调用内部函数?

恩.

def a():
    print 'a'
    def b():
        print 'b'
        def c():
            print 'c'

def d():
    # how would I now call a, b and c from here?
    def e():
        # how would I call a, b and c from here as well?
Run Code Online (Sandbox Code Playgroud)

是的我知道这是一个糟糕的代码结构,不应该这样做 - 但是你怎么做的?

谢谢

编辑:使用装饰器的任何方式吗?

python

2
推荐指数
1
解决办法
4554
查看次数

大阵列的优化平均值?

所以我有一个.wav文件.从这里我得到了数据:正如预期的声音文件它是立体声所以数据看起来像

清单1(原始清单)

[[1,2],[2,3],[4,9],[1,5],[1,7],....]

注意:我刚刚编写了这些数字,但重点是它是一个嵌套列表.这里的问题是我正在做FFT,因此我想只使用两个通道的平均值,所以我想:

清单2(平均)

[[1.5],[2.5],[6.5],[3],[4],....]

所以我这样做了:

averaged_array =  [sum(x)/len(x) for x in original_list]
Run Code Online (Sandbox Code Playgroud)

我假设len(x)是一个恒定时间操作,即使它总是2.

这里的问题是我相信原始列表的长度> 900,000.在我的家用电脑上,我可以在~46秒内平均一次.在我需要用于演示的计算机上需要约121秒.这是一个相当大的增长,坦率地说,它必须在它运行时等待.无论如何,我可以优化它,以便减少它所需的时间吗?

注意:我相信这是一台双核计算机,所以我不能并行运行(我想?).我可以ssh到服务器(运行一些i7),我已被允许使用..如果我以某种方式ssh'ed并在那里进行计算会更好吗?我正在使用的原始计算机是~2 ghz,但是是一个古老的戴尔模型亲戚(几年前的系列).此外,迈克菲和另一个进程也消耗了约50%的处理,我没有权利杀死这些.

如果我这样做:

  • 如何通过SSH在这台远程计算机上进行计算?(我正在使用python 2.7并且真的不想安装任何外部库,因为这不是我的计算机而是组织计算机)
  • 我能以某种"顺序"进行计算吗?我认为,当并行执行操作时,您无法保持顺序,因为只要核心处于打开状态就可以进行计算.顺序我的意思是:我希望列表保持原始列表的相同索引的平均值.防爆.[[1,2],[3,4]]应该[[2.5],[3.5]]不[[3.5],[2.5]]

python average

1
推荐指数
1
解决办法
244
查看次数

模板专业化类型列表没有宏?

所以给定一个函数f是有办法为某些单独的非相关类定义特定行为,而没有一些宏观foo

例如,替换/完成同样的事情的方式:

//p for param

template<typename T> 
T f(T p){ // some default op}; 

template<>
T f<float>(T p)
{ return 2*p; }

template<>
T f<double>(T p)
{ return 2*p; }

template<>
T f<int>(T p)
{ return 2*p; }

template<>
T f<std::string>(T p)
{ //return p copies of the string appended together; }

template<>
T f<std::vector>(T p)
{ //return the vector's element's copied}

// etc
Run Code Online (Sandbox Code Playgroud)

不,我不喜欢正常的重载.理想情况下像模板

if T in [int, float, double]
T f(T p) { return 2*p; }
Run Code Online (Sandbox Code Playgroud)

else //定义默认的其他行为.你可以在python中做. …

c++ templates

0
推荐指数
1
解决办法
596
查看次数