User:PJ

From The Battle for Wesnoth Wiki


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



This is a Summer of Code 2013 student page


Description

PJ - Proposal

AI Recruitment Algorithms

The current recruitment system is too weak for the AI to properly recruit units. AI is prone to not recruiting the best units for terrain and is also weak against counter recruitment. This problems can be fixed through a code overhaul in both the C++ section of recruitment and the Lua sections.

Specifics

  1. Support recruiting with multiple leaders.
  2. Recruitment with multiple leaders allows the AI to recruit more efficiently. This may be solvable by setting up multiple separate recruitment processes for the AI.

  3. Support per-leader recruit/recall lists.
  4. Allowing each leader to recruit gives the AI an even standing with human players.

  5. Support easy limiting of recruitable units.
  6. Analyze map terrain better
  7. This has been attempted before by analyzing the most favorable position on the map and recruiting according to said position. I think a better way of doing it would be to analyze the map for terrain advantages (i.e. terrain type and terrain height) and using the most common favorable land to build the recruitment algorithm. This allows the AI to play efficiently across the favorable areas of the map, while still maintaining the ability to play in non-favorable areas.

  8. Recruit units that are more useful
  9. Useful recruits will follow from the terrain analyzation.

  10. Improve counter-recruiting strategies.
  11. Counter recruitment is a problem for the AI, as it does not have the ability to handle units specifically recruited for the purpose of defeating the AI's chosen recruits. This may be solved by checking the AI's current recruits against the human's recruit-counter. Once it is known if the human player is countering the AI's recruits, the AI may be able to form a strategy for recruiting future units, or, even better, be able to predict the units the human may use to counter the AI's recruitment and adjust accordingly.

  12. Improve recruiting for AI-playable campaigns where AI has to not spend all the gold.

IRC

pjte

Questionnaire

1) Basics

1.1) Write a small introduction to yourself.

Hello all, my name is Adam. I am a freshman at the University of Wyoming. I have around two years of solid programming experience, specifically in C++, Java, and Python. I enjoy developing small games on the side to teach myself more about the field of computer programming. I also enjoy crocheting, knitting, playing the accordion, cooking, reading, and playing chess.

1.2) State your preferred email address.

akacmars@uwyo.edu

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

pjte

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

I wish to expand my programming knowledge. More specifically, I want to do something related to programming as a career. This dream is easier to achieve the more experience I can get, and this is just the opportunity to get that experience. Additionally, I hope to expand my knowledge of game mechanics, as programming games is a hobby of mine. The friendly development community of Wesnoth is a great place to cultivate these skills.

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

I am currently a freshman and will be a sophomore this fall. I attend the University of Wyoming in Laramie, WY. I am dual majoring in both Computer Science and in Astronomy. Due to a large amount of college credits taken in high school, I have roughly 50 credit hours completed.

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

I am from the United States, and can most likely join the IRC channel around 3:00 MST.

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

A possible week exists at the beginning of June where I would not have access to my home computer. A portable device could be used for some out of state coding.

2) Experience

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

I have worked on many school projects involving C++, Java, and Python.

C++ projects included development of general user applications that explored the basics of Object Oriented Programming.

Java and Python development focused mainly on learning the language through game development. Java games were created to utilize the javax.Swing library.

Python games existed from simple text-based games to Asteroids, Tetris, Pong, and Blackjack.

Additionally, I have self-taught myself a little bit of Lua in order to explore the graphics engine Love2D. I have created several games using this engine, including a version of Centipede.

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

I have not developed software as a team, but I have planned for the development of programs with other members of my class. This included writing pseudocode and UML based documents.

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?

I have not participated in Google Summer of Code before.

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

I have not been involved in the open source community before. I hope that the experience gained through this program will allow me to become a more active contributor to the world of open source.

2.5) Gaming experience - Are you a gamer?

I am indeed a gamer. From an early age I showed an affinity for games. It started with a simple SkiFree clone on an old Macintosh SE computer, and grew into a lifelong career-option. As I grew, I played many games of cards and Chess with my older brother. Eventually, I bought an old Atari 2600 at a garage sale and fell in love with video games again.

2.5.1) What type of gamer are you?

I enjoy many types of games, and will try any at least once. I enjoy anything from AAA titles, to indie games, to a simple board game with my friends, to more complex games like Dungeons and Dragons.

2.5.2) What type of games?

I play many varieties of games, but the games that I feel most satisfied with winning are strategy based games. I enjoy playing chess and euchre with my family, and I play Civilization V and Age of Mythology often with my friends.

2.5.3) What type of opponents do you prefer?

I prefer more human opponents. Since I have a large background in chess, it is always more rewarding to beat an actual person rather than a computer. This is due largely to the fact that humans have the capability to present a strategy that it illogical, and to make this new strategy work in their favor. However, one of the joys of coding games is to make the AI as close as possible to a human, or even better. One of my favorite pastimes in high school was to make the AI in my games unbeatable, as it could out-logic anyone.

2.5.4) Are you more interested in story or gameplay?

I am more interested in the mechanics of the game. The inner working of a game are ultimately what drives the game to becoming popular. I have enjoyed several games that had no story whatsoever, and were just tech-demos or proof-of-concepts. These games, although lacking story, had fabulous gameplay, which made them enjoyable.

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

I have played a few games of Wesnoth, enough to see how the AI works.

2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.

I have not contributed any patches to Wesnoth, but I have looked extensively through the Wesnoth source code. I have tried some basic edits, and have tried playing around with the AI.

3) Communication skills

3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.

I am a native English speaker.

3.2) What spoken languages are you fluent in?

I am not fluent in any other languages, but I can interpret Spanish to some extent.

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

I have dealt with many ‘rough’ players before. Coming from a chess background, many players often are competitive and use underhanded tactics. These players are relatively simple to handle once one is comfortable with the gaming system.

3.4) Do you give constructive advice?

I attempt to give constructive criticism whenever it is asked for. Additionally, I give criticism concisely, but can clarify if needed, and I am kind while doing so.

3.5) Do you receive advice well?

I am always open to improvements on any and all projects that I attempt.

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

I would like to think that I am. I have taken many college level writing courses, and often times the feedback on rough drafts of papers is more feedback than is necessary to implement in the final draft. As a result, I needed to decide which feedback points were major, and which issues were acceptable to remain in the final product.

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 wants.

I would like to discuss some about the project and determine what exactly needs to be done. Then, I would prioritize the objectives and plan the code. I would code and look for feedback on code as soon as a major difference was seen in the gameplay.

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?

AI: Refactor recruitment algorithm. I specifically would like to concentrate on terrain analysis and counter-recruitment strategy.

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

I did not choose my own project.

4.3) Why did you choose this project?

I chose this project due to my knowledge in both C++ and Lua. Additionally, this project seemed to contribute most to the overall AI structure. If the recruitment algorithm is updated and works correctly, users will have a better gameplay experience and be able to create campaigns with a more human AI.

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".

  • May 28th - June 18th:
  • Talk with mentors regarding exact problem locations and possible solutions. Write pseudocode and code snippets for testing. Pseudocode (or UML) and code snippets will be shared with mentors for approval. Week long vacation conflict at the beginning of June. Possibility to code while on vacation. Updates pending application approval.

  • June 19th
  • Coding begins

  • June 20th - July 29th
  • First term of coding. Focus will primarily be on terrain analysis and recruitment according to said analysis. If extra time exists, begin work on counter-recruitment algorithms. Additionally, multiple leader recruitment (which includes recruit/recall per leader) will be addressed if deemed acceptable by mentors.

  • July 29th
  • Midterm Evaluation

  • August 2nd - September 16th
  • Pending midterm approval, begin (or continue) coding counter-recruitment algorithms. If this is completed early, address any issues with the multple leader recruitment and work on recruit limits and expenditure issues in alternate campaigns if deemed acceptable by mentors.

  • September 16th
  • Suggested "pencils down" date

  • September 17th - September 23rd
  • Read through code with mentors. Work out any remaining issues or bugs. Clean up code.

  • September 23rd
  • Firm "pencils down" date. Work on project as a Google submission stops. Project coding will continue if issues are still present or if the algorithm has new apparent flaws.

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

Please see the Specifics section for basic implementation ideas.

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

I expect to gain knowledge of both the open source community and the game development community. I hope to use these skills in the future.

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

The game will never be fully complete, in the sense that improvements and updates will always be made so long as the community remains active. As long as bugs still exist in the code, and as long as the AI has errors to iron out, the project will remain interesting to me. The project becomes partly mine, since I contributed to the code, and I care about its outcome. Letting the project die due to lack of development is sad, and I would be unhappy to see something that I had worked on end up like this.

5) Practical considerations

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

  • Sub­­version (used for all commits)
  • C++ (language used for all the normal source code)
  • STL, Boost, Sdl (C++ libraries used by Wesnoth)
  • Python (optional, mainly used for tools)
  • build environments (eg cmake/scons)
  • WML (the wesnoth specific scenario language)
  • Lua (used in combination with WML to create scenarios)

I am familiar with C++, STL, Python, and small amounts of Lua. As stated above, I have worked with C++ through schooling and am familiar with its syntax. Additionally, I have coded several games in Python using both Tkinter and pygame modules. I have coded a few games in Lua using the Love2D graphics engine.

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

For programming in C++, I use either Microsoft Visual Studio, as this is what my classes require that I use, or I use Eclipse, for more recreational usage. I use Eclipse as it is similar to Microsoft Visual Study, is free, and has a clean workspace design.

For programming in Python, I use the Python IDE. This is what I learned to code Python in, so I am used to the formatting that Python IDE has.

For programming in Lua, I use Notepad++, as it is lightweight and it interfaces well with the Love2D graphics engine.

5.3) What programming languages are you fluent in?

I am fluent in C++, Python, Java, and Spanish (a little bit of humor there).

5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of "there is no way to contact you" does arise!

I am certainly open to talking to anyone who has questions.

This page was last edited on 5 May 2023, at 20:04.