|
全部资料(压缩包)下载:
程序.rar
(24.68 KB, 下载次数: 0)
cumcm2012B附件6_可参考的相关概念.doc
(77.5 KB, 下载次数: 0)
哈哈!三天终于熬过头了,今天也休息过来了,来做个分享!
国赛本科两个题,我们考虑了自己的劣势,对于创新类的题做起来比较恼火,最终选择了A题。
A题入手需要有一些相关的地理知识,例如方位角,时角等等。其实这些内容在2012年B题的附件里都有解释,暑假期间老师让我们做了题,当时比较认真的做。第一问上午就解出来了,后来一直卡在后面,个人matlab编程水平不是很高超,所以队友列出的非线性方程解得不是很好。拖了队友的后腿。最后一问在学长的点拨下做了出来。论文尊重队友意见,就不分享了。程序还是可以共享的。
做完了就是做完了!不考虑结果了。
上图便于大家理解吧,空间想象你能给力不好的可以靠这个图来思考的
下面是部分程序预览(完整版本请下载本帖附件):
- function [date,WE,NS]=fmain()
- %参数赋初值
- maxgen=90; %进化代数,即迭代次数
- sizepop=200; %种群规模
- pcross=0.6; %交叉概率选择
- pmutation=0.2; %变异概率选择
- lenchrom=[1 1 1]; %每个变量的字符长度,如果是浮点,则长度都变为1
- bound=[1 365;2 10;0 90];
- c1=1.5;
- c2=1.5;
- popmax=[365;10;90];
- popmin=[1;2;0];
- Vmax=[60,2,15];
- Vmin=[-60,-2,-15];
- %附件4的影子的测量长度
- LL1=textread('D.txt');
- %种群初始化
- for i=1:sizepop
- chrom(i,:)=Code(lenchrom,bound);
- V(i,:)=5*rand(1,length(lenchrom));
- x=chrom(i,:);
- fitness(i,1)=fun(x,LL1);
- end
- [bestfitness,bestindex]=min(fitness);
- zbest=chrom(bestindex,:); %群体极值位置
- gbest=chrom; %个体位置
- fitnessgbest=fitness; %个体适应度值
- fitnesszbest=bestfitness; %群体极值
- %开始迭代
- for i=1:maxgen
- A=[fitness,chrom];
- A=sortrows(A,1); %按fitness小到大排序
- A=A(1:ceil(sizepop/2),:);%保留前面一半
- fitness=A(:,1);
- chrom=A(:,2:end);
- gbest=chrom;
- %采用pso算法进行更新
- for j=1:ceil(sizepop/2)
- %速度更新
- V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-chrom(j,:))+c2*rand*(zbest-chrom(j,:));
- if V(j,1)>Vmax(1)
- V(j,1)=Vmax(1);
- end
- if V(j,2)>Vmax(2)
- V(j,2)=Vmax(2);
- end
- if V(j,3)>Vmax(3)
- V(j,3)=Vmax(3);
- end
- if V(j,1)<vmin(1)
- V(j,1)=Vmin(1);
- end
- if V(j,2)<vmin(2)
- V(j,2)=Vmin(2);
- end
- if V(j,3)<vmin(3)
- V(j,3)=Vmin(3);
- end
-
- %粒子更新
- chrom(j,:)=chrom(j,:)+1*V(j,:);
- if chrom(j,1)>popmax(1)
- chrom(j,1)=popmax(1);
- end
- if chrom(j,2)>popmax(2)
- chrom(j,2)=popmax(2);
- end
- if chrom(j,3)>popmax(3)
- chrom(j,3)=popmax(3);
- end
- chrom(j,find(chrom(j,:)<popmin(3)))=popmin(3);
- %新粒子适应度值
- fitness(j)=fun(chrom(j,:),LL1);
- end
-
- %对更新后群体进行选择和交叉,以生成剩下一半的个体;
- chrom(ceil(sizepop/2)+1:sizepop,:)=Cross(lenchrom,chrom,fitness,(sizepop-ceil(sizepop/2)),bound);
- %对其进行变异
- chrom(ceil(sizepop/2)+1:sizepop,:)=Mutation(pmutation,lenchrom,chrom(ceil(sizepop/2)+1:sizepop,:),(sizepop-ceil(sizepop/2)),[i maxgen],bound);
- %计算变异后的适应度
- for j=ceil(sizepop/2)+1:sizepop
- fitness(j)=fun(chrom(j,:),LL1);
- end
- %对个群体级值进行更新
- [newbestfitness,newbestindex]=min(fitness);
- if fitnesszbest>newbestfitness
- fitnesszbest=newbestfitness;
- zbest=chrom(newbestindex,:);
- end
- trace(i)=fitnesszbest;
- end
- fitnesszbest
- zbest
- time=[31 28 31 30 31 30 31 31 30 31 30 31];
- ssum=0;
- i=0;
- while ssum<round(zbest(1))
- i=i+1;
- ssum=ssum+time(i);
- end
- date=[i,round(zbest(1))-(ssum-time(i))];
- WE=120+(zbest(2)-8.9)*15; %求经度附件4的基准时间8.9
- NS=zbest(3);
复制代码
</round(zbest(1))
</popmin(3)))=popmin(3);
</vmin(3)
</vmin(2)
</vmin(1)
|
|