matlabff2函数_罚函数法MATLAB程序.doc

本文介绍MATLAB中罚函数法的程序设计,包括罚函数法的MATLAB代码实现,适用于解决约束优化问题。通过具体函数`ff`展示了罚函数的计算过程,并在主函数`G FHS`中调用约束函数和等式约束函数进行求解。程序利用了进退法、0.618法和Powell法进行优化迭代,直至满足设定的误差范围。
摘要由CSDN通过智能技术生成

罚函数法MATLAB程序

一、进退法、0.618法、Powell法、罚函数法的Matlab程序设计罚函数法(通用)function y ff x,k y -17.86*0.42*x 1 / 0.8+0.42*x 1 * 1-exp -2* 0.8+0.42*x 1 /3 *exp -1.6 *x 2 -22.99*x 1 / 0.8+x 1 * 1-exp -2* 0.8+x 1 /3 *x 3 +k* x 2 - 1.22*10^2* 9517.8*exp -1.6-2*0.42*x 1 /3 *x 2 +19035.6*exp -2*x 1 /3 *x 3 / 1.22*10^2+9517.8*exp -1.6-2*0.42*x 1 /3 *x 2 +19035.6*exp -2*x 1 /3 *x 3 ^2+k* x 3 -exp -0.8-2*x 1 /3 *x 3 -exp -2.4-2*0.42*x 1 /3 *x 2 ^2;% 主函数,参数包括未知数的个数n,惩罚因子q,惩罚因子增长系数k,初值x0,以及允许的误差rfunction G FHS x0,q,k,n,r,h,a l 1;while l x powell x0,n,q,r 1 ,h,a ; %调用powell函数 g 1 ff1 x ,g 2 ff2 x . . . g p ffp x ; %调用不等式约束函数,将其值 %存入数组g h 1 hh1 x ,h 2 hh2 x . . . h t hht x ; %调用等式约束函数,将其值%存入数组h for i 1:p if g i r for j 1:t if abs h j r 2 continue; else break; end end else break; end end if i p & j t %如果所有约束条件的值都在允许的范围内就结束%搜索,否则加大惩罚力度继续搜索 l 0; else x0 x; q k*q; endend G x%powell算法,用于寻找无约束最优值点 function powel powell x0,n,q,r,h,a d eye n ; %n个线性无关的初始搜索方向 k 1; kk 1; xx 1,1:n x0; while kk y 1,1:n xx k,1:n ; for j 1:n s j HJ y j,1:n ,d j,1:n ,q ; %调用0.618算法 y j+1,1:n y j,1:n +s j .*d j,1:n ; end d n+1,1:n y n+1,1:n -y 1,1:n ; if norm d n+1,1:n ,2 r kk 0; break; else ww 0; m 1; for i 1:n gg ff y i,1:n ,q -ff y i+1,1:n ,q ; if gg ww m i; end end cha ff y 1,1:n ,q -2*ff y n+1,1:n ,q +ff 2*y n+1,1:n -y 1,1:n ,q ; cha1 2* ff y m,1:n ,q -ff y m+1,1:n ,q ; if cha cha1 s n+1 HJ y n+1,1:n ,h,a,d n+1,1:n ,q xx k+1,1:2 y n+1,1:n +s n+1 .*d n+1,1:n for j m+1:n d j,1:n d j+1,1:n ; end k k+1; else xx k+1,1:n y n+1,1:n ; k k+1; end end end powel y n+1,1:n

function w HJ x0,h,d,dd,q %0.618算法 [a,b] JTF x0,h,d,dd,q ; %调用进退法算法,确定范围 r 0.618; r1 a+ 1-r * b-a ; r2 a+r* b-a ; y1 ff x0+r1.*dd,q ; y2 ff x0+r2.*dd,q ; k 1; while abs r1-r2 0.1 if y1 y2 b r2; r2 r1; y2 y1; r1 a+ 1-r * b-a ; y1 ff x0+r1.*dd,q ; else a r1; r1 r2; y1 y2; r2 a+r* b-a ; y2 ff x0+r2.*dd,q ; end end w r1+r2 /2%进退法function [a,b] JTF x0,h,d,dd,q r0 0; y0 ff x0+r0.*dd,q ; k 0; l 1; while l r

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值