游戏开发论坛

 找回密码
 立即注册
搜索
楼主: tczyp

用遗传算法解决较复杂的动作问题的小游戏程序(附源代

[复制链接]

4

主题

76

帖子

78

积分

注册会员

Rank: 2

积分
78
QQ
发表于 2005-6-20 10:05:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

谢谢你!分享成果!学习下!

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-20 12:51:00 | 显示全部楼层

Re: 用遗传算法解决较复杂的动作问题的小游戏程序(附源

这个发错了, 请下载下面的~~

sf_2005620125117.rar

104.61 KB, 下载次数:

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-20 12:59:00 | 显示全部楼层

Re: 用遗传算法解决较复杂的动作问题的小游戏程序(附源

恩,我现在把那个exe文件做成不需要动态链接库的, 上面的程序运行不了的话, 就用这个吧~~ [em16]

sf_2005620125917.rar

417.34 KB, 下载次数:

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2005-6-20 14:55:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

它没有计算往回走的路径吧?
如果是S形路线才能通过(我手动可以通过),它就投降了...

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-20 15:36:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

哦?你把那幅图的储存一下, 发给我研究研究......

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2005-6-20 18:01:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

比如:
---------------------------------------------
XXXXX
      XX      XXXXX
        XX           XX
          XXXXX      XX
                          XXX
                           XXXX
---------------------------------------------

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-20 18:11:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

人手能过计算机不能过?
虽然可能性不大, 但是也是有可能, 这是因为适应性函数的问题, 因为适应性函数的选择方向使到他陷入了"陷阱".
你可以这样试一试: 把参数设置里面的变异概率变得大一些, 人口数目调大一些, 这样进化的代数会多一些, 但是应该会走出你所设置的"陷阱"的,  那么就应该能走出去了(但是前提是有可能走得出去~~)

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-20 21:14:00 | 显示全部楼层

Re: 用遗传算法解决较复杂的动作问题的小游戏程序(附源

      应网友所求, 我下面简单的解释一下遗传算法的基本原理:
      既然叫遗传算法, 那么他肯定是模仿生物学中的遗传原理而来的。生物学中的遗传原理如何呢?就是从父方和母方各抽取一条基因,然后进行联会,进行基因变异,然后产生子代基因。那么子代这条基因就具备了(或者说是继承了)父母双方的一些性状,又会产生一些新的变异(当然变异不一定是好的,对于本来已经很适应的个体,变异所带来的往往是坏的影响)然后子代就会生活在这个世界上,进行优胜劣汰,然后又由优胜的子代产生孙代~~
     那么遗传算法是怎么样模仿生物学中的遗传算法的呢? 我就拿我这个程序来作为例子,首先,这是一个动作游戏,所以我们先要考虑他的基因如何编制,这是使用遗传算法很关键的一个步骤,这可步骤影响到算法解决问题的可行性和效率等问题。在这里我是这样设定的:把每个基因设定为两部分(呵呵,与之相对应,人类的染色体的每一个基因由4种碱基中的2种组成)第一部分为 动作部分就是用一个数字代表可做的5种动作之中的一种(呵呵,哪5种动作呢?聪明的你一定想到:向上,下,左,右加速,还有就是什么都不干~~)另外一部分就是重复该动作的时间~~
      当这个基因的形式确定下来之后我们就要考虑联会,变异的过程。这些动作都是由函数来完成的~~在这个程序里面,我就没有用上联会函数,就是说没用上基因交换,(这也有其中的理由,但是这里就不能一一细说了~~),这个程序里面用上几种基因变异的函数,比如时间变异函数,随机使到某基因相对应的动作的时间,动作变异函数,随机把某个动作作出变化~~等
     遗传算法就是把所有这些一起使用起来,首先就是随机产生一个父代,时间和动作都是随机的,然后让第一批人类(亚当和夏娃?)进入这个世界去生活,具体在游戏里面就是把这些基因,好像读取磁带那样一个一个动作读取出来,然后读取其时间,在物理环境里面演绎,最后有些就会随便拐了个弯,就撞到星球上结束了短暂的生命,有简直就什么也不做,一股脑儿,掉下去,但是在众多的个体中,总有那么几个比较幸运的,能绕过一个或者两个星球,总之比其他走得更远一些,那么我们就设置一个评价函数(或者叫压力函数)来对这个个体的一生作出评价:这里我用的评价比较简单:就是简单的拿其x坐标来当作其分数,就是说那个个体毁灭的时候能够走得越远,分数越高~~
      然后就分数越高的个体越有可能繁殖后代,繁殖的后代越多~~还记得,后代会继承父代的特性同时又会有一些变异吗?恩就是这样,可以说长江后浪推前浪,一代新人换旧人,从总体来说后代是由于父代的,那么具体到游戏里面就是他们平均起来能走得更远一些~~具体到基因层面上就会出现这样的变化:某些时间和动作配合得更好些了,该向上飞的时候他向上飞了,该减速的时候他减速了~~那么按照这样的规律一代一代的进行下去,恩,最后就可能进化出一个能逃脱陨石群的个体了~~
     以上就是遗传算法简单介绍,当然单单是用上这些只能说是能解决问题,但是还不能有效的解决问题,但是如果你能明白这些的话,呵呵,那么你深入的理解遗传算法是没有问题的,以后能应用遗传算法去解决问题也是没有问题的!

24

主题

94

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2005-6-20 22:42:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

简单的说,我认为就是不断的测试不断的重复(但是不是单纯的随机重复),运用了巧妙的算法,(研究去了。。。。。。)

14

主题

88

帖子

92

积分

注册会员

Rank: 2

积分
92
 楼主| 发表于 2005-6-21 12:58:00 | 显示全部楼层

Re:用遗传算法解决较复杂的动作问题的小游戏程序(附源

楼上说的不断的随机重复,恩,是的,但是这就是变异的过程,最基本的变异过程完全是随机的,但是整个进化就绝不是随机的了,因为有压力函数,因为有优胜劣汰,因为子代的基因很大部分是继承父代基因而来~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 18:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表