频道栏目
首页 > 资讯 > 云计算 > 正文

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

18-06-04        来源:[db:作者]  
收藏   我要投稿

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

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

算法和步骤

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

程序和示例

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

计算前两部迭代的结果,也就是x1" role="presentation">x1x2" role="presentation">x2

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;" role="presentation">α=2;σ0=10;?=0.01;x0=[?10,10]T;
计算得到x1=(1.0179,0.9942)Tx2=(1.0031,1.0031)T" role="presentation">x1=(?1.0179,?0.9942)Tx2=(?1.0031,?1.0031)T

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

相关TAG标签
上一篇:python出现异常的处理方法
下一篇:centos7上克隆虚拟机后设置静态IP无效问题的解决教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站