function f=alobj(x) %拉格朗日增广函数 %N_equ等式约束个数? %N_inequ不等式约束个数 N_equ=1; N_inequ=3;
global r_al pena;%全局变量 h_equ=0; h_inequ=0;
[h,g]=constrains(x); %等式约束部分? for i=1:N_equ
h_equ=h_equ+h(i)*r_al(i)+(pena/2)*h(i).^2; end
%不等式约束部分 for i=1:N_inequ
h_inequ=h_inequ+(0.5/pena)*(max(0,(r_al(i)+pena*g(i))).^2-r_al(i).^2); end
%拉格朗日增广函数值
f=obj(x)+h_equ+h_inequ;
function f=compare(x)
global r_al pena N_equ N_inequ; N_equ=1; N_inequ=3;
h_inequ=zeros(3,1); [h,g]=constrains(x); %等式部分 for i=1:1
h_equ=abs(h(i)); end %不等式部分 for i=1:3
h_inequ=abs(max(g(i),-r_al(i+1)/pena)); end
h1 = max(h_inequ);
f= max(abs(h_equ),h1); %sqrt(h_equ+h_inequ);
function [ x,fmin,k] =almain(x_al) %本程序为拉格朗日乘子算法示例算法%函数输入: % x_al:初始迭代点
% r_al:初始拉格朗日乘子N-equ:等式约束个数N_inequ:不等式约束个数?%函数输出 % X:最优函数点FVAL:最优函数值
%============================程序开始================================ global r_al pena ; %参数(全局变量) pena=10; %惩罚系数 r_al=[1,1,1,1];
c_scale=2; %乘法系数乘数 cta=0.5; %下降标准系数 e_al=1e-4; %误差控制范围 max_itera=25;
out_itera=1; %迭代次数
%===========================算法迭代开始============================= while out_itera %判断函数? compareFlag=compare(x_al0); %无约束的拟牛顿法BFGS [X,fmin]=fminunc(@alobj,x_al0); x_al=X; %得到新迭代点 %判断停止条件? if compare(x_al) disp('we get the opt point'); break end %c判断函数下降度? if compare(x_al) pena=1*pena; %可以根据需要修改惩罚系数变量 else pena=min(1000,c_scale*pena); %%乘法系数最大1000 disp('pena=2*pena'); end %%?更新拉格朗日乘子 [h,g]=constrains(x_al); for i=1:1 %%等式约束部分 r_al(i)= r_al0(i)+pena*h(i); end for i=1:3 %%不等式约束部分 r_al(i+1)=max(0,(r_al0(i+1)+pena*g(i))); end out_itera=out_itera+1; end %+++++++++++++++++++++++++++迭代结束+++++++++++++++++++++++++++++++++ disp('the iteration number'); k=out_itera; disp('the value of constrains'); compare(x_al) disp('the opt point'); x=x_al; fmin=obj(X); >> clear >> x_al=[0,0]; >> [x,fmin,k]=almain(x_al) 上机大作业3: 1、 >> clear all n=3; c=[-3,-1,-3]'; A=[2,1,1;1,2,3;2,2,1;-1,0,0;0,-1,0;0,0,-1];b=[2,5,6,0,0,0]'; cvx_begin variable x(n) minimize( c'*x) subject to A*x<=b cvx_end Calling SDPT3 4.0: 6 variables, 3 equality constraints ------------------------------------------------------------ num. of constraints = 3 dim. of linear var = 6 ******************************************************************* SDPT3: Infeasible path-following algorithms