function frankwolfe
clc
disp(‘======================================================================================‘);
disp(‘ 《经典frankwolfe算法》‘);
disp(‘运行环境:MATLAB 8.3.0.532 ‘);
disp(‘制 作 人:兰州交通大学 刘志祥‘);
disp(‘Q Q:531548824‘);
fprintf(‘说 明:本程序用于求解线性约束条件下的2元非线性规划问题\n‘);
disp(‘======================================================================================‘);
disp(‘按任意键继续...‘);
pause;
syms lmd
disp(‘——>请提前编辑好目标函数及条件函数,任意键继续‘);
pause
e=0.001;
fwsuanfaliti;%对应同目录下的fun函数
%将下面备注的代码存放在fwsuanfaliti.m下面
% syms x1 x2 x3 x4 x5 x6 x7 x8
% f(1)=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2;
% f(2)=4*x1^2+(x2-2)^2;
% disp(‘编号——函数‘);
% disp(‘ 1——f(1)=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2‘);
% disp(‘ 2——f(2)=4*x1^2+(x2-2)^2‘);
% k=input(‘请选择目标函数,输入对应编号:‘);
% if k==1
% f=f(1);
% A=[1 1;1 5];
% b=[2;5];
% Aeq=[];
% beq=[];
% lb=zeros(2,1);
% ub=[];
% elseif k==2
% f=f(2);
% A=[3 2;1 7];
% b=[5;3];
% Aeq=[];
% beq=[];
% lb=zeros(2,1);
% ub=[];
% else
% disp(‘请核对编号:‘);
% end
minfx=f;
X0=input(‘输入初始点:X0=‘);
X=X0;
df_dx1=diff(f,x1);
df_dx2=diff(f,x2);
g_f1=subs(df_dx1,{x1,x2},X);
g_f2=subs(df_dx2,{x1,x2},X);
g_f=[double(g_f1);double(g_f2)];
[x,z]=linprog(g_f,A,b,Aeq,beq,lb,ub);
while(abs(g_f‘*(x-X‘))>e)
f0=vpa(subs(f,{x1,x2},X+lmd*((x-X‘))‘),5);
f1=inline(char(f0));
[lamda,fval]=fminbnd(f1,0,1,[]);
X=X+lamda*((x-X‘))‘;
g_f1=subs(df_dx1,{x1,x2},X);
g_f2=subs(df_dx2,{x1,x2},X);
g_f=[g_f1;g_f2];
g_f=double(g_f);
[x,feval,flag,output]=linprog(g_f,A,b,Aeq,beq,lb,ub);
end
clc
disp(‘数学模型为:‘);
disp(‘===============================================‘);
minfx
disp(‘s.t.‘);
if length(A)>0&&length(b)>0
disp(A*[x1;x2]<=b);
end
if length(Aeq)>0&&length(beq)>0
disp(Aeq*[x1;x2]==beq);
end
if length(lb)>0
disp(-[x1;x2]<=lb);
end
if length(ub)>0
disp([x1;x2]<=ub);
end
disp(‘===============================================‘);
disp(‘初始点为:‘)
X0
disp(‘解得:‘);
disp(‘===============================================‘);
X
disp(‘X就是所求解(K-T点)‘)
minf=vpa(subs(f,{x1,x2},X),5)
disp(‘===============================================‘);
以下为运行结果:
======================================================================================
《经典frankwolfe算法》
运行环境:MATLAB 8.3.0.532
制 作 人:兰州交通大学 刘志祥
Q Q:531548824
说 明:本程序用于求解线性约束条件下的2元非线性规划问题
======================================================================================
按任意键继续...
——>请提前编辑好目标函数及条件函数,任意键继续
编号——函数
1——f(1)=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2
2——f(2)=4*x1^2+(x2-2)^2
请选择目标函数,输入对应编号:1
输入初始点:X0=[0 0]
数学模型为:
===============================================
minfx =
2*x1^2 - 2*x1*x2 - 4*x1 + 2*x2^2 - 6*x2
s.t.
x1 + x2 <= 2
x1 + 5*x2 <= 5
-x1 <= 0
-x2 <= 0
===============================================
初始点为:
X0 =
0 0
解得:
===============================================
X =
1.1290 0.7741
X就是所求解(K-T点)
minf =
-7.161
===============================================
版权声明:博主文章可以被非商用转载,但请务必注明出处,因水平有限,难免出错,在此免责。