Robot AI
Posted: 25 Jan 2011, 11:24
Hi again -.-
Me and four other classmates are set to build a robot for Eurobot 2011: Chess'UP! Robot is supposed to be completely autonomous while playing 1v1 game against foe robot on specified playing table with specified playing objects. If anyone wants more details on that I'll be happy to oblige.
I've come here because I need some advice, guidelines or just simple directions in building AI for the task. Since we're mechanical engineering (mechatronics) under-graduates, we don't have any real formal training about the issue (AI, algorithms...). One of the guys on the team does happen to be professional programer tho, while the rest of us are also capable of producing some useful code if given enough time.
Just to be clear. I've already done some quick research, but mostly on pathfinding. I'm happy to search more info on my own as I'm not that lazy, but I think that things could go much faster if you guys point me towards some good reading or give me any kind of advice, since I suspect that there's quite a lot of knowledge floating around in Spring community.
I started this thread in Off topic because it has nothing to do with Spring explicitly.
Short summary of game mechanics:
Game is played on following table:
Each robot is assigned to one color, red or blue. You have 90 seconds to move that yellow playing objects. You can also build towers to get more points. You only get points for objects placed on your color, which makes stealing valid tactics!
Let's assume, for further discussion, that our robot knows positions of every playing element and foe robot at any time.
Points of interest:
- Decision making
- Pathfinding
- Misc
Tech specs:
- Programming language: C# (not debatable)
- Fully fledged PC (C2D E5500, 4GB RAM, SSD)
Time frame:
- 3 to 4 months
Decision making
I've build Battle ship "AI" in C before and I've done some simple decision making in other apps, but mostly using IF and Case statements. That worked great, but only for discrete decisions. The code also became quite hefty really fast, while enabling only limited number of decisions.
I now want to figure out, what's the best approach to AI from efficiency stand point. Our game is not very complex, but it's very very dynamical, which calls for unconventional decisions at the right time. I don't want to write everything down with IF statements. Things like machine learning are far far in the backlog and will be considered only if we make some unexpected progress.
Where do we start? What kind of terminology is used in AI programming (for more effective searching)? How complex do you think our solution could be in given time frame and amount of prior knowledge?
Pathfinding
As I mentioned earlier, I already did some quick pathfinding research. I immediately came across Dijkstra's algorithm and it's derivative A*. I think I have good enough understanding of A* to implement it in one way or another. I figure it's the right choice for our application and it shouldn't be problematic in CPU usage aspects also, because we only have 2 robots, 15 playing elements and rather small surface.
What do you thing about A* for our task? Any literature recommendations? Any alternatives?
Misc
"Decision making" is such a general title that I covered many points of interest with it. I'll see how this topic develops and try to provide with more specifics if needed, breaking everything down to simpler tasks.
Thank you!
Wisse
Me and four other classmates are set to build a robot for Eurobot 2011: Chess'UP! Robot is supposed to be completely autonomous while playing 1v1 game against foe robot on specified playing table with specified playing objects. If anyone wants more details on that I'll be happy to oblige.
I've come here because I need some advice, guidelines or just simple directions in building AI for the task. Since we're mechanical engineering (mechatronics) under-graduates, we don't have any real formal training about the issue (AI, algorithms...). One of the guys on the team does happen to be professional programer tho, while the rest of us are also capable of producing some useful code if given enough time.
Just to be clear. I've already done some quick research, but mostly on pathfinding. I'm happy to search more info on my own as I'm not that lazy, but I think that things could go much faster if you guys point me towards some good reading or give me any kind of advice, since I suspect that there's quite a lot of knowledge floating around in Spring community.
I started this thread in Off topic because it has nothing to do with Spring explicitly.
Short summary of game mechanics:
Game is played on following table:
Each robot is assigned to one color, red or blue. You have 90 seconds to move that yellow playing objects. You can also build towers to get more points. You only get points for objects placed on your color, which makes stealing valid tactics!
Let's assume, for further discussion, that our robot knows positions of every playing element and foe robot at any time.
Points of interest:
- Decision making
- Pathfinding
- Misc
Tech specs:
- Programming language: C# (not debatable)
- Fully fledged PC (C2D E5500, 4GB RAM, SSD)
Time frame:
- 3 to 4 months
Decision making
I've build Battle ship "AI" in C before and I've done some simple decision making in other apps, but mostly using IF and Case statements. That worked great, but only for discrete decisions. The code also became quite hefty really fast, while enabling only limited number of decisions.
I now want to figure out, what's the best approach to AI from efficiency stand point. Our game is not very complex, but it's very very dynamical, which calls for unconventional decisions at the right time. I don't want to write everything down with IF statements. Things like machine learning are far far in the backlog and will be considered only if we make some unexpected progress.
Where do we start? What kind of terminology is used in AI programming (for more effective searching)? How complex do you think our solution could be in given time frame and amount of prior knowledge?
Pathfinding
As I mentioned earlier, I already did some quick pathfinding research. I immediately came across Dijkstra's algorithm and it's derivative A*. I think I have good enough understanding of A* to implement it in one way or another. I figure it's the right choice for our application and it shouldn't be problematic in CPU usage aspects also, because we only have 2 robots, 15 playing elements and rather small surface.
What do you thing about A* for our task? Any literature recommendations? Any alternatives?
Misc
"Decision making" is such a general title that I covered many points of interest with it. I'll see how this topic develops and try to provide with more specifics if needed, breaking everything down to simpler tasks.
Thank you!
Wisse