• 沒有找到結果。

未來研究方向

在文檔中 中 華 大 學 (頁 55-81)

第五章 結論與建議

第二節 未來研究方向

本研究主要是針對逆物流回收路徑做為探討,逆物流依然存在著許多的問題,期 望後續研究能針對以下幾點以探討。

1. 結合實務:實際上與棧板租賃產業密切的合作,取得較多的真實的數據,使本研

究所提出的逆物流路經規劃更佳準確且完整。

2. 棧板於貨車內排版:本研究在於探討路徑回收規劃,並未考量到貨車裝載棧板的

情況,未來可以結合棧板堆疊 3D 排版與本研究之路徑排程之方法,做排程時考 量到回收路徑與棧板裝載排版之研究,期望能達車輛能夠最有效率的裝載棧板。

3. 改善逆物流資訊取得問題:對於逆物流產業而言,回收績效最大的問題在於回收

資訊的取得,因此可以藉由導入 RFID 技術於棧板回收作業。透過 RFID 電子標 籤嵌入棧板,並且裝設 UHF 掃描裝置,獲得棧板的狀況及數量。業者對於棧板 回收、存貨管理、使用周轉率能更有效掌握決策資訊。

參考文獻

吳永裕(2005)。鄰避設施之廠址選擇及車輛途程問題。未出版之碩士論文,國立雲林 科技大學工業工程與管理研究所,雲林縣。

林正章(2001)。運輸網路分析。台北市:五南圖書出版有限公司。

林豐澤(2005)。演化式計算下篇:基因演算法以及三種應用實例。智慧科技與應用統 計學報,3(1),29-56。

許紋綺、林淑萍、陳相羽、洪華珮、陳君涵、李婕漪(2005 年 6 月)。逆物流途程 最佳化規劃-以醫療產業之廢棄物回收為例,第三屆管理思維與實務學術研討會,

台北:銘傳大學。

游文松(2004)。公路客運人員與車輛排班之研究。未出版之碩士論文,中華大學科技 管理研究所,新竹市。

劉大銘,呂映皚,林聖翔,鄭文忠(2007 年 11 月)。多目標基因演算法於二進制編碼 與實數編碼之比較,中國機械工程學會第二十四屆全國學術研討會,桃園:中原 大學。

鄧孙佑(2001)。求解醫院運輸部門運輸中心個數最佳化之研究。未出版之碩士論文,

國立成功大學工業管理科學研究所,台南市。

蘇文清(2004)。軟時窗限制下探討同時正逆向物流之車輛途程問題。未出版之碩士論 文,國立中央大學土木工程研究所,桃園縣。

Aras, N., Aksen, D., & Tugrul Tekin, M. (2010). Selective multi-depot vehicle routing problem with pricing. Transportation Research, 19(5), 866-884.

Bodin L. D., Assad B. G., A., Ball M. (1983). Routing and scheduling of vehicles and crews. Computers & Operations Research, 10(02), 63-21.

Buckles, B. P., Petry, F. E., & Kuester, R. L. (1990, November). Schema survival rates and heuristic search in genetic algorithms. Paper presented at the Tools for Artificial Intelligence, Herndon, VA.

Cheng, Y. H, & Lee, F. (2010). Outsourcing reverse logistics of high-tech manufacturing firms by using a systematic decision-making approach: TFT-LCD sector in Taiwan.

Industrial Marketing Management, 39(7), 1111-1119.

Christofides, N. (1976). Worst-case analysis of a new heuristic for the traveling salesman problem. SIAM Journal on Computing, 6(3), 563-581.

Fisher, M. L. (1995). Vehicle routing. Handbooks in Operations Research & Management Science, 8, 1-33.

Goldberg, D. E. (1989). Genetic Algorithms in Search, Optimization, and Machine Learning. Boston: Addison-Wesley Longman.

Kim, H., Yang, J., & Lee, K.D. (2009). Vehicle routing in reverse logistics for recycling end-of-life consumer electronic goods in South Korea. Transportation Research Part D: Transport and Environment, 14(5), 291-299.

Krumwiede, D. W. & Sheu, C. (2002). A model for reverse logistics entry by third-party providers. Omega, 30(5), 325-333.

Laporte, G. (1992). The vehicle routing problem: An overview of exact and approximate algorithms. European Journal of Operational Research, 59(3), 345-358.

Lee, C. K. M. & Chan, T. M. (2009). Development of RFID-based reverse logistics system.

Expert Systems with Applications: An International Journal, 36(5), 9299-9307.

Meyer, H. (1999). Many happy returns. Journal of Family Business Strategy, 20, 27-31.

Minahan, T. (1998). Manufacturers take aim at end of the supply chain. Purchasing, 124, 111-124.

Min, H. & Ko, H. J. (2008). The dynamic design of a reverse logistics network from the perspective of third-party logistics service providers. International Journal of Production Economics, 113(1), 176-192.

Rosen, C. (2001). Ready for returns. Information week, 819, 27-31.

Ray, C. D. M., Judd, H., & Bruce N. (2006). Supply-chain system costs of alternative grocery industry pallet systems. Forest Products Journal, 56(10), 52-57.

Stock, J. R. (1992). Reverse logistics. Oak Brook Illinois: Council of Logistics Management, 1-10.

附錄 A 路徑成本

回收據點

回 收 據 點

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 0 0 13 21 12 11 31 7 24 14 27 17 22 26 17 18 26 6 21 31 18 12 23 18 23 18 33 29 18 14 12 10 15 19 8 20 14 25 13 29 14 6 11 20 14 22 12 20 28 22 23 18 1 13 0 18 15 19 26 19 26 18 34 12 16 16 7 12 3 13 2 17 29 17 30 26 9 15 18 31 23 12 22 27 11 7 40 19 20 22 13 22 21 26 23 13 32 21 16 15 24 29 24 25 2 21 18 0 21 21 24 22 9 17 15 20 21 16 19 24 32 30 22 24 18 6 28 20 21 15 18 24 33 28 30 22 30 18 25 13 24 23 17 17 20 16 28 26 14 23 23 21 21 17 17 26 3 12 15 21 0 19 13 16 17 20 10 20 21 26 21 26 19 18 34 26 13 21 17 33 14 18 29 13 25 24 19 33 12 17 24 29 18 11 16 25 16 23 19 27 26 17 30 11 25 24 26 24 4 11 19 21 19 0 21 22 3 7 28 31 24 28 9 24 24 14 23 18 15 13 19 12 25 28 26 25 27 15 14 11 20 28 30 34 13 14 28 24 24 34 17 20 26 27 30 25 18 18 20 15 5 31 26 24 13 21 0 29 7 9 20 29 25 21 17 20 16 14 20 7 25 13 11 29 22 12 22 21 11 21 29 12 17 22 33 28 4 16 42 20 6 26 20 22 16 10 20 20 29 3 11 25 6 7 19 22 16 22 29 0 19 17 23 8 18 16 24 13 17 27 7 27 29 19 20 12 25 24 9 25 6 27 30 15 22 27 14 23 31 25 20 22 31 18 18 18 29 9 17 22 25 3 17 27 7 24 26 9 17 3 7 19 0 23 30 28 22 16 15 25 15 22 13 35 27 22 15 23 22 22 17 29 12 23 22 22 17 22 14 16 23 18 13 29 19 32 9 13 18 7 19 24 29 24 21 16 8 14 18 17 20 7 9 17 23 0 9 18 22 23 11 27 7 16 20 12 17 20 9 25 15 22 31 31 14 9 13 21 26 12 27 29 23 23 17 19 17 9 17 22 28 10 18 7 20 27 16 21 9 27 34 15 10 28 20 23 30 9 0 11 20 22 19 7 14 21 33 14 29 18 14 24 16 20 32 19 21 16 22 14 21 7 22 25 18 23 18 36 18 22 8 26 14 20 29 15 14 25 21 24 10 17 12 20 20 31 29 8 28 18 11 0 15 31 29 13 13 21 10 15 19 8 17 29 9 2 12 29 21 29 21 20 20 24 19 21 22 5 17 32 26 18 20 19 14 27 13 17 17 22 15 10 11 22 16 21 21 24 25 18 22 22 20 15 0 18 17 14 19 17 37 24 30 22 23 12 15 22 15 46 16 28 16 17 19 9 23 34 23 15 8 28 18 26 20 24 8 19 8 20 33 23 13 7 12 26 16 16 26 28 21 16 16 23 22 31 18 0 12 30 17 24 38 7 17 7 24 24 34 23 19 19 32 25 23 28 17 16 34 22 14 28 21 17 29 28 30 8 24 12 12 16 32 22 23 21 13 17 7 19 21 9 17 24 15 11 19 29 17 12 0 29 27 16 17 24 7 18 20 13 12 2 24 12 12 19 21 30 20 21 20 19 18 16 32 39 19 13 26 12 18 21 32 23 12 14 21 21 14 18 12 24 26 24 20 13 25 27 7 13 14 30 29 0 11 27 24 21 12 27 14 27 19 20 37 31 16 11 19 25 20 25 23 16 32 21 16 42 19 22 26 16 17 19 36 22 30 12 23 22 15 26 3 32 19 24 16 17 15 7 14 13 19 17 27 11 0 28 15 35 28 21 13 25 33 26 13 18 10 10 17 17 20 15 17 22 18 23 11 15 28 11 39 24 13 21 6 18 23 9 32 21 16 6 13 30 18 14 14 27 22 16 21 21 17 24 16 27 28 0 30 28 16 22 22 33 24 18 21 18 14 21 10 16 12 20 20 8 24 30 15 28 29 26 18 28 24 23 17 15 17 17 26 19 17 21 2 22 34 23 20 7 13 20 33 10 37 38 17 24 15 30 0 16 26 20 29 24 7 19 20 26 30 19 13 30 19 25 15 28 31 11 20 27 21 11 19 25 12 22 14 15 29 16 24 23 18 31 17 24 26 18 7 27 35 12 14 15 24 7 24 21 35 28 16 0 17 27 34 25 21 9 15 25 21 26 21 4 25 16 24 13 9 16 6 2 18 23 12 17 20 17 24 11 7 31 20 23 19 18 29 18 13 15 25 29 27 17 29 19 30 17 7 12 28 16 26 17 0 18 24 13 15 11 14 11 36 18 16 17 19 31 9 37 14 23 7 27 25 26 32 22 11 16 20 18 20 20 21 6 20 12 17 6 21 13 13 19 22 20 18 8 22 7 18 27 21 22 20 27 18 0 23 28 28 23 11 26 23 11 22 27 22 12 23 17 21 24 33 27 21 23 16 15 22 24 19 25 11 25 29 21

回 收 據 點

21 23 30 28 17 19 11 20 15 9 14 17 23 24 20 14 13 22 29 34 24 23 0 11 30 18 17 15 18 21 24 28 26 13 34 27 22 18 24 20 14 15 14 7 21 25 30 35 16 25 27 21 22 18 26 20 33 12 29 12 23 25 24 29 12 24 13 27 25 33 24 25 13 28 11 0 19 12 17 7 25 20 27 15 27 23 30 17 26 18 31 15 13 21 21 32 31 12 31 23 20 27 14 19 23 23 9 21 14 25 22 25 22 15 16 9 15 34 12 19 33 24 7 21 15 28 30 19 0 17 27 34 22 18 17 17 26 22 18 28 33 25 23 21 1 19 28 17 21 31 31 19 19 14 20 18 24 18 15 15 18 28 12 24 22 22 20 2 22 23 2 20 26 18 19 9 11 23 18 12 17 0 22 11 27 23 15 27 26 19 24 26 22 18 19 9 23 2 24 32 23 14 9 19 24 32 13 21 25 33 18 18 29 26 22 9 17 31 32 12 15 19 24 37 13 21 20 15 14 11 17 17 27 22 0 11 23 17 17 21 24 21 26 13 8 31 29 30 16 16 24 23 24 16 16 24 18 27 11 30 26 29 31 24 13 25 21 25 29 31 19 29 46 19 12 31 18 18 26 25 11 26 15 7 34 11 11 0 22 20 16 20 23 23 26 24 9 28 23 19 13 20 37 22 12 23 22 10 26 17 19 24 27 18 23 33 25 27 11 6 12 14 21 21 16 32 12 16 10 14 30 21 36 23 18 25 22 27 23 22 0 14 17 17 31 12 0 23 21 30 19 15 27 11 7 24 7 20 29 19 23 9 26 34 28 14 12 28 24 15 21 27 23 9 16 29 28 25 19 11 10 21 19 26 18 11 21 20 18 23 17 20 14 0 18 12 16 33 26 27 26 12 29 21 11 31 19 31 20 22 10 40 11 23 16 1 29 12 22 30 19 14 29 30 22 13 22 21 16 23 21 19 17 10 13 21 16 22 24 27 17 15 17 16 17 18 0 13 16 38 20 10 27 18 9 19 19 24 20 16 10 28 15 25 13 14 20 23 30 10 27 22 33 11 12 15 22 21 14 20 17 28 30 25 17 16 30 4 17 27 28 15 17 27 21 20 17 12 13 0 18 21 27 27 23 17 27 19 23 22 20 25 14 18 31 21 10 29 27 17 31 15 11 30 12 20 17 22 17 26 21 20 19 17 20 20 20 12 19 25 19 22 26 27 26 26 24 23 31 16 16 18 0 21 13 19 9 28 19 21 5 10 30 33 18 34 28 15 17 21 20 21 32 19 7 18 17 28 22 27 22 12 7 24 9 16 21 25 15 20 25 16 31 12 13 23 22 19 21 23 12 33 38 21 21 0 21 32 26 21 23 19 26 29 16 14 20 14 26 17 39 20 28 22 33 8 40 25 24 30 33 14 14 27 22 19 23 34 20 23 17 20 15 24 9 23 34 30 18 24 26 26 0 26 20 27 13 21 0 22 9 21 25 18 25 24 12 10 22 14 26 23 12 12 19 17 34 20 19 13 29 34 28 23 16 29 25 21 34 22 19 16 22 8 28 13 37 17 27 17 28 26 13 24 23 27 10 27 19 32 22 0 7 21 28 24 30 30 13 19 10 26 17 25 12 23 19 18 35 14 20 24 18 13 4 31 23 23 18 22 23 14 18 32 18 24 31 9 14 21 22 26 33 22 8 9 21 26 27 23 9 26 9 7 0 26 24 15 17 9 11 22 21 9 19 12 3 30 21 20 36 25 22 23 11 14 16 25 18 23 23 5 15 28 16 21 23 30 11 16 23 24 18 18 25 18 31 28 30 12 18 17 28 21 21 21 26 0 25 22 20 21 19 12 23 20 13 16 19 26 6 27 37 13 13 17 16 28 42 20 13 17 18 17 8 21 32 16 11 15 20 6 7 33 24 31 23 19 29 23 19 29 9 27 19 23 25 28 24 25 0 23 22 14 30 18 23 21 15 25 12 22 12 23 38 29 22 17 25 24 20 22 29 19 36 32 28 17 39 42 15 28 27 2 27 27 20 15 21 9 30 19 15 21 19 19 21 19 18 24 15 22 23 0 19 28 26 18 19 32 21 22 17 26 12 23 39 14 21 20 16 24 6 31 19 17 18 26 18 29 19 19 28 29 21 18 25 21 14 13 1 23 16 13 27 11 19 23 5 26 25 30 17 20 22 19 0 15 24 30 21 26 14 27 17 21 34 28 40 6 26 16 23 34 26 18 32 9 22 18 26 28 13 22 11 26 11 23 26 23 15 21 19 2 16 20 11 31 24 22 10 29 24 30 9 21 14 28 15 0 19 13 17 28 15 22 23 8 8 34 41 11 23 28 19 17 20 18 9 17 8 20 20 30 26 26 39 18 19 12 32 16 14 21 28 24 24 37 7 19 20 20 30 16 12 13 11 19 30 26 24 19 0 28 15 24 25 19 21 27 21 28 42 20 13 26 27 20 22 18 13 22 26 19 24 8 12 16 24 28 25 17 22 15 7 32 17 32 23 22 24 31 16 25 33 14 10 19 22 12 18 18 30 13 28 0 12 10 27 20 27 20 8 12 43 14 32 14 26 26 16 29 18 28 14 14 8 24 18 17 13 24 12 20 11 22 21 31 21 23 24 12 7 20 10 14 18 20 22 10 21 23 23 19 21 17 15 12 0 21 15 19 26 10 19 25 44 22 21 23 17 27 10 9 7 10 20 27 19 12 21 19 21 23 22 17 16 24 25 12 31 14 16 23 20 22 28 18 34 14 14 26 9 20 21 32 26 28 24 10 21 0 23 14 24 31 19 14 45 12 16 23 30 30 20 17 19 18 29 13 8 12 32 36 6 17 14 24 20 19 30 31 31 9 16 22 29 10 15 31 28 26 26 17 19 13 15 21 14 15 25 27 15 23 0 31 8 19 17 20 46 20 15 21 11 25 20 22 24 7 15 17 20 16 23 22 18 15 15 11 18 25 35 23 19 19 24 10 19 40 25 21 15 17 23 25 12 16 25 22 27 22 19 20 19 14 31 0 39 21 17 26

回 收 據 點

47 28 24 21 25 18 29 25 29 20 14 17 33 32 12 30 23 17 29 7 20 11 16 20 19 24 18 26 23 11 13 10 17 39 12 12 3 19 12 17 17 23 21 27 26 24 8 39 0 16 32 18 48 22 29 17 24 18 3 3 24 27 25 22 23 22 14 12 9 17 16 31 20 25 25 27 14 32 27 17 9 23 14 29 21 20 12 23 30 26 22 26 21 8 27 20 10 31 19 21 16 0 21 32 49 23 24 17 26 20 11 17 21 16 21 15 13 23 21 23 32 26 24 20 21 29 27 14 20 13 11 19 26 16 20 27 20 28 19 19 21 6 12 12 34 8 21 8 19 19 17 17 32 21 0 24 50 18 25 26 24 15 25 27 16 21 24 10 7 21 21 22 21 19 23 23 6 21 21 19 18 21 30 24 34 1 23 17 21 22 17 18 20 27 23 23 28 34 28 12 25 14 20 26 18 32 24 0

附錄 B 多目標基因演算法程式碼

一、宣告

int[][] init_buffer = new int[12][];

private double[,] g_init_fitness = new double[10, 4];

int[][] init_buffer2 = new int[12][];

private double[,] g_init_fitness2 = new double[10, 4];

private double[,] g_fitness2 = new double[10, 4];

int[][] jaggedArray = new int[12][];

int[][] g_B_jaggedArray = new int[12][];

private double[,] g_Path = new double[52, 52];

double g_dist;

private double[] g_recycle = new double[52];

private double[] g_numrecycle = new double[52];

int epoch = 0;

private double[,] g_fitness = new double[10, 4];

bool switch_readtext=true;

string buffer_chrom;

int epoch_switch = 0;

int[][] best_chrom = new int[10][];

private double[,] g_best_fitness = new double[10, 4];

int[] chrom1 = new int[52];

int[] chrom2 = new int[52];

int g_stoprule=0;

二、主程式

private void run_Click(object sender, EventArgs e) {

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

sw.Reset();//碼表歸零 sw.Start();//碼表開始計時 if (switch_readtext == true) {

readtxt_path();//---讀取 txt--- switch_readtext = false;

Initial_path();//---初始路徑--- }

do{

epoch_switch++;

epoch++; //世代

cal_fitness(); //計算這次的適應值 //---B 族群--- 隨機產生交配用 Initial_path_B();

cal_fitness_b();

sort_chrom(); //排序 越好的往上放 sort_chrom_b();

//---ga 作業--- reproduction(); // 複製

mutation(); //突變

//---清除超出限制染色體--- clear_Failure();

save_bestfitness();

show_reselt();

} while (epoch_switch != Convert.ToInt32(run_epoch.Text) &&

g_stoprule!=Convert.ToInt32(stop_rule2.Text));

epoch_switch = 0;

sw.Stop();//碼錶停止

string result1 = sw.Elapsed.TotalSeconds.ToString();

label17.Text = result1; //傳出計算時間

label19.Text = epoch.ToString(); //傳出世代數 }

二、初始路徑

public void Initial_path()

{

int rnmin = 5;

int rnmax = 52;

for (int i = 0; i < 12; i++)

{

jaggedArray[i] = new int[52];

init_buffer[i] = new int[52];

}

for (int k = 0; k < 10; k++)

{

double l_buffer_fitness = 0;

int l_buffer_site = 0;

for (int i = 0; i < 10; i++)

{

chrom1 = router(num_rn(rnmin, rnmax));

limit_cost(); //超出限制的換掉 limit_load_function(); //超出限制的換掉

Array.Resize(ref init_buffer[i], chrom1.Length);

Array.Copy(chrom1, init_buffer[i], chrom1.Length);

Array.Resize(ref init_buffer[i], chrom1.Length);

}

cal_fitness_single(); //計算這次產生的fitness

for (int i = 0; i < 8; i++)

{

if (l_buffer_fitness < g_init_fitness[i, 3]) {

l_buffer_fitness = g_init_fitness[i, 3];

l_buffer_site = i;

} }

Array.Copy(init_buffer[l_buffer_site], jaggedArray[k], init_buffer[l_buffer_site].Length);

Array.Resize(ref jaggedArray[k], init_buffer[l_buffer_site].Length);

public int[] router(int rand1)

{

Random ro = new Random(Guid.NewGuid().GetHashCode());

string msg = "路徑 ";

int r = 0, i, j;

int[] num = new int[52];

int[] l_router = new int[rand1];

int[] l_router2 = new int[rand1];

int[] router = new int[52];

for (i = 1; i <50; i++) { num[i] = i; }

for (j = 1; j < 50; j++)

{

r = ro.Next(j, 50);

router[j] = num[r];

num[r] = num[j];

num[j] = r;

}

Array.Copy(router, l_router, rand1);

l_router[l_router.Length - 1] = 0;

for (int k = 0; k < l_router.Length; k++) {

msg = msg + l_router[k];

}

Array.Copy(l_router, l_router2, l_router.Length);

return l_router2;

}

public int num_rn(int min, int max) //1.取1~10亂數決定路徑長度 {

Random Rnd = new Random(Guid.NewGuid().GetHashCode());

int len = 0;

for (int k = 0; k < 10; k++)

{

len = Rnd.Next(min, max);

}

min = len;

return min;

}

三、計算適應度函數 public void cal_fitness()

{

int[,] path = new int[50, 50];

int a = 0, b = 0;

double calbuffer = 0;

//---路徑成本--- for (int i = 0; i < 10; i++)

for (int k = 0; k < jaggedArray[i].Length - 1; k++) {

a = jaggedArray[i][k];

b = jaggedArray[i][k + 1];

calbuffer = calbuffer + g_Path[a, b];

}

g_fitness[i, 0] = calbuffer;

calbuffer = 0;

}

//---回收量--- double numrecycle = 0;

int nua1;

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < jaggedArray[i].Length - 1; j++) {

nua1 = jaggedArray[i][j];

numrecycle = numrecycle + g_numrecycle[nua1];

}

g_fitness[i, 1] = numrecycle;

numrecycle = 0;

nua1 = 0;

}

//---需求吻合度--- double recycle = 0;

int a1;

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < jaggedArray[i].Length - 1; j++)

{

a1 = jaggedArray[i][j];

recycle = recycle + g_recycle[a1];

}

g_fitness[i, 2] = recycle;

a1 = 0;

recycle = 0;

}

for (int i = 0; i < 10; i++) {

for (int j = 0; j < jaggedArray[i].Length - 1; j++) {

g_fitness[i, 3] = (g_fitness[i, 1] * Convert.ToDouble(obj2w.Text)) + (g_fitness[i, 2] * Convert.ToDouble(obj3w.Text)) - (g_fitness[i, 0] *

Convert.ToDouble(obj1w.Text));

} } }

三、排序染色體

public void sort_chrom() {

double[,] temp_fitness = new double[1, 4];

for (int m = 0; m <9 ; m++)

{

for (int i = 0; i < 9; i++)

{

if (g_fitness[i, 3] < g_fitness[i + 1, 3])

{

Array.Resize(ref temp_chrom, jaggedArray[i].Length);

Array.Copy(jaggedArray[i], temp_chrom, jaggedArray[i].Length);

Array.Resize(ref jaggedArray[i], jaggedArray[i + 1].Length);

Array.Copy(jaggedArray[i + 1], jaggedArray[i], jaggedArray[i].Length);

Array.Resize(ref jaggedArray[i + 1], temp_chrom.Length);

Array.Copy(temp_chrom, jaggedArray[i + 1], temp_chrom.Length);

for (int l = 0; l < 4; l++) {

temp_fitness[0,l]=g_fitness[i, l];

}

for (int l = 0; l < 4; l++)

{

g_fitness[i, l] = g_fitness[i+1, l];

}

for (int l = 0; l < 4; l++) {

g_fitness[i+1, l] = temp_fitness[0,l];

} } } } }

四、複製

public void reproduction() {

int[][] l_buffer_chrosmArray = new int[12][];

for (int i = 0; i < 12; i++) {

l_buffer_chrosmArray[i] = new int[12];

}

for (int i = 0; i < 5; i++) {

Array.Resize(ref l_buffer_chrosmArray[i], jaggedArray[i].Length);

Array.Copy(jaggedArray[i], l_buffer_chrosmArray[i], jaggedArray[i].Length);

} int a = 0;

for (int i = 5; i < 10; i++) {

Array.Resize(ref l_buffer_chrosmArray[i], g_B_jaggedArray[a].Length);

Array.Copy(g_B_jaggedArray[a], l_buffer_chrosmArray[i], g_B_jaggedArray[a].Length);

}

for (int i = 0; i < 10; i++)

{

Array.Resize(ref jaggedArray[i], l_buffer_chrosmArray[i].Length);

Array.Copy(l_buffer_chrosmArray[i], jaggedArray[i],

l_buffer_chrosmArray[i].Length);

}

int[][] l_temp = new int[10][];

int b = 0;

int c = 5;

for (int i = 0; i < 10; i = i+2)

{

l_temp[i] = new int[jaggedArray[b].Length];

Array.Copy(jaggedArray[b], l_temp[i], jaggedArray[b].Length);

b++;

}

for (int i = 1; i < 10; i = i + 2) {

l_temp[i] = new int[jaggedArray[c].Length];

Array.Copy(jaggedArray[c], l_temp[i], jaggedArray[c].Length);

c++;

}

Array.Copy(l_temp, jaggedArray, l_temp.Length);

}

五、交配

public void crossover()

{

Random rn = new Random();

double rndoulbe =rn.NextDouble();

int [,]site_array = new int[10, 2];

if (rndoulbe < Convert.ToDouble(text_crossover.Text)) //交配機率 {

int rnchroms_site =0;

int rnchroms_len=0;

for (int i = 0; i < jaggedArray.Length; i++) {

int[] temp_chrosom = new int[jaggedArray[i].Length - 2];

Array.Copy(jaggedArray[i], 1, temp_chrosom, 0, jaggedArray[i].Length - 2);

Array.Resize(ref jaggedArray[i], temp_chrosom.Length);

Array.Copy(temp_chrosom, 0, jaggedArray[i], 0, temp_chrosom.Length);

}

for (int i = 0; i < 9; i=i+2) {

int rnlen = jaggedArray[i].Length - 3;

int m = num_rn(1, rnlen);

rnchroms_site = num_rn(1, jaggedArray[i].Length-1);

rnchroms_len = num_rn(1, jaggedArray[i].Length - rnchroms_site); //PMX交配長度 int[] temp1 = new int[jaggedArray[i].Length];

if (jaggedArray[i+1].Length < jaggedArray[i].Length)

{

rnchroms_site = num_rn(1, jaggedArray[i+1].Length-1);

rnchroms_len = num_rn(1, jaggedArray[i+1].Length - rnchroms_site);

}

Array.Copy(jaggedArray[i], temp1, jaggedArray[i].Length);

Array.Copy(jaggedArray[i + 1], rnchroms_site, jaggedArray[i], rnchroms_site,

rnchroms_len);

Array.Copy(temp1, rnchroms_site, jaggedArray[i + 1], rnchroms_site, rnchroms_len);

site_array[i,0] = rnchroms_site;

site_array[i, 1] = rnchroms_len;

site_array[i + 1, 0] = rnchroms_site;

site_array[i+1, 1] = rnchroms_len;

}

for (int i = 0; i < 10; i++) {

int[] testarr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9,

10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,3 7,38,39,40,41,42,43,44,45,46,47,48,49,50};

for (int j = 1; j < testarr.Length; j++) {

for (int k = 0; k < jaggedArray[i].Length; k++) {

if (j == jaggedArray[i][k]) {

testarr[j - 1] = 0;

break;

} } }

int[] arrtest2 = new int[testarr.Length];

int a = 0;

for (int j = 0; j < testarr.Length; j++)

{

if (testarr[j] != 0)

{

arrtest2[a] = testarr[j];

a++;

} }

Array.Copy(arrtest2, testarr, arrtest2.Length);

for (int j = 0; j < testarr.Length; j++)

{

if (testarr[j] == 0)

{

Array.Resize(ref testarr, j);

} }

int[] temp_rerange = new int[jaggedArray[i].Length];

Array.Copy(jaggedArray[i], site_array[i, 0], temp_rerange, site_array[i, 0], site_array[i, 1]);

{

jaggedArray[i][j] = 0;

} int b = 0;

for (int j = 0; j < jaggedArray[i].Length; j++)

{

for (int k = 0; k < jaggedArray[i].Length; k++)

{

if (temp_rerange[j] == jaggedArray[i][k])

{

if (temp_rerange[j] != 0 && jaggedArray[i][k] != 0)

{

jaggedArray[i][k] = testarr[b];

b++;

} } } }

Array.Copy(temp_rerange, site_array[i, 0], jaggedArray[i], site_array[i, 0],

site_array[i, 1]);

Array.Clear(temp_rerange, 0, temp_rerange.Length);

}

for (int i = 0; i < jaggedArray.Length; i++)

{

int[] temp_chrosom = new int[jaggedArray[i].Length + 2];

Array.Copy(jaggedArray[i], 0, temp_chrosom, 1, jaggedArray[i].Length);

Array.Resize(ref jaggedArray[i], temp_chrosom.Length);

Array.Copy(temp_chrosom, 0, jaggedArray[i], 0, temp_chrosom.Length);

} } }

六、突變

public void mutation()

{

Random rn = new Random();

double rndoulbe = rn.NextDouble();

if (rndoulbe <Convert.ToDouble(text_mutation.Text))

{

int temp;

for(int i=0;i<jaggedArray.Length;i++)

{

int rnvalue = num_rn(1,jaggedArray[i].Length-1);

int rnvalue2 = num_rn(1, jaggedArray[i].Length-1);

if (rnvalue > rnvalue2)

{

rnvalue2 = num_rn(1, rnvalue-rnvalue2);

}

temp = jaggedArray[i][rnvalue];

jaggedArray[i][rnvalue] = jaggedArray[i][rnvalue2];

jaggedArray[i][rnvalue2] = temp;

} }

七、清除超出限制的 public void clear_Failure()

{

int a = 0;

for (int i = 0; i < 10; i++)

{

if (g_fitness[i, 0] > Convert.ToDouble(text_Limit_load.Text)) {

Array.Resize(ref jaggedArray[i], g_B_jaggedArray[a].Length);

Array.Copy(g_B_jaggedArray[a], jaggedArray[i], g_B_jaggedArray[a].Length);

g_fitness[i, 0] = g_fitness2[a, 0];

a++;

} }

int b = 0;

for (int i = 0; i < 10; i++)

{

if (g_fitness[i, 1] > Convert.ToDouble(text_Limit_load.Text))

{

Array.Resize(ref jaggedArray[i], g_B_jaggedArray[b].Length);

Array.Copy(g_B_jaggedArray[b], jaggedArray[i], g_B_jaggedArray[b].Length);

g_fitness[i, 1] = g_fitness2[b, 1];

b++;

} } }

八、存放菁英解

public void save_bestfitness()

{

for(int i=0;i<10;i++)

{

if(g_fitness[i,3]>g_best_fitness[i,3])

{

Array.Resize(ref best_chrom[i], jaggedArray[i].Length);

Array.Copy(jaggedArray[i],best_chrom[i],jaggedArray[i].Length);

g_best_fitness[i, 0] = g_fitness[i, 0];

g_best_fitness[i,1]=g_fitness[i, 1] ; g_best_fitness[i, 2] = g_fitness[i, 2];

g_best_fitness[i,3]= g_fitness[i, 3];

g_stoprule=0;

} }

g_stoprule++;

}

九、顯示出計算結果 public void show_reselt()

listBox1.Items.Add("第" + epoch + "世代");

listBox1.Items.Add("目標1" + " " + "目標2" + " " + "目標3" + " "

+ "回收效益" + " " + "染色體");

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < jaggedArray[i].Length; j++)

{

buffer_chrom = buffer_chrom+" " + jaggedArray[i][j];

}

buffer_chrom = g_fitness[i, 0] + " " + g_fitness[i, 1] + " " + g_fitness[i, 2] + " " + g_fitness[i, 3] + " " + buffer_chrom;

listBox1.Items.Add(buffer_chrom);

buffer_chrom = "";

}

listBox1.Items.Add("");

listBox2.Items.Clear();

listBox2.Items.Add("B族");

listBox2.Items.Add("第" + epoch + "世代");

listBox2.Items.Add("目標1" + " " + "目標2" + " " + "目標3" + " "

+ "回收效益" + " " + "染色體");

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < g_B_jaggedArray[i].Length; j++)

{

buffer_chrom = buffer_chrom+ " " + g_B_jaggedArray[i][j];

}

buffer_chrom = g_fitness2[i, 0] + " " + g_fitness2[i, 1] + " " + g_fitness2[i, 2] + " " + g_fitness2[i, 3] + " " + buffer_chrom;

listBox2.Items.Add(buffer_chrom);

buffer_chrom = "";

}

listBox2.Items.Add("");

listBox3.Items.Clear();

//菁英解集合傳出 string l_bu_chrom = "";

string sym="";

listBox3.Items.Add("目標1" + " " + "目標2" + " " + "目標3" + " "

+ "回收效益" + " " + "染色體");

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < best_chrom[i].Length; j++)

{

l_bu_chrom = l_bu_chrom + sym + best_chrom[i][j];

sym = "→";

}

sym = "";

l_bu_chrom = g_best_fitness[i, 0] + " " + g_best_fitness[i, 1] + " " + g_best_fitness[i, 2] + " " + g_best_fitness[i, 3] + " " + l_bu_chrom;

listBox3.Items.Add(l_bu_chrom);

l_bu_chrom = "";

在文檔中 中 華 大 學 (頁 55-81)

相關文件