matlab常用算法大全数学建模Word文件下载.docx
《matlab常用算法大全数学建模Word文件下载.docx》由会员分享,可在线阅读,更多相关《matlab常用算法大全数学建模Word文件下载.docx(53页珍藏版)》请在冰豆网上搜索。
,2)=w'
3)=v'
./v'
x=sortrows(x,-3);
item_count=0;
ifcar>
=x(i,2)
car=car-x(i,2);
item_count=item_count+1;
else
y=zeros(item_count,2);
item_count
y(i,1)=x(i,1);
y(i,2)=x(i,2);
v=[220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1];
w=[80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,50,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1];
car=1000;
[item_count,y]=chaoshi(v,w,car);
y’;
结果为:
ans=
Columns1through11
158581159582118105696516290
2510222522323020205028
Columns12through22
10112515596881609856220192100
3240503230553520807038
Columns23through26
18077122208
70304882
最大总价值为3095元,可装入体积为996
贪婪算法练习
练习题1:
考虑1、8、9、11这四种面值的硬币,要找出币值24的零钱,怎么找能使硬币数最少?
利用matlab编程求解。
设
x
j
为二进制变量,如果硬币j被选中,则,
=1,否则
=0,
则找硬币问题的数学模型如下:
min
å
=n
jj
1;
mn
v=å
=1
;
用贪婪算法求解,其MATLAB程序如下:
function
[n,x]=payback(v,y,m)
[m,n]=size(y);
for
i=1:
n
j=1:
练习题2:
利用matlab编程FFD算法完成下题:
[nbox,p]=sjy(n,v,limitv)
[m,n]=size(v);
w=limitv*ones(m,n);
p=zeros(n);
nbox=0;
i
if
v(i)<
w(j)
w(j)=w(j)-v(i);
p(i,j)=1;
break;
else
continue;
end
w(j+1)=w(j+1)-v(i);
p(i,j+1)=1;
nbox=nbox+1;
运行结果:
p
=
1
0
练习题3:
如果把选择策略从“选出一个下标最小的箱子并把物品ai放入该箱子中”(FF算法)改为选择最佳的箱子(已装载物品大小和最大的-这个称为best
fit-BF最佳适应算法),再计算一次上题。
比较两次求解的结果。
练习题4:
背包问题:
c=[10,5,15,7,6,18,3];
w=[2,3,5,7,1,4,1];
limitw=15;
n=7;
求最优解。
练习题5:
“超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3
奖品i占用的空间为wi
dm3
价值为vi
元,
具体的数据如下:
vi
{
220,
208,
198,
192,
180,
165,
162,
160,
158,155,
130,
125,
122,
120,
118,
115,
110,
105,
101,
100,
98,96,
95,
90,
88,
82,
80,
77,
75,
73,
72,
70,
69,
66,
65,
63,
60,
58,56,
50,
30,
20,
15,
10,
8,
5,
3,
1}
wi
{80,
85,
55,
25,
40,
48,50,
32,
22,
38,
35,
28,
45,30,
4,
2,1}。
模型的建立:
为二进制变量,如果物品j被选中,则
=1,否则,
=0,如此可将本题转化为如
下优化模型:
max
v1
s.t.
jWxx
wj
,2,1},1,0{;
1L=Î
£
模型的解决:
对此优化问题,我们可以选用价值密度贪婪准则,从剩下的物品中选择可装入购物车的单位价值
w
vj
j,最大的物品,即按
j非递增的次序装入物品,只要正被考虑的物
品装的进就装入小车。
其MATLAB编程代码如下:
[a1,b1]=sort1(n,a,b)%按单位价值排序
[m,n]=size(a);
d=zeros(m,n);
k=1:
d(k)=a(k)/b(k);
end%单位价值
h=1:
n-1
n-h%向后排序
d(j)<
d(j+1)
t1=a(j);
a(j)=a(j+1);
a(j+1)=t1;
t2=b(j);
b(j)=b(j+1);
b(j+1)=t2;
t3=d(j);
d(j)=d(j+1);
d(j+1)=t3;
%
a1=a;
b1=b;
[p,c,w]=goodsinknapsack(n,limitw,v,w,x)%计算背包中物品数
cl=limitw;
%cl为背包剩余可装载重量
p=0;
[m,z]=size(c);
x=zeros(m,z);
[v,t]=sort1(n,c,w);
%物品按单位价值排序
c=v;
w=t;
w(i)>
cl
break%待放入包的物品重量大于包的重量,跳出循环
x(i)=1;
%x(i)为1时,物品i在包中
cl=cl-w(i);
p=p+1;
%p记录放入背包物品的个数
knapsack(n,limitw,w,v)
totalc=0;
totalw=0;
[m,n]=size(w);
%m
是w
的行数n
的列数
x=zeros(m,n);
t=w;
%记录原数组
k=c;
y=x;
[p,c,w]=goodsinknapsack(n,limitw,v,w,x);
%排序及计算装箱物品数
p%装包的p件物品
n%原n件物品
(w(j)==t(i))&
&
(c(j)==k(i))%被选择的物品装箱
y(i)=1;
y
totalc=totalc+k(i)*y(i);
%背包的总价值
y(i)==1
totalw=totalw+t(i);
%背包所装载总体积
totalw
totalc
v=[220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1];
w=[80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,50,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1];
limitw=1000;
n=50;
knapsack(n,limitw,w,v);
运行结果为:
Columns
through
16
17
32
33
48
49
50
层次分析法matlab源程序
disp('
请输入判断矩阵A(n阶)'
A=input('
A='
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m
(1)=max(x(:
1));
y(:
1)=x(:
1);
2)=A*y(:
m
(2)=max(x(:
2));
2)=x(:
2)/m
(2);
p=0.0001;
i=2;
k=abs(m
(2)-m
(1));
while
k>
p
i=i+1;
x(:
i)=A*y(:
i-1);
m(i)=max(x(:
i));
y(:
i)=x(:
i)/m(i);
k=abs(m(i)-m(i-1));
a=sum(y(:
w=y(:
i)/a;
t=m(i);
disp(w);
disp(t);
%以下是一致性检验
CI=(t-n)/(n-1);
RI=[000.520.891.121.261.361.411.461.491.521.541.561.581.59];
CR=CI/RI(n);
ifCR<
0.10
disp('
此矩阵的一致性可以接受!
'
CI='
disp(CI);
CR='
disp(CR);
functionAHPInit1(x,y)
%层次分析的初始化
%默认只有两层x为准则数,y为方案数
%CToT为准则对目标生成的比较阵
%EigOfCri为准则层的特征向量
%EigOfOpt为选项层的特征向量
EigOfCri=zeros(x,1);
%准则层的特征向量
EigOfOpt=zeros(y,x);
dim=x;
%维度
RI=[000.580.901.121.241.321.411.451.491.51];
%RI标准
%生成成对比较阵
dim
CToT(i,:
)=input('
请输入数据:
CToT%输出
pause,
tempmatrix=zeros(x+1);
tempmatrix=AHP1(dim,CToT);
EigOfCri=tempmatrix(1:
x);
ci1=tempmatrix(1+x);
EigOfCri
ci1
matrix=cell(x);
%元胞数组
ci=zeros(1,x);
dim=y;
fork=1:
matrix{k}=zeros(dim,dim);
matrix{k}(i,:
%判断该比较阵是不是一致阵
tempmatrix=zeros(y+1);
tempmatrix=AHP1(dim,matrix{k});
EigOfOpt(:
k)=tempmatrix(1:
y);
ci(k)=tempmatrix(y+1);
k)
ci(k)
%下面进行组合一致性检查
CR=ci1/RI(x)+ci*EigOfCri/RI(y);
CR
ifCR>
0.1
组合一致性不通过,请重新评分'
)
return
%下面根据比较阵的结果进行组合
result=EigOfOpt*EigOfCri;
result
functionf=AHP1(dim,CmpMatrix)
[V,D]=eig(CmpMatrix);
%求得特征向量和特征值
%求出最大特征值和它所对应的特征向量
tempNum=D(1,1);
pos=1;
forh=1:
ifD(h,h)>
tempNum
tempNum=D(h,h);
pos=h;
eigVector=V(:
pos);
maxeig=D(pos,pos);
maxeig
CI=(maxeig-dim)/(dim-1);
CR=CI/RI(dim);
准则对目标影响度评分生成的矩阵不是一致阵,请重新评分'
CI
%归一化
sum=0;
sum=sum+eigVector(h);
sum
eigVector(h)=eigVector(h)/sum;
f=[eigVector;
CI];
多目标线性规划的若干解法及MATLAB实现
摘要:
求解多目标线性规划的基本思想大都是将多目标问题转化为单目标规划,本文介绍了理想点法、线性加权和法、最大最小法、目标规划法
,然后给出多目标线性规划的模糊数学解法
,最后对每种解法给出例子,并用Matlab软件加以实现。
关键词:
多目标线性规划Matlab模糊数学
SomesolutionsofMulti-objectivelinearprogrammingandrealizedbyMatlab
DingHongfei
SchoolofMathematics,SouthwestJiaotongUniversity,Chengdu,610031
Abstract:
ThebasicideastosolveMulti-objectivelinearprogrammingaretransformingthemulti-objectiveproblemintosingle-objectiveplanning,Thispaperintroducestheidealpointmethod,linearweightedandlaw,max-minmethod,thegoalprogrammingmethod,thengivenmulti-objectivelinearprogrammingFuzzymathematicsmethod,finallygiveexamplesofeachmethodandusedMatlabsoftwaretoachieve.
Keywords:
Multi-objectiveLinearProgrammingMatlabfuzzymathematics
一.引言
多目标线性规划是多目标最优化理论的重要组成部分,由于多个目标之间的矛盾性和不可公度性,要求使所有目标均达到最优解是不可能的,因此多目标规划问题往往只是求其有效解(非劣解)。
目前求解多目标线性规划问题有效解的方法,有理想点法、线性加权和法、最大最小法、目标规划法,然而这些方法对多目标偏好信息的确定、处理等方面的研究工作较少,本文也给出多目标线性规划的模糊数学解法。
二.多目标线性规划模型
多目标线性规划有着两个和两个以上的目标函数,且目标函数和约束条件全是线性函数,其数学模型表示为:
(1)
约束条件为:
(2)
若
(1)式中只有一个
,则该问题为典型的单目标线性规划。
我们记:
,
.
则上述多目标线性规划可用矩阵形式表示为:
约束条件:
(3)
三.MATLAB优化工具箱常用函数
在MATLAB软件中,有几个专门求解最优化问题的函数,如求线性规划问题的linprog、求有约束非线性函数的fmincon、求最大最小化问题的fminimax、求多目标达到问题的fgoalattain等,它们的调用形式分别为:
①.[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)
f为目标函数系数,A,b为不等式约束的系数,Aeq,beq为等式约束系数,lb,ub为x的下限和上限,fval求解的x所对应的值。
算法原理:
单纯形法的改进方法投影法
②.[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
fun为目标函数的M函数,x0为初值,A,b为不等式约束的系数,Aeq,beq为等式约束系数,lb,ub为x的下限和上限,fval求解的x所对应的值。
基于K-T(Kuhn-Tucker)方程解的方法。
③.[x,fval]=fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
序列二次规划法。
④.[x,fval]=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
fun为目标函数的M函数,x0为初值,goal变量为目标函数希望达到的向量值,wight参数指定目标函数间的权重,A,b为不等式约束的系数,Aeq,beq为等式约束系数,lb,ub为x的