优化时参数在区间内
我通常使用Mathematica,但现在想转到Python,所以这个问题可能有点简单,抱歉了。
不过,Python里面有没有类似于Mathematica中叫Interval[{min,max}]的内置函数呢?链接是:http://reference.wolfram.com/language/ref/Interval.html
我想做的是,我有一个函数,想要最小化它,但这是一个有约束的最小化,也就是说,函数的参数只能在某个特定的区间内。
举个很简单的例子,假设f(x)是一个以x为参数的函数,我想找出能让这个函数最小化的x值,但x必须在一个区间(min,max)内。[显然,实际问题不仅仅是一维的,而是多维优化,所以不同的参数可能有不同的区间。]
因为这是一个优化问题,所以我当然不想随便从一个区间里选参数。
任何帮助都非常感谢,谢谢!
1 个回答
0
如果你遇到一个非常复杂的问题,你需要用一种叫做广义缩减梯度(GRG)的方法来解决。
广义缩减梯度算法(GRG)的核心思想是解决一系列子问题,每个子问题都使用线性近似来处理约束条件。(参考链接)
你需要确保满足一些叫做KKT条件的特定条件,但对于大多数有合理约束的连续问题,你都可以使用这个算法。
这本书是处理这类问题的好参考,里面有一些例子。参考第104页。
关于实现:
虽然我对Python不太熟悉,但我在C++中构建过求解库,使用模板和函数指针,这样你可以把目标函数和约束作为参数传递给求解器,最终得到结果——希望在处理凸问题时能在多项式时间内完成,或者在初始值合理的情况下。
如果Python中也有这样的能力,那么构建一个广义GRG求解器应该不难。
Python解决方案:
编辑:这是你问题的Python解决方案:Python约束非线性优化