发布时间:2024-03-12 来源:网络
数值优化是一种数学和计算工具,涉及到数学理论与程序实践。在理工科甚至社会科学中,经常会有求解最优方案的问题,如怎样分配投资才能达到最高收益,怎样设计布局才能投入最少,更笼统来说便是,什么样的参数才能得到最优的结果,通常我们会将这类问题用以下数学形式表达:
其中, 便是问题的所有参数,又叫优化变量,表示为n维的向量。 一般被称为目标函数,其结果为一个实数,用来衡量 的优劣,注意的是我们一般是求解最小化的结果,对于像是求解最大收益这类最大化问题,可以通过在目标函数前添加负号转化为最小化问题。s.t.表示约束,分为等式约束和不等式约束,是对参数 的限制,要求所求的最优解必须满足所有约束。使得 取得最小值并且满足所有约束的 便是所求最优解 。
这是一个简单的数值优化问题,优化变量只有两个,通常可以直接在二维坐标系中用画图法求解。
对于优化变量 ,在上述描述中一直默认为n维实数向量,但对于一类问题,则必须要求 ,即只能取离散的整数,例如工厂生产各类产品多少件才能收益最大,产品数只能为整数而不能说生产4.5件产品,这类问题被称为整数优化。部分变量要求为整数的优化问题被称为混合整数优化。整数优化的目标函数缺少光滑性,梯度信息和二阶信息定义困难,相对于连续优化求解更困难。
在上述给出的完整数学表达中,并非所有问题都含有约束部分,有些问题只有部分约束,有些则没有约束,只需要满足 的自然约束,这类问题被称为无约束优化。相对而言,无约束优化更容易求解,带约束问题的求解过程通常也会转化为若干无约束问题。
全局最优是使目标函数在可行域上最小的解,而局部最优则是使目标函数在局部最优的解。
如果优化问题不是凸优化的话,则通常会有多个局部最优解,而全局最优解只有一个。要想得到全局最优解是一件非常非常困难的事情,数值优化求解的目标也通常是局部最优解(好在大多数问题局部最优解也是可以接受的),全局最优需要在求解局部最优的基础上继续努力。
当我们对问题建模为标准的数学表达后,接下来便是选用合适的算法求解最优解。针对上述不同的问题,有对应不同的算法,但大多数算法通常都是通过迭代的方式求解,即通过当前解找到下一个更优的解,循环迭代逼近最优解,直到当前解满足终止条件。
x=init(n);
while(true)
{
x=find_next(x);
if(acceptable(x))
break;
}
return x;
对于算法会有这样几个要求:
对于一般的优化问题,我们的目标是求解局部最优解,通常会选用衡量梯度模长是否为0来判断是否达到局部最优。但需要注意的是,梯度模长为0只能代表该点为目标函数的驻点(局部极小点、局部极大点和鞍点均为驻点),不过好在局部极大点和鞍点都不是稳定的解,在迭代过程中会要求每一次迭代都使目标函数下降,因此很容易会跳过局部极大点和鞍点而落入局部极小点。