【发布时间】:2011-01-10 16:46:08
【问题描述】:
我有这个程序可以模拟两队之间的足球点球大战。
-目标是 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,球员2,球员3,球员4,球员5,守门员1,守门员2,守门员3,守门员4,守门员5]
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]. 我认为交叉和变异将其表示为二进制更容易,不是吗?
我只是想收集一些想法,所以我可以从某个地方开始。
提前致谢
【问题讨论】:
-
您找到问题了吗。我正在使用 Drupal 6 在 PHP 中实现分配问题,以根据学生的位置和学生的实习偏好将学生分配到实习基地。我喜欢你程序的一部分可以分析非常受欢迎。之后,我也分享我的代码......
标签: java genetic-algorithm genetic-programming