[erlang-questions] write the ant simulation in Erlang?

Richard O'Keefe ok@REDACTED
Fri Oct 10 03:26:42 CEST 2008


On 10 Oct 2008, at 1:51 pm, jm wrote:
> This was my first reaction when seeing a description of the problem.  
> To
> create a process for each square and then use a naming convention for
> the processes, eg world_x_y where x, y are the co-ordinates of the
> square. For an 80 x 80 world this would be 6400 processes just for the
> world plus 49 ant processes which I thought might be a bit of an over
> kill. I was also concerned that the process name look up may be a  
> bottle
> neck.

First, I was originally talking about dividing the world
up into *patches*, not *cells*.  In an 80x80 world,
patches might be 10x10, which is only 64 patches.

Second, why on earth would you *name* the patch processes?
Let's now switch to cell processes, not patch processes.

A cell needs to know its neighbours.

	element_number(nw) -> 1;
	element_number(n)  -> 2;
	element_number(ne) -> 3;
	element_number(e)  -> 4;
	element_number(se) -> 5;
	element_number(s)  -> 6;
	element_number(sw) -> 7;
	element_number(w)  -> 8.

	cell() ->
	    cell_start({0,0,0,0,0,0,0,0}).

	cell_start(Neighbours) ->
	    receive
		go    -> cell_loop(Neighbours, 0, 0, no_ant)
	      ; {D,N} -> cell_start(setelement(
			     element_number(D), Neighbours, N))
	    end.

	cell_loop(Neighbours, Pheromone, Food, Ant) ->
	    ....

	startup() ->
	    create an 80 x 80 array of processes
	    all running cell/0 using spawn_link
	    set up all the neighbour links
	    send each cell a !go message

Something along those lines.

Processes normally shouldn't *have* names, and in
this problem there certainly doesn't seem to be any
reason for any process to have a name, so
process name lookup can't be a bottleneck.

Moving is a little tricky because we need to change the
state of two cells (if doing cells) or possibly two
patches (if doing patches).




More information about the erlang-questions mailing list