【Algorithm】一般约束优化问题——PHR算法及其Matlab实现
Matlab 源码,function前一行表文件名:
1 multphr.m 2 function [x, mu, lambda, output] = multphr(fun, hf, gf, dfun, dhf, dgf, x0) 3 maxk=500; sigma=2; eta=2; theta=0.8; epsilon=1e-5; k=0; ink=0; 4 x=x0; he=feval(hf, x); gi=feval(gf, x); l=length(he); m=length(gi); 5 6 mu=0.1*ones(l,1); lambda=0.1*ones(m,1); 7 btak=10; btakold=10; 8 9 while btak>epsilon && k<maxk 10 [x, ~, ik] = bfgs('mpsi', 'dmpsi', x0, fun, hf, gf, dfun, dhf, dgf, mu, lambda, sigma); 11 ink = ink+ik; 12 he=feval(hf, x); gi=feval(gf, x); 13 btak=0; 14 for i=1:l 15 btak=btak+he(i)^2; 16 end 17 for i=1:m 18 btak=btak+min(gi(i), lambda(i)/sigma)^2; 19 end 20 btak=sqrt(btak); 21 if btak>epsilon 22 if k>=2 && btak>theta*btakold 23 sigma = eta*sigma; 24 end 25 for i=1:l 26 mu(i)=mu(i)-sigma*he(i); 27 end 28 for i=1:m 29 lambda(i)=max(0, lambda(i)-sigma*gi(i)); % lambda(i)=max(0, lambda(i)-gi(i)); 30 end 31 end 32 k=k+1; 33 btakold=btak; 34 x0=x; 35 output.fval=feval(fun, x); 36 output.iter=k; 37 output.innter_iter=ink; 38 output.bta=btak; 39 end 40 41 42 bfgs.m 43 function [x, val, k] = bfgs(fun, gfun, x0, varargin) 44 maxk=5000; k=0; rho=0.55; sigma=0.4; epsilon=1e-5; 45 n=length(x0); Bk=eye(n); 46 while (k<maxk) 47 gk = feval(gfun, x0, varargin{:}); 48 if norm(gk)<epsilon 49 break; 50 end 51 dk = -Bk\gk; 52 m=0; mk=0; 53 while (m<20) 54 if(feval(fun, x0+rho^m*dk, varargin{:}) < feval(fun, x0, varargin{:})+sigma*rho^m*gk'*dk) 55 mk=m; break; 56 end 57 m=m+1; 58 end 59 x=x0+rho^mk*dk; 60 sk=x-x0; 61 yk = feval(gfun, x, varargin{:})-gk; 62 if yk'*sk>0 63 Bk = Bk-(Bk*sk*sk'*Bk)/(sk'*Bk*sk)+(yk*yk')/(yk'*sk); 64 end 65 k=k+1; x0=x; 66 end 67 val = feval(fun, x0, varargin{:}); 68 69 mpsi.m 70 function psi = mpsi(x, fun, hf, gf, dfun, dhf, dgf, mu, lambda, sigma) 71 psi=feval(fun, x); he=feval(hf, x); gi=feval(gf, x); l=length(he); m=length(gi); 72 for i=1:l 73 psi=psi-he(i)*mu(i)+0.5*sigma*he(i)^2; 74 end 75 for i=1:m 76 psi=psi +(min(0, sigma*gi(i)-lambda(i))^2 - lambda(i)^2)/(2*sigma); 77 end 78 79 dmpsi.m 80 function dpsi=dmpsi(x, fun, hf, gf, dfun, dhf, dgf, mu, lambda, sigma) 81 dpsi=feval(dfun, x); he=feval(hf, x); gi=feval(gf, x); dhe=feval(dhf, x); dgi=feval(dgf, x); 82 l=length(he); m=length(gi); 83 for i=1:l 84 dpsi = dpsi+(sigma*he(i)-mu(i))*dhe(:,i); 85 end 86 for i=1:m 87 dpsi = dpsi+(sigma*gi(i)-lambda(i))*dgi(:,i); 88 end 89 90 fun.m 91 function f=fun(x) 92 f=(x(1)-2)^2+(x(2)-1)^2; 93 94 dfun.m 95 function df = dfun(x) 96 df = [2*x(1)-4, 2*x(2)-2]'; 97 98 hf.m 99 function he=hf(x) 100 he=x(1)-2*x(2)+1; 101 102 dhf.m 103 function dfe=dhf(x) 104 dfe=[1, -2]'; 105 106 gff.m 107 function gi=gff(x) 108 gi= -0.25*x(1)^2-x(2)^2+1; 109 110 111 dgf.m 112 function dgi=dgf(x) 113 dgi=[-0.5*x(1), -2*x(2)]';
运行结果: >> x0=[3 3]'; >> [x, mu, lambda, output] = multphr('fun', 'hf', 'gff', 'dfun', 'dhf', 'dgf', x0) x =0.82290.9114 mu =-1.5945 lambda = 1.8465 output = fval: 1.3934iter: 23 innter_iter: 82bta: 9.5419e-006
转载于:https://www.cnblogs.com/visayafan/archive/2012/05/23/2514158.html
【Algorithm】一般约束优化问题——PHR算法及其Matlab实现相关推荐
- fdtd算法的matlab程序,FDTD算法的Matlab程序
<FDTD算法的Matlab程序>由会员分享,可在线阅读,更多相关<FDTD算法的Matlab程序(6页珍藏版)>请在人人文库网上搜索. 1.* 5= T$h;O % 3-D ...
- hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码
Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码 王笋,徐小双(华中科技大学控制科学与工程系,武汉 430074) 摘 要 Hilbert曲线是一种重要的图像处理工具,在图像处理,特别是图 ...
- 哈里斯鹰优化(HHO)算法(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...
- matlab 增量学习,支持向量机在线增量学习算法的MATLAB实现
支持向量机在线增量学习算法的MATLAB实现 杨志红,隆 涛 (江汉大学 物理与信息工程学院,湖北 武汉 430056) 摘 要:基于支持向量机在线训练理论,采用MATLAB工具实现了一种在线增量学习 ...
- NSGA3算法及其MATLAB版本实现(转载)
wayjj的博客 "NSGA3算法及其MATLAB版本实现" https://blog.csdn.net/wayjj/article/details/78954506 一丶NSGA ...
- 白鲸优化(BWO)算法(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 原文在这里:点一下 白鲸优化(BWO)算法: 白鲸优化(Belug ...
- 毕设学习笔记(1):经典DV-Hop算法(MATLAB)
最近忙着毕设,看到了一些有关无线传感器的定位算法,就先学了经典的DV-Hop算法, 传统的DV-Hop算法主要包括以下三个步骤: 1.确定最小跳数值 开始组网过程中,信标节点给通信半径 ...
- 粒子群算法的matlab实现
转自:https://blog.csdn.net/just_do_it_123/article/details/50993439 粒子群算法,也称粒子群优化算法(Particle Swarm Opti ...
- 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码
基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...
- 基于模拟退火的粒子群优化算法(Matlab实现)
目录 混合粒子群算法 算法步骤 算法的Matlab实现 示例程序 参考文献 混合粒子群算法 混合粒子群算法是指借鉴其它一些智能优化算法的思想而形成的粒子群算法.除了粒子群算法外,还有遗传算法.模拟退火 ...
最新文章
- JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构
- java中的队列详解
- 明天即将开工,把今年的Flag加到头像上,时刻鞭策自己吧!
- Windows PE 第十章 加载配置信息
- [你必须知道的.NET]第二十八回:说说Name这回事儿
- proguard java enum,Proguard没有这么说就不会混淆课堂
- 说一下syslog日志吧~~~
- HDU - 2602 01背包
- js实现全排列组合算法
- Atitit.100% 多个子元素自适应布局属性
- 2023年东南大学集成电路设计考研考情与难度、参考书及上岸前辈备考经验
- html 页面换皮肤,HTML中如何实现更换网页皮肤
- 使用分治法解最大连续子序列和问题
- react实现上传文件进度条功能_react-progress 自定义一个进度条插件
- 【转载】.btc勒索病毒删除+还原文件(Dharma家族新成员)
- SQL 里ESCAPE的用法
- 迈阿密大学计算机学科排名,迈阿密大学计算机科学(论文)专业介绍_计算机科学(论文)专业排名及就业方向和前景-小站留学...
- 如何用数据分析进行游戏道具的精准投放?
- 如何禁用 粘滞键(连按5次 shift键)
- WIN10如何绕过登录密码登录系统