標(biāo)題: 分享下數(shù)模2015年A題的Matlab程序 [打印本頁(yè)]

作者: 51黑專(zhuān)家    時(shí)間: 2016-5-8 19:58
標(biāo)題: 分享下數(shù)模2015年A題的Matlab程序


全部資料(壓縮包)下載:

程序.rar (24.68 KB, 下載次數(shù): 12)

cumcm2012B附件6_可參考的相關(guān)概念.doc (77.5 KB, 下載次數(shù): 8)


哈哈!三天終于熬過(guò)頭了,今天也休息過(guò)來(lái)了,來(lái)做個(gè)分享!
國(guó)賽本科兩個(gè)題,我們考慮了自己的劣勢(shì),對(duì)于創(chuàng)新類(lèi)的題做起來(lái)比較惱火,最終選擇了A題。

A題入手需要有一些相關(guān)的地理知識(shí),例如方位角,時(shí)角等等。其實(shí)這些內(nèi)容在2012年B題的附件里都有解釋?zhuān)罴倨陂g老師讓我們做了題,當(dāng)時(shí)比較認(rèn)真的做。第一問(wèn)上午就解出來(lái)了,后來(lái)一直卡在后面,個(gè)人matlab編程水平不是很高超,所以隊(duì)友列出的非線性方程解得不是很好。拖了隊(duì)友的后腿。最后一問(wèn)在學(xué)長(zhǎng)的點(diǎn)撥下做了出來(lái)。論文尊重隊(duì)友意見(jiàn),就不分享了。程序還是可以共享的。

做完了就是做完了!不考慮結(jié)果了。
上圖便于大家理解吧,空間想象你能給力不好的可以靠這個(gè)圖來(lái)思考的







下面是部分程序預(yù)覽(完整版本請(qǐng)下載本帖附件):
  1. function [date,WE,NS]=fmain()  

  2. %參數(shù)賦初值
  3. maxgen=90;            %進(jìn)化代數(shù),即迭代次數(shù)
  4. sizepop=200;           %種群規(guī)模
  5. pcross=0.6;            %交叉概率選擇
  6. pmutation=0.2;         %變異概率選擇
  7. lenchrom=[1 1 1];        %每個(gè)變量的字符長(zhǎng)度,如果是浮點(diǎn),則長(zhǎng)度都變?yōu)?
  8. bound=[1 365;2 10;0 90];
  9. c1=1.5;
  10. c2=1.5;
  11. popmax=[365;10;90];
  12. popmin=[1;2;0];
  13. Vmax=[60,2,15];
  14. Vmin=[-60,-2,-15];

  15. %附件4的影子的測(cè)量長(zhǎng)度
  16. LL1=textread('D.txt');


  17. %種群初始化
  18. for i=1:sizepop
  19.     chrom(i,:)=Code(lenchrom,bound);
  20.     V(i,:)=5*rand(1,length(lenchrom));
  21.     x=chrom(i,:);
  22.     fitness(i,1)=fun(x,LL1);
  23. end

  24. [bestfitness,bestindex]=min(fitness);
  25. zbest=chrom(bestindex,:);   %群體極值位置
  26. gbest=chrom;                %個(gè)體位置
  27. fitnessgbest=fitness;       %個(gè)體適應(yīng)度值
  28. fitnesszbest=bestfitness;   %群體極值
  29. %開(kāi)始迭代
  30. for i=1:maxgen
  31.     A=[fitness,chrom];
  32.     A=sortrows(A,1);         %按fitness小到大排序
  33.     A=A(1:ceil(sizepop/2),:);%保留前面一半
  34.     fitness=A(:,1);
  35.     chrom=A(:,2:end);
  36.     gbest=chrom;
  37.     %采用pso算法進(jìn)行更新
  38.     for j=1:ceil(sizepop/2)
  39.         %速度更新
  40.         V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-chrom(j,:))+c2*rand*(zbest-chrom(j,:));
  41.         if  V(j,1)>Vmax(1)
  42.             V(j,1)=Vmax(1);
  43.         end
  44.         if  V(j,2)>Vmax(2)
  45.             V(j,2)=Vmax(2);
  46.         end
  47.         if  V(j,3)>Vmax(3)
  48.             V(j,3)=Vmax(3);
  49.         end
  50.         if  V(j,1)<vmin(1)
  51.             V(j,1)=Vmin(1);
  52.         end
  53.          if  V(j,2)<vmin(2)
  54.              V(j,2)=Vmin(2);
  55.          end
  56.          if  V(j,3)<vmin(3)
  57.              V(j,3)=Vmin(3);
  58.         end
  59.      
  60.         %粒子更新
  61.         chrom(j,:)=chrom(j,:)+1*V(j,:);
  62.         if chrom(j,1)>popmax(1)
  63.            chrom(j,1)=popmax(1);
  64.         end
  65.         if chrom(j,2)>popmax(2)
  66.            chrom(j,2)=popmax(2);
  67.         end
  68.         if chrom(j,3)>popmax(3)
  69.            chrom(j,3)=popmax(3);
  70.         end
  71.         chrom(j,find(chrom(j,:)<popmin(3)))=popmin(3);
  72.         %新粒子適應(yīng)度值
  73.         fitness(j)=fun(chrom(j,:),LL1);
  74.     end
  75.    
  76.     %對(duì)更新后群體進(jìn)行選擇和交叉,以生成剩下一半的個(gè)體;
  77.     chrom(ceil(sizepop/2)+1:sizepop,:)=Cross(lenchrom,chrom,fitness,(sizepop-ceil(sizepop/2)),bound);
  78.     %對(duì)其進(jìn)行變異
  79.     chrom(ceil(sizepop/2)+1:sizepop,:)=Mutation(pmutation,lenchrom,chrom(ceil(sizepop/2)+1:sizepop,:),(sizepop-ceil(sizepop/2)),[i maxgen],bound);
  80.     %計(jì)算變異后的適應(yīng)度
  81.     for j=ceil(sizepop/2)+1:sizepop
  82.         fitness(j)=fun(chrom(j,:),LL1);
  83.     end
  84.     %對(duì)個(gè)群體級(jí)值進(jìn)行更新
  85.     [newbestfitness,newbestindex]=min(fitness);
  86.     if fitnesszbest>newbestfitness
  87.        fitnesszbest=newbestfitness;
  88.        zbest=chrom(newbestindex,:);
  89.     end
  90.     trace(i)=fitnesszbest;
  91. end
  92. fitnesszbest
  93. zbest

  94. time=[31 28 31 30 31 30 31 31 30 31 30 31];
  95. ssum=0;
  96. i=0;
  97. while ssum<round(zbest(1))
  98.       i=i+1;
  99.       ssum=ssum+time(i);
  100. end
  101. date=[i,round(zbest(1))-(ssum-time(i))];
  102. WE=120+(zbest(2)-8.9)*15; %求經(jīng)度附件4的基準(zhǔn)時(shí)間8.9
  103. NS=zbest(3);
復(fù)制代碼




</round(zbest(1))
</popmin(3)))=popmin(3);
</vmin(3)
</vmin(2)
</vmin(1)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1