具有限制变量的C#LP / Lagrange

|| 摘要:我将如何解决这个问题? 嗨,您好, 我正在研究混合样式的最大化问题,其中我的变量将受到最小值和最大值的限制。我的问题的代表性示例可能是:
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)
很想听听您对此的想法! 谢谢!     
已邀请:
Levenberg-Marquardt算法是针对您的问题类型的标准优化方法,即非线性最小化: Levenberg–Marquardt算法 但不幸的是,它不直接支持您添加的线性约束。已经尝试了许多不同的方法为Levenberg-Marquardt添加线性约束,并获得了不同的成功。 在这种情况下,我可以推荐的另一种算法是Simplex算法: 内尔德-米德法 像Levenberg-Marquardt一样,它也适用于非线性方程,但可以处理像不连续一样的线性约束。这对于上面的情况可能效果很好。 无论哪种情况,这都不是编程问题,而是算法选择问题。文献中充斥着算法,您只需稍作搜索就可以找到上述两种方法的C#实现。 您还可以组合算法。例如,您可以使用带有约束的Simplex进行初步搜索,并使用不带约束的Levenberg-Marquardt对其进行优化。     
如果您的问题是要有效解决线性编程问题,则可以使用Cassowary.net或NSolver。 如果您的问题是有效地实现线性编程算法,则可能需要阅读《组合优化:算法和复杂性》,其中涵盖了短文本《线性编程的图解指南》中提供的大部分详细信息中的Simplex算法,但还包括有关椭球的信息算法,对于更复杂的约束系统可能更有效。 关于您的问题,本来就没有C#特有的东西,但是给它加上标签意味着您正在寻找C#中的解决方案。因此,查看上述两个工具箱的源代码可能会为您提供满意的服务。     

要回复问题请先登录注册