【问题标题】:Mimimization of anonymous function in C++C++中匿名函数的最小化
【发布时间】:2015-11-17 10:58:24
【问题描述】:

我有一个 C++ 循环程序,其中包括一个函数的组合(每次都不同)并进一步最小化它。函数的组合是用 GiNaC 包(符号表达式)实现的。 我尝试使用 Matlab fmincon 函数最小化函数,但它在将字符串转换为 lambda 函数时占用了所有内存(函数相当复杂)。而且我无法以任何方式将函数从 C++ 导出到 Matlab,只能作为字符串。 有什么方法可以组成一个复杂的函数(3 个变量,sin-cos-square root 等)并在不自行确定梯度的情况下将其最小化,因为我在运行程序之前不知道函数的外观? 我还查看了NLopt,据我了解,它需要由程序员编写渐变。

【问题讨论】:

  • 你能提供更多细节吗?如果函数是由 GiNaC 组成的,为什么不使用it 区分它们呢?

标签: c++ lambda minimization


【解决方案1】:

大多数优化算法都需要梯度。但是,如果无法直接“了解”它,您可以考虑每个坐标的小增量来评估它。如果您的 F 函数取决于 x 向量的坐标,您可以将梯度向量 G 的 i 分量近似​​为

x1 = x;
x1[i] += dx;
G[i] = (F(x1) - F(x))/dx;

dx 是一些小的增量。虽然这样的计算是近似的,但只要dx 足够小,它通常绝对适合最小结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2017-06-30
    • 2013-05-08
    相关资源
    最近更新 更多