码迷,mamicode.com
首页 > 编程语言 > 详细

经典回顾01——frankwolfe经典算法

时间:2015-08-28 19:58:20      阅读:1121      评论:0      收藏:0      [点我收藏+]

标签:matlab   frankwolfe经典算法   

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
 
===============================================

版权声明:博主文章可以被非商用转载,但请务必注明出处,因水平有限,难免出错,在此免责。

经典回顾01——frankwolfe经典算法

标签:matlab   frankwolfe经典算法   

原文地址:http://blog.csdn.net/lzx19901012/article/details/48055231

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!