需要帮助解决遗传算法的问题

时间:2010-11-20 22:38:00

标签: java genetic-algorithm genetic-programming

我有这个程序模拟两队之间的足球点球。

- 目标是24 x 8,左下角有坐标(0,0)。

- 每支球队有5名踢球手和1名守门员(为方便起见,我会称之为A队和B队2队)

- 队伍A - 踢球者有5种策略(每个一个),守门员有5种策略(因为他需要为B队的每个踢球者制定策略)

- 队伍B-踢球者有5种策略(每个一个),守门员有5种策略(因为他需要A队中每个踢球者的策略)

  • 踢球者的策略是坐标(x,y)和力量值。坐标是踢球的位置,力量是踢球的强度。 (稍后我将详细介绍Power属性)。例如,每个踢球者输入策略都是这样的:(1,2)100或(24,7)25

  • 守门员的策略是坐标和+宽度和+高度值。该 守门员覆盖区域是一个矩形,其左下角是(x,y)位置,右上角是(x +宽度,y +高度)。例如,(3,4)5 5他的左下角是(3,4),(3 + 5,4 + 5)是他的矩形的右上角(覆盖区域)。

  • 覆盖面积的最大范围是目标区域的25%(程序会检查这个)

  • 电源:0-24;踢没有错误;踢门将覆盖区域100%保存 力量:24-49踢将有10%的误差( - / + 10%宽的coor);节省90% 力量:50-75踢将有20%的误差;节省80% 力量:76-100踢将有30%的误差; 50%保存

示例输入:功率必须为0-100,所有其他值必须为正整数,0-(2 ^ 7-1) 团队A. 踢球者:(14,3)25门将:(2,3)4 4 (3,5)50守门员:(1,1)5,5 等等...

团队B: 踢球者:(9,3)75守门员:(1,2)5 5 (3,13)100门将:(2,3)6 6(假设这不会超过目标区域的25% 等等....

好的那是模拟器程序

现在我需要创建一个GA,为模拟器提供最佳的团队策略。

让我们简化问题,以便每个人都可以概念化它:

输入: - 人口(随机创建n队,例如,如果n = 5,则创建5个随机球队,每个球队的属性包括5个踢球员的战斗,5个守门员战术)

输出: - 最佳球队战略(每支球队将相互比赛,最佳选择是下一次迭代,记住每支球队有5个踢球员的战斗,5个守门员战术)

所以我在n群体的领域中寻找1个解决方案

我的问题是如何开始编码解决方案。我应该将解决方案编码为团队还是玩家/守门员对?

例如,将其编码为团队:   染色体:= [player1,player2,player3,player4,player5,goalkeeper1,goalkeeper2,goalkeeper3,goalkeeper4,goalkeeper5]

class Player {
 int
 int
 int
}

class Goalkeeper {
 int
 int
 int
 int
}

或将其编码为玩家/守门员对:

 Chromosome:= [player, goalkeeper] = [x,y,power,x,y,weight,height]

我对编码这样的问题是我必须在最后得到5个最佳球员/守门员对组成一个团队。

另一个问题是二进制和值编码。让我说我会选择球员/守门员对,会像这样的[x,y,power,x,y,weight,height] = [2,3,100,3,3,4,5]重视编码比二进制表示更有意义[0010, 0011, 1100100, 0011, 0011, 0100, 0101] = [0010 0011 1100100 0011 0011 0100 0101].我会觉得交叉和变异更容易表示为二进制,不是吗?

我只是想收集想法,所以我有一个可以开始的地方。

提前致谢

3 个答案:

答案 0 :(得分:0)

我对你没有完整的回复,但可能是......

我会说将所有内容编码为二进制文件。如果你实际上没有将它存储为位串,你应该确保它很容易转换为一个。就像你指出的那样,如果你的数据被编码为位串,交叉和变异是微不足道的。

至于你的染色体的结构,我认为如果你去找球员/守门员对,你可能会进入毛茸茸的领域。只有从整体上看待团队,健身才有意义。即使你找到了一对很棒的球队,如果所有球员的表现都相同,你也会有一支相当糟糕的球队。您的健身功能需要考虑玩家的动态。

希望有帮助...

答案 1 :(得分:0)

我是否正确地假设这是一个学术项目?在这种情况下,我会做两个,在一个染色体上编码整个团队,也在每个玩家/守护者的基础上编码。这样你就可以检查这两种方法,看看哪种方法会产生更好的结果。而且由于整个团队编码最终会出现在一系列不同(获胜)的玩家/守护者中,您还可以将它们与每个玩家编码产生的个体进行比较。

至于值的表示,我喜欢按照你的建议用二进制格式对它们进行编码,因为变异更直接。但是,如果你使用实数而不是0和1,你当然也可以使用随机变异方法。再次,如果这是一个学术项目,你可以做两种方法并在你的分析中进行比较。

希望有所帮助!

答案 2 :(得分:0)

首先,您在寻找什么?踢球者或守门员的好策略?

如果对于两者而言,这听起来是共同进化的理想情景。

是的,将所有内容编码为二进制文件,如果找不到合理的理由,请不要让生活复杂化。