公司新闻 行业动态

数值优化(零)——概述

发布时间:2024-03-12      来源:网络


数值优化是一种数学和计算工具,涉及到数学理论与程序实践。在理工科甚至社会科学中,经常会有求解最优方案的问题,如怎样分配投资才能达到最高收益,怎样设计布局才能投入最少,更笼统来说便是,什么样的参数才能得到最优的结果,通常我们会将这类问题用以下数学形式表达:

x^*=\\arg\\min_{x\\in R^n}{f(x)}

s.t. \\begin{equation}\\left\\{ \\begin{array}{lr}c_i{(x)}=0,i\\in \\alpha\\\\ c_i (x)\\geq0,j\\in \\beta\\\\ \\end{array}\\right. \\end{equation}

其中, x 便是问题的所有参数,又叫优化变量,表示为n维的向量。 f(x) 一般被称为目标函数,其结果为一个实数,用来衡量 x 的优劣,注意的是我们一般是求解最小化的结果,对于像是求解最大收益这类最大化问题,可以通过在目标函数前添加负号转化为最小化问题。s.t.表示约束,分为等式约束和不等式约束,是对参数 x 的限制,要求所求的最优解必须满足所有约束。使得 f(x) 取得最小值并且满足所有约束的 x 便是所求最优解 x^*

x^*=\\arg\\min_{x\\in R^n}{(x_1-2)^2+(x_2-1)^2}

s.t. \\begin{equation}\\left\\{ \\begin{array}{lr}-x_1^2+x_2\\geq0\\\\ -x_1-x_2+2\\geq0\\\\ \\end{array}\\right. \\end{equation}

这是一个简单的数值优化问题,优化变量只有两个,通常可以直接在二维坐标系中用画图法求解。

图解法

对于优化变量 x ,在上述描述中一直默认为n维实数向量,但对于一类问题,则必须要求 x\\in Z^n ,即只能取离散的整数,例如工厂生产各类产品多少件才能收益最大,产品数只能为整数而不能说生产4.5件产品,这类问题被称为整数优化。部分变量要求为整数的优化问题被称为混合整数优化。整数优化的目标函数缺少光滑性,梯度信息和二阶信息定义困难,相对于连续优化求解更困难。

在上述给出的完整数学表达中,并非所有问题都含有约束部分,有些问题只有部分约束,有些则没有约束,只需要满足 x\\in R^n 的自然约束,这类问题被称为无约束优化。相对而言,无约束优化更容易求解,带约束问题的求解过程通常也会转化为若干无约束问题。

全局最优是使目标函数在可行域上最小的解,而局部最优则是使目标函数在局部最优的解。

红色点为全局最优解,绿色点为局部最优解

如果优化问题不是凸优化的话,则通常会有多个局部最优解,而全局最优解只有一个。要想得到全局最优解是一件非常非常困难的事情,数值优化求解的目标也通常是局部最优解(好在大多数问题局部最优解也是可以接受的),全局最优需要在求解局部最优的基础上继续努力。

当我们对问题建模为标准的数学表达后,接下来便是选用合适的算法求解最优解。针对上述不同的问题,有对应不同的算法,但大多数算法通常都是通过迭代的方式求解,即通过当前解找到下一个更优的解,循环迭代逼近最优解,直到当前解满足终止条件。

x=init(n);
while(true)
{
    x=find_next(x);
    if(acceptable(x))
        break;
}
return x;

对于算法会有这样几个要求:

  • 鲁棒性。对于不同的同类问题和不同的初始值,应当都能有效求解。
  • 高效性。时间和内存消耗应该可接受。
  • 准确性。解的误差是可预估的,不会因为精度问题而造成不稳定。

对于一般的优化问题,我们的目标是求解局部最优解,通常会选用衡量梯度模长是否为0来判断是否达到局部最优。但需要注意的是,梯度模长为0只能代表该点为目标函数的驻点(局部极小点、局部极大点和鞍点均为驻点),不过好在局部极大点和鞍点都不是稳定的解,在迭代过程中会要求每一次迭代都使目标函数下降,因此很容易会跳过局部极大点和鞍点而落入局部极小点。

红色为局部最小点,黄色为局部最大点,绿色为鞍点

平台注册入口