Clarifications from Clint, copied from e-mail replies to questions:

 

Most recent comments first:

 

5 � �Won�t work under Linux� � Oct 17, 10:30 PM (posted by Steve, Oct 18, 6:35 AM):

 

[One person experienced] problems were because he was running it under linux.I've installed a fix for linux now (and mac X, along with other unix based os's).I'll pack it up all proper and release it late tonight.It seems to have taken care of these problems for everyone who's contacted me with OS related runnability problems.If time allows, I may include one or two other things.If time doesn't allow that, I'll put them in a new release tomorrow night.

 

 

--------------------------------------------------

 

4 � �Impossible turns� � Oct 18, 12:49 AM:

 

I�ve received at least half a dozen inquiries about this, so it�s deserving of an entry here.

 

It is possible to have a scenario in which your AI still has pieces on the board, the board is not full, and your AI does not have a valid move.How should your AI respond to this situation?

 

The answer:you don�t need to.The game environment will detect this situation and skip your turn for you, making it so that your AI will never be asked for a move when none are possible.

 

 

 

--------------------------------------------------

 

3 � �Anatomy of a stacktrace� � Oct 13, 2:44 PM:

 

This one�s not from an email, but it�s caused confusion, so I�ll put it in here.When an exception is thrown in your code or the code wrapping it into a process, the stacktrace of the resulting exception is a little cryptic.Here�s a clarification of what you�re seeing, until I get it fixed up so it�s cleaner.Part of the stacktrace when this happens is going to look the same every time:

 

Java.lang.Exception: ...

����� ...

������� at ExternalAI.takeTurn(ExternalAI.java:62)

������� at TurnManager.aiTurn(TurnManager.java:179)

������� at TurnManager$BiaiRunner.run(TurnManager.java:276)

������� at java.lang.Thread.run(Thread.java:534)

 

if your stack trace doesn�t start and end this way, by all means email me your stack trace, as it probably is a bug in the game environment.

 

If your stack trace does start and end like this (with some more stack trace stuff where the ��s are in the example above), then an exception was thrown from your subprocess.Whatever appears in place of the ��s is what the game environment read from your stderr stream. (ie- it�s the actual stack trace that should tell you what�s up with your code.If you get one of these and are still convinced it�s something broken in my code, as always, send me the stack trace and I�ll take a look.

 

 

 

--------------------------------------------------

 

2 � �Error in using the interface?� � Oct 13, 3:06 AM:

 

Questions - I was trying to attach my AI to the interface you built, but I keep getting some sort of exception at line 62 in ExternalAI.java.The disassembly seems to show that its stdin.newline() is causing the problem, but that doesn't seem right. ... Also is it possible for us to get the source so we can fix these issues

when they come up?

 

Clint�s Answers - I'm a bit leary of releasing the source at this point, because I know of at least one person who has asked me exactly how the built-in AI's work, wanting to build an AI designed purely to trick the built-in ones. Can't have that.Or at least I don't want to make it easier.I guess there are always those ... who will attack my class files with a decompiler. [Steve�s comment:Don�t decompile Clint�s Source!] The other alternative would be for me to release the source for just a few important classes... I'll consider that once I get a few more things finalized (there's a noncritical feature or two I'm still working on a little bit).

 

As for your error, the error is something in your code, and the confusion is my fault.I'll try to come up with a better way to output all this so it's clearer. Look for a new release late Wednesday with that change.Line 62 of ExternalAI is actually a line that manually throws an exception.It's the mechanism invoked in the main process when something appears on your stderr stream.Ie- your AI (or the subprocess wrapping it) threw an exception or output something to stderr.What the game should have done is tell you that your AI had an error, and forwarded the contents of your stderr to it's own stderr.If you look at the stack trace carefully, it should actually be two stack traces; one as the message for the other.Like I said, this is admittedly a clunky way to output that; in the morning I'll come up with something better.

 

I hope that info helps in analyzing your error.If you still can't figure it out, or if the error ends up not having come from your class, go ahead and send me the stackdump (along with a copy of your AI if possible), and I'll figure out what's broken in the wrapper and fix it.

 

On the other note, I am quite familiar with how it compiles inner classes.It's still cluttery, but that way at least all classfiles are tagged according to whose they are, so I can tell when I go to run them which are the primary player classes, and which are little helpers, so I know which to run.It would have been easier to just say no additional classes, but I felt that was too heavy a restriction on what people should be able to do for this.

 

 

----------------------------------------------------

 

1 -- "Legal resources" -- Oct 11, 2004, 11:01 PM:

 

Instantiating other objects and using helping classes is fine.In general, anything you might dream up is fair game.The spirit of the rule there is simply to say that your AI may use whatever you like within the confines of the system it's running on.As far as serialized information, if your AI uses that to save things from turn to turn, that's fine.The no-no on that would be anything that involved pulling in preprocessed data from a file or anything along those lines.That limitation is intended to effectively mean: the available resources for your turn method are your AI code and the resources of the computer running the tournament.Anything that could be construed as bringing in external processing power from outside that PC (internet, preprocessed data, etc.) is off limits.Other than that, the available ram is your only limit.I do, however, reserve the right to throttle you if you fill my (large) hard drive.

 

If you do have enough persistent data that you want to keep from turn to turn, I actually would prefer that you serialize and reload it so as to leave a fair share of the system resources for the other player. (as no active processing is allowed between turns)

 

Feel free to make any data structures or helping classes you'd like.My only rule on that will be that any additional classes besides the one directly implementing the game interface should be declared as inner classes of your main class, so as to keep classfile clutter to a minimum.

 

-------------------