【问题标题】:Parameter optimization using a genetic algorithm?使用遗传算法进行参数优化?
【发布时间】:2017-09-02 21:29:00
【问题描述】:

我正在尝试优化已知函数的参数以拟合实验数据图。该功能相当涉及

其中 x 扫过一组已知的数字,p、g 和 c 是要优化的独立参数。有什么想法或资源可以提供帮助?

【问题讨论】:

  • 我目前正在尝试使用实验数据的二阶微分来查看是否可以定位峰值。如您所见, c 参数居中各自的图表,因此如果我能够以某种方式从实验数据中定位峰值,则 c 参数可以解析求解..我上面也没有提到,但实验数据可以是无限的由上述函数描述的波的组合,因此它可能涉及无限的 p、g 和 c 参数集,这就是为什么我在应用遗传算法之前尝试求解 c 参数
  • 我不知道该建议什么。您是否尝试过在MathOverflow(“专业数学家”)或math.stackexchange(“任何级别的数学学习者和相关领域的专业人士”)上提问?你很可能会发现在那里你会得到更多的关注,并且可能会得到一些答案。
  • 你为什么这么确定你需要遗传算法?你厌倦了旧好的Levenberg-Marquardt,正如在 Levenberg-Marquardt.vi 中实现的那样。如果它不符合您的需求,您可以尝试Waptia libraryfor LabVIEW,并实现其中一种遗传算法。
  • 谢谢,我也会尝试 MathOverflow。我听说 LMA 经常陷入局部最小值并错过全局最小值。问题集相对较小,我认为 GA 可以为了在有限时间内获得全局最小值,我尝试使用 Waptia 库,但找不到关于如何使用它的好文档(我是新手)

标签: python-2.7 optimization genetic-algorithm labview


【解决方案1】:

我不推荐遗传算法。而是直接进行优化。

Scipy 有一些资源。

您还没有提供任何数据,所以我只会寻找应该运行的东西。下面是一些可以帮助您入门的内容。不看数据我不知道它是否有效。此外,可能必须有一种方法可以动态地提供 objectivefunc 您的 xy 数据。这可能在 scipy.optimize.minimize 的文档中。

我做了什么。创建一个函数来最小化。在这里,我称之为objectivefunc。为此,我采用了您的函数y = x^2 * p^2 * g / ... 并将其转换为x^2 * p^2 * g / (...) - y = 0 的形式。然后将左侧平方并尝试将其最小化。因为您将有多个 (x/y) 数据样本,所以我会最小化平方和。把它全部放在一个函数中,然后从 scipy 传递给最小化。

import numpy as np
from scipy.optimize import minimize

def objectivefunc(pgq):
    """Your function transformed so that it can be minimised. 
    I've renamed the input pgq, so that pgq[0] is p, pgq[1] is g, etc.
    """
    p = pgq[0]
    g = pgq[1]
    q = pgq[2]
    x = [10, 9.4, 17] # Some input data.
    y = [12, 42, 0.8]
    sum_ = 0
    for i in range(len(x)):
        sum_ += (x[i]**2 * p**2 * g - y[i] * ( (c**2 - x**2)**2 + x**2 * g**2) )**2
    return sum_

pgq = np.array([1.3, 0.7, 0.5]) # Supply sensible initivial values
res = minimize(objectivefunc, pgq, method='nelder-mead',
            options={'xtol': 1e-8, 'disp': True})

【讨论】:

  • 非常感谢,我对 scipy 的问题是我无法安装它..我使用的是 64 位的 WIndows 8.1 并且有 python 2.78 ..我尝试了 pip 和 easy_install..我能够导入 numpy,pyevolve 但由于某种原因,scipy 总是给出错误“....laplack/blas not found...”我尝试遵循我在这里找到的许多解决方案,但没有一个对我有用。 ..我是新手..这是我使用 LabView 而不是 Python 的部分原因
  • 如果您不想使用 Python,请不要标记您的问题 Python。虽然很明显这是一个可以解决的问题。您可能需要安装 laplack/blas。
  • 我正在并且想进一步使用 Python,只是目前无法使用 scipy 库。我的计划是/是使用 LabView 作为界面(前面板)并编写 GA / 拟合算法在 Python 中的速度..还有其他类似于 scipy 的库吗?提前致谢
  • 如果您的算法在 Python 中比在 LabVIEW 中运行得更快,我会感到惊讶。至少,scipy 或 LabVIEW 中的任何内置函数都应该得到同样的优化,并且您自己编写的任何代码在编译的 LabVIEW 中应该比在解释的 Python 中运行得更快。
【解决方案2】:

您是否厌倦了旧好Levenberg-Marquardt,如在 Levenberg-Marquardt.vi 中实现的那样。如果它不能满足您的需求,您可以尝试Waptia libraryfor LabVIEW 并实现其中一种遗传算法。

【讨论】:

  • 我听说 LMA 经常陷入局部最小值并错过全局最小值..问题集相对较小,我虽然 GA 能够在有限时间内获得全局最小值,,我尝试使用 Waptia 库,但找不到关于如何使用它的好文档(我是新手)
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 2015-11-08
  • 2015-02-18
  • 2013-07-02
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多