2011-05-25 45 views
1

摘要:我将如何解决这个问题?C#LP /带有界变量的拉格朗日

那里嗨,

我的工作在我的变量是要由最小值和最大值为界的混合式最大化问题。我的问题的一个典型例子是:

maximize: (2x-3y+4z)/(x^2+y^2+z^2+3x+4y+5z+10) 
subj. to: x+y+z=1 
      1 < x < 2 
     -2 < y < 3 
      5 < z < 8 
where numerical coefficients and the minima/maxima are given. 

我的最后一个项目是涉及到类似于上面的一个更复杂的问题。问题的结构不会改变 - 只有系数和投入会改变。因此,与上面的例子,我要寻找一组功能,可能让C#程序能够快速确定x,然后y,然后z,如:

x = f(given inputs) 
y = f(given inputs,x) 
z = f(given inputs,x,y) 

很想听听你对这个想法!

谢谢!

+0

目标函数中的分母对于所有可行解(x,y,z)总是正的吗?我问,因为在这种情况下有一个特殊目的算法。我怀疑你的例子中是否出现这种情况,但在优化比率时通常是这种情况。 – willem 2011-05-27 08:49:17

回答

2

你的类型的问题,非线性最小化的标准优化方法,是Levenberg-Marquardt算法:

但遗憾的是它并不直接支持线性约束你已添加。已经尝试了许多不同的方法来为Levenberg-Marquardt添加线性约束,并取得了不同的成功。

另一种算法,我可以在这种情况下建议是单纯的算法:

像文伯格 - 马夸特,它还适用于非线性方程,但处理这起线性约束如间断。这可以适用于上述情况。

在任何一种情况下,这都不是一个编程问题,而是一个算法选择问题。文献充斥着算法,你可以通过一些搜索找到上述任何一种C#实现。

您也可以组合算法。例如,您可以使用Simplex与约束进行初步搜索,然后使用Levenberg-Marquardt在没有约束的情况下对其进行优化。

0

如果你的问题是你想要有效地解决线性规划问题,你可以使用Cassowary.netNSolver

如果你的问题是有效地实现线性规划算法,你可能需要阅读Combinatorial Optimization: Algorithms and Complexity覆盖单纯形算法在大多数的短文本An Illustrated Guide to Linear Programming提供的细节,但也包括在椭球算法的信息,从而可以更高效的更复杂的约束系统。

对于你的问题,没有什么内在的C#特定的,但标记它意味着你正在寻找在C#中的解决方案;因此,查看以上两个工具包的源代码可能会很好地为您服务。