作者H45 (!H45)
站内Prob_Solve
标题Re: [问题] GA演算法参数问题
时间Mon Feb 22 23:02:14 2010
※ 引述《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
1F:推 tropical72: 谢谢h大的建议, 补充一点, 我的虚拟码的确没写好 02/22 23:05
2F:→ tropical72:而造成误会,下次会再加以注意,同时突变和选择/复制 02/22 23:06
3F:→ tropical72:问题一样,都是机率问题,所以只有贴一个 code, 02/22 23:06
4F:→ tropical72:再次感谢您的细心回覆与指教!! 02/22 23:07