SoC2011 FishbaitHarry

From The Battle for Wesnoth Wiki

This page is related to Summer of Code 2011
See the list of Summer of Code 2011 Ideas

This is a Summer of Code 2011 student page
Project: SoC_Ideas_LuaAI_2011


FishbaitHarry - Extending Lua AI support and implementing additional AI techniques

As the first part of my work I would like to design and implement the extension to the Lua script interface, providing it with all of the AI support functions that might be needed. If that task is completed swiftly, I would like to move on to implementing some additional support functions, including interfaces to customizing and using some advanced AI algorithms, like Reinforcement Learning.

The extent of work with additional support functions and the exact algorithms to be implemented would be based on research done during the first part of work, as I familliarise myself more with the whole ai used in Wesnoth. In the final product, I hope to make the Lua AI scripting both advanced and easy to use tool for both scenario developers and students who would like to use Wesnoth to test and compare AI techniques from scientific standpoint.



SoC Application

SoC Application


1) Basics

1.1) Write a small introduction to yourself.

I live in Poland, study in AGH University of Science and Technology in Cracow

1.2) State your preferred email address.

1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?


1.4) Why do you want to participate in summer of code?

To gain valuable coding experience and at the same time do something for the benefit of the humanity (as opposed to coding transactions for bank systems or similliar types of work).

1.5) What are you studying, subject, level and school?

I'm studying Computer Science at AGH University of Science and Technology in Cracow, Poland. I'm during my fourth year, I currently have an Engineer's Degree and next year I'll be working on my Master Engineer's Degree (equivalent to Master's Degree in most countries).

1.6) What country are you from, at what time are you most likely to be able to join IRC?

I live in Poland and that means I'm from UTC+01:00 area. Once the year at the university is finished I can be available at IRC at any time (for now it'll be mostly mornings and evenings).

1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.

The only vacation I plan for the summer periods is 16.07-31.07.

2) Experience

2.1) What programs/software have you worked on before?

At my university, I worked on more projects than I can count: starting with embedded systems, x86 assembler programs, flex/bison compilers, C applications, (...) ending with web services deployed on Google App Engine. For more notable achievements see below.

2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)

Yes. Some of my bigger projects include semi-extreme programming an Environment for Benchamrking Machine Learning Algorithms (in Java) and coding a security management system for XtreemOS (a linux distribution designed for grids) during my Erasmus internship in Great Britain.

2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?

It's my first time at GSoC.

2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.

As mentioned before, I worked with XtreemOS. I was doing plenty of research and coding regarding it's monitoring and security management systems, which I believe need much more work. :-)

2.5) Gaming experience - Are you a gamer?

I consider myself a gamer.

2.5.1) What type of gamer are you?

Competitive and ambitious.

2.5.2) What type of games?

Mostly strategy games, both computer ones and board games (including Warhammer). Then I play plenty of card games, both online card games and real collectible ones (like Magic: the Gathering). Also I love RPGs, both computer ones and pen&paper ones.

2.5.3) What type of opponents do you prefer?

Ones that can earn my respect and who have respect for me.

2.5.4) Are you more interested in story or gameplay?

Sometimes I want to challange my brain and choose one without a story, sometimes I just want to immerse myself in fantasy and then I choose games with a story.

2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.

So far I spent like 10hours on "Battle for Wesnoth" campaign and I'm somewhere in the middle. I really like the singleplayer, but I hope I can get some of my friends to go multi with me.

2.6) If you have contributed any patches to Wesnoth, please list them below.

None, so far too busy at the university.

3) Communication skills

3.1) Describe your fluency level in written English.

I believe it's as fluent as it gets. By the way I got an "A" at CAE.

3.2) What spoken languages are you fluent in?

Polish and English. Plus I know plenty of German.

3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.

You mean "good for me" or "good for them"? :-D Jokes aside I believe I can get friendly with just about anyone.

3.4) Do you give constructive advice?

I follow the philosophy of always beeing there to give someone a fishing rod, but never a fish.

3.5) Do you receive advice well?

I greatly value constructive criticism and it's really really hard to make me angry.

3.6) Are you good at sorting useful criticisms from useless ones?

Yes, interacting with my mentors at the university gives plenty of opportunity to learn.

3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to "see how it turn out", taking the risk of having it thrown away if it doesn't match what the project want

It depends on the task at hand, but I prefer the first way and occassionally I manage to write an "untouchable" piece of code (one that is immediately correct, optimized and compiles at the first go).

4) Project

4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?

I chose the "Extend Wesnoth's Lua AI support and improve Wesnoth's AI" project and after doing the (more or less) simple task of completing Lua support, I wish to concentrate on improving the AI by using some of the techniques learnt at the university, making them customizable and easy to use.

4.2) If you have invented your own project, please describe the project and the scope.


4.3) Why did you choose this project?

At the university, we had several projects related to AI for games and learn a lot about AI in general, most of these use the scientific approach and many are more suited for scientific work than for real games, but I hope to use some handpicked techniques, get some great results and revolutionize the world (of games). :-)

4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like "I booked holidays between A and B" and "I got an exam at ABC and won't be doing much then".

- from April 26 to May 23rd - Additional research on the existing AI implementation, including and concentrated on the Lua engine.
- from May 23 to June 23 - implementing Lua support extensions
- from June 24 to July 11 - research and prototyping of extra AI algorithms
- from July 12 to July 15 - making sure everything is tidy and well documented
- from July 16 to July 31 - vacation (summer camp with friends)
- from August 1 to August 15 - implementing AI improvements
- from August 16 to August 22 - buffer time in case of any setbacks

4.5) Include as much technical detail about your implementation as you can

During the first part of my work, I will add exisitng AI support functions to the lua engine (as in core.cpp) and register them with the other callbacks. In the second part of work, I hope to provide the interface with a set of functions for customizing and controlling (added seperately) learning mechanisms, so that a developer writing Lua code can ask the engine for things like moves suggested by several different engines/learning algorithms, compare them and choose one based on his own metrics. Instead of implementing the learning algorithms themselves, I would most likely make use of some of the open-source algorithms available and integrate them.

4.6) What do you expect to gain from this project?

I expect to gain plenty of experience, especially valuable considering I plan on working in the gaming industry. Moreover I hope to "make a difference" and I believe that doing some open-source work on a great game like this may contribute (if only a little) to the development of IT in general. :-)

4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?

I like the game and I value the idea of open software, so if only you'll like my work, I plan on improving my part of the Wesnoth project, or at least maintaining it if I'm very busy.

5) Practical considerations

5.1) Are you familiar with any of the following tools or languages?

Sub­­version (used for all commits) - I worked at about 6 projects all using S­­V­­N. C++ (language used for all the normal source code) - Yes, though most of my previous projects were wither C or Java. STL, Boost, Sdl (C++ libraries used by Wesnoth) - Yes, although I only used them ocassionally. Python (optional, mainly used for tools) - Only used it a couple of times, but after 4 years at my university I can code with pretty much anything (like: ruby, icon, lisp). build environments (eg cmake/scons) - Yes, plenty of different ones. Written many makefiles in my life, but I compiled Wesnoth with scons. WML (the wesnoth specific scenario language) - Not yet. Lua (used in combination with WML to create scenarios) - Not yet, but I hope to.

5.2) Which tools do you normally use for development? Why do you use them?

As for editor: gedit, netbeans, eclipse. (I like gedit because then programming feels so hardcore.) Other than that I used plenty of: s­­v­­n, make, latex, maven, hudson, trac, Dia. Ocasionally I use some MS Visual Studio 2008 and some Visual Paradigm.

5.3) What programming languages are you fluent in?

I wrote at least one application in: lisp, ruby, python, icon, matlab, C++, glsl and assembler. But I spent the most time in C and Java.

5.4) Would you mind talking with your mentor on telephone / internet phone?

No problem. (both on skype and on real phone, I'll give you my number later)

This page was last edited on 21 March 2013, at 03:56.