(完整word版)蚁群算法报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蚁群算法报告
学院:
专业:
学号:
姓名:
目录
第一部分:蚁群算法原理介绍 (3)
1.1蚁群算法的提出 (3)
1.2蚁群算法的原理的生物学解释 (3)
1.3蚁群算法的数学模型 (3)
1.4蚁群算法实现步骤 (5)
第二部分:蚁群算法实例--集装箱码头船舶调度模型 (6)
2.1集装箱码头船舶调度流程图 (6)
2.2算例与MATLAB编程的实现 (6)
2.2.1算法实例 (6)
2.2.2 Matlab编程 (8)
第三章:MATLAB 优化设计工具箱简介 (14)
3.1M ATLAB优化工具箱 (14)
3.1.1优化工具箱功能: (15)
3.2M ATLAB 优化设计工具箱中的函数 (15)
3.2.2 方程求解函数 (15)
3.2.3最小二乘(曲线拟合)函数 (16)
3.2.4 使用函数 (16)
3.2.5 大型方法的演示函数 (16)
3.2.6 中型方法的延时函数 (16)
3.4优化函数简介 (17)
3.4.1优化工具箱的常用函数 (17)
3.4.2 函数调用格式 (17)
3.5模型输入时所需注意的问题 (19)
第一部分:蚁群算法原理介绍
1.1蚁群算法的提出
蚂蚁是地球上最常见、数量最多的昆虫种类之一,常常成群结队地出现于人类的日常生活环境中。

受到自然界中真实蚁群集体行为的启发,意大利学者M.Dorig 。

于20世纪90年代初,在他的博士论文中首次系统地提出了一种基于蚂蚁种群的新型优化算法—蚁群算法}28}(Ant Colony Algorithm, ACA),并成功地用于求解旅行商问题,自1996年之后的五年时间里,蚁群算法逐渐引起了世界许多国家研究者的关注,其应用领域得到了迅速拓宽。

1.2蚁群算法的原理的生物学解释
据观察和研究发现,蚂蚁倾向于朝着信息激素强度高的方向移动。

因此蚂蚁的群体行为便表现出了一种信息激素的正反馈现象。

当某条路径上经过的蚂蚁越多,该路径上存留的信息激素也就越多,以后就会有更多的蚂蚁选择它。

这也就是说,在蚂蚁搜寻食物的过程中,对于较短的路径,在单位时间内经过的蚂蚁数量越多,那么该路径上信息激素强度越高。

由于信息激素强度较高,则可以吸引更多的蚂蚁沿相同的路径进行搜索,这又使该路径上的信息激素强度增大。

而对于距离较长的路径,由于单位时间内经过的蚂蚁数量较少,该路径上信息激素强度较低,并且随着信息激素的挥发,该路径信息激素强度逐渐减弱,不再吸引蚂蚁沿这条路径运动。

蚂蚁个体之间就是通过信息激素的间接通信来相互协作形成正反馈,进行路径的最优选择,从而达到搜索食物的目的。

1.3 蚁群算法的数学模型
将TSP 问题(traveling salesman problem)作为实例,简单的TSP 描述过程为:假设有n 座城,某个旅者自一城开始,依次经过各城市后回到出发远点,问题就是找到一条距离最小的走法。

假设b i (t)代表t 时位置是i 的蚂蚁数量,Ʈij (t)代表t 时路线((i, j)的所
包含的信息量,n 代表TSP 问题的大小,m 则代表蚁群中所有蚂蚁数, 那 么1()n i t m b t ==∑; {|,}
ij i i c c C τΓ=⊂则为t 时C 集合里元素(城市)相互连接lij 上的 遗存的信息数量的合集。

在开始时各路线上的信息数量相等, 假设Ʈij(0) =const ,最基本的蚁群算法求解最优是经有向的图断( C,L, Γ)来达到的。

蚂蚁k (k=1,2,...m),运动的过程中,其转移方
向是依据每条路线上的信息数量。

我们利用禁忌表tabuk (k =1,2,..., m)来代表蚂蚁k 已经经过的城市,随着tabuk 进化过程变化,集合也做出动态的改变。

在蚂蚁搜索前进的过程,依据各路线上包含的信息以及路线下的启发式信息,用来算出状态转移下的概率。

()k ij P t 代表t 时下蚂蚁
k 经城市i 运动到城市j 时的状态转移下的概率。

[][]k 0()()()j allowed ()()k k ij ik ij ij ik s allowed t t P t t t αβαβτητη⊂⎧⎪⎪⎡⎤•=⎣⎦⎨∈⎪⎡⎤•⎣⎦⎪⎩∑否则若 (1)
式(1)中,allowedk=C-tabuk 代表k 蚂蚁要到下一个城市时允许选择的元素;α代表信息的启发式的因素,代表运动路线的重要程度,代表了蚂蚁不断地运动积累信息,在后续的蚂蚁移动过程中的作用,它数值较大,说明这个蚂蚁容易于选择别的蚂蚁所走过的路线,这些蚂蚁的协作运动越强;β代表的是期望的启发因素,代表清晰度下的比较的重要程度,反映了蚂蚁在移动中累计的启发式的信息,代表这个蚂蚁在选择路线过程中的重要性,它的数值大,那么这种状态的转移概率,比较与贪心规则相近似;ηik (t)代表是启发式函数:
ik ij
1t =d η() (2) 式(2)中,d ij 代表的是邻近两个元素之间距离,对于蚂蚁来说,d ij 值越小,那么n ik (t)值就越大,()k ij P t 值也越大。

显然,这个启发式的函数代表的是蚂蚁自城市i 到城市j 的期望度。

如果残留的信息素太多,要使残留的信息素不掩盖启发式的信息,当这个蚂蚁完成一个元素或走完n 个所有的城市,也就是说蚂蚁一个旅程完成,需要更新残留的信息。

这是仿效人类的大脑记忆下的特点提出的信息更新的模式,也就是说我们的大脑存储的新信息后,原先存储的旧的信息会伴随时间的推进,不断被我们逐渐的淡化,到最后甚至是忘记。

因此,t+n 时在路线((i, j)的信息调整规则如下:
()(1)()()ij ij ij t n t t τρττ+=-•+∆ (3)
1()()m k ij ij k t t ττ=∆=∆∑ (4)
式(4.3)中,ρ系数代表的是信息挥发,那么1-ρ因子代表的是信息的残留,为避免信息的过多累积,ρ系数的取值的范围: )0,1;()ij t ρτ∈∆⎡⎣代表这次循环过程中路线(i, j)上信息的增加数量,原先的时间
(0)0ij τ∆=,1()m
k ij k t τ=∆∑代表的是k 蚂蚁,它旅行过程中在路线(i, j)上的留
存下来的信息。

不同的信息更新的模式下,有不同的三种模型,对整体的信息而言,也就是蚂蚁走完一个循环后所有路线上的信息的更新,选择求TSP 时较为准确的模型,于是,选择ant-cycle 模型: ,()0,K (i,j)k K ij Q L t τ⎧⎪∆=⎨⎪⎩
若第只蚂蚁在本次循环中经过否则
式(4.5)中Q 代表信息素的强度,此强度在一定范围内影响的是算 法收敛快慢,Lk 代表蚂蚁在这次旅程中所走路线的总长度。

1.4蚁群算法实现步骤
以TSP 为例,蚁群算法的具体实现步骤如下:
1)初始化各参数:令Ʈij (0)=C(C 为常数),ΔƮij =0,迭代次数IT=0,
最大迭代次数为IT_M ,计时器t=0,设置α,β,ρ,Q 的值,将m 只蚂蚁随机放在n 个城市上,把蚂蚁k(k=1, 2,...,m)。

目前所处城市设为禁忌表T k 的第一个元素;
2)开始循环,蚂蚁k(k=1,2,...,m)根据式((3-2)状态转移概率选择下一城市,并将选择过的城市j 加入到禁忌表T k ,直到禁忌表中包含所
有城市n;
3)计算蚂蚁k(k=1,2,...,m)遍历所有城市的总路径长度L k ,比较所
有蚂蚁找到的路径,选择一条最短路径,根据特定的公式更新路径上的信息素浓度;
4)重新迭代,IT =IT+1;
5)判断是否满足条件:判断迭代次数IT >_ IT M 且所有蚂蚁选择同一条路径。

满足的话输出最短路径,否则清空禁忌表T k ,跳转到步骤2);
6)得到结果,程序结束。

流程图如下:
第二部分:蚁群算法实例--集装箱码头船舶调度
模型
2.1 集装箱码头船舶调度流程图
图2.1 集装箱码头船舶调度流程图
2.2算例与matlab编程的实现
2.2.1算法实例
设定种群大小N=5 ,船舶数量vessel Number=8,泊位数量berth Number=3 ,每个泊位上有3台岸桥,岸桥的平均卸货速度为35箱/小时,
蚁群算法中α=1,β=2.5,ρ =0.85,COUNTmax=20
通过MATLAB编程实现以下:
Step 1蚁群初始化,设时间的计数器t=0,初始迭代的次数ITCOUNT=0,Q[i][jl= 0将每个参数进行合理设置。

于此同时,还要设好
题中的一些数据、条件以及泊位的条件和船舶载货量,以及模型中最大
的岸桥数量等等,还有要按照船舶的载货数量,来算出两个城市间的距离;
Step 2可行结点的集合进行初始化,创建一个模型禁忌表,并在禁
忌表中方知k只蚂蚁起始的位置,并且将链表的索引设置为s=l;
Step 3第k只蚂蚁来说,出发的起始点是Bk,船舶J的选择按照的
是状态转移的规律,可以选择的可能性有:①如果船舶的要求在泊位Bk
能被满足,那么就将位置(K,J)存在禁忌表中,蚁群算法进行下去;②如
果船舶的要求在泊位Bk不能被满足,那么自动选择下一个可供选择的
泊位,也就是B k+1,重新回到step 3;将这个过程重复进行,一直到链表
满了为止,也就是说全部城市都被旅行过了。

Step 4用得到的信息素来对规则进行更新。

利用各个路线算出船舶
等待的时间,并同当前找到的最优解来进行对比,选出本次更优的路线,来更新当前的全局的最优解。

将全部路线上的信息量进行更新,t=t+I, IT COUNT=IT COUNT+l,ΔQ[i][j]=0,清空禁忌表;
Step 4假如是k次迭代结束,仍然是没有满足算法条件,那么需要
重新开始算法迭代;
Step 5假如连续进行迭代IT_COUNTn次以后,如果得出的最优值还
是没有明显的改进时,则自适应修改P的值,直达到ρ = ρmin条件后停
止修改。

Step 5如果IT_COUNT≤COUNT max,那么重复Step2,如果达到了最
大的迭代次数IT_COUNT max,则算法结束。

应用蚁群算法优化得到船舶调度情况
泊位1:1号船、6号船
泊位2:2号船、7号船、5号船
泊位3:3号船、4号船、8号船
得到所有船舶在港时间为81.2小时,蚁群算法得到的船舶调度方案有效
地缩短了所有船舶的在港时间。

图2.2 基于优先权的先到先服务原则的船舶泊位分布图
总体上来看,由于船舶的优先权差距不明显,所以对于吨位差别不是很大的集装箱船舶,集装箱码头调度基本上是根据先来先服务的原则。

因此,通过上述实例验证的调度结果表明:在以先到先服务的原则为前提下,兼顾大船优先调度,可以实现所有船舶在港时间最小的目标。

2.2.2 Matlab编程
MaxNc=20
AntNum=5
%计算船舶到港时间差(城市间距离)
LabelMatrix=[0 0 0 -2 -3 3 -4 -4 1 1 1 3 -3 2 1 -3 -1;
0 -1 3 -2 -3 -1 0 -1 -2 -1 3 4 0 0 -4 2 -1]
%各船舶坐标矩阵
X_LabelMatrix=[0 0 0 -2 -3 3 -4 -4 1 1 1 3 -3 2 1 -3 -1]
%各船舶x轴坐标矩阵
Y_LabelMatrix=[0 -1 3 -2 -3 -1 0 -1 -2 -1 3 4 0 1 -4 2 -1]
%各船舶Y轴坐标矩阵
mm=max(size(LabelMatrix))%泊位数量
DistanceMatrix=zeros(mm);%初始距离矩阵为空矩阵
for i=1 :mm
forj=l:mm
DistanceMatrix(i,j)=sqrt((X_LabelMatrix(1,i)-X_LabelMatrix(1,j))^2+(Y_La
belMatrix(l,i)-Y_LabelMatrix(l,j))^2);
%各城市点间距离矩阵
end
DistanceMatrix %显示距离矩阵
%定义其他初始变量
R=[0 1.5 1.8 2 0.8 1.5 1 2.5 3 1.7 0.6 0.2 2.4 1.9 2 0.7 0.5 2.2 3.1 0.1]%各船舶的装卸时间,单位h
Q=1%初始蚂蚁循环一周释放信息量
tao0=Q/100%初始路径上的信息素浓度
QV=9%船的装卸时间是9h
%给tao矩阵miu矩阵节约值s矩阵赋初值
for i=1 :mm
for j=l:mm
if i~=j
s(i,j)=DistanceMatrix(l,i)+DistanceMatrix(l,j)-DistanceMatrix(i,j);%节约值tao(i,j)=tao0;%给路径上信息赋初值
miu(i,j)=1/DistanceMatrix(i,j);%miu矩阵
end
end
end
for i=2:mm
s(l,i)=3/DistanceMatrix(l,i);%这是什么意思,
s(i,l)=1 /DistanceMatrix(i,l);
end
s
tao
mru
best cost=zeros(l,MaxNc)
%最优路线长度,每次迭代都会产生一个最优解
cost=zeros(MaxNc,AntNum)
%路线长度矩阵,每次迭代每只蚂蚁都产生一个路径长度
Best_cost=zeros(MaxNc,25)%初始化,最优路径矩阵
%开始迭代
for Nc=1:MaxNc
A_tao=zeros(mm)%各船舶之间的增量矩阵
tour=zeros(AntNum,25)%初始路径矩阵为零,每次迭代的每只蚂蚁都产生禁忌表来替换
tao%tao矩阵是随着迭代变化的
if Nc<10
Q=l ,rou=0.3,alpha=2,belta=3,gama=1
end
if Nc>=10&Nc<40
Q=2,rou=0.4,alpha=3,belta=4,gama=2
if Nc>40
Q=3,rou=O.S,alpha=4,belta=3,gama=3
End
%迭代参数的变化,动态调整参数
for Ant=1:AntNum %蚂蚁数目
sumload=0 %初始装载量为0
PartNum=1 %产生部分路径的数目
cur_pos=1 %初始位置为等泊
aa=randperm(mm)%随机置换船舶
tabu=[ 1 ] %禁忌表初始为只有船舶的集
hh=length(rn) %泊位个数
while hh~=0&sumload<=QV
%当船舶没有被访问完时继续,当泊位还有空间时继续
A=[]
p=[]
for k=l :hh
if sumload+R(rn(k))<=QV %看有没有满足容量约束的点
A( l ,k)=1
else
A(l,k)=0 %A矩阵记录容量符合的点
end
end
A %输出A矩阵
if sum(A)==0%如果没有容量满足约束的点
sumload=0%装载量归零
cur_pos=1%起始点归一
tabu=[tabu,l]%路线重新从一点开始
PartNum=PartNum+1 %所用车辆数加一
hh
else
B=m.*A %记录符合容量约束的实际点
C=B(find(B>0)) %去除不符合容量约束的点
D=max(size(C)) %符合容量约束的点规模
%在满足容量约束的点中选择概率大的点
for j=1:D
p(j)=((tao(curios,C(j)))^alpha)*((miu(cur_pos,C(j)))^belta)*(s(cur_pos,C (j))^gama)
%计算从cur_pos到C小点的概率的分子
end
sump=sum(p)%概率公式的分母
p=p/sump%到达满足要求的各点的概率
r=rand()%产生一个随机数
[a,b]=sort(p)%将p矩阵从小打到排列
al=rot90(rot90(a))
b1=rot90(rot90(b))%将矩阵从大到小排列
%轮盘赌策略选择城市
if r<max(p)%当随机数小于最大概率时选择概率最大的点
curios=C(b I (1))%更新当前点
sumload=sumload+R(C(b1(I)))%更新装载量
tabu=[tabu,cur}os]%更新禁忌表
rn=rn(find(m~=C(b1(1))))%更新备选船舶,去掉了已经选的船舶,相当于禁忌表的功能
hh=hh-1
if hh==0
tabu=[tabu, l ]%给路径最后一个点赋值一,也就是封口end
elseif r>=max(p)%当随机数大于最大概率时选择概率次大的点
curios=C(b1(2))
sumload=sumload+R(C(bl(2)))
tabu=[tabu,cur_pos]
m=m(find(m~=C(b1(2))))
hh=hh-1
if hh==0
tabu=[tabu,l]
end
end
end
end
tabu%输出各个蚂蚁的禁忌表,以用来求蚂蚁的cost,(正常情况下会每迭代一次每只蚂蚁输出一个禁忌表)
tabu_size=max(size(tabu))%禁忌表的规模
for i=1:tabu_size
tour(Ant,i)=tabu( l ,i)
end %用tabu里的数据替换tour矩阵里的数据,以记录路径
for i=1:(tabu_size-1)
cost(Nc,Ant)=cost(Nc,Ant)+DistanceMatrix(tabu(i),tabu(i+1)) %计算禁忌表中路线总长度
end
cost%输出矩阵
end
best_cost(l,Nc)=min(cost(Nc,:))%替换最好距离矩阵的数据
[m n]=sort(cost(Nc,:))
best tour(Nc,:)=tour(n(1),:)%-记录每一次迭代的最好解的路径
%开始更新信息素为下一次迭代准备
[q v]=sort(cost(Nc,:))%从小到大排列第Nc次迭代的距离
goodAnt 1=tour(v(1), :)%将各个精英蚂蚁的禁忌表矩阵提取出来
goodAnt2=tour(v(2),:)
goodAnt3=tour(v(3),:)
goodAnt4=tour(v(4),:)
goodAntS=tour(v(5),: )
badAnt=tour(v(AntNum),:)%提取出最差解的矩阵
%开始更新城市信息素,采用全局更新策略
for i=1 :mm
for j=l :mm
if i~=j
tao(i,j)=(1-rou)*tao(i,j);
end
end
end
tao%首先更新所有路径的信息素,考虑挥发的因素,更新五只精英蚂蚁的信息素
tourl=goodAnt1(find(goodAnt 1 >0))%得出除去零点的第一只蚂蚁的路径矩阵
for i=1 :(length(tourl)-1)
A_tao(tourl(i),tourl(i+1))=A_tao(tourl(i),tourl
(i+1))+Q/cost(Nc,v(1))%更新了第一只蚂蚁的路径信息素增量A_tao(tourl(i+1),tourl(i))=A_tao(tourl(i),tourl (i+1))%使得信息素矩阵仍为对称矩阵
end
A_tao%输出A_tao矩阵
tour2=goodAnt2(find(goodAnt2>0))
%得出除去零点的第二只蚂蚁的路径矩阵
for i:(length(tour2)*1)
A_tao(tour2(i),tour2(i+1))=A_
tao(tour2(i),tour2(i+l))+Q/cost(Nc,v(2))%更
新了第二只蚂蚁的路径信息素增量
Aes tao(tour2(i+1),tour2(i))=Aes tao(tour2(i),tour2(i+1))
end
A tao%再次输出A tao矩阵
tour3=goodAnt3(find(goodAnt3>0))%得出除去零点的第三只蚂蚁的路径矩阵
for i=1 :(length(tour3)-1)
A_tao(tour3(i),tour3(i+1))=A
tao(tour3(i),tour3(i+1))+Q/cost(Nc,v(3))%更新了第三只蚂蚁的路径信息素
增量
A_tao(tour3(i+1),tour3(i))=A_tao(tour3(i),tour3 (i+1))
end
A_tao%再次输出tao矩阵
tour4=goodAnt4(find(goodAnt4>0))
%得出除去零点的第四只蚂蚁的路径矩阵
for i=1:(length(tour4)-1)
A_tao(tour4{i),tour4(i+l))=A_tao(tour4(i),tour4(i+1))+Q/cost(Nc,v(4))
%更新了第四只蚂蚁的路径信息素增量
A_tao(tour4(i+1),tour4(i))=A_tao(tour4(i),tour4(i+l))
end
A_ao%再次输出tao矩阵
tours=goodAntS(find(goodAntS>0))
%得出除去零点的第五只蚂蚁的路径矩阵
for i=1 :(length(tour5)-1)
A_tao(tour5(i),tour5(i+l))=A_tao(tours(i),tour5(i+l))+Q/cost(Nc,v(5))
%更新了第五只蚂蚁的路径信息素增量
A_tao(tour5(i+l),tour5(i))=A_tao(tour5(i),tour5(i+1))
end
A_tao%再次输出tao矩阵
%更新糟糕蚂蚁的信息素
tour6=badAnt(find(badAnt>0))%得出糟糕蚂蚁的除去零点的路径矩阵
for i=1 :(length(tour6)一1)
A_tao(tour6(i),tour6(i+1))=A_tao(tour6(i),tour6(i+1))-Qlcost(Nc,v(AntNum)) %更新糟糕蚂蚁的路径信息素增量
A_tao(tour6(i+ 1),tour6(i))=AJao(tour6(i),tour6(i+1))
end
A_tao%最终更新后的信息素矩阵
tao=tao+A_tao%更新所有路径的信息素
%将信息素限制在mintao和maxtao之间
maxtao=SO1rou*(Q/best cost(l,Nc))
mintao=maxtao/ 10000
for i=1 :mm
for j=l :mm
if i==j
tao(i,j)=0
elseif i~=j&tao(i,j)>=maxtao
tao(i,j)=maxtao
elseif i~=j&tao(i,j)<=mintao
tao(i,j)=mintao
end
end
end
本文建立的集装箱码头船舶调度优化模型能够比较实际的反映出集装箱码头的调度情况,即当优先权较大的船舶和优先权较小的船在相差较短的一段时间内相继到港,集装箱码头可以根据集装箱码头条件采取大船优先调度的策略;而当船舶先后到达相差时间较大的情况到港,以所有船舶在港时间最短为目标,必然遵循先来先服务的原则,优先调度先行到港的船舶。

此外,实验结果表明在本文的模型中所设计采用的蚁群算法能够有效得出船舶在港时间的近似最优值即所有船舶在港时间最小。

第三章:Matlab 优化设计工具箱简介
在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。

最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。

由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。

用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:
1)建立数学模型
即用数学语言来描述最优化问题。

模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。

2)数学求解
数学模型建好以后,选择合理的最优化方法进行求解。

最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。

3.1 Matlab优化工具箱
工具箱是MATLAB函数的综合程序库,不同的工具箱包含有大量相关的库函数,在进行复杂的运算时,只需调用相关的函数就可完成给定的任务。

最优化工具箱(Optimization Toolbox)是 30多个工具箱之一,主要用于求解各种工程最优化设计问题。

3.1.1优化工具箱功能:
(1)求解无约束条件非线性极小值;
(2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题和半无限极小值问题;
(3)求解二次规划和线性规划问题;
(4)非线性最小二乘逼近和曲线拟合;
(5)非线性系统的方程求解;
(6)约束条件下的线性最小二乘优化;
(7)求解复杂结构的大规模优化问题。

3.2 Matlab 优化设计工具箱中的函数
最优化工具箱有11个专有的最优化函数,分别用于求解线性规划问题、无约束问题和约束最优化问题。

3.2.1 最小化函数
3.2.2 方程求解函数
3.2.3最小二乘(曲线拟合)函数3.2.4 使用函数
3.2.5 大型方法的演示函数
3.2.6 中型方法的延时函数
3.4 优化函数简介
3.4.1优化工具箱的常用函数
3.4.2 函数调用格式
(1)linprog函数
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb,u b,x0,options)
输入参数:
f:目标函数系数向量
A:不等式约束系数矩阵
b:不等式约束常数向量
Aeq:等式约束系数矩阵
Beq:等式约束常熟向量
lb:x的可行域下界
ub:x的可行域上界
x0:初始迭代点.(这个与linprog使用的算法有关)
options:优化参数设置
输出参数:
X:线性优化问题最优解
fval:最优目标函数值
lambda,exitflag:算法停止原因
output:优化结果的约束信息
lambda:结果x对应的拉格朗日乘子
(2)fminbnd函数
[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options)
输入参数:
x:在区间x1<x<x2上函数fun取最小值时x值
fun:为目标函数的表达式字符串或MATLAB自定义函数的函数柄
options:为指定优化参数选项
输出参数:
fval:为目标函数的最小值
xitflag:为终止迭代的条件
output:为优化信息
x1,x2:x的取值区间
(3)fminunc 函数
[x,fval,exitflag,output,grad,hessian]=
fminunc(fun,x0,options)
输入参数:
fun:目标函数的表达式字符串或MATLAB自定义函数的函数柄
x0:给定初始点
options:为指定优化参数
输出参数:
fval最优点x处的函数值
exitflag:为终止迭代的条件
output:为输出优化信息
grad:为函数在解x处的梯度值
hessian:目标函数在解x处的海赛(Hessian)值
(4)fminsearch 函数
[x,fval,exitflag,output]=fminsearch(fun,x0,options)
输入参数:
fun:为目标函数的表达式字符串或MATLAB自定义函数的函数柄
x0:给定初始点
options:为指定优化参数
输出参数:
fval:最优点的函数值
exitflag:终止迭代的条件
hessian:目标函数在解x处的海赛(Hessian)值
(5)quadprog 函数
[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,l b,ub,x0,options)
输入参数:
h,f,A,b:标准形中的参数
x:目标函数的最小值
Aeq,beq:满足等约束条件beq.x=Aeq
lb,ub:为解x的下界与上界
x0:设置的初值
options:指定的优化参数
(6)fmincon函数
[x,fval,exitflag,output,lambda,grad,hessian]
=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
输入参数,输出参数意义参考线性规划参数
(7)fgoalattain 函数
[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(f
un,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
(8)fminimax 函数
[x,fval,maxfval,exitflag,output,lambda]=fminimax(fun,x0,A,
b,Aeq,beq,lb,ub,nonlcon,options)
3.5 模型输入时所需注意的问题
(1)目标函数最小化
优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化,如果优化问题要求目
标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化
来实现。

近似地,对于quadprog函数提供-H和-f,对于linprog函
数提供-f。

(2)约束非正
优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过对不等
式取负可以达到使大于零的约束形式变为小于零的不等式约束形式
的目的,如Ci(x)≥0形式的约束等价于- Ci(x)≤0;Ci(x)≥b形
式的约束等价于- Ci(x)+b≤0。

(3)避免使用全局变量。

相关文档
最新文档