凸函数和非凸函数---and why

 原文: 凸优化和非凸优化 - 优快云博客 https://blog.youkuaiyun.com/kebu12345678/article/details/54926287

 

数学中最优化问题的一般表述是求取x^{*}\in \chi,使f(x^{*} )=min\{f(x):x\in \chi \},其中x是n维向量,\chix的可行域,f\chi上的实值函数。
凸优化问题是指\chi闭合的凸集f\chi上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题

其中,\chi 凸集是指对集合中的任意两点x_{1},x_{2}\in \chi,有tx_{1}+(1-t)x_{2}\in \chi,t\in[0,1]即任意两点的连线段都在集合内直观上就是集合不会像下图那样有“凹下去”的部分。至于闭合的凸集,则涉及到闭集的定义,而闭集的定义又基于开集,比较抽象,不赘述,这里可以简单地认为闭合的凸集是指包含有所有边界点的凸集。

 

 

注意:中国大陆数学界某些机构关于函数凹凸性定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数。Concave Function指凸函数。但在中国大陆涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的,也就是和数学教材是反的。举个例子,同济大学高等数学教材对函数的凹凸性定义与本条目相反,本条目的凹凸性是指其上方图是凹集或凸集,而同济大学高等数学教材则是指其下方图是凹集或凸集,两者定义正好相反。

 

为什么要求是凸函数呢?因为如果是下图这样的函数,则无法获得全局最优解。

为什么要求是凸集呢?因为如果可行域不是凸集,也会导致局部最优

 

实际建模中判断一个最优化问题是不是凸优化问题一般看以下几点:

  • 目标函数f如果不是凸函数,则不是凸优化问题
  • 决策变量x中包含离散变量(0-1变量或整数变量),则不是凸优化问题
  • 约束条件写成g(x)\le0时,g如果不是凸函数,则不是凸优化问题

之所以要区分凸优化问题和非凸的问题原因在于凸优化问题中局部最优解同时也是全局最优解,这个特性使凸优化问题在一定意义上更易于解决,而一般的非凸最优化问题相比之下更难解决。

 

非凸优化问题如何转化为凸优化问题的方法:
1)修改目标函数,使之转化为凸函数
2)抛弃一些约束条件,使新的可行域为凸集并且包含原可行域

### 凸函数非凸函数的区别 在机器学习优化过程中,区分凸函数非凸函数对于算法的选择至关重要。为了更直观地理解这两种类型的函数,可以通过图形表示来展示它们之间的主要区别。 #### 图像对比 - **凸函数** 对于任意两点 \( (x_1, f(x_1)) \) \( (x_2, f(x_2)) \),连接这两点的线段完全位于该函数曲线之上或恰好处于曲线上方。这意味着如果在一个区间内选取任何两个不同的输入值,则通过这两个点绘制的直线不会低于对应的函数图像[^1]。 ![Convex Function](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Convex_function.svg/800px-Convex_function.svg.png) - **非凸函数** 非凸函数不具备上述性质,在某些情况下可能存在局部极小值而非全局最小值。这使得寻找最优解变得更加复杂,因为梯度下降等方法可能会陷入这些局部最优点而无法达到整体最佳位置[^2]。 ![Non-convex Function](https://miro.medium.com/max/1400/1*ZvqUQVJjKXzgkYrFhLwG_g.png) ```python import numpy as np import matplotlib.pyplot as plt def plot_convex_vs_nonconvex(): x = np.linspace(-5, 5, 400) # Convex function example: y=x^2 y_convex = x**2 # Non-convex function example: sin(x)+cos(2*x) y_nonconvex = np.sin(x) + np.cos(2 * x) fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(x, y_convex, label='Convex Function', color='blue') ax.fill_between(x, y_convex.min(), y_convex, alpha=0.3, color='lightblue') ax.plot(x, y_nonconvex, label='Non-convex Function', color='red') ax.fill_between(x, y_nonconvex.min(), y_nonconvex, alpha=0.3, color='salmon') ax.set_title('Comparison Between Convex and Non-convex Functions') ax.legend() plt.show() plot_convex_vs_nonconvex() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值