如何最小化受线性约束(MATLAB)的解向量中非零元素的数量?

计算科学 matlab 约束优化 简历
2021-12-14 03:15:31

总而言之,我试图找到这个问题的答案,并且遇到了一些相关的线索,但鉴于我在这个领域相对缺乏经验,我无法应用于我的问题。

我基本上有一个使用不等式和等式约束的约束最小化问题。我将有比等式约束(6)更多的变量(~10),所以一般来说,系统会有无限数量的解决方案。皱纹是我希望我的解决方案向量具有尽可能多的零元素,或者更准确地说,我希望最小化非零元素的数量。实际应用是每个变量都代表投资组合中的一次交易,所以我想以最少的必要交易数量达到我在投资组合中的“目标”。

我最初的方法是在 Matlab 中使用 fmincon 函数,目标函数为

fun=@(x)nnz(x);

但是即使对于我能想出的最基本的测试示例,这种方法也会导致错误的解决方案。像这样的问题在matlab中可以解决吗?任何帮助将不胜感激,我真的陷入了僵局。谢谢。

1个回答

当您有基数约束(或0正则化术语,从您的描述中我不清楚),是将非凸基数约束放松为凸1约束,或凸1正则化项。

因此,例如,像这样的问题

minimizecard(x),subject toxC
可以(启发式地)替换为
minimizex1,subject toxC.
像这样的约束card(x)k可以用正则化项代替γx1, 或约束x1β,其中适当的值β要么γ必须稍后确定以使结果与原始约束匹配。

在Boyd, Vandenberghe 的凸优化中,这是示例 6.4。