经典回顾01——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

===============================================

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

时间: 2024-10-13 19:33:22

经典回顾01——frankwolfe经典算法的相关文章

经典的两种排序算法

一.冒泡排序 int temp = 0; for (int j = 1; j < a.Length; j++) { for (int i = 0; i < a.Length - j; i++)//内循环,每走一趟会把最小值放到最后 { if (a[i] < a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } } 二.选择法排序 int min; for (int j = 0; j< a.Length; j++

ZOJ 1203 Swordfish (经典MST ~ Kruscal)Boruvka算法

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=203 Description: We all remember that in the movie Swordfish, Gabriel broke into the World Bank Investors Group in West Los Angeles, to rob $9.5 billion. And he needed Stanley, the best ha

经典的7种排序算法 原理C++实现

经典的7种排序算法 原理C++实现 排序是编程过程中经常遇到的操作,它在很大程度上影响了程序的执行效率. 7种常见的排序算法大致可以分为两类:第一类是低级排序算法,有选择排序.冒泡排序.插入排序:第二类是高级排序算法,有堆排序.排序树.归并排序.快速排序. 一.低级排序算法 1. 选择排序 排序过程:给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束. 实现代

经典批处理01

01.垃圾清理WInxp/7 @echo offecho 正在清理系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpdel /f /s /q %systemdrive%\*.logdel /f /s /q %systemdrive%\*.giddel /f /s /q %systemdrive%\*.chkdel /f /s /q %systemdrive%\*.olddel /f /s

动态规划 - 0-1背包问题的算法优化

简单描述 0-1背包问题描述如下: 有一个容量为V的背包,和一些物品.这些物品分别有两个属性,体积w和价值v,每种物品只有一个.要求用这个背包装下价值尽可能多的物品,求该最大价值,背包可以不被装满.因为最优解中,每个物品都有两种可能的情况,即在背包中或者不存在(背 包中有0个该物品或者 1个),所以我们把这个问题称为0-1背包问题. 0-1背包问题状态转移方程 用dp[i][j]表示前i个物品在总体积不超过j的情况下,放到背包里的最大价值.由此可以推出状态转移方程: dp[0][j] = 0;

经典的100个c算法

C语言的学习要从基础,100个经典的算法 真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应该能猜到吧 语言的学习基础,100个经典的算法 C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的 算法 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? _____

Exchange经典案例-01:如何统计Exchange组织中所有的权限组和成员

在之前的Exchange Server2013 日常管理经典案例中的博文中得到了大家的关注和高度的认可,对此首先表示非常感谢.后期会跟大家分析更多企业环境中的实际案例. 对于今天的这个案例我是深有感触的,在2个月之前上海**大学有个Exchange方面的需求,用户数在1万人以上.该大学现有Exchange2010环境,在权限管理方面比较乱,目前也不知具体哪些人有哪些权限.由于最近更换了IT manager,想将现有环境做个全面的权限排除和各方面的完善后再将Exchange Server 2010

哈佛百年经典(01卷)--《民间传说与寓言》---读后感

<民间传说与寓言>从名字也可以看出,这本书主要是讲的一个一个的故事,讲故事时人类最古老的一种文明形式,我们现在之所以能够了解最古老的文明,了解最原始时期的野蛮状况,都要归功于研究者们根据那些经久相传的故事还原出了真相.本书中的这些故事用于宗教与教育,表现爱国与政治思想.更重要的是,经久不衰的故事中,蕴含着人类永恒的智慧. 看完本书,想起了童年时候听过的种种故事,童年的美好回忆.童年总是美好的,无忧无虑,想法也是很简单,当时小时候的想象力总是非常的丰富.童年已经过去,就让美好的回忆留在我们心底.

HDU3810 Magina(搜索+用优先队列模拟01背包)经典

Magina Time Limit: 60000/30000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 528    Accepted Submission(s): 177 Problem Description Magina, also known as Anti-Mage, is a very cool hero in DotA (Defense of the Anci