??xml version="1.0" encoding="utf-8" standalone="yes"?>色婷婷综合久久久久中文一区二区,久久综合狠狠综合久久97色,久久久亚洲AV波多野结衣http://www.shnenglu.com/twzheng/articles/21339.html谭文?/dc:creator>谭文?/author>Thu, 05 Apr 2007 10:39:00 GMThttp://www.shnenglu.com/twzheng/articles/21339.htmlhttp://www.shnenglu.com/twzheng/comments/21339.htmlhttp://www.shnenglu.com/twzheng/articles/21339.html#Feedback7http://www.shnenglu.com/twzheng/comments/commentRss/21339.htmlhttp://www.shnenglu.com/twzheng/services/trackbacks/21339.html

遗传法入门

                                      

遗传法

遗传法QGenetic Algorithm, GAQ是q几q发展v来的一U崭新的全局优化法?962q霍兰d(Holland)教授首次提出了GA法的思想Q它借用了仿真生物遗传学和自焉择机理Q通过自然选择、遗传、变异等作用机制Q实现各个个体的适应性的提高。从某种E度上说遗传法是对生物q化q程q行的数学方式仿真?/p>

q一点体C自然界中"物竞天择、适者生?q化q程。与自然界相|遗传法Ҏ解问题的本n一无所知,它所需要的仅是对算法所产生的每个染色体q行评h,把问题的解表C成染色体,q基于适应值来选择染色体,佉K应性好的染色体有更多的J殖Z。在法中也x以二q制~码的串。ƈ且,在执行遗传算法之前,l出一染色体Q也x假设解。然后,把这些假设解|于问题?#8220;环境”中,也即一个适应度函C来评仗ƈ按适者生存的原则Q从中选择适应环境的染色体q行复制, 淘汰低适应度的个体Q再通过交叉Q变异过E生更适应环境的新一代染色体。对q个新种进行下一轮进化,臛_最适合环境的倹{?/p>

遗传法已用于求解带有应用前景的一些问题,例如遗传E序设计、函C化、排序问题、h工神l网l、分cȝl、计机囑փ处理和机器hq动规划{?/p>

术语说明

׃遗传法是由q化论和遗传学机理而生的搜烦法Q所以在q个法中会用到很多生物遗传学知识,下面是我们将会用来的一些术语说明:

一、染色体(Chronmosome)

染色体又可以叫做基因型个?individuals),一定数量的个体l成了群?population),体中个体的数量叫做体大小?/p>

二、基?Gene)

基因是串中的元素Q基因用于表CZ体的特征。例如有一个串SQ?011Q则其中?Q?Q?Q?q?个元素分别称为基因。它们的值称为等位基?Alletes)?/p>

三、基因地?Locus)

基因地点在算法中表示一个基因在串中的位|称为基因位|?Gene Position)Q有时也U基因位。基因位|由串的左向双,例如在串 SQ?101 中,0的基因位|是3?/p>

四、基因特征?Gene Feature)

在用串表C整数时Q基因的特征g二进制数的权一_例如在串 S=1011 中,基因位置3中的1Q它的基因特征gؓ2Q基因位|?中的1Q它的基因特征gؓ8?/p>

五、适应?Fitness)

各个个体对环境的适应E度叫做适应?fitness)。ؓ了体现染色体的适应能力Q引入了寚w题中的每一个染色体都能q行度量的函敎ͼ叫适应度函? q个函数是计个体在体中被使用的概率?/p>

操作法

霍兰?Holland)教授最初提出的法也叫单遗传算法,单遗传算法的遗传操作主要有三U:选择(selection)、交?crossover)、变?mutation)q也是遗传算法中最常用的三U算法:

1Q选择(selection)

选择操作也叫复制操作Q从体中按个体的适应度函数值选择适应环境的个体。一般地_选择适应度高的个体繁D下一代的数目较多Q而适应度较的个体Q繁D下一代的数目较少,甚至被淘汰。最通常的实现方法是轮盘?roulette wheel)模型。oΣfi表示体的适应度gdQfi表示U群中第i个染色体的适应度|它被选择的概率正好ؓ光应度值所占䆾额fiQ?#931;fi。如下图表中的数据适应值dΣfi=6650,适应度ؓ2200变选择的可能ؓfiQ?#931;fi=2200/6650=0.394.


?. 轮盘赌模?/font>
 
Fitness | 2200 1800 1200 950 400 100
选择概率Q?/td> 3331 0.271 0.18 0.143 0.06 0.015
 

2Q交?Crossover)

交叉子被选中的两个个体的基因链按一定概率pcq行交叉Q从而生成两个新的个体,交叉位置pc是随机的。其中Pc是一个系l参数。根据问题的不同Q交叉又Z单点交叉子QSingle Point CrossoverQ、双点交叉算子(Two Point CrossoverQ、均匀交叉子 (Uniform Crossover)Q在此我们只讨论单点交叉的情c?/p>

单点交叉操作的简单方式是被选择出的两个个体S1和S2作ؓ父母个体Q将两者的部分基因码D行交换。假讑֦下两?位的个体Q?/p>
S1 1000  1111 S2 1110  1100

产生一个在1?之间的随机数cQ假如现在生的?Q将S1和S2的低二位交换QS1的高六位与S2的低六位l成C10001100Q这是S1和S2 的一个后代P1个体QS2的高六位与S1的低二位l成C11101111Q这是S1和S2的一个后代P2个体。其交换q程如下图所C:

Crossover 11110000 Crossover 11110000
S1 1000 1111 S2 1110 1100
P1 1000 1100 P2 1110 1111

3Q变?Mutation)

q是在选中的个体中Q将C体的基因铄各位按概率pmq行异向转化Q最单方式是改变串上某个位置数倹{对二进制编码来说将0?互换Q?变异?Q?变异??/p>

如下8位二q制~码Q?/p>
1 1 1 0 1 1 0 0

随机产生一??之间的数iQ假如现在k=6Q对从右往左的W?位进行变异操作,原来的1变ؓ0Q得到如下串Q?/p>
1 1 0 0 1 1 0 0

整个交叉变异q程如下图:


?. 交叉变异q程

 

4Q精׃?QElitismQ?/strong>

仅仅从生的子代中选择基因L造新的种可能会丢失掉上一代种中的很多信息。也是说当利用交叉和变异生新的一代时Q我们有很大的可能把在某个中间步骤中得到的最优解丢失。在此我们用精׃义(ElitismQ方法,在每一ơ生新的一代时Q我们首先把当前最优解原封不动的复制到新的一代中Q其他步骤不变。这样Q何时M生的一个最优解都可以存zd遗传法l束?/p>

上述各种子的实现是多种多样的,而且许多新的子正在不断地提出,以改qGA某些性能。比如选择法q有分均衡选择{等?/p>

遗传法的所需参数

说简单点遗传法是遍历搜烦I间或连接池Q从中找出最优的解。搜索空间中全部都是个体Q而群体ؓ搜烦I间的一个子集。ƈ不是所有被选择了的染色体都要进行交叉操作和变异操作Q而是以一定的概率q行Q一般在E序设计中交叉发生的概率要比变异发生的概率选取得大若干个数量。大部分遗传法的步骤都很类|怋用如下参敎ͼ

Fitness函数Q见上文介绍?/p>

FitnessthresholdQ适应度阀|Q适合度中的设定的阀|当最优个体的适应度达到给定的阀|或者最优个体的适应度和体适应度不再上升时(变化率ؓ?Q则法的P代过E收敛、算法结束。否则,用经q选择、交叉、变异所得到的新一代群体取代上一代群体,q返回到选择操作处l@环执行?/p>

PQ种的染色体L叫种规模,它对法的效率有明显的媄响,光度等于它包含的个体数量。太时难以求出最优解Q太大则增长收敛旉DE序q行旉ѝ对不同的问题可能有各自适合的种规模,通常U群规模?30 ?160?/p>

pcQ在循环中进行交叉操作所用到的概率。交叉概率(PcQ一般取0.6?.95之间的|Pc太小旉以向前搜索,太大则容易破坏高适应值的l构?/p>

PmQ变异概率,从个体群中生变异的概率Q变异概率一般取0.01?.03之间的值变异概率Pm太小旉以生新的基因结构,太大佉K传算法成了单U的随机搜烦?/p>

另一个系l参数是个体的长度,有定长和变长两种。它对算法的性能也有影响。由于GA是一个概率过E,所以每ơP代的情况是不一L,pȝ参数不同QP代情况也不同?/p>

遗传步骤

了解了上面的基本参数Q下面我们来看看遗传法的基本步骤?/p>

基本q程为:

  1. 对待解决问题q行~码,我们问题结构变换ؓ位串形式~码表示的过E叫~码Q而相反将位串形式~码表示变换为原问题l构的过E叫译码?
  2. 随机初始化群体P(0)Q?(p1, p2, … pn)Q?
  3. 计算体上每个个体的适应度?Fitness)
  4. 评估适应?对当前群体P(t)中每个个体Pi计算光应度F(Pi)Q适应度表CZ该个体的性能好坏
  5. 按由个体适应度值所军_的某个规则应用选择子产生中间代Pr(t)
  6. 依照Pc选择个体q行交叉操作
  7. 仿照Pm对繁D个体进行变异操?
  8. 没有满某种停止条gQ则转第3步,否则q入9
  9. 输出U群中适应度值最优的个体

E序的停止条件最单的有如下二U:完成了预先给定的q化代数则停止;U群中的最优个体在q箋若干代没有改q或q_适应度在q箋若干代基本没有改q时停止?/p>

Ҏ遗传法思想可以d如右图所C的单遗传算法框图:


?. 单遗传算法框?/font>
 

下面伪代码简单说明了遗传法操作q程Q?/p>
choose an intial population
For each h in population,compute Fitness(h)
While(max Fitness(h) < Fitnessthreshold)
do selection
do crossover
do mutation
update population
For each h in population,compute Fitness(h)
Return best Fitness

Robocode 说明

能有效实现遗传算法的应用例子有很多,像西z双陆棋、国际名模等{都是遗传程序设计学习的工具Q但?Robocode 有着其他几个无可比拟的优势:

  1. 它是Z面向对象语言 Java 开发,而遗传算法本w的思想也是存在l承{面向对象概念;
  2. Robocode 是一U基于游戏与~程语言之间的^収ͼ有一个充满竞技与乐的坦克战斗q_Q你能很快的通过与其他坦克机器比赛而测试自q遗传法Q?
  3. Robocode C?4000 个左叛_U策略的例子机器人可供你选择Q这些机器h以让我们模拟真实的遗传环境。而且很多代码可直接开放源代码供我们借鉴 Q?
  4. Robocode 是一个开源YӞ你可直接上Robocode控制器上加入自己的遗传特点,而加快遗传过E的收敛旉Q?
  5. Robocoe 是一个很Ҏ使用的机器h战斗仿真器,您在此^C创徏自己的坦克机器hQƈ与其它开发者开发的机器人竞技。以得分排名的方式判定优胜者。每?Robocode 参加者都要利?Java 语言元素创徏他或她的机器人,q样׃从初学者到高黑客的广大开发者都可以参与q一׃zd。如果您对Robocode不是很了解,请参?developerWorks |站 Java 技术专区文章:“重锤痛击 Robocode”Q?

?Robocode 中其实有很多U遗传算法方法来实现q化机器人,从全世界?Robocode 派中也发展几种比较成熟的方法,比如预设{略遗传、自开发解释语a遗传、遗传移动我们就q几U方法分别加以介l。由于遗传算法操作过E都cMQ所以前面二部分都是一些方法的介绍和部分例子讲解,后面部分会给Z用了遗传法的移动机器hZ子。在附录中,也提供了机器Z库中有关遗传法机器人的下蝲Q大家可参考?/p>






预设{略q化机器?/font>

Robocode 坦克机器人所有行为都M开如移动、射凅R扫描等基本操作。所以在此把q些基本操作所用到的策略分别进化如下编码:Ud{略move-strategy (MS), 子弹能量bullet-power-strategy (BPS), 雯扫描radar-strategy (RS), 和瞄准选择{略target- strategy (TS)。由于Robocode爱好者社的发展Q每一U基本操作都发展了很多比较成熟的{略Q所有在此我们直接在下面预先定义的这些策略如下表Q?/p>
MS BPS RS TS
random distance-based always-turn HeadOn
Linear light-fast target-focus Linear
circular Powerful-slow target-scope-focus Circular
Perpendicular Medium   nearest robot
arbitary hit-rate based   Log
anti gravity     Statistic
Stop     Angular
Bullet avoid     wave
wall avoid      
track      
Oscillators      

下面是基本移动策略的说明Q?/p>

  • RandomQ随机移动主要用来؜乱敌人的预测Q其最大的一个缺Ҏ有可能撞d其他机器?
  • LinearQ直U移?机器人做单一的直U行?
  • circularQ圆周移动,q种Ud是以某一点ؓ圆心Q不停的l圈
  • PerpendicularQ正Ҏ人移动,q是很多人采用的一U移动方式,q在敌h双Q?以随时调整与敌h的相对角
  • ArbitraryQQ意移?
  • AntiGravityQ假讑֜地有很多力点的反重力UdQ本Ҏ是模拟在重力Z用下Q物体Lq离重力劉K的点Q滑向重力势低的点,开始战场是一个^面然后生成一些势炚w力势大的势点的作用就像是一个山(h斥作用)Q其衰减pL与山的坡度对应。重力势的势点的作用就像是一个低P起吸引作用)Q其衰减pL与谷的坡度对应。这样本来的^面变得不q了Q从来物体沿着最陡的方向向下滑动
  • TrackQ跟t敌人,敌hUd到哪Q机器h也移动到哪,但是M敌h保持一定最佌避子弹距d角度
  • OscillatorsQ重复做一振荡Ud
  • Bullet avoidQ每当雷达觉察到敌h时有所动作。机器h保持与敌人成30度們֐角。自w成 90 度角静止q渐接近目标。如果机器h觉察到能量下降介?0.1 ?3.0 之间Q火力范_Q那么机器hq卛_换方向,向左或向右移动?
  • wall avoidQ这是一U自己的机器h不会被困在角落里或者不会撞墙的Ud方式

瞄准{略说明如下Q?/p>

  • HeadonQ正对瞄?
  • LinearQ直U瞄?
  • circularQ圆周瞄?
  • nearest robotQ接q机器h瞄准
  • LogQ保存每ơ开火记?
  • StatisticQ统计学瞄准Q分析所有打中及未打中的ơ数Q以其中扑և最高打中敌人的概率为准?
  • AngularQ找到最佌度瞄?
  • WaveQL形瞄准,子弹以L的方式进行探?

Robocode 行ؓ事g

坦克的主要都定义在一个主循环中,我们在程序中定义Z面四个策略定义四U战略如Move,Radar,Power,TargetQ当某一事g发生Q基于这个事件而定的行为就会触发。而每个战略中都有不同的行为处理方式。这些行为通过遗传法触发Q遗传算法将调用q些基本动作q搜索这些策略的最佳组合。基于这些基本动作将?224 (=4*11*4*3*8)U可能发生。在Robocode AdvancedRobot cM有如下的Ud函数Q?/p>

  • setAhead和aheadQ让机器人向前移动一定距?
  • setBack和backQ让机器人向后移动一定距?
  • setMaxTurnRateQ设|机器h最大的旋{速度
  • setMaxVelocityQ设|机器h最大的q动速度
  • setStop和stopQ停止移动或暂停机器人,q记住停止的位置
  • setResume和resumeQ重新开始移动停止的机器?
  • setTurnLeft和turnLeftQ向左旋转机器h
  • setTurnRight和turnRightQ向x转机器h

下面?doMove UdҎ中用部分程序代码:

RandomQ?/p>
switch(Math.random()*2) {
case 0Q?setTurnRight(Math.random()*90);
break;
case 1Q?setTurnLeft(Math.random()*90);
break; }
execute();

LinearQ?/p>
ahead(200);
setBack(200);

CircularQ?/p>
setTurnRight(1000);
setMaxVelocity(4);
ahead(1000);

anti gravityQ?/p>
 double forceX = 0;
double forceY = 0;
for (int i=0; i

q里我们用遗传算法来控制机器人移动位|。这些策略是Z下面几点Q机器hq位置、速度和方?Ҏ的位|(x,y坐标Q、速度、方位以及相对角;所有机器h和子弹位|,方位及速度;场地大小{参数?/p>

当上面的信息在下一回移动中使用ӞZ对坐标|Ҏq对坐标在Robocodep得到距离和角度。要惌Ud实现遗传必须要让它实现在U学习:所以我们的代码必须做下面几件事Q要有一个函数收集适应度|在Robocodeq行q程中要q用到遗传操作,遗传后代要在Robocodeq行中生,而不是事后由手写入代码?/p>

遗传操作

本例中遗传算法ؓ实现Ud用到两个cGA和MovePattern。此处的GA比较单主要完成数据和体的定义,以及q些定义的读写文件操作。基中包括如下参敎ͼ体大小、交叉概率、变异概率、精英概率(既告诉从当前体C一代中有多移动不需要改变)、方E式中用的加权pL大小Q它通过一个主循环完成MovePattern的封装。MovePatterncM实现交叉、变异方法等ҎQ完成移动模式操作。而所有的输出保存在一个vector函数当中。Vector函数拥有一对实数数l,一个用于计x坐标Q另一个用于计y坐标。通过对x,y坐标的计,从而得到距R角度等|q生相在Ud{略。如下,MovePattern包含三个参数Qgrad表示vector函数排列序Qinput卌C算法给出的输入~号Qrang是加权的范围?/p>
public class MovePatteren implements Comparable {
private int grad, input;
private double range;
protected double fitness=0;
protected double[] weightsX, weightsY;
… }

交叉操作Q每一个交叉操作执行如下步骤,先在交叉操作中生一个特征码。这个特征码是个0?之间的变量数l。有关交叉的基本原理可参考上面部分。最后通过遍历vector函数Q把相应的加权D行交叉操作?/p>
protected MovePatteren crossOver(MovePatteren mate, boolean[] maskx, boolean[] masky) {
double[] wx= new double[weightsX.length];
double[] wy= new double[weightsX.length];
for(int mask=0; mask <="" pre="" mask++)="" for(int="" g="0;" g

q里的变异操作比较简单。把加权范围内的随机数值去代替0到数l长之间的随机数q保存到Ud模式中。则完成整个数组的变异过E:

protected void mutate() {
weightsX[(int)(Math.random()*weightsX.length)]=Math.random()*range*2-range;
weightsY[(int)(Math.random()*weightsX.length)]=Math.random()*range*2-range;
}

从上面的例子我们知道了遗传算法的大概实现Q但q没有告诉我们这些组件是如何一起工作的。当Robocode开始时Q如果文件中没有数据Q所以系l会依照输入的策略随机生成一个移动模式,如果文g中有数据Q则加蝲q些数据。每一个移动模式在开始都会给Z一个适应度倹{当所有的Ud模式都接收到适应度|q完成各自的~号后,下面的操作将开始执行:

  1. Ҏ有的Ud模式依据它们的适应度D行分U处?
  2. 执行_英操作
  3. 执行交叉操作
  4. 应用变异操作
  5. 保存加权
  6. 法重新开?

适应度值在q行q算q程中由机器人程序不断调_以找到最优适应度?/p>

限于副其他的一些策略本文不与详l说明,上面所有提到的{略和行为程序都可在|上或IBM的开发杂志上扑ֈ成熟的讲解和例子机器人。有兴趣的朋友可以把q些{略都加入到自己的遗传算法中来。我们取体大小?0Q选择概率?.7Q交叉概率ؓ0.6Q变异概率ؓ0.3Q与Robocode部分例子机器人测试,l过150代后你会发现pȝ产生了很多有的{略。比如撞ȝ略,q些{略都不在我们定义的{略之中?/p>






中间解释E序q化机器?/font>

遗传法可被看做L基因l字W串。但是你必须军_q些字符所代表的意义,也就是说如何解释每一个基因组。最单的Ҏ是把每一个基因组视ؓjava代码Q编译ƈq行它们。但是这些程序编译都很困难,所以也有可能不能工作。Jacob Eisenstein设计了一U机器翻译语aTableRex来解册个问题。在java中,TableRex被用于进化和解释动行时的Robocode 机器人。通过试Q只要我把TableRex解释E序作ؓ文g攑օRobocode控制器目录中Q这些控制器׃d文gq开始战斗。TableRex是一些最适合遗传法的二q制~程。只要符合TableRexE序文法Q每个程序都能被解释?/p>

~码

下表中显CZTableRex~码l构Q它׃个行动作函数Q二个输入和一个输出组成。如?的?Q这是个布尔型的表达?#8220;?line4 于 90”Q这个结果会在最后一行输出布ؓ1的倹{?/p>
Function Input 1 Input 2 Output
1. Random ignore ignore 0,87
2. Divide Const_1 Const_2 0,5
3. Greater Than Line 1 Line 2 1
4. Normalize Angle Enemy bearing ignore -50
5. Absolute Value Line 4 ignore 50
6. Less Than Line 4 Const_90 1
7. And Line 6 Line 3 1
8. Multiply Const_10 Const_10 100
9. Less Than Enemy distance Line 8 0
10. And Line 9 Line 7 0
11. Multiply Line 10 Line 4 0
12 Output Turn gun left Line 11 0



]]>
þþþþŹƷ| þ÷׾Ʒ | þþƷֻоƷ66| 69Ʒþþþ9999| þˬˬƬAV鶹| þĻƷһ| ھƷþۺ88| žžƷ99þþ㽶| 99þþþþѿ| 99Ʒ99þþþþ97| ձѾþþþþþվ| þרƷ| 91޹˾þþƷ| 鶹avþavʢav| 99ȳ˾ƷѾþ| 㽶þavһ| þþþŮۺ| þþþþþAv| ˾þĻ| ȾþùŷһƷ| Ʒһþ| ޹ƷþõӰŷ| þþþþþۺϺݺۺ| Ƶþ| Ʒ99þþƷ| ݺݸɺݺݾþ| ƷŮþþþþ2018| þþþһ| ޹Ʒ˾þ| þ99Ʒ| Ʒþˬ| þùһ| һ㽶þֻ| һֻƴƬ99þ| þùƷ-Ʒ| þþþѿӰƬ| þþƷwwwˬ| ˾þˬ| ŷþþƷһcƬƬ| 99þ99þþƷƬ| Բľþþþþ|