
遗传算法求解飞机巡航的程序的代码,仅供参考:
clc,clearsj0=[53.7121 15.3046 51.1758 0.0322 46.3253 28.2753 30.3313 6.9348
56.5432 21.4188 10.8198 16.2529 22.7891 23.1045 10.1584 12.4819
20.1050 15.4562 1.9451 0.2057 26.4951 22.1221 31.4847 8.9640
26.2418 18.1760 44.0356 13.5401 28.9836 25.9879 38.4722 20.1731
28.2694 29.0011 32.1910 5.8699 36.4863 29.7284 0.9718 28.1477
8.9586 24.6635 16.5618 23.6143 10.5597 15.1178 50.2111 10.2944
8.1519 9.5325 22.1075 18.5569 0.1215 18.8726 48.2077 16.8889
31.9499 17.6309 0.7732 0.4656 47.4134 23.7783 41.8671 3.5667
43.5474 3.9061 53.3524 26.7256 30.8165 13.4595 27.7133 5.0706
23.9222 7.6306 51.9612 22.8511 12.7938 15.7307 4.9568 8.3669
21.5051 24.0909 15.2548 27.2111 6.2070 5.1442 49.2430 16.7044
17.1168 20.0354 34.1688 22.7571 9.4402 3.9200 11.5812 14.5677
52.1181 0.4088 9.5559 11.4219 24.4509 6.5634 26.7213 28.5667
37.5848 16.8474 35.6619 9.9333 24.4654 3.1644 0.7775 6.9576
14.4703 13.6368 19.8660 15.1224 3.1616 4.2428 18.5245 14.3598
58.6849 27.1485 39.5168 16.9371 56.5089 13.7090 52.5211 15.7957
38.4300 8.4648 51.8181 23.0159 8.9983 23.6440 50.1156 23.7816
13.7909 1.9510 34.0574 23.3960 23.0624 8.4319 19.9857 5.7902
40.8801 14.2978 58.8289 14.5229 18.6635 6.7436 52.8423 27.2880
39.9494 29.5114 47.5099 24.0664 10.1121 27.2662 28.7812 27.6659
8.0831 27.6705 9.1556 14.1304 53.7989 0.2199 33.6490 0.3980
1.3496 16.8359 49.9816 6.0828 19.3635 17.6622 36.9545 23.0265
15.7320 19.5697 11.5118 17.3884 44.0398 16.2635 39.7139 28.4203
6.9909 23.1804 38.3392 19.9950 24.6543 19.6057 36.9980 24.3992
4.1591 3.1853 40.1400 20.3030 23.9876 9.4030 41.1084 27.7149
] %加载100个目标的数据
x=sj0(:,1:2:8) x=x(:)
y=sj0(:,2:2:8) y=y(:)
sj=[x y] d1=[70,40]
sj=[d1sjd1] sj=sj*pi/180 %单位化成弧度
d=zeros(102) %距离矩阵d的初始值
for i=1:101
for j=i+1:102
d(i,j)=6370*acos(cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2)))
end
end
d=d+d' w=50 g=100 %w为种群的个数,g为进化的代数
rand('state',sum(clock)) %初始化随机数发生器
for k=1:w %通过改良圈算法选取初始种群
c=randperm(100) %产生1,...,100的一个全排列
c1=[1,c+1,102] %生成初始解
for t=1:102 %该层循环是修改圈
flag=0 %修改圈退出标志
for m=1:100
for n=m+2:101
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
c1(m+1:n)=c1(n:-1:m+1) flag=1 %修改圈
end
end
end
if flag==0
J(k,c1)=1:102 break %记录下较好的解并退出当前层循环
end
end
end
J(:,1)=0 J=J/102 %把整数序列转换成[0,1]区间上的实数,即转换成染色体编码
for k=1:g %该层循环进行遗传算法的 *** 作
A=J %交配产生子代A的初始染色体
c=randperm(w) %产生下面交叉 *** 作的染色体对
for i=1:2:w
F=2+floor(100*rand(1)) %产生交叉 *** 作的地址
temp=A(c(i),[F:102]) %中间变量的保存值
A(c(i),[F:102])=A(c(i+1),[F:102]) %交叉 *** 作
A(c(i+1),F:102)=temp
end
by=[] %为了防止下面产生空地址,这里先初始化
while ~length(by)
by=find(rand(1,w)<0.1) %产生变异 *** 作的地址
end
B=A(by,:) %产生变异 *** 作的初始染色体
for j=1:length(by)
bw=sort(2+floor(100*rand(1,3))) %产生变异 *** 作的3个地址
B(j,:)=B(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]) %交换位置
end
G=[JAB] %父代和子代种群合在一起
[SG,ind1]=sort(G,2) %把染色体翻译成1,...,102的序列ind1
num=size(G,1) long=zeros(1,num) %路径长度的初始值
for j=1:num
for i=1:101
long(j)=long(j)+d(ind1(j,i),ind1(j,i+1)) %计算每条路径长度
end
end
[slong,ind2]=sort(long) %对路径长度按照从小到大排序
J=G(ind2(1:w),:) %精选前w个较短的路径对应的染色体
end
path=ind1(ind2(1),:), flong=slong(1) %解的路径及路径长度
xx=sj(path,1)yy=sj(path,2)
plot(xx,yy,'-o') %画出路径
function [path,lmin]=ga(data,d) %data为点集,d为距离矩阵,即赋权图tic
%======================
sj0=data%开环最短路线
%=================================
% sj0=[datadata(1,:)]%闭环最短路线
%=========================
x=sj0(:,1)y=sj0(:,2)
N=length(x)
%=========================
% d(N,:)=d(1,:)%闭环最短路线
% d(:,N)=d(:,1)%距离矩阵d
%======================
L=N %sj0的长度
w=800dai=1000
%通过改良圈算法选取优良父代A
for k=1:w
c=randperm(L-2)
c1=[1,c+1,L]
flag=1
while flag>0
flag=0
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1
c1(m+1:n)=c1(n:-1:m+1)
<a href="https://www.baidu.com/s?wd=end&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">end</a>
<a href="https://www.baidu.com/s?wd=end&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">end</a>
<a href="https://www.baidu.com/s?wd=end&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">end</a>
end
J(k,c1)=1:L
end
J=J/L
J(:,1)=0J(:,L)=1
rand('state',sum(clock))
%遗传算法实现过程
A=J
for k=1:dai %产生0~1 间随机数列进行编码
B=A
c=randperm(w)
%交配产生子代B
for i=1:2:w
F=2+floor(100*rand(1))
temp=B(c(i),F:L)
B(c(i),F:L)=B(c(i+1),F:L)
B(c(i+1),F:L)=temp
end
%变异产生子代C
by=find(rand(1,w)<0.1)
if length(by)==0
by=floor(w*rand(1))+1
end
C=A(by,:)
L3=length(by)
for j=1:L3
<a href="https://www.baidu.com/s?wd=bw&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">bw</a>=floor(1+fix(rand(1,3)*N)) %产生1-N的3个随机数
<a href="https://www.baidu.com/s?wd=bw&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">bw</a>=sort(<a href="https://www.baidu.com/s?wd=bw&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">bw</a>)
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:L])
end
G=[ABC]
<a href="https://www.baidu.com/s?wd=TL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">TL</a>=size(G,1)
%在父代和子代中选择优良品种作为新的父代
[<a href="https://www.baidu.com/s?wd=dd&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">dd</a>,IX]=sort(G,2)
temp=[]
temp(1:<a href="https://www.baidu.com/s?wd=TL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">TL</a>)=0
for j=1:<a href="https://www.baidu.com/s?wd=TL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">TL</a>
for i=1:L-1
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1))
end
end
[DZ,IZ]=sort(temp)
A=G(IZ(1:w),:)
end
path=IX(IZ(1),:)
% for i=1:length(path)
% path(i)=path(i)-1
% end
% path=path(2:end-1)
lmin=0l=0
for j=1:(length(path)-1)
<a href="https://www.baidu.com/s?wd=t1&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">t1</a>=path(j)t2=path(j+1)
l=d(<a href="https://www.baidu.com/s?wd=t1&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PvF-rjf1rj6LryD3Pjm30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnHmvrHcYnWTYnjn4rHb3Ps" target="_blank" class="baidu-highlight">t1</a>,t2)
lmin=lmin+l
end
xx=sj0(path,1)yy=sj0(path,2)
plot(xx,yy,'r-o')
axis equal
toc
无总结反省则无进步
写这篇文章,一是为了总结之前为了准备美赛而学的算法,而是将算法罗列并有几句话解释方便以后自己需要时来查找。
数学建模问题总共分为四类:
1. 分类问题 2. 优化问题 3. 评价问题 4. 预测问题
我所写的都是基于数学建模算法与应用这本书
一 优化问题
线性规划与非线性规划方法是最基本经典的:目标函数与约束函数的思想
现代优化算法:禁忌搜索;模拟退火;遗传算法;人工神经网络
模拟退火算法:
简介:材料统计力学的研究成果。统计力学表明材料中不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(此过程称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。
思想可用于数学问题的解决 在寻找解的过程中,每一次以一种方法变换新解,再用退火过程的思想,以概率接受该状态(新解) 退火过程:概率转化,概率为自然底数的能量/KT次方
遗传算法: 遗传算法是一种基于自然选择原理和自然遗传机制的搜索算法。模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。
遗传算法的实质是通过群体搜索技术(?),根据适者生存的原则逐代进化,最终得到最优解或准最优解。
具体实现过程(P329~331)
* 编码
* 确定适应度函数(即目标函数)
* 确定进化参数:群体规模M,交叉概率Pc,变异概率Pm,进化终止条件
* 编码
* 确定初始种群,使用经典的改良圈算法
* 目标函数
* 交叉 *** 作
* 变异 *** 作
* 选择
改良的遗传算法
两点改进 :交叉 *** 作变为了以“门当户对”原则配对,以混乱序列确定较差点位置 变异 *** 作从交叉 *** 作中分离出来
二 分类问题(以及一些多元分析方法)
* 支持向量机SVM
* 聚类分析
* 主成分分析
* 判别分析
* 典型相关分析
支持向量机SVM: 主要思想:找到一个超平面,使得它能够尽可能多地将两类数据点正确分开,同时使分开的两类数据点距离分类面最远
聚类分析(极其经典的一种算法): 对样本进行分类称为Q型聚类分析 对指标进行分类称为R型聚类分析
基础:样品相似度的度量——数量化,距离——如闵氏距离
主成分分析法: 其主要目的是希望用较少的变量去解释原来资料中的大部分变异,将掌握的许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,及主成分。实质是一种降维方法
判别分析: 是根据所研究的个体的观测指标来推断个体所属类型的一种统计方法。判别准则在某种意义下是最优的,如错判概率最小或错判损失最小。这一方法像是分类方法统称。 如距离判别,贝叶斯判别和FISHER判别
典型相关分析: 研究两组变量的相关关系 相对于计算全部相关系数,采用类似主成分的思想,分别找出两组变量的各自的某个线性组合,讨论线性组合之间的相关关系
三 评价与决策问题
评价方法分为两大类,区别在于确定权重上:一类是主观赋权:综合资讯评价定权;另一类为客观赋权:根据各指标相关关系或各指标值变异程度来确定权数
* 理想解法
* 模糊综合评判法
* 数据包络分析法
* 灰色关联分析法
* 主成分分析法(略)
* 秩和比综合评价法 理想解法
思想:与最优解(理想解)的距离作为评价样本的标准
模糊综合评判法 用于人事考核这类模糊性问题上。有多层次模糊综合评判法。
数据包络分析法 是评价具有多指标输入和多指标输出系统的较为有效的方法。是以相对效率为概念基础的。
灰色关联分析法 思想:计算所有待评价对象与理想对象的灰色加权关联度,与TOPSIS方法类似
主成分分析法(略)
秩和比综合评价法 样本秩的概念: 效益型指标从小到大排序的排名 成本型指标从大到小排序的排名 再计算秩和比,最后统计回归
四 预测问题
* 微分方程模型
* 灰色预测模型
* 马尔科夫预测
* 时间序列(略)
* 插值与拟合(略)
* 神经网络
微分方程模型 Lanchester战争预测模型。。
灰色预测模型 主要特点:使用的不是原始数据序列,而是生成的数据序列 优点:不需要很多数据·,能利用微分方程来充分挖掘系统的本质,精度高。能将无规律的原始数据进行生成得到规律性较强的生成序列。 缺点:只适用于中短期预测,只适合指数增长的预测
马尔科夫预测 某一系统未来时刻情况只与现在状态有关,与过去无关。
马尔科夫链
时齐性的马尔科夫链
时间序列(略)
插值与拟合(略)
神经网络(略)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)