Skip to content
Snippets Groups Projects
  1. Mar 04, 2012
    • Sam Moore's avatar
      Added image output to manager, added plots to results pages · 5f9adddd
      Sam Moore authored
      Can generate images from manager program with the -I option
      Can generate a video from these images with the -v option (Note: just runs ffmpeg)
      These two options only work if the program was built with graphics enabled.
      
      Note: You can generate a video from a saved log file by "./stratego -v video -o logfile"
      So that's cool.
      
      Results pages look nicer. Fixed bug with score updating between rounds.
      Added pretty plots. Most plots end up being straight lines. But its pretty anyway.
      5f9adddd
  2. Mar 03, 2012
    • Sam Moore's avatar
      Tweaking manager/simulate.py, updating manual and webpage · 476617a8
      Sam Moore authored
      You can now pass arguments to your AI through the manager program.
      Simply include the path to the AI and arguments in quotation marks.
      
      EG:
      ./stratego "../../agents/foo/bar --debug" ../../agents/other/agent
      
      simulate.py was making broken links to log files, fixed.
      
      Logging of stderr! If anything is printed to stderr, it is all saved in logfilename.stderr by simulate.py
      
      Tried to make the manual page better, probably failed.
      
      Updated webpage since we have now changed the date.
      
      Also tried to fix vixen again, haven't tested.
      476617a8
  3. Mar 02, 2012
    • Sam Moore's avatar
      Fixed bug in simulate.py + hacky fix for bug in vixen · 9e4bc3c0
      Sam Moore authored
      simulate.py wasn't setting the "gameID" variable correctly,
      meaning all games were logged to "red.vs.blue.1.1"
      
      Bug in vixen found by [SLX]; it attempts to move outside the board.
      Usually when losing.
      
      Path finding algorithm (path.py) shouldn't move outside the board.
      But somehow it is.
      
      Hacky fix at the moment by checking for moves outside the board in
      vixen's score calculation, and allocating -100 to these moves.
      9e4bc3c0
    • Sam Moore's avatar
      Made printed board consistent with graphical board · e73b3387
      Sam Moore authored
      I made the graphical board draw function reveal pieces that had been involved in combat.
      But I didn't reflect this in the printed board, until now.
      
      Pointed out by [SLX]
      e73b3387
    • Sam Moore's avatar
      Fixed bug with log files · c4988773
      Sam Moore authored
      I had added some extra log messages for testing the networking functions,
      and forgot to remove them, hence replaying a logged file (with the -f option)
      was failing.
      c4988773
  4. Feb 26, 2012
    • Sam Moore's avatar
      [PATCH] Allow Human_Controller to move scouts further · 168375bf
      Sam Moore authored
      Thanks to David Gow (sulix) for this patch.
      
      I was aware of the limitation, but decided to wait until someone complained before fixing it (I also overestimated the effort required to fix it).
      So I'd like to congratulate David for being the first person to actually try and use the manager program!
      
      I'll have to allocate a prize for that.
      168375bf
  5. Feb 02, 2012
  6. Jan 21, 2012
    • Sam Moore's avatar
      Worked out networking · 341297b4
      Sam Moore authored
      Wasn't thinking straight with the initial approach
      
      Basically:
       - Each stratego program is running ONE AI program locally
      	-> That AI's responses need to be sent accross the network to the other stratego program
      	-> Each stratego program keeps state seperately and sends instructions to its local AI, so actual instructions (ie: "Its your turn") aren't sent
       - A special controller is needed to recieve the responses
      
      So we have NetworkSender, which wraps around an AI_Controller and simply sends its responses (exactly as they are) to the network
      and NetworkReceiver which waits for responses from the network.
      
      As far as networking itself is concerned, its not that important who is the Client and who is the Server.
      If an IP address is specified, then Client is used, if no IP address is specified, Server is used.
      
      NOTE: It isn't possible to use networking for both AI programs yet.
      	(ie: stratego @network @network) will fail when the Blue server attempts to bind the socket already used by the Red server.
      	I may consider fixing this at some point.
      
      Going to test on mufasa.
      
      I've just thought, if the stratego programs have different timeout sequences, there may be problems.
      Oh well.
      341297b4
  7. Jan 19, 2012
  8. Jan 18, 2012
    • Sam Moore's avatar
      Began implementation of networking · 48216daa
      Sam Moore authored
      Slightly confused about the client/server thing
      
      Server is going to run red
      Client is going to run blue
      
      Need to get them to talk nicely?
      
      Doesn't work at the moment - server can't bind socket, client segfaults (NULL pointer).
      Blergh.
      48216daa
    • Sam Moore's avatar
      pause AI in opponent's turn (Temporary) · 38c6e9b9
      Sam Moore authored
      This is a temporary and not entirely effective solution, to prevent AI from spamming CPU useage to make their opponents time out.
      Yes I could use renice instead, but its just as easy for an AI to get around.
      
      I will have to replace this with a better solution. But I don't have one at the moment.
      38c6e9b9
  9. Jan 12, 2012
  10. Jan 08, 2012
  11. Jan 07, 2012
    • Samuel Moore's avatar
      Trivial update to webpage · 6fbef43e
      Samuel Moore authored
      Thanks to Hipikat for pointing out some things that needed clarifying.
      Email matches or post in irc if there is anything else.
      6fbef43e
  12. Jan 06, 2012
    • Sam Moore's avatar
      [RULE CHANGE] "NO_MOVE" is no longer a legal · 85cfed04
      Sam Moore authored
      Previously AIs could respond with "NO_MOVE" whenever they felt like.
      Officially, now they can only respond with "NO_MOVE" when they have no mobile pieces left.
      (That is, only Bombs and the Flag are left).
      
      However the game should end by a VICTORY_ATTRITION condition as soon as either player loses its last mobile piece.
      So technically, "NO_MOVE" can't ever be legally printed, because the game should have ended. If it doesn't, there is a bug.
      
      Updated webpage, updated manual, updated README
      
      Going to email the list later today.
      
      Goodluck!
      
      PS: The rule change is due to a mean initial setup, for example:
      
      **********
      **********
      **********
      BB**BB**BB
      ..++..++..
      ..++..++..
      etc
      
      Here, Red has placed Bombs in all three "lanes". Red is unable to move.
      However, as long as Red can use "NO_MOVE", an unsuspecting Blue will lose most of its pieces on the Bombs.
      (Unless Blue puts a miner up the front...) But anyway, being able to not move is silly and not allowed in the real game.
      85cfed04
  13. Dec 24, 2011
    • Sam Moore's avatar
      [RULE CHANGE] *Victory by "attrition"* + Bug fixes · e1153eeb
      Sam Moore authored
      Minor bugs in the manager program fixed.
      Changed some messages for clarity, can't remember what, look at diff.
      
      Added VICTORY_ATTRITION; victory by destroying all of the opponents _mobile_ pieces
       (ie: Everything except Bombs/Flag)
      
      This means we don't get results of DRAW or DRAW_DEFAULT when one AI destroys all the other's mobile pieces.
      Since those games would last up to 5000 turns, this saves a lot of wasted time.
      
      AI should still respond with "NO_MOVE" when they have no mobile pieces.
      
      Made timeout value adjustable by an argument switch, '-T'
      Altered simulate.py to use a timeout variable and supply the switch to the manager program.
      
      So now I don't need to recompile and commit the manager program every time I want to test a different timeout value on mufasa!
      
      Mufasa is now on game 3 of the test round, out of 12. After FIVE HOURS.
      This particular game has lasted 1132 turns, with BLUE making "NO_MOVE" for the last 600 or so.
      The new victory condition will stop this sort of thing :)
      
      Merry Christmas!
      e1153eeb
    • Sam Moore's avatar
      Trivial · de728517
      Sam Moore authored
      I understand directory structures, cough
      de728517
    • Sam Moore's avatar
      Bug in simulate.py caused by "INTERNAL_ERROR" · fda21e69
      Sam Moore authored
      When INTERNAL_ERRORs occur, the colour wasn't added to the array in the "ALL" results.
      So when the script looks up agents["ALL"][index][4] (the colour entry), there was an indexing error.
      Fixed by adding the colour to the result array when INTERNAL_ERROR occurs.
      
      TODO: Discover cause of INTERNAL_ERROR - in the manager program
      
      It occurs on mufasa, but not on my laptop.
      I believe it is due to AI timeouts not being handled correctly by the manager program (stratego).
      On my laptop, things run nice and fast, and since all the AI work properly, there are no timeouts.
      On mufasa, things run shit and slow, and pretty much every game I tested ended with a move timeout.
      Timeout causes broken pipe after AI program is told to exit?
      
      As a temporary measure, increased timeout to 60s (from 2s). If this doesn't stop timeouts,
      there must be some other factor making things slow.
      "The problem is determining where the shittiness lies... is it the shittiness of the VM, the shittiness of python,
      the shittiness of the manager program..."
      
      Running another test round on mufasa over christmas. Hopefully it will finish running by new year. (Assume 60s a move, 300 moves a game... 12 games...)
      
      Considering putting my laptop in the clubroom and just running the competition on that.
      fda21e69
  14. Dec 23, 2011
    • Sam Moore's avatar
      As suspected, it didn't work · 24096642
      Sam Moore authored
      Need to also disable linking with the SDL and OpenGL libraries in the Makefile
      But those libraries must have pulled in pthread, because then I got link errors until I added that to linking.
      
      Attempt #2
      24096642
    • Sam Moore's avatar
      Added build option to build "stratego" without graphics · 78293905
      Sam Moore authored
      I need this for mufasa (vm), which doesn't have SDL or OpenGL or even GNOME
      Besides, it doesn't need it, and attempting to install them did not end well...
      
      Still need to test that it actually builds on mufasa
      78293905
  15. Dec 22, 2011
  16. Dec 21, 2011
    • Sam Moore's avatar
      Fixing simulate.py · e8a611c5
      Sam Moore authored
      Now reads the round number from an "info" file, instead of counting number of files in the directory.
      
      Fixed errors in simulate.py creating .html files.
      
      Made results slightly prettier, moved directory to /web/results
      Included links to raw log files /web/log for games.
      
      Should install an apache server on mufasa, so that people can view the results online.
      e8a611c5
  17. Dec 20, 2011
    • Sam Moore's avatar
      [RULE CHANGE] *Changed rule for Bombs*, tweaking vixen agent · f74c2985
      Sam Moore authored
      Previously, contact with a Bomb destroyed the Bomb even if the attacker was not a miner.
      Now, the only way to destroy a Bomb (ever) is to attack it with a miner.
      
      Yes, this means that if the enemy Flag is surrounded by Bombs and and AI has lost all its miners, it is impossible to win.
      
      This reflects the rules of the original game. My version is now identical to the original game.
      My original rule was intended to decrease the emphasis placed on Bombs and Miners.
      Having played a few games, I think the traditional Bomb rule is more interesting, even if it makes things harder for the AI.
      
      If there are any problems with this change, please email matches@
      I will be happy to revert to the previous rules if there is demand. This also goes for the change to equivelant ranks combat (earlier commit today).
      
      Updated vixen agent's scoring to take into account the change.
      Yet to update asmodeus's scoring.
      
      The AI's seem to have a much harder time now that they have to take out Bombs
      Games often result in draws, because the Miners are easy targets and get killed whilst seeking out Bombs.
      The AI should probably defend certain pieces with stronger piece combinations nearby. But this is all getting rather complex for a "sample" :P
      
      TODO: Implement victory condition when opponent has no mobile pieces
      	(Currently play continues until the player with mobile pieces ends up attacking Bombs because it has nothing else to do
      		at which point the game is a draw because neither player has mobile pieces)
      f74c2985
    • Sam Moore's avatar
    • Sam Moore's avatar
      Added new sample AI - "vixen", improved "basic_python" · 72df4ec1
      Sam Moore authored
      I was going to create a highly advanced super AI and not reveal the source code. Then I would win the competition!
      But, turns out it is just as shit as all the others, so I added it to git. Also I made the competition, so that seems fairly self defeating.
      
      It was easier to add some extra stuff to basic_python than to force it into the new AI.
      
      "vixen" (where do I get these names? Well, a fox is smart, and a vixen is a fox. Therefore, "vixen" is a smart AI. Q.E.D)
      
      I basically copied asmodeus' "optimised score" and path finding technique, but I changed the way scores are calculated to include probability.
      At one point I was adding the scores for paths that began with the same direction. This seemed like a brilliant idea. It was not.
      
      After all this, vixen beats asmodeus some of the time, I haven't tested how often, but each AI has beaten the other at least a few times.
      Most of the time vixen loses seems to be due to losing the marshal or general on bombs. Its pretty good at countering the spy.
      
      It turns out writing a decent stratego AI is harder than I thought :P
      
      In other news, in the manager program, I removed the automatic hiding of the AI's pieces when a human is playing, because its useless and annoying.
      72df4ec1
    • Sam Moore's avatar
      Added new sample AI - "vixen" · 3d01a564
      Sam Moore authored
      I was going to create a highly advanced super AI and not reveal the source code. Then I would win the competition!
      But, turns out it is just as shit as all the others, so I added it to git. Also I made the competition, so that seems fairly self defeating.
      
      "vixen" (where do I get these names? Well, a fox is smart, and a vixen is a fox. Therefore, "vixen" is a smart AI. Q.E.D)
      
      I basically copied asmodeus' "optimised score" and path finding technique, but I changed the way scores are calculated to include probability.
      At one point I was adding the scores for paths that began with the same direction. This seemed like a brilliant idea. It was not.
      
      After all this, vixen beats asmodeus some of the time, I haven't tested how often, but each AI has beaten the other at least a few times.
      Most of the time vixen loses seems to be due to losing the marshal or general on bombs. Its pretty good at countering the spy.
      
      It turns out writing a decent stratego AI is harder than I thought :P
      
      In other news, in the manager program, I removed the automatic hiding of the AI's pieces when a human is playing, because its useless and annoying.
      3d01a564
    • Sam Moore's avatar
      Improved -> Broke -> Fixed basic_python AI · 6e532774
      Sam Moore authored
      In the first place, should have probably actually tested this AI
      It was calling "move" with only 3 arguments, when I added a fourth one (multiplier)
      
      In the second place, added storing of more information by InterpretResult
      Also rewrote the code to make it much clearer when I got tired of retyping "self.board[p[0]][p[1]]" every second line...
      
      Of course rewriting the code was a bad idea, and caused many stupid errors.
      But it should be fixed now...
      
      Since asmodeus and other python AI inherit directly from the BasicAI class in basic_python, it kind of needs to work.
      6e532774
    • Sam Moore's avatar
      Whoops · cf19b39b
      Sam Moore authored
      Read the diff
      
      Also, forgot to mention progress in simulate.py in last commit.
      Made progress with total.html results file, and round by round results files.
      Although since the round number is never updated properly, we only ever get "round1.html", overwritten each round.
      cf19b39b
    • Sam Moore's avatar
      Small changes to several things · 345d8b1f
      Sam Moore authored
      Changed combat outcomes for equivelant ranks:
      Up until now, victor was randomly chosen
      Changed so that result is always "BOTHDIE"
      
      Updated manual page for manager
      Added section on unbuffered stdin/stdout
      
      Modified sample agents to take into account MULTIPLIER
      There is no way for a human player to move the scout multiple spaces yet.
      Sample agents still play each other fine, but since none of them actually move scouts multiple spaces,
      this doesn't prove the new code works.
      TODO: Test properly (add scout movement to asmodeus and see if everything still works?)
      
      Updated webpage.
      Added section on unbuffered stdin/stdout
      Added some other pointless waffle. Mmmm waffle.
      
      TODO:
      Make simulate.py keep track of the round number properly.
      I'm sure this is simple to do, but I can't be bothered right now.
      345d8b1f
  18. Dec 13, 2011