用于多维优化/根寻找/某事的算法

时间:2009-08-21 05:36:03

标签: algorithm math mathematical-optimization numerical-methods numerical-analysis

我有五个值,A,B,C,D和E.

考虑到约束A + B + C + D + E = 1,以及五个函数F(A),F(B),F(C),F(D),F(E),我需要解决对于A到E,使得F(A)= F(B)= F(C)= F(D)= F(E)。

最好的算法/方法是什么?我不在乎我是否必须自己写,我只想知道在哪里看。

编辑:这些是非线性函数。除此之外,他们无法被描述。其中一些最终可能会从数据表中进行插值。

8 个答案:

答案 0 :(得分:4)

这个问题没有一般答案。找不到任何方程的解算器的求解器不存在。正如Lance Roberts所说,你必须更多地了解这些功能。只是几个例子

  • 如果函数是两次可微分,并且您可以计算一阶导数,则可以尝试Newton-Raphson
  • 的变体
  • 查看用于实施约束的Lagrange Multiplier Method
  • 如果函数F是连续的(可能是它,如果它是插值),你也可以尝试二分法,这很像二分法搜索。

在解决问题之前,你真的需要了解更多关于你正在学习的功能。

答案 1 :(得分:2)

正如其他人已发布的那样,我们确实需要有关这些功能的更多信息。但是,考虑到这一点,我们仍然可以尝试使用标准的非线性编程工具箱解决以下问题。

min k

A + B + C + D + E = 1
F1(A) - k = 0
F2(B) - k = 0
F3(C)-k = 0
F4(D) - k = 0
F5(E)-k = 0

现在我们可以以任何方式解决这个问题,例如惩罚方法

min k + mu * sum(Fi(x_i)-k)^ 2 ST
A + B + C + D + E = 1

或简单的SQP或内点法。

更多细节,我可以帮助建议一个好的方法。

答案 2 :(得分:2)

这些功能随着他们的论证而单调增加。除此之外,他们无法被描述。有效的方法是:

1)从A开始= B = C = D = E = 1/5
2)计算F1(A)到F5(E),并重新计算A到E,使每个函数等于该除以5(平均值)。
3)重新调整新的A到E,使它们总和为1,并重新计算F1到F5 4)重复直到满意为止。

它收敛速度惊人 - 只需几次迭代。当然,每次迭代都需要步骤2的5个根发现。

答案 3 :(得分:1)

方程式的一种解决方案

A + B + C + D + E = 1
F(A) = F(B) = F(C) = F(D) = F(E)

是将A,B,C,D和E都等于1/5。不确定这是否是你想要的......

在John的评论之后

添加(谢谢!)

假设第二个等式应该是F1(A)= F2(B)= F3(C)= F4(D)= F5(E),我会使用Newton-Raphson方法(参见Martijn的答案)。您可以通过设置E = 1 - A - B - C - D来消除一个变量。在迭代的每个步骤中,您都需要求解一个4x4系统。最大的问题可能是从哪里开始迭代。一种可能性是从一个随机点开始,做一些迭代,如果你没有到达任何地方,选择另一个随机点并重新开始。

请记住,如果您对该功能一无所知,则无需解决方案。

答案 4 :(得分:0)

ALGENCAN(TANGO的一部分)非常好。还有Python绑定。

http://www.ime.usp.br/~egbirgin/tango/codes.php - “根本不使用矩阵操作的一般非线性编程,因此,能够用适中的计算机时间解决极大的问题。一般算法是增广拉格朗日型...”< / p>

http://pypi.python.org/pypi/TANGO%20Project%20-%20ALGENCAN/1.0

答案 5 :(得分:0)

Google OPTIF9或ALLUNC。我们将这些用于一般优化。

答案 6 :(得分:0)

您可以使用标准搜索技术作为提到的其他技术。在进行搜索时,您可以使用一些优化。

首先,你只需要解决A,B,C,D,因为1-E = A + B + C + D.

其次,你有F(A)= F(B)= F(C)= F(D),那么你可以搜索A.一旦你得到F(A),你就可以解决B,C,D如果可能的话。如果无法解决这些问题,则需要继续搜索每个变量,但现在搜索范围有限,因为A + B + C + D <= 1。

如果您的搜索是离散且有限的,则上述优化应该合理地运行。

答案 7 :(得分:-1)

我会首先尝试粒子群优化。它很容易实现和调整。请参阅Wiki页面。

相关问题