SoC Ideas FormulaAI
Contents
Writing an AI based on the formula AI
Wesnoth has always had a simple C++ based AI. David (our lead developer) has been working on a simple language to write AI in Wesnoth: FormulaAI
The Wesnoth AI is used as an opponent in most campaigns, and as such is an important piece of code for the Wesnoth project. Unfortunately, because the skills required to understand and modify it are rather arcane, it is also one of the most neglected parts of the Wesnoth code. This is a place where a lot of research and useful work could be done.
General description
The aim of this project is to develop a new AI that would replace the original C++ AI. The main criterias we would want for this new AI are
- Plugability : It should be trivial for any content maker to change the behavior of the AI in specific case. The exact cases are still to be defined but should typically include
- hardwiring the first few turns of the AI
- changing the recruitment pattern
- completely controlling a given unit (scenario unit)
- taking control then giving back control of a given unit
- tunability : It should be easy for a scenario author to specify the general behavior of the enemy on a given scenario (aggressiveness, intrepidity...)
- specific behaviors : there are some typical behaviors that are not optimal for winning a force-on-force battle but are needed for storyline reasons, such as: guarding a given unit, a given position, wandering aimlessly, attacking randomly, always fleeing. The AI should implement such behaviors, and allow easy addition of new behaviors
Required knowledge and talent
- A minimal knowledge of C++ is required, a good knowledge of C++ is desired : The formula AI framework is a work in progress and chances are high that some changes in the Wesnoth code base will be needed. The wesnoth developer community is used to handle people that are familiar with coding but not C++, however the Formula AI framework uses advanced C++ features and a good knowledge of the language would avoid a major hurdle when plugging in new entries or functionalities for the AI
- Good social interaction with a large player community : A preliminary phase to coding any AI is to know the strategies and gameplay patterns used by human players. This will require a lot of interaction with the player community. Our gameplay developers are communicative and can give some good starting points, but a lot of game experience and good interactions with the player community will be essential for doing a good redesign.
Milestones and deliverables
It is hard to set milestones at this point, but here are some ideas of what could be done:
- AI design description, and basic function library : This first deliverable aims to conclude the study and analysis part of the project : becoming familiar with the formula language, study of multiplayer strategies and of the need of scenario writers with regard to AI. We would like to have a description of the code structure of the AI, some basis of the play strategies it would use and how external scenario writers could configure it for the particular behavior they need
- Main AI delivery : This milestone goal is to deliver a working AI implementing the strategies described in the first phase. It would not have to systematically beat the standard C++ AI at this point, but should be able to play the game correctly (recruit, early deployment on villages, grouping units to attack, holding its ground, protecting weak/important units). Moreover most plug-in entries should be available and a test-case for these entries should be provided.
- Fine tunning and behavior library : The third phase would validate the actual strategy of the AI. The AI should consistently beat the default C++ AI, and do fairly well against an average human player. At that stage a library of scenario behaviors should also be delivered. The AI does not need to be as efficient with all scenario tweaking, but should act correctly with regard to the particular behavior desired.
See also
Summer of Code Ideas - The root where all information regarding SoC is (or better should be) linked from.