Matlab优化 - 变量边界有"圆环孔"

时间:2014-10-01 18:56:52

标签: matlab optimization genetic-algorithm

我尝试使用Matlab的遗传算法和fmincon函数解决问题,其中变量&#39;值没有单个上限和下限。相反,应该允许变量取值x = 0或者lb <= x <= ub。这是一个涡轮机分配问题,其中涡轮机可以关闭(x = 0)或者在较低和较高的空化极限(lb和ub)内。当然,我可以通过创建一个违反0和lb之间值的约束来解决问题,但我发现这个问题很难像这样收敛。有没有更简单的方法来减少搜索空间?

1 个答案:

答案 0 :(得分:0)

如果变量的数量足够小(比如10或15或更少),那么您可以尝试设置为非零的每个变量子集,并查看哪个子集为您提供最佳值。如果您无法对优化问题的结构做出假设(例如,您对非零变量有处罚但主要目标函数是“异国情调”),那么这基本上是您可以做的最好的。如果您愿意接受近似解,那么可以在目标函数中添加所谓的“L1”惩罚,它是变量绝对值的常数之和。这将鼓励一些变量为零,如果您的主要目标函数是凸的,那么得到的目标函数将是凸的,因为负绝对值是凸的。优化凸函数(采用最小值)要容易得多,因为严格凸函数总是具有全局最小值,您可以使用任意数量的优化例程(包括在matlab中实现的那些)来实现。