【问题标题】:Matlab optimization - Variable bounds have "donut hole"Matlab 优化 - 变量边界有“甜甜圈洞”
【发布时间】:2014-11-26 17:15:25
【问题描述】:

我正在尝试使用 Matlab 的遗传算法和 fmincon 函数解决一个问题,其中变量的值没有单一的上限和下限。相反,应该允许变量取值 x=0 或 lb

【问题讨论】:

  • 您在这个问题上取得了进展吗?我有一个类似的问题。我必须将权重优化为 0 或高于阈值,并且优化所有可能的打开/关闭权重组合只是“感觉”不正确。
  • @ymihere,到目前为止还没有运气。我觉得这是一个常见的约束场景,所以一定有人找到了处理它的好方法......

标签: matlab optimization genetic-algorithm


【解决方案1】:

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

【讨论】:

  • 变量的数量比那个多得多(几百个)。目标和非线性约束函数很复杂......绝对不是连续的或凸的。我并不是说任何变量都必须为零……事实上,如果满足其他约束条件,它们都可以是非零的。我认为这就是您所说的“这将鼓励一些变量为零”的意思,但是我在遵循您的逻辑时遇到了麻烦,所以我可能误解了。此外,使用遗传算法并不能保证找到全局最优解,因此无论如何都可以将解决方案视为“近似”。
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2017-12-29
  • 2016-08-24
相关资源
最近更新 更多