1

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

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

-每队有5名踢球手和1名守门员(为了方便,我将2队称为A队和B队)

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

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

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

  • 守门员的策略是一个坐标和一个 +Width 和 +Height 值。守门员覆盖区域是一个矩形,其左下角为(x,y)位置,右上角为(x+width,y+height)。例如, (3,4) 5 5 他的左下角坐标在 (3,4) 并且 (3+5,4+5) 是他的矩形右上角(覆盖区域)。

  • 覆盖区域的最大范围是目标区域的 25%(程序将检查这一点)

  • 功率:0-24;kick 不会出错;踢击守门员覆盖区域 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,为模拟器提供最佳团队策略。

让我们简化问题,以便每个人都可以对其进行概念化:

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

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

所以我最终在 n 个人口的领域寻找 1 个解决方案

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

例如,将其编码为团队: Chromosome:= [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].吗?我认为交叉和变异将其表示为二进制更容易,不是吗?

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

提前致谢

4

3 回答 3

0

我没有给你一个完整的答复,但它可能是什么...

我同意将所有内容编码为二进制。如果您实际上并未将其存储为位字符串,则应确保将其轻松转换为位字符串。就像您指出的那样,如果您的数据被编码为位串,则交叉和变异是微不足道的。

至于你的染色体结构,我认为如果你选择球员/守门员对,你可能会进入毛茸茸的领域。只有将团队视为一个整体,健身才有意义。即使你找到了一对好搭档,如果你所有的球员都表现得一样,你的球队也会很差。您的健身功能需要考虑玩家动态。

希望有帮助...

于 2010-11-21T00:06:02.323 回答
0

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

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

希望有帮助!

于 2010-11-21T00:17:15.323 回答
0

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

如果两者兼而有之,这听起来是共同进化的理想场景。

是的,将所有内容编码为二进制文件,如果您找不到这样做的充分理由,请不要使您的生活复杂化。

于 2010-12-08T17:18:24.280 回答