<div dir="ltr"><div>Actually, I'd just have two states: ant and antless.  Your pending state could result in deadlocks.</div>
<div> </div>
<div>David<br><br></div>
<div class="gmail_quote">On Fri, Oct 10, 2008 at 5:37 PM, Rick R <span dir="ltr"><<a href="mailto:rick.richardson@gmail.com">rick.richardson@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr">You're right. I didn't think it through at all. <br>Better than decreasing the amount of messages, it avoids having to transact (or resolve conflicts) at all. <br>The cell can have three states, empty, full, or pending. Pending would be that it is waiting for a response from an adjacent cell on whether it's ant can move there. It would simply delay any of its own responses until receiving a response from it's suitor. <br>
<br>One could argue for a fourth state which is empty-but-expecting.  But if an ant is guaranteed to travel to your location once you've agreed to let it, then this state is as good as full. <br><br>Not treating the ant as its own actor does take the fun (and the expense) out it. <br>

<div>
<div></div>
<div class="Wj3C7c"><br>
<div class="gmail_quote">On Fri, Oct 10, 2008 at 5:43 PM, David Mercer <span dir="ltr"><<a href="mailto:dmercer@gmail.com" target="_blank">dmercer@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div lang="EN-US" vlink="blue" link="blue">
<div>
<p><span style="COLOR: navy">Actually Danny G's approach has merit.  Ant on square A wants to move to square B.  The messages passed are quite simple:</span></p>
<p><span style="COLOR: navy"> </span></p>
<ol style="MARGIN-TOP: 0in" type="1">
<li style="COLOR: navy">A: B ! {A, 'I have an ant who wants to move to you'}</li>
<li style="COLOR: navy">B: Either:</li>
<ol style="MARGIN-TOP: 0in" type="a">
<li style="COLOR: navy">A ! 'Your ant moved here successfully'</li>
<li style="COLOR: navy">A ! 'No can do, mate; I'm already occupied'</li></ol></ol>
<p><span style="COLOR: navy"> </span></p>
<p><span style="COLOR: navy">In the case of 2a, square A marks itself vacant and can now respond with its own 'Your ant moved here successfully' message when another square requests passage for its ant.  In case of 2b, square A tries another square.</span></p>

<p><span style="COLOR: navy"> </span></p>
<p><span style="COLOR: navy">DBM</span></p>
<p><span style="COLOR: navy"> </span></p>
<p><span style="COLOR: navy"> </span></p>
<p><span style="COLOR: navy"> </span></p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: 1.5pt solid; PADDING-TOP: 0in; BORDER-BOTTOM: medium none">
<div>
<div style="TEXT-ALIGN: center" align="center">
<hr align="center" width="100%" size="2">
</div>
<p><b><span style="FONT-FAMILY: Tahoma">From:</span></b><span style="FONT-FAMILY: Tahoma"> <a href="mailto:erlang-questions-bounces@erlang.org" target="_blank">erlang-questions-bounces@erlang.org</a> [mailto:<a href="mailto:erlang-questions-bounces@erlang.org" target="_blank">erlang-questions-bounces@erlang.org</a>] <b>On Behalf Of </b>Rick R<br>
<b>Sent:</b> Friday, October 10, 2008 15:39<br><b>To:</b> Erlang-Questions (E-mail)<br><b>Subject:</b> Re: [erlang-questions] write the ant simulation in Erlang?</span></p></div>
<div>
<div></div>
<div>
<p> </p>
<div>
<p> </p>
<div>
<p>2008/10/10 Daniel Goertzen <<a href="mailto:daniel.goertzen@gmail.com" target="_blank">daniel.goertzen@gmail.com</a>></p>
<div>
<p style="MARGIN-BOTTOM: 12pt">How about 1 process for each cell, but no processes for the ants.  The ants exist as state inside each cell and as messages interrogating neighboring cells.  I think you'll get nice fine-grained localized transactions this way.<br>
<br>Dan.</p></div></div>
<p style="MARGIN-BOTTOM: 12pt"><br>Using that method, I think you'll still have the same issue with transactions. For instance: if two cells decide to move their ant to the same adjacent cell, you will have the same conflict and one ant will have to be rolled back. <br>
It may not even be more efficient message-wise because instead of the ant sending a message to an adjacent cell, the cell simply sends the same message to the adjacent cell on behalf of the ant. <br><br>Of course we could go existentialist and say that there is no board except what the ants perceive, and since they can only see one square in any direction, that would imply that there is 1 process for each ant and no process for a board (or any data for that matter).  This would mean that if there are no ants on a section of board it would cease to exist. The only way to reconstitute it would be to mathematically prove that it exists. e.g. The ant was at 5,5 and moved 3 east,  8 < 64, therefore, the board exists.  <br>
<br>One could extend this method with a Paxos algorithm so that the ants could achieve consensus as to the existence of Board. <br><br></p></div></div></div></div></div></div></blockquote></div><br><br clear="all"><br></div>
</div>-- <br>"Have more than thou showest,<br>Speak less than thou knowest,<br>Lend less than thou owest,<br>Ride more than thou goest."<br> -- The Fool to King Lear<br></div></blockquote></div><br></div>