我有这个程序可以模拟两支球队之间的足球点球。
- 目标是 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].
吗?我认为交叉和变异将其表示为二进制更容易,不是吗?
我只是想收集想法,所以我有地方开始。
提前致谢