|
@@ -54,12 +54,40 @@ func (s *SnakeSimulator) Verify(population *genetic.Population) (results []*gene
|
|
|
s.statsUpdateQueue <- true
|
|
|
|
|
|
s.field.GenerateNextFood()
|
|
|
- s.snake = &Snake{
|
|
|
- Points: []*Point{
|
|
|
- &Point{X: 20, Y: 20},
|
|
|
- &Point{X: 21, Y: 20},
|
|
|
- &Point{X: 22, Y: 20},
|
|
|
- },
|
|
|
+ rand.Seed(time.Now().UnixNano())
|
|
|
+ switch rand.Uint32() % 4 {
|
|
|
+ case 1:
|
|
|
+ s.snake = &Snake{
|
|
|
+ Points: []*Point{
|
|
|
+ &Point{X: 20, Y: 20},
|
|
|
+ &Point{X: 21, Y: 20},
|
|
|
+ &Point{X: 22, Y: 20},
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 2:
|
|
|
+ s.snake = &Snake{
|
|
|
+ Points: []*Point{
|
|
|
+ &Point{X: 22, Y: 20},
|
|
|
+ &Point{X: 21, Y: 20},
|
|
|
+ &Point{X: 20, Y: 20},
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 3:
|
|
|
+ s.snake = &Snake{
|
|
|
+ Points: []*Point{
|
|
|
+ &Point{X: 20, Y: 20},
|
|
|
+ &Point{X: 20, Y: 21},
|
|
|
+ &Point{X: 20, Y: 22},
|
|
|
+ },
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ s.snake = &Snake{
|
|
|
+ Points: []*Point{
|
|
|
+ &Point{X: 20, Y: 22},
|
|
|
+ &Point{X: 20, Y: 21},
|
|
|
+ &Point{X: 20, Y: 20},
|
|
|
+ },
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
i := 0
|
|
@@ -190,10 +218,10 @@ func (s *SnakeSimulator) GetHeadState() []float64 {
|
|
|
float64(rWall) / float64(width),
|
|
|
float64(tWall) / float64(height),
|
|
|
float64(bWall) / float64(height),
|
|
|
- float64(lFood) / float64(width),
|
|
|
- float64(rFood) / float64(width),
|
|
|
- float64(tFood) / float64(height),
|
|
|
- float64(bFood) / float64(height),
|
|
|
+ float64(lFood) / float64(lWall),
|
|
|
+ float64(rFood) / float64(rWall),
|
|
|
+ float64(tFood) / float64(tWall),
|
|
|
+ float64(bFood) / float64(bWall),
|
|
|
float64(tlFood) / diag,
|
|
|
float64(trFood) / diag,
|
|
|
float64(blFood) / diag,
|