3

我有五个值,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)。

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

编辑:这些是非线性函数。除此之外,他们不能被定性。其中一些最终可能会从数据表中插入。

+0

您需要指定它们的功能类型。线性,二次型,指数型,三角型等 – 2009-08-21 05:45:18

+5

为了不使人混淆,你应该给你的函数名称不同。 – starblue 2009-08-21 09:44:41

+1

你的价值观A ... E也被限制为非负面的?在许多问题中,当值被限制为1时,它们也被限制为不是负面的。还有其他限制吗? – 2009-08-21 11:51:26

回答

4

这个问题没有一般的答案。找不到解决方案任何方程。正如兰斯罗伯茨所说,你必须更多地了解这些功能。只是几个例子

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

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

+2

一个连续函数,即没有派生或过于复杂的应该用brents方法来完成。它是抛物线插值和黄金二分法的组合,可以适应最小和最大优化,代码非常简单,请查看C语言中的NUMERICAL RECIPES以获取更多用途和优化方法。 – nlucaroni 2009-08-25 14:18:19

+1

感谢nlucaroni提出了另一种方法(我不知道)。 – Martijn 2009-08-26 07:08:04

+2

@nlucaroni:布伦特方法仅限1D。顺便说一句,C中的NR是15岁。考虑升级到(真棒)第3版。 – 2010-12-11 23:38:25

1

一种解决方案是采取A,B,C,d和E都等于1/5。不知道是否虽然这是你想要的...

新增约翰的评论(感谢!)

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

请记住,如果你真的不知道有关该功能的任何内容,那么就不需要解决方案。

+2

解决了问题的问题,但不是这意味着什么。这听起来像问题应该说F_1(A)+ F_2(B)+ ... – 2009-08-21 11:44:15

-1

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

2

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

min k
st。
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

现在,我们可以在我们希望,如罚方法的任何方式解决这个

分钟K +亩*总和(FI(X_I) - k)的^ 2 st
A + B + C + D + E = 1

或简单的SQP或内点法。

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

m

+0

+1。我喜欢这种方法。 – 2010-12-11 23:39:16

0

Google OPTIF9 or ALLUNC。我们使用这些来进行一般优化。

0

您可以像其他人提到的那样使用标准搜索技术。在搜索时可以使用它进行一些优化。首先,你只需要解决A,B,C,D,因为1-E = A + B + C + D。 (A)= F(B)= F(C)= F(D),那么你可以搜索A.一旦你得到F(A),你可以求解B,C,如果可能的话。如果无法解决这些功能,则需要继续搜索每个变量,但是现在您的搜索范围有限,因为A + B + C + D < = 1.

如果您的搜索是离散的并且有限,上述优化应该工作得很好。

2

这些函数都是随着它们的参数单调增加的。除此之外,他们不能被定性。结果表明:

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

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