level 1
流豊
楼主
function [x,minf] =minNF(f,x0,g,u,v,var,eps)
gx0 = Funval(g,var,x0);
if gx0 >= 0; %初始点在可行域内为初始内点
end
else
disp('初始点必须满足不等式约束!')
x= NaN;
minf = NaN;
return
end
if u <= 0;
disp('初始障碍因子必须大于0!'); %检查障碍因子
x= NaN;
minf = NaN;
return
end
if v >=1 || v < 0;
disp('初始障碍系数必须大于0且小于1'); %缩小系数检查
x = NaN;
minf = NaN;
return
end
format long;
if nargin == 6
eps = 1.0e-4;
end
k = 0;
FE = 0;
for i=1:length(g)
FE = FE + 1/g(i); %利用不等式约束构造罚项
end
x1 = transpose(x0);
x2 = inf;
while 1
FF = u*FE;
SumF = f + FF; %构造罚函数
%-------用牛顿法求解无约束优化问题---------
[x2,minf] = minNT(SumF,transpose(x1),var);
Bx=Funval(FE,var,x2);
if u*Bx < eps
if norm(x2 - x1)<=eps %精度判断
x = x2;
break;
else
u = v*u;
x1 = x2;
end
else
if norm(x2 - x1)<=eps %参数修正
x = x2;
break;
else
u = v*u;
x1 = x2;
end
end
end
minf = Funval(f,var,x);
formatshort;
2018年01月09日 14点01分
1
gx0 = Funval(g,var,x0);
if gx0 >= 0; %初始点在可行域内为初始内点
end
else
disp('初始点必须满足不等式约束!')
x= NaN;
minf = NaN;
return
end
if u <= 0;
disp('初始障碍因子必须大于0!'); %检查障碍因子
x= NaN;
minf = NaN;
return
end
if v >=1 || v < 0;
disp('初始障碍系数必须大于0且小于1'); %缩小系数检查
x = NaN;
minf = NaN;
return
end
format long;
if nargin == 6
eps = 1.0e-4;
end
k = 0;
FE = 0;
for i=1:length(g)
FE = FE + 1/g(i); %利用不等式约束构造罚项
end
x1 = transpose(x0);
x2 = inf;
while 1
FF = u*FE;
SumF = f + FF; %构造罚函数
%-------用牛顿法求解无约束优化问题---------
[x2,minf] = minNT(SumF,transpose(x1),var);
Bx=Funval(FE,var,x2);
if u*Bx < eps
if norm(x2 - x1)<=eps %精度判断
x = x2;
break;
else
u = v*u;
x1 = x2;
end
else
if norm(x2 - x1)<=eps %参数修正
x = x2;
break;
else
u = v*u;
x1 = x2;
end
end
end
minf = Funval(f,var,x);
formatshort;