建模的是個bcube網(wǎng)絡(luò),是云計算中心中比較熱的網(wǎng)絡(luò)結(jié)構(gòu),具體的可以參照scholar.google.com
創(chuàng)新互聯(lián)建站是一家專業(yè)提供漣源企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為漣源眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。為了節(jié)省空間,我一度想采用uint8作為數(shù)據(jù)類型,因為數(shù)據(jù)量比較大,我自己以為這樣處理的時間會比較短,但是用tic toc計時后,double類型反而在運算的時候更快。
arryfun可以從一個矩陣中批量執(zhí)行指定的函數(shù)。
在最后我終于還是放棄了matlab,因為這次的課題目標(biāo)是速度,matlab實在太慢了,并且靈活度太低,想要整出個自定義的數(shù)據(jù)結(jié)構(gòu),或者自由的多線程,都很難(可能是我對matlab還不夠熟悉所致)。
相比之下,C++作為瑞士軍刀,可大可小,大有STL庫作支持,小則可對內(nèi)存每個字節(jié)作操作,寫出來其實也不慢。并且GA算法完全可以并行化,采用C++并行之后大幅度提高速度。matlab雖然有parfor,但是挺蛋疼的,限制太多。
因為課題的關(guān)鍵是速度,計時是必須的,為了能夠方便的計時,模仿matlab寫了tic和toc
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfFreq;
QueryPerformanceFrequency(&litmp);
dfFreq= (double)litmp.QuadPart;
#define tic
QueryPerformanceCounter(&litmp);
QPart1= litmp.QuadPart
#define toc
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
std::cout<<(QPart2-QPart1)/dfFreq<
這樣tic; fun(); toc;就能計算出時間來。
在多線程上,采用了std::thread類,據(jù)說這個類不太安全,大多推薦boost庫中的thread。但是GA中的多線程,不同線程之間完全分開,沒有公共內(nèi)存區(qū)域,不需要上鎖,不涉及安全問題,簡單起見就用std::thread即可。
std::thread t[TotalThreads];
for(int i=0;i
就簡單暴力的啟動線程,然后等待線程結(jié)束。
在洗牌和排序算法中,強(qiáng)大的STL庫提供了支持,分別是std::sort和std::random_shuffle
這里值得一提的是random_shuffle的效率并不高,在matlab中作同樣的shuffle需要0.6秒,而C++中需要1.6秒。在本項目中影響并不大,否則要考慮重寫。
先寫到這里