Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are some relevant A.I. techniques for programming a flock of entities?

Specifically, I am talking about programming for this contest: http://www.nodewar.com/about

The contest involves you facing other teams with a swarm of spaceships in a two dimensional world. The ships are constrained by a boundary (if they exit they die), and they must continually avoid moons (who pull the ships in with their gravity). The goal is to kill the opposing queen.

I have attempted to program a few, relatively basic techniques, but I feel as though I am missing something fundamental.

For example, I implemented some of the boids behaviours (http://www.red3d.com/cwr/boids/), but they seemed to lack a... goal, so to speak.

Are there any common techniques (or, preferably, combinations of techniques) for this sort of game?

EDIT

I would just like to open this up again with a bounty since I feel like I'm still missing critical pieces of information. The following is my NodeWar code:

boundary_field = (o, position) ->
  distance = (o.game.moon_field - o.lib.vec.len(o.lib.vec.diff(position, o.game.center)))
  return distance

moon_field = (o, position) ->
  return o.lib.vec.len(o.lib.vec.diff(position, o.moons[0].pos))

ai.step = (o) ->
  torque = 0;
  thrust = 0;
  label = null;

  fields = [boundary_field, moon_field]

  # Total the potential fields and determine a target.
  target = [0, 0]
  score = -1000000
  step = 1
  square = 1

  for x in [(-square + o.me.pos[0])..(square + o.me.pos[0])] by step
    for y in [(-square + o.me.pos[1])..(square + o.me.pos[1])] by step
      position = [x, y]
      continue if o.lib.vec.len(position) > o.game.moon_field
      value = (fields.map (f) -> f(o, position)).reduce (t, s) -> t + s
      target = position if value > score
      score = value if value > score

  label = target

  { torque, thrust } = o.lib.targeting.simpleTarget(o.me, target)  
  return { torque, thrust, label }

I may have implemented potential fields incorrectly, however, since all the examples I could find are about discrete movements (whereas NodeWar is continuous and not exact).

The main problem being my A.I. never stays within the game area for more than 10 seconds without flying off-screen or crashing into a moon.

like image 420
sdasdadas Avatar asked Apr 21 '13 03:04

sdasdadas


People also ask

What are the most essential programming techniques?

Variables can be considered as the most essential programming techniques. The number and their type depend on the language you are using. Repetition or Loops. «For» is the most widely spread type of repetition. Most languages apply «for» to convey the idea of counting.

What are the fundamental AI techniques?

In our first blog article, we explained some of the most commonly used definitions of AI. Now we will discuss some fundamental AI techniques: Heuristics, Support Vector Machines, Neural Networks, the Markov Decision Process, and Natural Language Processing. 1. Heuristics

Why is the programming language not important in computer programming?

I fact, the programming language is not important because learning to program is learning to develop algorithmic thinking. Programming techniques are almost in all aspects of our lives, starting from subconscious mind programming techniques to computer programming. So, here is a list of the most basic computer programming techniques.

What are the top 4 techniques of artificial intelligence?

Top 4 Techniques of Artificial Intelligence 1. Machine Learning 2. NLP (Natural Language Processing) 3. Automation and Robotics 4. Machine Vision


1 Answers

You can easily make the boids algorithm play the game of Nodewar, by just adding additional steering behaviours to your boids and/or modifying the default ones. For example, you would add a steering behaviour to avoid the moon, and a steering behaviour for enemy ships (repulsion or attraction, depending on the position between yours and the enemy ship). The weights of the attraction/repulsion forces should then be tweaked (possibly by genetic algorithms, playing different configurations against each other).

I believe this approach would give you already a relatively strong baseline player, to which you can start adding collaborative strategies etc.

like image 112
Ando Saabas Avatar answered Nov 07 '22 11:11

Ando Saabas