1

摘要:我将如何解决这个问题?

你好呀,

我正在研究一个混合式最大化问题,其中我的变量将受到最小值和最大值的限制。我的问题的一个代表性例子可能是:

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)

很想听听你对这个的想法!

谢谢!

4

2 回答 2

2

针对您的问题类型(非线性最小化)的标准优化方法是 Levenberg-Marquardt 算法:

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

在这种情况下我可以推荐的另一种算法是 Simplex 算法:

与 Levenberg-Marquardt 一样,它也适用于非线性方程,但可以处理类似于不连续性的线性约束。这可能适用于您的上述情况。

无论哪种情况,这与其说是一个编程问题,不如说是一个算法选择问题。文献中充斥着算法,您只需稍加搜索即可找到上述任何一种的 C# 实现。

您还可以组合算法。例如,您可以使用带约束的 Simplex 进行初步搜索,并使用不带约束的 Levenberg-Marquardt 对其进行细化。

于 2011-05-25T21:18:38.930 回答
0

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

如果您的问题是有效地实现线性规划算法,您可能需要阅读组合优化:算法和复杂性,它在短文本线性规划图解指南中提供的大部分细节中涵盖了单纯形算法,但还包括有关椭圆体的信息算法,对于更复杂的约束系统可以更有效。

您的问题本身并没有特定于 C# 的内容,但是用它标记它意味着您正在寻找 C# 中的解决方案;因此,查看上述两个工具包的源代码可能会对您有所帮助。

于 2011-05-25T21:18:20.013 回答