Re: [問題] GA演算法參數問題

看板Prob_Solve (計算數學 Problem Solving)作者 (!H45)時間14年前 (2010/02/22 23:02), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《tropical72 (藍影)》之銘言: : 各位先進好 : 關於 GA 演算法,近日我以 C/C++ 實做 : 有幾個觀念性問題想請教各位 : 在此先用以下假設: : 母體個數:100個 : 交配率 :0.5 : 突變率 :0.05 : 複製方式採用 輪盤式選擇 : 交配方式採用 單點交配 : (1) 使用輪盤式決定複製母體個數後, : 是否先將母體個數先丟到交配池中, : 再以機率方式決定 - : 該母體是否直接複製至子代或是與其它母體交配至子代 : (2) 交配或突變時的機率,是以個別機率計算,還是以整體機率計算? : 以交配而言,是每次都以 0.5 的機率算, : 還是要用 0.5*100 = 50 個個體會進行交配? 前者。 : (3) 整理以上,我暫寫以下虛擬碼請教各位先進 : population: 母體, : pool: 交配池 : child: 子代 : rate: 交配率 : // 母體有100個 : population[100]; : // 複製 每個母體 應複製之個數至交配池 : for(i=0; i<100; i++) copy(pool, population[i], cnt); : // 交配池中之母體進行 交配\複製 至下一代 - 方法一 : for(i=0; i<100; i++){ : if(Rand(0,1) > rate) Copy(child, pool[i]); // 沒中機率, 複製至子代 : else Crossover(child, pool[i], pool[rand()]); // 中機率, 交配至子代 ^ ^^^^^^ i 不能等於 rand() : } : // 交配池中之母體進行 交配\複製至下一代 - 方法二, 決定交配個數 : for(i=0; i<(int)(100*rate); i++) { : Crossover(child, pool[rand()], pool[rand()]); ^^^^^^ ^^^^^^ rand() 不能等於 rand() : } : for(i=0; i<100 - (int)(100*rate); i++){ : Copy(child, pool[rand()]; : } : 請問上面的 code 是否有問題? 突變到哪兒去了? : 交配或突變時應採用個別機率或是個數方式進行? 個別機率。 : 問題有些長,謝謝各位先進的細心指教,感激不盡 若是多維實數最佳化問題,建議找 CMAES 下載來用,效果更佳。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.235.24

02/22 23:05, , 1F
謝謝h大的建議, 補充一點, 我的虛擬碼的確沒寫好
02/22 23:05, 1F

02/22 23:06, , 2F
而造成誤會,下次會再加以注意,同時突變和選擇/複製
02/22 23:06, 2F

02/22 23:06, , 3F
問題一樣,都是機率問題,所以只有貼一個 code,
02/22 23:06, 3F

02/22 23:07, , 4F
再次感謝您的細心回覆與指教!!
02/22 23:07, 4F
文章代碼(AID): #1BWfnt9D (Prob_Solve)
文章代碼(AID): #1BWfnt9D (Prob_Solve)