資源簡(jiǎn)介
基本蟻群算法C,比較詳細(xì)!

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
namespace?ant_C
{
????class?CAnt
????{??????????
????public?int[]?m_nPath;?//螞蟻?zhàn)叩穆窂?br/>????????int[]?m_nAllowedCity;//沒去過的城市
????????
????int?m_nCurCityNo;?//當(dāng)前所在城市編號(hào)
????int?m_nMovedCityCount;?//已經(jīng)去過的城市數(shù)量
????????public?double?m_dbPathLength;?//螞蟻?zhàn)哌^的路徑長(zhǎng)度
????????public?CAnt()
????????{
????????????m_nPath=new?int[Common.N_CITY_COUNT];
????????????m_nAllowedCity=new?int[Common.N_CITY_COUNT];?//沒去過的城市
????????}
????????//初始化函數(shù),螞蟻搜索前調(diào)用
????????public?void?Init()
????????{
????????????for?(int?i?=?0;?i? ????????{
????????m_nAllowedCity[i]=1;?//設(shè)置全部城市為沒有去過
????????m_nPath[i]=0;?//螞蟻?zhàn)叩穆窂饺吭O(shè)置為0
????????}
????????//螞蟻?zhàn)哌^的路徑長(zhǎng)度設(shè)置為0
????????m_dbPathLength=0.0;?
????????//隨機(jī)選擇一個(gè)出發(fā)城市
????????????m_nCurCityNo?=?Common.rnd(0?Common.N_CITY_COUNT);
????????//把出發(fā)城市保存入路徑數(shù)組中
????????m_nPath[0]=m_nCurCityNo;
????????//標(biāo)識(shí)出發(fā)城市為已經(jīng)去過了
????????m_nAllowedCity[m_nCurCityNo]=0;?
????????//已經(jīng)去過的城市數(shù)量設(shè)置為1
????????m_nMovedCityCount=1;?
????????}
????????//選擇下一個(gè)城市
????????//返回值?為城市編號(hào)
????????public?int?ChooseNextCity()
????????{
????????int?nSelectedCity=-1;?//返回結(jié)果,先暫時(shí)把其設(shè)置為-1
????????//==============================================================================
????????//計(jì)算當(dāng)前城市和沒去過的城市之間的信息素總和
????????
????????double?dbTotal=0.0;
????????double[]?prob=new?double[Common.N_CITY_COUNT];?//保存各個(gè)城市被選中的概率
????????for?(int?i=0;i ????????{
????????if?(m_nAllowedCity[i]?==?1)?//城市沒去過
????????{
????????????????????prob[i]?=?System.Math.Pow(Common.g_Trial[m_nCurCityNoi]?Common.ALPHA)?*?System.Math.Pow(1.0?/?Common.g_Distance[m_nCurCityNoi]?Common.BETA);?//該城市和當(dāng)前城市間的信息素
????????dbTotal=dbTotal+prob[i];?//累加信息素,得到總和
????????}
????????else?//如果城市去過了,則其被選中的概率值為0
????????{
????????prob[i]=0.0;
????????}
????????}
????????//==============================================================================
????????//進(jìn)行輪盤選擇
????????double?dbTemp=0.0;
????????if?(dbTotal?>?0.0)?//總的信息素值大于0
????????{
????????dbTemp=Common.rnd(0.0dbTotal);?//取一個(gè)隨機(jī)數(shù)
????????for?(int?i=0;i ????????{
????????if?(m_nAllowedCity[i]?==?1)?//城市沒去過
????????{
????????dbTemp=dbTemp-prob[i];?//這個(gè)操作相當(dāng)于轉(zhuǎn)動(dòng)輪盤,如果對(duì)輪盤選擇不熟悉,仔細(xì)考慮一下
????????if?(dbTemp?0.0)?//輪盤停止轉(zhuǎn)動(dòng),記下城市編號(hào),直接跳出循環(huán)
????????{
????????nSelectedCity=i;
????????break;
????????}
????????}
????????}
????????}
????????//==============================================================================
????????//如果城市間的信息素非常小?(?小到比double能夠表示的最小的數(shù)字還要小?)
????????//那么由于浮點(diǎn)運(yùn)算的誤差原因,上面計(jì)算的概率總和可能為0
????????//會(huì)出現(xiàn)經(jīng)過上述操作,沒有城市被選擇出來
????????//出現(xiàn)這種情況,就把第一個(gè)沒去過的城市作為返回結(jié)果
????????
????????//題外話:剛開始看的時(shí)候,下面這段代碼困惑了我很長(zhǎng)時(shí)間,想不通為何要有這段代碼,后來才搞清楚。
????????if?(nSelectedCity?==?-1)
????????{
????????????????for?(int?i?=?0;?i? ??
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????5710??2011-06-15?16:11??ant_C#\ant_C\ant.cs
?????文件???????2044??2011-06-15?16:35??ant_C#\ant_C\ant_C.csproj
?????文件????????704??2011-06-15?16:35??ant_C#\ant_C\AO.cs
?????文件???????5632??2005-11-11?22:25??ant_C#\ant_C\bin\Release\ant_C.vshost.exe
?????文件???????2419??2011-06-15?16:35??ant_C#\ant_C\Common.cs
?????文件???????1181??2011-06-11?10:04??ant_C#\ant_C\Properties\AssemblyInfo.cs
?????文件???????5029??2011-06-15?16:56??ant_C#\ant_C\tsp.cs
?????文件????????398??2011-06-11?11:23??ant_C#\ant_C\ve-42C.tmp
?????文件????????904??2011-06-11?10:04??ant_C#\ant_C.sln
????..A..H.?????13312??2011-06-15?17:00??ant_C#\ant_C.suo
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\obj\Debug\TempPE
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\obj\Release\TempPE
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\bin\Debug
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\bin\Release
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\obj\Debug
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\obj\Release
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\bin
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C\obj
?????目錄??????????0??2011-06-11?10:04??ant_C#\ant_C\Properties
?????目錄??????????0??2011-06-15?17:00??ant_C#\ant_C
?????目錄??????????0??2011-06-11?10:04??ant_C#
-----------?---------??----------?-----??----
????????????????37333????????????????????21
評(píng)論
共有 條評(píng)論