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

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

编辑:这些是非线性函数。除此之外,无法对它们进行表征。其中一些最终可能会从数据表中插入。

有帮助吗?

解决方案

这个问题没有通用的答案。求解器寻找解决方案 任何 方程不存在。正如兰斯·罗伯茨(Lance Roberts)所说,您必须更多地了解这些功能。仅举几个例子

  • 如果函数是两次可微的,并且您可以计算一阶导数,您可以尝试以下变体 牛顿-拉夫逊
  • 看看 拉格朗日乘子法 用于实施约束。
  • 如果函数 F 是连续的(如果它是插值,则可能是连续的),您还可以尝试二分法,这很像二分搜索。

在解决问题之前,您确实需要更多地了解您正在研究的函数。

其他提示

至于其他人已经发布,我们的确需要对功能的一些详细信息。然而,鉴于这一点,我们还可以尝试解决一个标准的非线性规划工具箱下面的放松。

分钟ķ结果 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或内点法。

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

的功能都单调它们的参数增加。除此之外,他们不能定性。该工作的方法被证明是:

1)开始用A = B = C = d = E = 1/5,点击 2)计算F1(A)至F5(E),并重新计算从A到E,使得每个功能等于该总和由5(平均分)。结果 3)到E重新调整新的A,使它们都相加为1,并通过F5重新计算F1。结果 4)重复直到满意为止。

有收敛快得惊人 - 短短的迭代。当然,每次迭代需要5根发现对于步骤2。

方程的一种解决方案

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

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

添加约翰的意见后(谢谢!)

假设第二方程应读F1(A)= F2(B)= F3(C)= F4(d)= F5(E),我会使用牛顿 - 拉夫逊方法(参见马亭的答案)。 A - - B - C - D.在你需要解决一个4x4系统迭代的每一步都可以通过设置E = 1消除一个变量。最大的问题可能是从哪里开始的迭代。一种可能性是一个随机点开始,做一些重复的,如果你没有得到任何地方,选择另一个随机点重新开始。

请记住,如果你真的不知道该函数的任何信息则不需要有一个解决方案。

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

http://www.ime.usp.br/~egbirgin /tango/codes.php - “一般非线性规划是完全不使用矩阵操作和,因此,能够解决中等计算机时间非常大的问题,一般的算法是增广拉格朗日类型的... “

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

谷歌OPTIF9或ALLUNC。我们使用这些通用的优化。

您可以使用标准搜索TECHNIC为他人提及。还有,你可以利用它在做搜索的几个优化。

首先,你只需要解决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

如果搜索是离散和有限的,上述的优化应该工作合理良好。

我先试试粒子群算法。这是很容易实现,而且调整。为它看到维基页面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top