约束优化问题的罚函数求解方法

约束优化问题的罚函数求解方法(外罚)

惩罚函数法是求解有约束的最优化问题的一种算法。
惩罚函数法的要旨是将一个有约束的最优化问题转化为一系列的无约束问题;这些无约束问题由原问题及罚函数,再加上惩罚因子组成;而且,这些无约束问题的解会收敛于所求问题的解。

算法和步骤

这里写图片描述
这里写图片描述
这里写图片描述

程序和示例

写一个程序用罚函数方法求解:
这里写图片描述

计算前两部迭代的结果,也就是 x1 x 1 x2 x 2

clc
clear
%这个算法可能会收敛到局部极值点
f = @(t) t(1)+t(2);
c = @(t) t(1)^2 + t(2)^2 - 2;
Ce = [c];%等式约束
%Ci=[] 不等式约束,先不考虑这一部分
alpha = 2;
sigma0 = 10;
eps = 0.00001;
x0 = [-10,10]';%初始点要选在可行域外,外点法

[xk,k] = penalty(f,Ce,x0,sigma0,alpha,eps);


function [xk,k] = penalty(f,Ce,x0,sigma0,alpha,eps)
P = @(x) sum(Ce(x).^alpha);
H0 = [1 0;0 1];
epsilon = 0.00001;
sigma = sigma0;
xk = x0;
k = 0;
c = 2;
while abs(sigma*P(xk))>= eps
F = @(x) f(x)+ sigma*P(x);
%syms x1 x2;simplify(F([x1,x2]));
%xk = quasi_Newton(F,xk,epsilon,H0,'BFGS');
warning off;
xk = fminunc(F,xk);
%xk = fmincon(f,xk,[],[],[],[],[],[],@mycon)
sigma = c*sigma;
k = k+1;
xk
end

end

选定参数如下:

α=2;σ0=10;ϵ=0.01;x0=[10,10]T; α = 2 ; σ 0 = 10 ; ϵ = 0.01 ; x 0 = [ − 10 , 10 ] T ;

计算得到 x1=(1.0179,0.9942)Tx2=(1.0031,1.0031)T x 1 = ( − 1.0179 , − 0.9942 ) T , x 2 = ( − 1.0031 , − 1.0031 ) T

遇到的问题,求解无约束优化问题时,想用我原来的BFGS方法,但是结果趋于无穷。仔细分析原因,因为某个时刻 yk y k 项为0,导致了BFGS方法中 γk=1/yTksk γ k = 1 / y k T s k 趋向了无穷。那么,在BFGS方法中,如何保证 yk y k 项不为0呢?

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆嵩

有打赏才有动力,你懂的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值