本文讨论内点罚函数法

对于一个有不等式约束的优化问题:

这个问题通俗来讲就是在满足的条件下,寻找使得最小。我们将满足这个条件的形成的集合叫做的可行域,即


为了将它转化成无约束条件的优化问题,我们构造一个所谓的惩罚函数:

其中是连续函数,当点x从可行域内趋于可行域边界时,的值要趋于无穷大。根据这个条件,可以有两种形式:

或者


容易看出,若在可行域内部,当逐渐趋于0时,的最优解就趋于的最优解。

对于固定的,由于的存在,我们在可行域内求的最小值这个问题,实际上和在全域内寻找的最小值是可以等同起来的,因为在计算过程中一旦接近可行域的边界(函数值非常大了),我们求最小值的程序肯定会将马上退回到内部,所以我们可以认为这是一个无约束问题(约束是自动形成的)。


由于迭代总是在可行域内进行,每一个中间结果都是一个可行解,因此中间的结果可作为近似解。

从上面的分析可以看到内点法的缺点,第一,内点法不能求解等式约束;第二,迭代的初值必须是可行域内部的点。所以我们必须在寻优之前,先找一个内点作为初值。

下面的过程可以找到一个内点作为初始值

假设我们有一个任意的,代入到中,可以有以下结果:

①所有条件均满足,则就是内点;

②一部分满足,一部分不满足或者都不满足:

然后构造新的目标函数,约束条件为,因为就是新的可行域的内点,所以直接以为初值用内点罚函数法求的最小值,的最小值点不断向大于零的方向发展,如此循环直到。此时的就是原可行域的内点了。


下面附上内点罚函数的matlab代码:

% 需要求解的目标函数f(x)function [y] = func(x)y=x(1)+x(2);end% 约束函数(需是大于等于0形式)function [G] = conf(x)g1=-x(1).^2+x(2);
g2=x(1);G=[g1;g2];end% 内点法求解函数function[X,fX,k]=InteriorPFM(fun,conf,X0,r,tol,Klimit,nonconf)% IPFM(Interior penalty function method)
% 适用范围
% 约束条件是不等式
% 需要寻找内点作为初始点% 输入参数
% fun:目标函数
% con: 约束条件(列向量形式,都是大于等于号)
%    例如:
%    con(X)=[-x1+x2;x1^2+x2] 表示约束条件是
%    -x1+x2>=0;
%    x1^2+x2>=0
% X0: 任意取值(编程实现初始值的选取)
% r: 障碍因子(r>0)
% tol: 允许误差
% Klimit:最大迭代次数
% nonconf: 无约束多变量求解方法(降维法、梯度法、模式法等,可以用matlab内置函数fminbnd)% 输出参数
% X: 最优点
% fx: 目标函数的最小值
% k: 迭代次数k=0;
rt=r; % 求解初始值使用的障碍因子G=conf(X0); % 约束方程的值% 找到G中值>0的下标,此为内点下标集合
% 其他的就是非内点集合T=find(G>0); % 内点下标
S=find(G<=0); % 非内点下标% 判断S是否为空(isempty(S)=1或者size(S)=0),如果为空,说明X0就是内点% 把下标为非内点下标的约束函数的相反数作为“目标函数”
% 把下标为内点下标的约束函数作为“约束函数”function N_G=t_noconf(X)
Gt=conf(X);
N_G=-sum(Gt(S))-rt*sum(log(Gt(T)));
endwhile isempty(S)~=1f=@t_noconf;% f函数可以看做是全局搜索最小值,因为它的形式保证了在边界处很大X1=nonconf(f,X0);X0=X1;G=conf(X0); % 约束方程的值T=find(G>0); % 内点下标S=find(G<=0); % 非内点下标rt=rt*0.1;end% 此时X0是内点可以作为初始值function N_G=new_noconf(X)
Gt=conf(X);
Gt(Gt<0)=0;
N_G=fun(X)-r*sum(log(Gt));
endf=@new_noconf;X1=nonconf(f,X0);while abs(norm(X1-X0))>tol %迭代终止条件X0=X1;r=r*0.1;k=k+1;disp(['迭代次数',num2str(k)])f=@new_noconf;X1=nonconf(f,X0); if k>Klimitbreak;end
endX=X1;
fX=fun(X);
end

下面是求解的结果(只画出了在可行域内部的目标函数的图像)

有约束多变量寻优方法——内点罚函数法相关推荐

  1. 外罚法内罚法matlab,罚函数法

    外点法 内点法 乘子罚函数法 1. 等式约束问题的罚函数 约束问题的罚函数 由于... [设计]罚函数法 MATLAB 程序 一.进退法.0.618 法.Powell 法.罚函数法的 Matlab 程 ...

  2. 罚函数法外点matlab,内点罚函数法matlab

    罚函数的算法与实例 例3.24 Matlab 的使用 u=0; [x,y]=me... 5.6 约束变尺度法 7.2 乘子(罚函数)法信息与计算科学系 邵建峰邵建峰 本节内容: ? 一. 等式约束问题 ...

  3. 不等式约束的拉格朗日乘数法_Abaqus血管支架仿真|接触约束执行方式

    根据支架的建模基础.几何和网格划分.单元选择.材料和截面属性.分析步设置.载荷接触和约束.收敛调整,以及后处理.参数优化等内容.接着Abaqus血管支架仿真|建模基础.Abaqus血管支架仿真|几何和 ...

  4. 拉格朗日乘子法、罚函数法、乘子罚函数法

    1. 拉格朗日乘子法 1.1 无约束问题 1.2 等式约束问题 1.3 不等式约束问题(KKT条件) 1.4 拉格朗日乘子法问题 2. 罚函数法 2.1 定义 2.2 外罚函数法 2.3 内罚函数法 ...

  5. 机器学习模型调优方法(过拟合、欠拟合、泛化误差、集成学习)

    机器学习模型调优方法 过拟合和欠拟合 降低过拟合风险的方法 降低欠拟合风险的方法 泛化误差.偏差和方差 泛化误差 偏差和误差 模型评估 Holdout检验 交叉检验 自助法 集成学习 Boosting ...

  6. Asp.Net数据库编程-10条最优方法[翻译]

    Asp.Net数据库编程-10条最优方法[翻译] 原文标题:Using Data with ASP.Net - 10 of my 'Best Practices' 原文链接:http://www.de ...

  7. mysql port range_MySQL 数据库常见调优方法及参数设置_MySQL

    1. 关闭 SELinux vim /etc/selinux/config 更改 SELINUX=enforcing 为 SELINUX=disabled 2. 更改 IO Schedule, 对于 ...

  8. 图解机器学习-l2约束的最小二乘学习法-matlab源码

    约束条件  L2约束的最小二乘学习法是以参数空间的圆点为圆心,在一定半径范围的圆内进行求解. 拉格朗日对偶问题: 原始问题:在约束条件    下求   引入拉格朗日函数:              称 ...

  9. 不等式约束二次规划——有效集法

    不等式约束二次规划--有效集法 预备知识:有效不等式约束是等式约束 总体思路 如何寻找有效集 1.x0∗=x0,λ≥0x_0^*=x_0,λ≥0x0∗​=x0​,λ≥0 2.x0∗=x0,λj≤0x_ ...

最新文章

  1. python异步封装_python中用协程(异步)实现map函数,爬虫也可以封装进去,
  2. SAP-注入“AI基因” 打造全球第一款“智能ERP
  3. VMware vSphere 5.0升级到5.1的思路
  4. InnoDB行格式(compact,redundant)对照
  5. select for update
  6. Http 与 Socket 区别
  7. 数据预处理(Python scikit-learn)
  8. Google编程题:最小操作数
  9. 怎样不停请求接口实现实时刷新_快狗打车实时数仓和基于Hologres的数据服务建设...
  10. ubuntu下docker简单安装mysql
  11. 境外WiFi市场持续升温 2016年或迎普及元年
  12. 在Windows 7 (SP1)上安装Visual Studio 2015
  13. 内存中常见异常值的解释(0xcccccccc 0xcdcdcdcd 0xfeeefeee等)
  14. Hokuyo‘s first try
  15. 转:浅析 Java Thread.join()
  16. Kafka从上手到实践 - 实践真知:Kafka Java Consumer | 凌云时刻
  17. 基于CC2430和DS18B20的无线测温系统设计
  18. 大厂内推的一些套路--校招、初中级社招
  19. 人脑(科普类)书籍视屏学习资料推荐(不定时更新)
  20. 第五篇 《小强升职记》

热门文章

  1. android弹出框自定义按钮,安卓(kotlin)自定义弹出框
  2. matlab中图像分割技术之二阈值分割
  3. SpringBoot+Vue项目月度员工绩效考核管理系统
  4. mc有无限火力的服务器地址,我的世界花雨庭无限火力怎么玩 花雨庭无限火力玩法教程...
  5. 三种滤波算法针对不同噪声处理
  6. 前端通用埋点工具web-hunter
  7. 修改2012服务器的默认端口,请问如何开启2012R2系统对外访问445等端口。
  8. 为什么串口传输速度比并口快?
  9. C#做的配套C做的SNIFFER(C#)--C#简单而实用
  10. 机器人运动仿真和3D建模可视化