罚函数法python 罚函数法Python

惩罚函数法的适用范围

有两种情况:

呼伦贝尔网站建设公司创新互联,呼伦贝尔网站设计制作,有大型网站制作公司丰富经验。已为呼伦贝尔成百上千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的呼伦贝尔做网站的公司定做!

1、内点惩罚函数法:求解时的探索点始终保持在可行域内。

2、外点惩罚函数法:对初始点没有要求,可以任意取定义域内任意一点。

惩罚函数可以分为外点法和内点法,其中外点法更通用,可解决约束为等式和不等式混合的情形,外点法对初始点也没有要求,可以任意取定义域内任意一点。而内点法初始点必须为可行区内一点,在约束比较复杂时,这个选择内点法的初始点是有难度的,并且内点法只能解决约束为不等式情形。

罚函数的应用

1、电机优化设计

在电机优化设计中应用广义罚函数法优化方法,既可以避免罚函数内点法因罚因子取得不当而造成的寻优困难,又保留了寻优逼近边界的优点,通过目标函数调整和罚函数的容差迭代,可以达到快速收敛的目的。同时,广义罚函数优化方法,还具有边界附近进一步搜索最优点的特性。在应用中,该方法是一种实用性很强而有效的内点寻优方法。

在机械领域,利用广义罚函数优化方法编制的计算机寻优模块与各类外点法或可行方案寻求方法结合,具有显著的优化效果。

2、广义指数因子预测

该模型实施的关键在于预报方程的变量选择和系数估计,在线性回归模型的拟合过程中引入罚函数能够压缩回归方程系数估计,将方程中一部分自变量的系数压缩为0,从而达到自变量选择、降低误差方差的目的,并保证预报方程的稳定性,从而提高预测精度。因此,应用罚函数方法来实现广义指数因子预报方程的拟合是合理的。

啥是罚函数

M为足够大的正数, 起"惩罚"作用, 称之为罚因子, F(x, M )称为罚函数.

非线性规划

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问 题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。

如果线性规划的优解存在,其优解只能在其可行域的边界上达到(特别是可行 域的顶点上达到);而非线性规划的优解(如果优解存在)则可能在其可行域的任意一点达到。

Matlab 中非线性规划的数学模型写成以下形式

其中 是非线性函数

Matlab 中的命令是

X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)

NONLCON 是用 M 文件定义的非线性向量函数

给出例子如下

求解程序:

当用迭代法求函数的极小点时,常常用到一维搜索,即沿某一已知方向求目标函数的极小点。一维搜索的方法很多,常用的有:

下面有两个通过不断地缩短区间[a,b]的长度,来搜索得到近似优解的两个方法。

迭代法大体上分为两点:一是用到函数的一阶导数或二阶导数, 称为解析法。另一是仅用到函数值,称为直接法。

带有约束条件的极值问题称为约束极值问题,也叫规划问题。 求解约束极值问题要比求解无约束极值问题困难得多。为了简化其优化工作,可采用以下方法:将约束问题化为无约束问题;将非线性规划问题化为线性规划问题,以及能将复杂问题变换为较简单问题的其它方法。 库恩—塔克条件是非线性规划领域中重要的理论成果之一,是确定某点为优点的必要条件,但一般说它并不是充分条件(对于凸规划,它既是优点存在的必要条件, 同时也是充分条件)。

若某非线性规划的目标函数为自变量 x的二次函数,约束条件又全是线性的,就称 这种规划为二次规划。

【例】求解如下的例子

【注意】要提出

利用罚函数法,可将非线性规划问题的求解, 转化为求解一系列无约束极值问题 , 因而也称这种方法为序列无约束小化技术

罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有 两种形式,一种叫 外罚函数法 ,另一种叫 内罚函数法 ,下面介绍外罚函数法。

取一个充分大的数M0,构造函数如下:

直观上可以理解为若 则给这个目标函数一个很大的惩罚,而如果 则对该目标函数无影响.

或者写成:

【例】

或者写成矩阵形式:

其中的 min([x';zeros(1,2)]) 表示 都大于0

再在命令行中输入

可以看出两次的效果略有偏差。但是我们不满足于此,由于问题的规模较小,尝试使用 fmincon 求得精确得最优解

可以看出罚函数法虽然收敛速度快,但是精确度不是很高。当问题规模较大,不好求解时,可以考虑使用。

其中约束条件为:

当使用梯度求解上述问题时,效率更高并且结果更准确。 题目中目标函数的梯度为(对 分别求偏导数):

在命令行中输入optimtool可以打开图形界面

对于上一个问题,只要选择方法(solver)后,在相应位置输入@fun10,@fun11,点击start就可以


本文名称:罚函数法python 罚函数法Python
本文来源:http://hbruida.cn/article/hioegh.html