Meh, OK. AI... Anybody got any suggestions for what it should do. Yes we have AI Challenge, but people can't judge something if they all do different things.
[QUOTE=Loli;36216506]Meh, OK. AI... Anybody got any suggestions for what it should do. Yes we have AI Challenge, but people can't judge something if they all do different things.[/QUOTE]
Well since it's an AI challenge, maybe come up with a specification that the AI has to meet and a set of rules? Or maybe just who can create the best implementation of a certain type of AI. It's hard since AI can cover a very wide range of subjects.
[editline]6th June 2012[/editline]
Also don't ask me anything about this because I have no idea what I'm talking about.
What about we design some simple symmetrical two player game to write bots for, and run a tournament?
[QUOTE=Ziks;36216742]What about we design some simple symmetrical two player game to write bots for, and run a tournament?[/QUOTE]
this sounds oddly familiar
[QUOTE=Ziks;36216742]What about we design some simple symmetrical two player game to write bots for, and run a tournament?[/QUOTE]
I think it could be neat if the rules for the 'game' weren't revealed until the actual competition (or give a premise with incomplete rules). Just come up with some API (for sensors, movement, 'score'/feedback, etc.) and force the AI to figure out the rules for itself.
I say this because if you explain the rules in advance, the programmer can just hard-code an optimal solution for that specific game and the AI wouldn't have to adapt or learn anything. At that point it becomes more of an exercise in game theory than AI or anything else.
I'm not sure, though, if this would drive the difficulty up too high for a little FP competition. I won't be entering, myself, and I think many of the people who do enter only do so when it is convenient. Making it too difficult could result in a lack of entries.
[QUOTE=Lexic;36209288]The coursework for my AI module was making an agent that could traverse the London Tube network producing human level heuristic results.
I'm still not entirely sure what the judging criterion would be for a competition, but I'd be quite happy to dump the out of date and occasionally inaccurate data he gave us (hard coded in Java of course) into a made up file format if anyone likes the idea of that.[/QUOTE]
Still an option, unless anyone has anything directly against that.
I wonder how many actually want to code an AI themselves for this competition.
I've been thinking of a simple game that should have a lot of room for some advanced AI tactics.
[IMG]http://puu.sh/z9l9[/IMG]
Basically it's a grid based game where your AI controls one team of bots. A bot takes up one tile, and has a spike (or sword or whatever) sticking out in whatever direction it is facing.
Also present in the game are bases (the blue or red hatched squares in the picture) and energy packages (green blocks).
Each team starts with a given amount of bots, which may differ between maps. The aim of the game is to remove all enemy bots from the map. This is done by moving or turning a bot so the spike "stabs" an enemy bot, like DRoD. If two opposing bots move head-on into each other then both are removed.
The energy packages can be skewered by a bot, and when that bot moves or turns the package remains on the bot's spike. If you take an energy package back to your base it will spawn a new bot.
The grey walls are impassable, and a bot holding an energy package will drop the package if it tries to turn into a wall.
Maps can be any size, and wrap both horizontally and vertically. Energy packages will spawn at regular intervals as the game progresses.
An AI program will be sent the original map layout via standard input, and then for each turn it will be sent where every bot is and the rotation of each bot, and locations of food. We could have a fog of war system so a program is only told the size and the location of its bases at the start of the game, and when new features are within the view radius of a bot they are sent to the program.
After making a decision, each AI program will send via standard output a list of moves, at most one for each bot it owns. A move can be turn left, turn right, or move forward.
If a bot doesn't respond in something like a second, outputs something invalid or crashes then it loses.
Bots can be written in any language that can use standard input / output.
Do you think something like that would be fun? Any ideas for improvements?
[QUOTE=ROBO_DONUT;36217309]I think it could be neat if the rules for the 'game' weren't revealed until the actual competition (or give a premise with incomplete rules). Just come up with some API (for sensors, movement, 'score'/feedback, etc.) and force the AI to figure out the rules for itself.[/QUOTE]
Maybe we should just make a competition to design and develop the best/most usable/most interesting simulation software to use in the AI competition? Then both the most popular themes are used, so the people disappointed with the AI winning won't have as much to complain about, and we don't need to go through all of the voting process again immediately after.
[QUOTE=ROBO_DONUT;36217309]I think it could be neat if the rules for the 'game' weren't revealed until the actual competition (or give a premise with incomplete rules). Just come up with some API (for sensors, movement, 'score'/feedback, etc.) and force the AI to figure out the rules for itself.
I say this because if you explain the rules in advance, the programmer can just hard-code an optimal solution for that specific game and the AI wouldn't have to adapt or learn anything. At that point it becomes more of an exercise in game theory than AI or anything else.
I'm not sure, though, if this would drive the difficulty up too high for a little FP competition. I won't be entering, myself, and I think many of the people who do enter only do so when it is convenient. Making it too difficult could result in a lack of entries.[/QUOTE]
That sounds like fun, but as you said it would probably alienate too many people. I think you are underestimating how much an AI would need to adapt to its opponents ability and tactics for it to be successful, without the game needing to have changing rules to give an excuse for machine learning.
[QUOTE=Ziks;36221638]
//very complicated idea
[/QUOTE]
I like this idea because people can submit entries in any language, as long as the language has a TCP socket library.
I would add a "do nothing" move.
However, programming the server itself can't be easy, and if we go with the "any language" thing, we would basically have to write our own communication protocol for this game.
And there's the aforementioned fact that this will become a competition more in the implementation of tactics and strategy, rather than true AI. I think true AI, which is mainly about curve fitting and machine learning, is fairly boring though.
-snip-
[QUOTE=Smashmaster;36222111]I like this idea because people can submit entries in any language, as long as the language has a TCP socket library.
I would add a "do nothing" move.
However, programming the server itself can't be easy, and if we go with the "any language" thing, we would basically have to write our own communication protocol for this game.
And there's the aforementioned fact that this will become a competition more in the implementation of tactics and strategy, rather than true AI. I think true AI, which is mainly about curve fitting and machine learning, is fairly boring though.[/QUOTE]
It's not networked, or at least doesn't have to be, and would just use standard streams. You'll give the competing bots' executable locations as command line arguments to the game, and it will create a process for each and write to and read from their streams.
[QUOTE=Smashmaster;36222111]I like this idea because people can submit entries in any language, as long as the language has a TCP socket library.
I would add a "do nothing" move.
However, programming the server itself can't be easy, and if we go with the "any language" thing, we would basically have to write our own communication protocol for this game.
And there's the aforementioned fact that this will become a competition more in the implementation of tactics and strategy, rather than true AI. I think true AI, which is mainly about curve fitting and machine learning, is fairly boring though.[/QUOTE]
I think that quite a bit of machine learning would be needed in this particular system, given that any agent which failed to learn from its mistakes or adapt to its opponents would be wiped out by any agent which did.
Not to mention that it starts out blind and has to work out the world around it while controlling an arbitrary number of units.
A couple of interesting extra additions would be a dummy team that acts completely at random and moving map segments.
[QUOTE=Smashmaster;36222111]I would add a "do nothing" move.[/QUOTE]
Of course, forgot about that.
[QUOTE=Neo Kabuto;36221730]Maybe we should just make a competition to design and develop the best/most usable/most interesting simulation software to use in the AI competition? Then both the most popular themes are used, so the people disappointed with the AI winning won't have as much to complain about, and we don't need to go through all of the voting process again immediately after.[/QUOTE]
So you are suggesting that we will have a competition where everyone will make software to apply AI to, and then we will have a second competition where everyone will develop AI programs/scripts on the program of the winner of the previous (software) comp?
Either way, that sounds interesting.
I think Ziks' idea is an excellent one. If we don't do it however, may I recommend [URL="http://en.wikipedia.org/wiki/Robocode"]RoboCode[/URL]?
[QUOTE]Competitors write software that controls a miniature tank that fights other identically-built (but differently programmed) tanks in a playing field. Robots can move, shoot at each other, scan for each other, and hit the walls (or other robots) if they aren't careful. Though the idea of this "game" may seem simple, the actual strategy needed to win is not. Good robots can have thousands of lines in their code dedicated to strategy. Some of the more successful robots use techniques such as statistical analysis or attempts at neural networks in their designs.[/QUOTE]
Only issue with this is that the bots have to be written in .NET/Java. Just posting this as a backup in case we don't use Ziks' idea.
I'm writing a prototype of the game at the moment, but I don't mind if anyone else has a different idea for a challenge.
Ugh AI :V:
[QUOTE=Ziks;36224772]I'm writing a prototype of the game at the moment, but I don't mind if anyone else has a different idea for a challenge.[/QUOTE]
You done yet?
[QUOTE=Loli;36234981]You done yet?[/QUOTE]
Got family round so I'm going to be a bit slow working on it. I'll put the input / output up soon.
Progress [url=https://github.com/Metapyziks/DROD-AI-Challenge]here[/url]
Back to work. Format is as follows:
Server will send your program everything with one item per line. Each group of related data has an opening line with one word like "setup", "turn" etc, and the group ends with a line containing just "end".
Setup group:
This group is sent once at the start of the game. The data may not be in the order given.
[code]setup
seed [seed for random number generators:integer]
width [width of map:integer]
height [height of map:integer]
fow [is fog of war enabled:true|false]
vrange [visibility range:decimal]
turns [turn limit:integer]
timeout [timeout in milliseconds:integer]
teams [number of teams:integer]
end[/code]
Turn group:
This group is given at the start of each turn. When the group ends you are expected to send your orders to the server. There may be zero or more of each entry, except "t", where there will always be one. When a team number is given, 0 is your team and each number onwards will always be consistent with an enemy team. Directions are given as n, s, e, or w, signifying a cardinal direction. North is in the negative y direction, and west is negative x.
[code]turn
t [turn number:integer] # Starts at 1 for the first turn
d [team:integer] [x pos:integer] [y pos:integer] # Signifies where a bot has died
b [team:integer] [x pos:integer] [y pos:integer] # Position of a base
a [team:integer] [x pos:integer] [y pos:integer] [direction:n|s|e|w] # Position of an agent (bot)
p [x pos:integer] [y pos:integer] # position of an energy package
w [x pos:integer] [y pos:integer] # position of a wall
end[/code]
Giving your orders to the server is done as follows:
Each bot order is given one per line in this format:
[code][x pos:integer] [y pos:integer] [order:l|r|f] # l is turn left, r is turn right, f is move forward[/code]
If multiple orders are given for the same bot, the last one is used. You don't have to give an order for every bot, any bots without orders will just stay where it is.
After you are done giving orders, write a line with just the word "go".
Example server setup and first turn:
[code]setup
seed 307770963
width 32
height 32
fow True
vrange 5.000
turns 500
timeout 1000
teams 2
end
turn
t 1
w 0 0
w 0 1
w 1 0
d 1 4 5
b 0 8 8
b 1 12 12
a 0 4 6 n
a 1 11 10 e
p 8 9
p 7 3
end[/code]
And a reply for player 0:
[code]4 6 r
go[/code]
Decision: If a bot tries to push an energy package thing and something is blocking it, should the bot just not be able to move or should the package be destroyed and the bot moves normally?
Bot not moving would be little a bit harder for AI writers who want to have persistent objects for their bots and assume they always carry out the order given, and energy being removed adds the tactic of destroying packages near an enemy's base but too far from one of yours to feasibly take it there.
[IMG]http://www.facepunch.com/fp/ratings/wrench.png[/IMG] for bot doesn't move
[IMG]http://www.facepunch.com/fp/ratings/zing.png[/IMG] for package is destroyed
[editline]9th June 2012[/editline]
If anyone wants something to do while I work on the server, we'll need a visualiser written for the game logs so we can see the bots fight.
[URL="https://gist.github.com/2901750"]Here[/URL]'s an example game log, which basically has the game settings and map at the start, followed by the moves made by each competitor and positions of any (a)live or (d)ead bots. Turn 0 is just the staring positions of any bots.
Game server is done, although some things aren't tested since a more sophisticated bot is needed.
So, to clarify, would we have to write our bots in C#?
-misread, snip-
[QUOTE=Smashmaster;36268177]So, to clarify, would we have to write our bots in C#?[/QUOTE]
Any language
working on a log visualizer btw
love2d so it should be done quickly and will work on all platforms
love your idea ziks, finally a comp worth participating in
[editline]10th June 2012[/editline]
shouldn't bases be sent in the initial message at the top of the game log? bases don't move right? so why send them every turn?
[QUOTE=Kopimi;36270207]working on a log visualizer btw
love2d so it should be done quickly and will work on all platforms
love your idea ziks, finally a comp worth participating in
[editline]10th June 2012[/editline]
shouldn't bases be sent in the initial message at the top of the game log? bases don't move right? so why send them every turn?[/QUOTE]
I was thinking of adding a way to build or destroy bases in the future, but it would probably just add needless complexity. So yeah, I'll just send them when they are first seen like walls.
Define the field of vision or fog of war more specifically and without floating point math:
E.g. the FoV is a circular region around each own agent and own base which reveals enemy agents and energy packages.
Calculating whether a tile is within the FoV of a player should be done as follows:
The position of the closest base/agent of the player is (ax, ay)
The tile position is (tx, ty)
FoV radius squared is an integer, r2
The tile is visible if:
(ax - tx)^2 + (ay - ty)^2 <= r2
Sorry, you need to Log In to post a reply to this thread.