蚁群算法实验报告.docx
- 文档编号:9841702
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:55
- 大小:778.25KB
蚁群算法实验报告.docx
《蚁群算法实验报告.docx》由会员分享,可在线阅读,更多相关《蚁群算法实验报告.docx(55页珍藏版)》请在冰豆网上搜索。
蚁群算法实验报告
蚁群算法
一.实验目的
各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。
当一只找到食物以后,它会向环境释放一种信息素,吸引其他的蚂蚁过来,这样越来越多的蚂蚁会找到食物。
有些蚂蚁并没有象其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果令开辟的道路比原来的其他道路更短,那么,渐渐,更多的蚂蚁被吸引到这条较短的路上来。
最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。
二.编程环境
MicrosoftVisualStudio2008(C#)
三.实验要求
程序开始运行,蚂蚁们开始从窝里出动了,寻找食物;他们会顺着屏幕爬满整个画面,直到找到食物再返回窝。
四.源代码
Form1窗体代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Threading;
usingSystem.Windows.Forms;
namespaceANTS
{
publicpartialclassForm1:
Form
{
inttemp1=0,temp2=0;
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Paint(objectsender,PaintEventArgse)
{
Bitmapbmp=newBitmap(PlayGround.MaxX+10,PlayGround.MaxY+10);//新?
建¡§画-布?
Graphicsg=Graphics.FromImage(bmp);//获?
取¨?
这a块¨¦内¨²存ä?
画-布?
的Ì?
Graphics引°y用®?
Penpb=newPen(_borderColor,2);//画-边À?
框¨°
Penph=newPen(_homeColor,3);//画-窝?
Penpf=newPen(_foodColor,3);//画-食º3物?
g.DrawEllipse(pf,PlayGround.FoodLocation.X,PlayGround.FoodLocation.Y,10,10);
g.DrawEllipse(ph,PlayGround.HomeLocation.X,PlayGround.HomeLocation.Y,10,10);
g.DrawRectangle(pb,1,1,PlayGround.MaxX+2,PlayGround.MaxY+2);
if(StoneInitialFlag)
{
StoneInitialFlag=false;
PlayGround.InitialStone();
}
DrawStone(bmp);//画-障?
碍ã-物?
this.CreateGraphics().DrawImage(bmp,0,0);//显?
示º?
新?
建¡§的Ì?
画-布?
bmp.Dispose();//释º¨ª放¤?
内¨²存ä?
}
privatevoidtabPage2_Click(objectsender,EventArgse)
{
groundSetground=newgroundSet();
ground.Show();
}
privatevoidtabPage1_Click(objectsender,EventArgse)
{
antsSetant=newantsSet();
ant.Show();
}
privatevoidjieshaoToolStripMenuItem_Click(objectsender,EventArgse)
{
Introduceintroduce=newIntroduce();
introduce.Show();
}
privatevoidaboutToolStripMenuItem_Click(objectsender,EventArgse)
{
Formabout=newForm();
about.Show();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
this.timer3.Enabled=true;
this.Opacity=0;
radioButton1.Checked=true;
System.Media.SoundPlayerplayer=newSystem.Media.SoundPlayer();
player.SoundLocation="Rihanna-WhereHaveYouBeen.mp3";
player.LoadAsync();
Thread.Sleep(5000);
player.Stop();
}
publicvoidtimer1_Tick(objectsender,EventArgse)
{
{
try
{
Graphicsg=CreateGraphics();
Penpc=newPen(this.BackColor,1);//清?
除y蚂¨¬蚁°?
Penpa=newPen(_antColor,1);//画-蚂¨¬蚁°?
Penpaf=newPen(_antfColor,1);//画-带ä?
着Á?
食º3物?
的Ì?
蚂¨¬蚁°?
g.SmoothingMode=SmoothingMode.HighQuality;
ColorC=Color.Green;
PenP=newPen(Brushes.White,0);
P.StartCap=LineCap.Round;
P.EndCap=LineCap.Round;
for(inti=0;i { { g.FillEllipse(newSolidBrush(this.BackColor),AntS[i].Bounds); g.DrawArc(P,AntS[i].GetX(),AntS[i].GetY(),Antc.AntSize,Antc.AntSize,-100,-70); } AntS[i].AntOneStep(); { g.FillEllipse(newSolidBrush(C),AntS[i].Bounds); g.DrawArc(P,AntS[i].GetX(),AntS[i].GetY(),Antc.AntSize,Antc.AntSize,-100,-70); } } Penph=newPen(_homeColor,3);//画-窝? Penpf=newPen(_foodColor,3);//画-食º3物? g.DrawEllipse(pf,PlayGround.FoodLocation.X,PlayGround.FoodLocation.Y,10,10); g.DrawEllipse(ph,PlayGround.HomeLocation.X,PlayGround.HomeLocation.Y,10,10); temp1+=3; if(temp1>=100) { temp2=temp2+temp1/100; temp1=temp1%60; } label3.Text=temp2.ToString()+"秒? "+temp1.ToString(); } catch(Exceptionee) { //label2.Text=ee.Message; } } } ThreadTimer2Trd; publicvoidtimer2_Tick(objectsender,EventArgse) { Timer2Trd=newThread(newThreadStart(this.DoTimer2)); Timer2Trd.Start(); } privatevoidDoTimer2() { try { //显? 示º? 信? 息¡é ShowMessageCounter++; if(ShowMessageCounter>=2) { ShowMessageCounter=0; if(! string.IsNullOrEmpty(PlayGround.ShowMessage)) { PlayGround.ShowMessage=""; } elseif(! string.IsNullOrEmpty(PlayGround.ShowMessage2)) { label2.Text=PlayGround.ShowMessage2; } } Bitmapbmp=newBitmap(PlayGround.MaxX+10,PlayGround.MaxY+10); DealSmellCounter++; if(DealSmellCounter>=5) { DealSmellCounter=0; if(checkBox1.Checked||checkBox2.Checked) { ClearSmell(bmp); } elseif(ClearSmellCounter<2) { ClearSmellCounter++; ClearSmell(bmp); } PlayGround.DealGround(); DrawSmell(bmp); DrawSmellCounter=-1; } if(checkBox1.Checked||checkBox2.Checked) { DrawSmellCounter++; if(DrawSmellCounter>=1) { DrawSmellCounter=0; DrawSmell(bmp); } } this.CreateGraphics().DrawImage(bmp,0,0); bmp.Dispose(); } catch(Exceptionee) { //label2.Text=ee.Message.ToString(); } } privatevoidDrawSmell(Graphicsg) { inthsm,fsm; for(intxxx=3;xxx for(intyyy=3;yyy { hsm=PlayGround.HomeSmell[xxx,yyy]; fsm=PlayGround.FoodSmell[xxx,yyy]; if(hsm<=0&&fsm<=0)continue; if(checkBox1.Checked&&hsm>0) { intco=hsm>200? 0: 200-hsm; g.DrawRectangle(newPen(Color.FromArgb(co,255,co)),xxx,yyy,1,1); } if(checkBox2.Checked&&fsm>0) { intco=fsm>200? 0: 200-fsm; g.DrawRectangle(newPen(Color.FromArgb(co,co,255)),xxx,yyy,1,1); } } } privatevoidDrawSmell(Bitmapbmp) { inthsm,fsm; for(intxxx=3;xxx for(intyyy=3;yyy { hsm=PlayGround.HomeSmell[xxx,yyy]; fsm=PlayGround.FoodSmell[xxx,yyy]; if(hsm<=0&&fsm<=0)continue; if(checkBox1.Checked&&hsm>0) { intco=hsm>200? 0: 200-hsm; bmp.SetPixel(xxx,yyy,Color.FromArgb(co,255,co)); } if(checkBox2.Checked&&fsm>0) { intco=fsm>200? 0: 200-fsm; bmp.SetPixel(xxx,yyy,Color.FromArgb(co,co,255)); } } } publicvoidDrawStone(Graphicsg) { Penps=newPen(_stoneColor,1);//画-障? 碍ã-物? for(intxxx=3;xxx for(intyyy=3;yyy { if(PlayGround.IsStone(xxx,yyy))g.DrawRectangle(ps,xxx,yyy,1,1); } } publicvoidDrawStone(Bitmapbmp) { for(intxxx=3;xxx for(intyyy=3;yyy { if(PlayGround.IsStone(xxx,yyy))bmp.SetPixel(xxx,yyy,_stoneColor); } } privatevoidClearSmell(Graphicsg) { Penpcsm=newPen(this.BackColor,1); for(intxxx=3;xxx for(intyyy=3;yyy { if(PlayGround.HomeSmell[xxx,yyy]<=0&&PlayGround.FoodSmell[xxx,yyy]<=0)continue; g.DrawRectangle(pcsm,xxx,yyy,1,1); } } privatevoidClearSmell(Bitmapbmp) { for(intxxx=3;xxx for(intyyy=3;yyy { if(PlayGround.HomeSmell[xxx,yyy]<=0&&PlayGround.FoodSmell[xxx,yyy]<=0)continue; bmp.SetPixel(xxx,yyy,this.BackColor); } } privatevoidstart_Click(objectsender,EventArgse) { if(! timer1.Enabled) { timer1.Enabled=true; timer2.Enabled=true; DoRestart(); } } publicstaticvoidInitialAnt() { AntS=newAntc[MaxAnt]; Randomran=newRandom(); List intrannum; for(inti=0;i { do { rannum=ran.Next(10000); } while(_ranList.Contains(rannum)); _ranList.Add(rannum); AntS[i]=newAntc(rannum); } } privatevoidrestart_Click(objectsender,EventArgse) { DoRestart(); } publicvoidDoRestart() { boolt1State,t2State; t1State=timer1.Enabled; t2State=timer2.Enabled; timer1.Enabled=false; timer2.Enabled=false; PlayGround.ShowMessage=""; Bitmapbmp=newBitmap(PlayGround.MaxX+10,PlayGround.MaxY+10); Graphicsg=Graphics.FromImage(bmp); g.Clear(this.BackColor); PlayGround.InitialPlayGround(); if(checkBox4.Checked)PlayGround.InitialStone(); InitialAnt(); Penpb=newPen(_borderColor,2);/ Penph=newPen(_homeColor,3);//画-窝? Penpf=newPen(_foodColor,3); g.DrawEllipse(pf,PlayGround.FoodLocation.X,PlayGround.FoodLocation.Y,10,10); g.DrawEllipse(ph,PlayGround.HomeLocation.X,PlayGround.HomeLocation.Y,10,10); g.DrawRectangle(pb,1,1,PlayGround.MaxX+3,PlayGround.MaxY+3); DrawStone(bmp); this.CreateGraphics().DrawImage(bmp,0,0); bmp.Dispose(); timer1.Enabled=t1State; timer2.Enabled=t2State; } privatevoidend_Click(objectsender,EventArgse) { timer1.Enabled=false; timer2.Enabled=false; } privatevoidxianshishezhiToolStripMenuItem_Click(objectsender,EventArgse) { } #regionMemberFields publicboolStoneInitialFlag=true; publicstaticintMaxAnt=_maxAnt; publicstaticAntc[]AntS=newAntc[_maxAnt]; publicColor_antColor=Color.Black; publicColor_antfColor=Color.Purple; publicstaticColor_homeColor=Color.Green; publicstaticColor_foodColor=Color.Blue; publicstaticColor_borderColor=Color.Black; publicstaticColor_stoneColor=Color.Red; publicColor_hSmellColor=Color.Orange; publicColor_fSmellColor=Color.LightBlue; publicintShowMessageCounter=0; publicintDrawSmellCounter=0; publicintDealSmellCounter=0; publicintClearAntCounter=0; publicintClearSmellCounter=0; publicconstint_maxAnt=25; #endregion privatevoidquit_Click(objectsender,EventArgse) { Application.Exit(); } privatevoidradioButton1_CheckedChanged(objectsender,EventArgse) { this.BackgroundImage=Image.FromFile("背À3景¡ã/a.jpg"); } privatevoidradioButton2_CheckedChanged(objectsender,EventArgse) { this.BackgroundImage=Image.FromFile("背À3景¡ã/2.jpg"); } privatevoidradioButton3_CheckedChanged(objectsender,EventArgse) { this.BackgroundImage=Image.FromFile("背
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 实验 报告