https://wiki.wesnoth.org/api.php?action=feedcontributions&user=Crab&feedformat=atomThe Battle for Wesnoth Wiki - User contributions [en]2024-03-29T15:13:39ZUser contributionsMediaWiki 1.31.16https://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Global_strategy&diff=53329SoC Ideas AI Global strategy2014-03-01T10:45:15Z<p>Crab: </p>
<hr />
<div>{{SoC2014Idea}}<br />
<br />
==Description==<br />
===AI: Improve AI by implementing global attack/retreat decision===<br />
Page for the idea: [[SoC_Ideas_AI_Global_strategy]]<br />
<br />
The Wesnoth AI works by making local decisions about moves and attacks. Teach it to determine if it's worth to fight offensively or defensively in a given situation.<br />
<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 submitted student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no submitted student proposals for this idea''<br />
|category=Summer of Code 2014 Student Page&SoC Ideas AI Global Strategy<br />
|notcategory=SoC 2014 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2014_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
==Additional Information==<br />
<br />
Wesnoth has time of day cycles (...-day-day-dusk-night-night-morning-... ), with certain times of day heavily favoring units depending on their alignment. Moreover, new units are constantly trained - so, sometimes the best decision would be to defend and wait or fall back, other times the best decision would be to attack (e.g. with the aim of holding a strategic village until morning, and counter-attacking during morning and day, then falling back with dusk). The AI should learn to adapt its strategy depending on the balance of forces and the current time of day.<br />
<br />
==Good first steps==<br />
<br />
Read http://wiki.wesnoth.org/Customizing_AI_in_Wesnoth_1.8#how_AI_works.2C_a_short_developer-oriented_overview.<br />
Read http://wiki.wesnoth.org/Customizing_AI_in_Wesnoth_1.8#Customizing_AI_turn_sequence<br />
Take a look at some of the 'candidate actions', for example here - https://github.com/wesnoth/wesnoth/blob/master/src/ai/testing/ca.cpp<br />
The goal is to understand the AI turn structure, without going far into details of how each individual action works.<br />
Ask questions, if you'll have any. it's better to ask on IRC since it'll benefit other students asking the same.<br />
During the course of the project, you'll most likely have to add new candidate actions ("IF this DO that WITH PRIORITY such") and modify existing ones.<br />
<br />
==Whom to ask about this==<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Global_strategy&diff=53078SoC Ideas AI Global strategy2014-02-13T18:09:52Z<p>Crab: Created page with "{{SoC2014Idea}} =Description= <h2>AI: Improve AI by implementing global attack/retreat decision</h2> Page for the idea: SoC_Ideas_AI_Global_strategy Wesnoth AI works by ..."</p>
<hr />
<div>{{SoC2014Idea}}<br />
<br />
=Description=<br />
<h2>AI: Improve AI by implementing global attack/retreat decision</h2><br />
Page for the idea: [[SoC_Ideas_AI_Global_strategy]]<br />
<br />
Wesnoth AI works by making local decisions about moves and attacks, teach it to determine if it's worth to fight offensively or defensively in a given situation<br />
<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 submitted student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no submitted student proposals for this idea''<br />
|category=Summer of Code 2014 Student Page&SoC Ideas AI Global Strategy<br />
|notcategory=SoC 2014 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2014_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Wesnoth has time of day cycles (...-day-day-dusk-night-night-morning-... ), with certain times of day heavily favoring units depending on their alignment. Moreover, new units are constantly trained - so, sometimes the best decision would be to defend and wait or fall back, sometimes the best decision would be to attack (e.g. with the aim of holding a strategic village until morning, and counter-attacking during morning and day, then falling back with dusk). AI should learn to adapt its strategy depending on the balance of forces and on current time of day.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Zazweda&diff=50446User:Zazweda2013-04-26T11:52:29Z<p>Crab: /* Description */ (remove unnecessary link)</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI Defense Strategies 2013]]<br />
<br />
==Overview==<br />
The Total defense Strategy Google summer of code has for purpose to propose an AI that would take more variable into account before attacking. It would also make decision to move through a defensive algorithm if no "good" attack is found.<br />
<br />
==Attacking algorithm==<br />
<br />
The new attack algorithm may choose its target according to a different formula, which would take into account next round fight with the attacked unit (will it kill the AI unit instantly because it used a different attack ?) for exemple. Ideas of things to take into account on top of current ones :<br />
-Some might already be taken into account and I missed it, if so please tell me-<br />
<br />
* Possibility of escaping (is there a possibility to block him, or to make him slower -water?- or is he extra slow/ too fast)<br />
* Firepower right next to him (how many units and power compared to AI's)<br />
* Next round fight(distance and close attack have different outcome) ponderated by the %age of chance to kill him first<br />
* Threatening important units or position(almost lvl up for examples, castel, houses or good cases -like mountain for dwarfs- not only the leader)<br />
* Ratio number of house controlled by the AI and speed of the enemy (kill fast first to avoid quick invasion if AI starts having less house)<br />
<br />
==Defense Algorithm==<br />
<br />
On the other hand, sometime attacking is not the best way, sometime defending is better : you can pick best position for fighting (like forest for elves and stuff). This algorithm would take place if no good or few attack option are found. <br />
Stuff I would like the defense algorithm take into account :<br />
<br />
* Moving to a nice position for future fight, taking into account what is arround (the more bad cases for the enemy, the best).<br />
* Defending an important target (same as for attacking), by placing around it so it can't be reach, or on a bad land.<br />
* Backing to houses which no or few enemy can reach.<br />
* Move the leader to the best location (ratio between safe and close enough to recruit efficiently)<br />
<br />
==Micro AIs for defense and on the fly mods==<br />
<br />
The Micro AI system may be very interesting for the algorithms accentuating the aggressivity through bigger strength given to some variables.<br />
<br />
On the fly modifications would be useful to determine in which case attacking or defending is better according to the current state of the game (for exemple if AI has advantage with more unit or more house it can be more aggressive).<br />
<br />
=Description=<br />
<h4>Zazweda - Total defense Strategy</h4><br />
<br />
The defense project would include taking more information and probabilities into account (next turn for example).<br />
<br />
=IRC=<br />
Zazweda, ValentinD<br />
<br />
=Questionnaire=<br />
<h4>1) Basics</h4><br />
<br />
<b>1.1) Write a small introduction to yourself.</b><br />
<br />
I am a 21 yo french student in a Computer Science Engineering school in Belfort (North East). I am currently in the Image Interaction and virtual reality part of the Computer Science department and this is my last year. In the computer science field I love AI, Virtual reality, big data, videogame and I am very enthousiast about the open source principle ! <br />
For the rest of my life I like reading, playing any kind of game (board, role, cards, videogames,...) and finally I play Badminton.<br />
<br />
<b>1.2) State your preferred email address.</b><br />
<br />
valentin[dot]deschaintre[at]gmail.com<br />
<br />
<b>1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?</b><br />
Zazweda<br />
<br />
<b>1.4) Why do you want to participate in summer of code?</b><br />
<br />
The GSoc is an amazing possibility to discover a complete new world and start involving myself in it. I want to be part of some evolution with my knowledges and I hope that I finally have the skills to achieve this !<br />
<br />
<b>1.5) What are you studying, subject, level and school?</b><br />
<br />
I am studying Computer Science in the UTBM (French North East Engineering school). I am currently in the last year of study (school is in 5 years) and am specialised in the Image Interaction and virtual reality field.<br />
<br />
<b>1.6) What country are you from, at what time are you most likely to be able to join IRC?</b><br />
<br />
I am from France (GMT+2 right now), I would mostly be on IRC between 11 am and 11 pm during the GSOC. Before that I try to be on as much as possible, it would mainly be present at night. <br />
<br />
<b>1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.</b><br />
<br />
My exams will be over at the end of June. I would then be fully available until mid August, then a little bit less since school starts again in september (but the beginning is light).<br />
<br />
<h4>2) Experience</h4><br />
<br />
<b>2.1) What programs/software have you worked on before?<b><br />
<br />
I have worked on different projects at school such as a little Angry Birds like game and also an AI for a "Rasend Roboter" board game. I am currently working on animating a 3D character and a "World war simulation between Ants and termites. On my side I developped a little Space Invader in Python.<br />
<br />
I also did a 6 months Internship in a startup Company called "GumGum". I could work on a lot of different projects including a C++ HTTP server or JAVA data handling through ditributed technology such as hadoop. <br />
<br />
<b>2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)</b><br />
<br />
All my school projects are in team from 2 to 4 and I also worked with the others engineers in the company I was in (they were 6)<br />
<br />
<b>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?</b><br />
<br />
It would be my first experience in the GSoc.<br />
<br />
<b>2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.</b><br />
<br />
I am not involved yet in an open source development project but I am willing to now that I have a little bit more experience !<br />
<br />
<b>2.5) Gaming experience - Are you a gamer?/<b><br />
<br />
Yes !<br />
<br />
<b>2.5.1) What type of gamer are you?</b><br />
<br />
I like to play, I can be really fond of different types of games. I can be really passionated about some !<br />
<br />
<b>2.5.2) What type of games?</b><br />
<br />
I played to a lot of different types :<br />
Rts (Age of empires, Warcraft), but also some Moba (LoL), or RPGs (FFX would be the the most played), I also like to play some "old" games such as Magical Drop 3 or DoDonPachi(we have an arcade machine at school). <br />
<br />
<b>2.5.3) What type of opponents do you prefer?</b><br />
<br />
Depends of what I expect from the game, I like AIs because of the technological progress it represents. But in the end playing with or against other real player is often more challenging .<br />
<br />
<b>2.5.4) Are you more interested in story or gameplay?</b><br />
<br />
Story is very important when I play against AI, it often represents what the AI fights for or what it is. The gameplay is the first aspect you see of the game and the one that will follow you until the end, so I would say gameplay !<br />
<br />
<b>2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
<br />
We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.</b><br />
<br />
Yes, I played a few games before mostly multiplayer and a few campaigns, I haven't played intensively but my roommate is willing to fix this "issue" ;).<br />
<br />
<br />
<b>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.</b><br />
<br />
I created (not commited yet, still improving) a MIAs for the guardians that "guards" a zone.<br />
<br />
<h4>3) Communication skills</h4><br />
<br />
<b>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.</b><br />
<br />
I followed European cursus and spent 6 months in California, I would describe my level as "fluent".<br />
<br />
<b>3.2) What spoken languages are you fluent in?</b><br />
<br />
French, English, not bad in German<br />
<br />
<b>3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.</b><br />
<br />
When I play a game I always try to make it as cool as possible. I am not perfect either, but I try to keep calm and "play the game" ! I have been some kind of Community Manager for the website "www.kraland.org" before my internship (then it became a little complicated with the new life and schedule :( ).<br />
<br />
<b>3.4) Do you give constructive advice?</b><br />
<br />
I try not to troll for free ;). More seriously when I give an advice I try to explain why I give it, it might not be a general rule, but I know an unexplained advice is almost "useless".<br />
<br />
<b>3.5) Do you receive advice well?</b><br />
<br />
I try to stay open to any advice as long as people don't start by "omfg u r 2 stupid !" ^^"<br />
<br />
<b>3.6) Are you good at sorting useful criticisms from useless ones?</b><br />
<br />
That was part of my job as Community manager, and it currently is as president of my school association. I try to be as fair as possible and take the maximum of criticisms into account, eventhough it's sometime hard.<br />
<br />
<b>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</b><br />
<br />
I am more the kind of "I want to try my idea coded", of course I think about what I want to code first but I like to prove it's going to work and do what I want.<br />
<br />
<h4>4) Project</h4><br />
<br />
<b>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?</b><br />
<br />
I liked multiple projects, mainly the ones about the AIs. The defense AI and recruiting algorithm look really nice ! <br />
<br />
<b>4.2) If you have invented your own project, please describe the project and the scope.</b><br />
--<br />
<b>4.3) Why did you choose this project?</b><br />
<br />
The AI projects are very interesting to me because, well it's AI and I love everything related to it, I think of it as the next big step in computer evolution ! Implementing an AI for a game on top of all would be a great plus for me since it is a world I know and love.<br />
<br />
<b>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".</b><br />
<br />
I could work from 1st july to 15 august aprox and then a little less from 25 august to end of september (back to school). Before July I have to give all my school projects back and have my final exams for the semester é_è. <br />
<br />
<b>4.5) Include as much technical detail about your implementation as you can</b><br />
<br />
I think that the easiest way to implement easy to use and update AI would be to create one in C++ with all the basic defense behaviour. And add in LUA different MIAs detailing this general behaviour. A little bit like its done now with the "guardian" behaviour and MIAs.<br />
<br />
<b>4.6) What do you expect to gain from this project?</b><br />
<br />
I expect to gain an experience in open source projects, games, improve and learn new AI algorithm. And of course meet new awesome people !<br />
<br />
<b>4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?</b><br />
<br />
I would say the community itself ! Simply the atmosphere around the game I guess. I am willing to involve on a long time and I hope this GSoc could give a head start to it.<br />
<br />
<h4>5) Practical considerations</h4><br />
<br />
<b>5.1) Are you familiar with any of the following tools or languages?</b><br />
<br />
Subversion (used for all commits)<br />
Used it during the entire internship, pretty familiar<br />
Git (I put it as bfw is migrating to it if I understood well)<br />
Used it multiple times for different projects (mainly school ones)<br />
C++ (language used for all the normal source code)<br />
Learned it and used it for different purpose (working with it on my 3D animation project)<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I used Boost to implement the HTTP server in C++ and am Using the SDL for the animation project. I am willing to learn it further !<br />
Python (optional, mainly used for tools)<br />
Worked with it multiple times, mostly on personnal projects (a little pokemon and space invader with pygame)<br />
build environments (eg cmake/scons)<br />
Not very familiar but willing to learn<br />
WML (the wesnoth specific scenario language)<br />
Getting more familiar with it<br />
Lua (used in combination with WML to create scenarios) <br />
Trying to use it right now modifying and adding some MIAs<br />
<br />
<b>5.2) Which tools do you normally use for development? Why do you use them?</b><br />
<br />
I like eclipse for Java, I have no preferences for C++ developping, I recently tried the eclipse for C++ and the QT IDE, both were nice eventhough I prefered eclipse since I already know its architecture through the Java part. Gedit is useful too sometimes ;).<br />
<br />
<b>5.3) What programming languages are you fluent in?</b><br />
Java, Groovy, C++ are the main languages I know really well.<br />
<br />
<b>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! </b><br />
<br />
I wouldn't mind, if I need to be contacted in any way I would answer the phone ! (I will add it to the Gsoc application!)</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Gray&diff=50379User:Gray2013-04-22T14:53:23Z<p>Crab: /* Description */</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
<br />
=Description=<br />
<h4>TODO: add proposal title in this h4 tag</h4><br />
<br />
=IRC=<br />
GrayS<br />
<br />
=Questionnaire=<br />
1) Basics<br />
<br />
1.1) Write a small introduction to yourself.<br />
<br />
1.2) State your preferred email address.<br />
:gstanton@sas.upenn.edu<br />
:or gray5656@gmail.com<br />
<br />
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?<br />
<br />
1.4) Why do you want to participate in summer of code?<br />
<br />
1.5) What are you studying, subject, level and school?<br />
:I'm currently a freshman (1st year) at the University of Pennsylvania. My intended majors are :Computer Science and Economics, BA program.<br />
1.6) What country are you from, at what time are you most likely to be able to join IRC?<br />
:I'm from the US, and I'm on the east coast, so typically I would be able to be on IRC from 10am(EST) to 6pm.<br />
<br />
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.<br />
:I have no other major commitments that would prevent me from working on Wesnoth.<br />
<br />
2) Experience<br />
<br />
2.1) What programs/software have you worked on before?<br />
:I've worked on a number of smaller projects, including a bomberman clone, a maze-generator and :solver, an RPG set in Maine, a Paint-clone in OCaml, and a orbital-motion simulator.<br />
<br />
<br />
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)<br />
:Yes! I have worked on multiple projects in small groups.<br />
<br />
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?<br />
:I have not previously applied for any GSOC projects.<br />
<br />
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.<br />
:Not currently involved in the open source process, but very much interested in becoming so!<br />
<br />
<br />
2.5) Gaming experience - Are you a gamer?<br />
:Yes, I am an avid gamer.<br />
<br />
2.5.1) What type of gamer are you?<br />
I play all sorts of games, both video and board.<br />
<br />
2.5.2) What type of games?<br />
:My tastes are fairly eclectic, but my particular fancy is strategy games. I'm a big fan of Supreme :Commander, Age of Wonders, Civilization, Warlock MoTA, Men of War, Europa Universalis, King's Bounty, :Crusader Kings, and others. I also enjoy more indie games, such as Hotline Miami, Thomas Was Alone, :To The Moon, Mark of the Ninja, FTL, Anodyne, The Binding of Isaac, Super Hexagon, and quite a few :more that I won't list.<br />
2.5.3) What type of opponents do you prefer?<br />
:For strategy games, one should also try to play against someone who is slightly better than you. :Otherwise, you won't improve. However, they should also be willing to tell you what you did wrong. <br />
2.5.4) Are you more interested in story or gameplay?<br />
:Ultimately, the goal of a game is to produce the best experience. On the pure story end, you have :things like interactive fiction, and on the pure gameplay end you have roguelikes and Minecraft. :Neither is strictly preferable the other, and most games fall somewhere in the middle. <br />
<br />
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
:I have indeed played Wesnoth before, I've actually been playing it on and off for the last year or :so. I've predominantly played single-player games.<br />
<br />
<br />
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.<br />
<br />
<br />
3) Communication skills<br />
<br />
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.<br />
:English is my first language.<br />
<br />
3.2) What spoken languages are you fluent in?<br />
:English, Italian, and some Chinese.<br />
<br />
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.<br />
:I'm excellent at communicating with players! I've been active on a fair few forums in my time, and :I'm not easily intimidated. I'm also infallibly polite!<br />
<br />
3.4) Do you give constructive advice?<br />
:I always attempt to. If I have some advice to offer, I always try to frame it in a helpful and :engaging way.<br />
<br />
<br />
3.5) Do you receive advice well?<br />
:Also yes! I love getting constructive criticism, for it's the best way to improve.<br />
<br />
3.6) Are you good at sorting useful criticisms from useless ones?<br />
:Definitely. Useless criticism typically reveals itself quickly.<br />
<br />
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<br />
:I usually prefer to discuss things both beforehand and while coding, to better get a sense of the :direction the project should go. Specifications are important! However, I don't mind working :autonomously at all, and am quite capable of working independently.<br />
<br />
4) Project<br />
<br />
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?<br />
<br />
4.2) If you have invented your own project, please describe the project and the scope.<br />
<br />
4.3) Why did you choose this project?<br />
<br />
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".<br />
<br />
4.5) Include as much technical detail about your implementation as you can<br />
<br />
4.6) What do you expect to gain from this project?<br />
<br />
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?<br />
<br />
<br />
5) Practical considerations<br />
<br />
5.1) Are you familiar with any of the following tools or languages?<br />
<br />
Subversion (used for all commits):<br />
I am indeed familiar with both Subversion and GIT.<br />
<br />
C++ (language used for all the normal source code)<br />
I'm familiar with C++, but I'm always open to learning more about the language.<br />
<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I'm certainly familiar with STL, but I have not previously used Boost or Sdl<br />
<br />
Python (optional, mainly used for tools)<br />
Very familiar with Python.<br />
<br />
Build Environments (eg cmake/scons)<br />
I've used scons before, but not cmake.<br />
<br />
WML (the wesnoth specific scenario language)<br />
Not familiar, alas!<br />
<br />
Lua (used in combination with WML to create scenarios)<br />
I have used Lua before for minor scripting things, but it has been a while.<br />
<br />
<br />
5.2) Which tools do you normally use for development? Why do you use them?<br />
:For larger projects, I usually use Eclipse to manage things. For smaller tasks, I'll just use nano :and g++.<br />
5.3) What programming languages are you fluent in?<br />
:C++, Java, Python, OCaml, Haskell<br />
<br />
<br />
5.4) Would you mind talking with your mentor on telephone / internet phone?<br />
:I certainly wouldn't mind!</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Gray&diff=50378User:Gray2013-04-22T14:52:47Z<p>Crab: /* Description */</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
<br />
=Description=<br />
TODO<br />
<br />
=IRC=<br />
GrayS<br />
<br />
=Questionnaire=<br />
1) Basics<br />
<br />
1.1) Write a small introduction to yourself.<br />
<br />
1.2) State your preferred email address.<br />
:gstanton@sas.upenn.edu<br />
:or gray5656@gmail.com<br />
<br />
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?<br />
<br />
1.4) Why do you want to participate in summer of code?<br />
<br />
1.5) What are you studying, subject, level and school?<br />
:I'm currently a freshman (1st year) at the University of Pennsylvania. My intended majors are :Computer Science and Economics, BA program.<br />
1.6) What country are you from, at what time are you most likely to be able to join IRC?<br />
:I'm from the US, and I'm on the east coast, so typically I would be able to be on IRC from 10am(EST) to 6pm.<br />
<br />
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.<br />
:I have no other major commitments that would prevent me from working on Wesnoth.<br />
<br />
2) Experience<br />
<br />
2.1) What programs/software have you worked on before?<br />
:I've worked on a number of smaller projects, including a bomberman clone, a maze-generator and :solver, an RPG set in Maine, a Paint-clone in OCaml, and a orbital-motion simulator.<br />
<br />
<br />
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)<br />
:Yes! I have worked on multiple projects in small groups.<br />
<br />
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?<br />
:I have not previously applied for any GSOC projects.<br />
<br />
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.<br />
:Not currently involved in the open source process, but very much interested in becoming so!<br />
<br />
<br />
2.5) Gaming experience - Are you a gamer?<br />
:Yes, I am an avid gamer.<br />
<br />
2.5.1) What type of gamer are you?<br />
I play all sorts of games, both video and board.<br />
<br />
2.5.2) What type of games?<br />
:My tastes are fairly eclectic, but my particular fancy is strategy games. I'm a big fan of Supreme :Commander, Age of Wonders, Civilization, Warlock MoTA, Men of War, Europa Universalis, King's Bounty, :Crusader Kings, and others. I also enjoy more indie games, such as Hotline Miami, Thomas Was Alone, :To The Moon, Mark of the Ninja, FTL, Anodyne, The Binding of Isaac, Super Hexagon, and quite a few :more that I won't list.<br />
2.5.3) What type of opponents do you prefer?<br />
:For strategy games, one should also try to play against someone who is slightly better than you. :Otherwise, you won't improve. However, they should also be willing to tell you what you did wrong. <br />
2.5.4) Are you more interested in story or gameplay?<br />
:Ultimately, the goal of a game is to produce the best experience. On the pure story end, you have :things like interactive fiction, and on the pure gameplay end you have roguelikes and Minecraft. :Neither is strictly preferable the other, and most games fall somewhere in the middle. <br />
<br />
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
:I have indeed played Wesnoth before, I've actually been playing it on and off for the last year or :so. I've predominantly played single-player games.<br />
<br />
<br />
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.<br />
<br />
<br />
3) Communication skills<br />
<br />
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.<br />
:English is my first language.<br />
<br />
3.2) What spoken languages are you fluent in?<br />
:English, Italian, and some Chinese.<br />
<br />
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.<br />
:I'm excellent at communicating with players! I've been active on a fair few forums in my time, and :I'm not easily intimidated. I'm also infallibly polite!<br />
<br />
3.4) Do you give constructive advice?<br />
:I always attempt to. If I have some advice to offer, I always try to frame it in a helpful and :engaging way.<br />
<br />
<br />
3.5) Do you receive advice well?<br />
:Also yes! I love getting constructive criticism, for it's the best way to improve.<br />
<br />
3.6) Are you good at sorting useful criticisms from useless ones?<br />
:Definitely. Useless criticism typically reveals itself quickly.<br />
<br />
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<br />
:I usually prefer to discuss things both beforehand and while coding, to better get a sense of the :direction the project should go. Specifications are important! However, I don't mind working :autonomously at all, and am quite capable of working independently.<br />
<br />
4) Project<br />
<br />
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?<br />
<br />
4.2) If you have invented your own project, please describe the project and the scope.<br />
<br />
4.3) Why did you choose this project?<br />
<br />
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".<br />
<br />
4.5) Include as much technical detail about your implementation as you can<br />
<br />
4.6) What do you expect to gain from this project?<br />
<br />
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?<br />
<br />
<br />
5) Practical considerations<br />
<br />
5.1) Are you familiar with any of the following tools or languages?<br />
<br />
Subversion (used for all commits):<br />
I am indeed familiar with both Subversion and GIT.<br />
<br />
C++ (language used for all the normal source code)<br />
I'm familiar with C++, but I'm always open to learning more about the language.<br />
<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I'm certainly familiar with STL, but I have not previously used Boost or Sdl<br />
<br />
Python (optional, mainly used for tools)<br />
Very familiar with Python.<br />
<br />
Build Environments (eg cmake/scons)<br />
I've used scons before, but not cmake.<br />
<br />
WML (the wesnoth specific scenario language)<br />
Not familiar, alas!<br />
<br />
Lua (used in combination with WML to create scenarios)<br />
I have used Lua before for minor scripting things, but it has been a while.<br />
<br />
<br />
5.2) Which tools do you normally use for development? Why do you use them?<br />
:For larger projects, I usually use Eclipse to manage things. For smaller tasks, I'll just use nano :and g++.<br />
5.3) What programming languages are you fluent in?<br />
:C++, Java, Python, OCaml, Haskell<br />
<br />
<br />
5.4) Would you mind talking with your mentor on telephone / internet phone?<br />
:I certainly wouldn't mind!</div>Crabhttps://wiki.wesnoth.org/index.php?title=HackingWesnoth&diff=50375HackingWesnoth2013-04-22T13:01:07Z<p>Crab: /* C++ Quiz */</p>
<hr />
<div>This page is designed to be a guide for aspiring Wesnoth programmers on what they need to do to be able to productively contribute to the Wesnoth code base.<br />
<br />
Wesnoth is written in C++, a large and complicated language. There are many C++ programmers, but they tend to have widely varying levels of skills and styles. This page is designed to be a guide as to the skillset needed to contribute to Wesnoth.<br />
<br />
== C++ Quiz ==<br />
<br />
Below is a short C++ quiz that assesses your skills in areas of C++ that are used a lot in Wesnoth. If you know all the answers to the questions, you are probably ready to start working on the Wesnoth code base. If you know most of the answers to the questions, you can probably work on the Wesnoth code base with some oversight from the senior developers. There are good C++ guides for both knowledgeable programmers (such as [http://www.icce.rug.nl/documents/cplusplus/ The C++ Annotations]) and beginners (such as one of the books [http://stackoverflow.com/q/388242/559931 suggested here]).<br />
<br />
# What is a virtual destructor? Why is it needed?<br />
# What does the class template <tt>shared_ptr</tt> do? What is its purpose?<br />
# What is a vector, and why would you use it?<br />
# What is a map, and why would you use it?<br />
# What are the differences between a reference and a pointer? When should each be used?<br />
# What is an iterator, and when is it used?<br />
# What are the memory areas in a C++ program, and what is the purpose of each?<br />
# When should a member function be <tt>const</tt>? What effect does this have?<br />
# What is a copy constructor, and what is an assignment operator? When must you define them in a class?<br />
<br />
== Wesnoth Coding Style ==<br />
<br />
=== Guideline 1: Don't prematurely optimize ===<br />
<br />
<blockquote>When I was a new and inexperienced coder, I read the following rather famous saying: "Premature optimization is the root of all evil." -- Donald Knuth.</blockquote><br />
<br />
While I wouldn't then -- and would be hesitant to now -- dispute the opinion of Donald Knuth on any programming topic, this absolute statement confused me. Premature optimization certainly doesn't sound like a wise thing to do, but it sounds somewhat obscure to be the root of all problems in programming. Had Knuth written this phrase after spending too long correcting problems caused by a programmer who was hell-bent on optimization at every turn?<br />
<br />
Now I realize that Knuth was correct. Time and time again programming problems spring from developers making their code too complicated because they are trying to optimize unnecessarily.<br />
<br />
By the [http://en.wikipedia.org/wiki/Pareto_principle Pareto Principle] we know that a minority of the code will occupy a majority of the running time. That is, perhaps 90% of the running time of the program will be spend executing just 5% of the code. It is thus generally unnecessary to apply many optimizations at all to most of the program. One can just write the code in a way that is the most readable and maintainable and forget about optimization altogether most of the time.<br />
<br />
Remember also, C++ compilers are good, and smart, and they can execute code fast. Most code will run fast enough, unless you go out of your way to make it run slowly.<br />
<br />
So, the first rule of Wesnoth programming is that unless you have a very good reason to think you need to optimize, do whatever is simplest and most maintainable.<br />
<br />
Many programmers seem to have an obsession with using the control C++ gives them to do all sorts of crazy things. Like make their own memory management routines, or write their own containers, and so forth. Simply, don't. It's possible to write good C++ code very fast using the standard components supplied as part of the language.<br />
<br />
This leads us to our next topic...<br />
<br />
=== Guideline 2: Know the Standard containers and use them ===<br />
<br />
One of the best things about C++ is that the standard supplies some great containers. Always prefer to use them first to store data. That is,<br />
<br />
* prefer to use std::vector to store dynamic arrays<br />
* prefer to use std::string to store strings (we also provide t_string for a translatable string -- it's based on std::basic_string, which std::string is also based on)<br />
* prefer to use std::map to store key/value pairs<br />
* prefer to use std::set to store sets of items (roughly equivalent to the mathematical concept of a set).<br />
<br />
There are other C++ containers, and you should know about all of them. A good source of documentation on the portion of the C++ standard library known as the Standard Template Library (STL) which contains the standard containers can be found [http://www.sgi.com/tech/stl/ here].<br />
<br />
By using the standard containers, you should almost never have to manually allocate and delete memory yourself by hand. The containers will automatically allocate and deallocate memory for you. This leads us to our next guideline...<br />
<br />
=== Guideline 3: Use the resource acquisition is initialization (RAII) idiom ===<br />
<br />
In C, you might write some code like this:<br />
<br />
<pre><br />
void myfunction()<br />
{<br />
char* mystring = (char*)malloc(n);<br />
/*some code, which manipulates mystring*/<br />
...<br />
free(mystring);<br />
}<br />
</pre><br />
<br />
This code works, but is error prone. What if the code in the middle exited using a return statement, or a longjmp statement, or in C++, threw an exception? The memory allocated would never be cleaned up, and we would have a memory leak.<br />
<br />
Sure, you're a good programmer, and you probably make sure you're very careful about freeing the string. But what about when this function grows to be 100 lines long (and functions have a way of doing that), and then another programmer who isn't that familiar with the function is trying to fix a critical bug as quickly as they can, that requires adding an early return statement to this function? What about when someone is trying to read the code to scan for memory leaks? Once they see the malloc at the top, they will have to carefully read the entire function, to make sure it's all okay.<br />
<br />
Now if we had this C++ version instead,<br />
<br />
<pre><br />
void myfunction()<br />
{<br />
std::string mystring(n,'x');<br />
/*some code, which manipulates mystring*/<br />
} //mystring is destroyed and memory automatically released<br />
</pre><br />
<br />
None of these problems can possibly happen. mystring will ''always'' be released at the end of the function.<br />
<br />
So, this just re-iterates how important C++ containers are, right? Well, yes, but it also shows us that we should always avoid code written like this:<br />
<br />
<pre><br />
void myfunction()<br />
{<br />
...allocate resources...<br />
...use resources<br />
...release resources...<br />
}<br />
</pre><br />
<br />
If you have code like this, you should put the resources in a class that will manage them and release them at the end of the function. If there is no class like that, then you should write one. This goes for all resources: memory, files, threads, and so forth.<br />
<br />
It might sound like a silly mistake that we're protecting against here, one that an experienced programmer wouldn't make. However, almost all programming bugs are due to 'silly mistakes'. This leads us to our next item...<br />
<br />
=== Guideline 4: Lean on the compiler as heavily as you can ===<br />
<br />
Humans make mistakes. Even very stupid mistakes. Computers are as dumb as toast, but they are at least very very consistent.<br />
<br />
For Wesnoth, we try to write code that will make the compiler guard against mistakes as much as possible. The use of RAII as described above is one example of this: writing the code so the compiler and language rules will guarantee it's correct.<br />
<br />
There are some more ways to do this. One big way is to make all code const correct. That is, always define something as 'const' when it shouldn't change its value. If you have a pointer that is meant to be read only, define it as a const pointer. Then if the code is later changed so that your pointer changes the value, the compiler will produce an error.<br />
<br />
Another way is to avoid implicit conversions between objects, and always use the C++-style casts.<br />
<br />
<br />
== See also ==<br />
* [[CodingStandards]]<br />
* [[PatchSubmissionGuidelines]]<br />
<br />
[[Category:Development]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=EasyCoding&diff=50374EasyCoding2013-04-22T12:55:41Z<p>Crab: /* Improvements to AI */</p>
<hr />
<div>== Foreword ==<br />
<br />
'''We are currently in the process of updating this page. Parts marked by <s>strikeout</s> will likely be deleted shortly.<br />
<br />
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. <br />
<br />
If you are such a person, you should feel free to edit this page.<br />
<br />
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.<br />
<br />
Anybody should feel free to add "clues" to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.<br />
<br />
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll "free" it back (that is if you're not working on it. If you have problems implementing it, just tell us....)<br />
<br />
--[[User:Boucman|Boucman]] 20:48, 3 October 2006 (CEST)<br />
<br />
== MP related features ==<br />
=== Add possibility to give reason for "ignore" ===<br />
As per FR #16001 [https://gna.org/bugs/?16001]<br />
<br />
-- [[User:Perennate|Perennate]] 01:57, 19 April 2013 (UTC) currently working on this<br />
<br />
=== Add possibility to switch off dependency checking ===<br />
MP add-ons can define dependencies. Currently there's no way to force a "broken" configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).<br />
<br />
== WML related features ==<br />
<br />
=== Side-specific results ===<br />
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]<br />
<br />
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR<br />
<br />
=== Support for leaderless multiplayergames ===<br />
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])<br />
<br />
=== Support variable recall cost in wml ===<br />
see https://gna.org/bugs/?16538<br />
<br />
the syntax needs to be discussed and refined, but the overall idea is good<br />
<br />
make sure to update whiteboard to handle this correctly<br />
<br />
Ask Boucman<br />
<br />
=== Other Ideas ===<br />
See [[FutureWML]]; some ideas there are easier than others.<br />
<br />
== Improvements to AI ==<br />
<br />
Note: not all of these are simple tasks. Talk to Crab or mattsc.<br />
<br />
* Setting aspects in the [side] tag like this:<br />
[ai]<br />
aggression=0.123<br />
[/ai]<br />
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event. Making the above syntax available (as it is with the c++ engine) would be nice. The same also applies to the FAI engine and to aspects set for AI sides in MP games.<br />
<br />
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice. (This is not a simple task. Some first attempts to do it have been made, but work seems abandoned at the moment.)<br />
<br />
* Set up a capability for letting a custom AI choose what unit type a unit advances to at the time of leveling up. ([[User:Flixx|flix]] and [[User:Elf11|Elf11]] will work on this - 17 April 2013)<br />
<br />
* Currently, setting goto_x, goto_y makes the unit go to that location in a straight line, even if that leads into a dead end. It would be nice to have this changed so that the unit uses the shortest possible path instead. All the pieces for this are in place, should be pretty easy to do. ([[User:Flixx|flix]] will work on this - 13 April 2013)<br />
<br />
* A number of AI parameters (aspects) have been deprecated. Add deprecation messages for those. This also involves fixing the syntax of mainline campaigns that use deprecated parameters. ([[User:PL_kolek|PL_kolek]] will work on this - 21 April 2013)<br />
<br />
* Add more replay-safe actions to the Lua AI actions. A first step could be to add an AI action (and add lua function to do that) to use a right-click menu item.<br />
<br />
* In standard MP game or campaign game, if side X (e.g X=1) is human, wesnoth.debug_ai(X) segfaults wesnoth since lua ai for side X is undefined. fix it (by making debug_ai initialize the standard lua ai for side X if it's not yet initialized)<br />
<br />
== GUI related features ==<br />
-------------------<br />
<br />
Note at the moment Mordante is working on a new GUI system, these <br />
changes will probably affect the way these items need to be implemented.<br />
Contact Mordante on IRC before starting to work on these.<br />
<br />
--[[User:SkeletonCrew|SkeletonCrew]] 14:04, 9 March 2008 (EDT)<br />
<br />
=== Theme Changes ===<br />
<br />
* hide the hourglass item from the statusbar when there is no timer<br />
<br />
=== Widget Changes ===<br />
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud) <br />
* input history (chat, commands, ..)<br />
<br />
== GUI2 related features ==<br />
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. <br />
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit<br />
* The source code is under src/gui/<br />
* The configuration config files are under data/gui/default<br />
<br />
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.<br />
<br />
=== Port the random map generator dialog to GUI2 ===<br />
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).<br />
<br />
== Miscellaneous ==<br />
<br />
=== More powerful village naming ===<br />
'''Adding mountain names and other features to village names, having a second random name in village names'''<br />
<br />
Currently the village naming engine has a very good structure that could allow <br />
more powerfull names to be generated. <br />
Understanding how it works should be quite easy, and a few usefull improvements could be added.<br />
<br />
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...<br />
* It would be nice to have a separate list of "first sylabus" and "last sylabus" for naming. That's not really needed in english, but some translations could use it<br />
* Again, it is common to have villages with more than one "random" word in them. having a $name2 variable would be nice<br />
<br />
=== Debug Mode ===<br />
* New debug command functionality (setting additional status.variables, possibly terrain)<br />
* Add a right-click option in debug mode to kill the unit under the cursor<br />
<br />
== Bugs ==<br />
<br />
<br />
<br />
== See Also ==<br />
<br />
[[NotSoEasyCoding]]<br />
<br />
[[Category:Development]]<br />
[[Category:Future]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Your_Own_Ideas_2013&diff=50373SoC Ideas Your Own Ideas 20132013-04-22T12:51:47Z<p>Crab: Created page with '{{Template:SoC2013Idea}} = Description = <h2>Other: Your own ideas</h2> Page for the idea: SoC_Ideas_Your_Own_Ideas_2013 Suggested skills: C++ (depends on the project). {{…'</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Other: Your own ideas</h2><br />
<br />
Page for the idea: [[SoC_Ideas_Your_Own_Ideas_2013]]<br />
<br />
Suggested skills: C++ (depends on the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Your Own Ideas2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
You're welcome to propose your own ideas to Wesnoth's developers.<br />
<br />
=Whom to ask about this=<br />
Mail wesnoth-dev mailing list, try to find a developer interested in your idea.</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Rsyh93&diff=50372User:Rsyh932013-04-22T12:49:42Z<p>Crab: /* Description of Proposal */</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_AI_Recruitment_2013]]<br />
<h1>Proposal is still being edited.</h1><br />
=Description=<br />
<h4>rsyh93 - AI Recruitment Restructuring</h4><br />
===Description of Proposal===<br />
Test<br />
<br />
=IRC=<br />
rsyh93<br />
<br />
=Questionnaire=<br />
==Basics==<br />
===Write a small introduction to yourself.===<br />
<br />
===State your preferred email address.===<br />
rsyh93 [at] gmail [dot] com<br />
===If you have chosen a nick for IRC and Wesnoth forums, what is it?===<br />
rsyh93<br />
===Why do you want to participate in summer of code?===<br />
I've always been interested in programming since I was young. I'm also passionate about free/open source software, but I wasn't sure how I should get involved. I feel that the Google Summer of Code program is a great merger of my two interests and, to be honest, a great way to get paid for contributing.<br />
===What are you studying, subject, level and school?===<br />
Currently I'm a first-year community college student about a semester away from an associate degree. I'm planning on pursuing a Computer Science degree once I transfer to a university. As for courses, the most recent Computer Science course I enrolled in was the Data Structures course from my college, and before that I took multiple programming classes in high school and was also a student helper for the programming class afterwards.<br />
===What country are you from, at what time are you most likely to be able to join IRC?===<br />
I'm on the United States East coast and will mostly be available in the evening local time: around 6PM-11PM GMT-5 (11PM-4AM GMT) <br />
===Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.===<br />
I do not have any commitments for the summer.<br />
==Experience==<br />
===What programs/software have you worked on before?===<br />
<br />
===Have you developed software in a team environment before? (As opposed to hacking on something on your own)===<br />
===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?===<br />
No, this will be my first time participating in Google Summer of Code<br />
===Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.===<br />
===Gaming experience - Are you a gamer?===<br />
====What type of gamer are you?====<br />
I consider myself to be a casual gamer: I prefer not to purchase games until they go on sale, and then barely play them after purchase, with certain exceptions.<br />
====What type of games?====<br />
I love all kinds of games, but prefer role-playing games or strategy games, especially those with a competitive aspect. My current favorite game is Starcraft II.<br />
====What type of opponents do you prefer?====<br />
<br />
====Are you more interested in story or gameplay?====<br />
It depends on the game. <br />
====Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.====<br />
<br />
===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.===<br />
<br />
==Communication skills==<br />
===Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.===<br />
English is my preferred language. It's been my main language since I moved to the United States when I was seven. I am able to write college essays or discuss politics in English.<br />
===What spoken languages are you fluent in?===<br />
English<br />
===Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.===<br />
===Do you give constructive advice?===<br />
===Do you receive advice well?===<br />
===Are you good at sorting useful criticisms from useless ones?===<br />
===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===<br />
I would prefer to have complete and detailed knowledge of the problem I am trying to fix. Once I understand the problem, I am mostly able to effectively work on my own.<br />
==Project==<br />
===Did you select a project from our list===</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Vodkano&diff=50371User:Vodkano2013-04-22T12:48:07Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
=Description=<br />
<h4>Vodkano - Mainline Campaigns Refactoring</h4><br />
See the proposed idea here:<br />
<br />
http://wiki.wesnoth.org/SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013<br />
<br />
I'm going to update and port all the mainline campaigns so they can use the new capabilities of the AI engine.<br />
<br />
=IRC=<br />
Vodkano<br />
<br />
=Questionnaire=<br />
1) Basics<br />
<br />
1.1) Write a small introduction to yourself.<br />
<br />
Hi, I'm Vodkano, a 4th year Computer Engineering.<br />
<br />
1.2) State your preferred email address.<br />
<br />
ferran[dot]mesas01[at]gmail[dot]com<br />
<br />
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?<br />
<br />
Vodkano<br />
<br />
1.4) Why do you want to participate in summer of code?<br />
<br />
GSoC gives students the opportunity to get involved in Open Source projects in a friendly environment. It is the perfect opportunity to start collaborating. <br />
<br />
1.5) What are you studying, subject, level and school?<br />
<br />
I'm a student taking a degree in Computer Engineering at UPF in Barcelona. I'm currently in my 4th year as a univerity student.<br />
<br />
1.6) What country are you from, at what time are you most likely to be able to join IRC?<br />
<br />
I'm from Spain. I will be able to join IRC most afternoons and nights between 15:00-22:00 GMT.<br />
<br />
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.<br />
<br />
I will be fully available starting mid-july due to exams. I have no other commitments.<br />
<br />
2) Experience<br />
<br />
2.1) What programs/software have you worked on before?<br />
<br />
I've worked on multiple software projects, including audio, image and video processing, a simple IRC-like chat server using my own protocol and a parser and compiler for a simple language.<br />
<br />
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)<br />
<br />
Yes, most of my school assignments have been done in groups of up to 4 people.<br />
<br />
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?<br />
<br />
No.<br />
<br />
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.<br />
<br />
I'm not commited to any open source project, but I have submitted some patches to Octave.<br />
<br />
2.5) Gaming experience - Are you a gamer?<br />
<br />
Yes.<br />
<br />
2.5.1) What type of gamer are you?<br />
<br />
I like theorycrafting and min-maxing both PvE and PvP games, but I enjoy PvE more.<br />
<br />
2.5.2) What type of games?<br />
<br />
I enjoy strategy games, both real-time and turn-based. <br />
I also like puzzle games and any kind of intellectual challenge.<br />
I also play League of Legends.<br />
<br />
2.5.3) What type of opponents do you prefer?<br />
<br />
I prefer playing vs smart and hard-to-predict AIs and/or playing against people I know (opposed to random opponents).<br />
<br />
2.5.4) Are you more interested in story or gameplay?<br />
<br />
It depends on the genre: <br />
A strategy game needs both: good gameplay to be interesting, and a story to keep you engaged.<br />
Other genres (like FPSs) need interesting stories: There aren't many variations of the FPS genre, so they all have roughly the same gameplay.<br />
<br />
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
<br />
Yes, i've played on and off since 1.8. I enjoy playing the campaigns. I have played some multiplayer matches against friends.<br />
<br />
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.<br />
<br />
Not yet!<br />
<br />
<br />
3) Communication skills<br />
<br />
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.<br />
I'm fluent in written English.<br />
<br />
3.2) What spoken languages are you fluent in?<br />
<br />
I'm fluent in Catalan, Spanish and English.<br />
<br />
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.<br />
<br />
I try to be level-headed. Raging and being rude has never been helpful.<br />
<br />
3.4) Do you give constructive advice?<br />
<br />
Yes: Advice of the type "You should try to play better" shouldn't be considered advice.<br />
<br />
3.5) Do you receive advice well?<br />
<br />
I am open to new ideas and variations of my strategies, but I find it hard (or unfun) to completely adopt other players' strategies.<br />
Good and constructive advice is always welcome.<br />
<br />
3.6) Are you good at sorting useful criticisms from useless ones?<br />
<br />
A good reasoning behind any criticism is the most important element. Advice without a reasoning is harder to understand. I rely on the "why should I do that" more than on "what should i do".<br />
<br />
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<br />
<br />
I like testing new things and ideas, even if I have to throw them away, but always after a little discussion.<br />
<br />
<br />
4) Project<br />
<br />
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?<br />
<br />
I'd like to get to know the AI system of Wesnoth by porting the mainline campaigns to it. After getting knowledgeable with it, i'd like to get involved with the other AI projects.<br />
<br />
4.3) Why did you choose this project?<br />
<br />
AI development is a interest of mine. I chose this particular project because it lets me interact with the AI system and drive it to the limit, using all of its capabilities.<br />
<br />
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".<br />
<br />
I have exams from late June to mid-July.<br />
I could work on the project from mid-July to early September. Discussions could start earlier without much trouble, but coding would have to wait.<br />
<br />
4.5) Include as much technical detail about your implementation as you can<br />
<br />
TODO<br />
<br />
4.6) What do you expect to gain from this project?<br />
<br />
I expect to gain insight in how open source development works, proficiency in Lua, and the feeling I did something for a better world, even if it's just a patch for a game.<br />
<br />
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?<br />
<br />
Meeting new people and challenges, the community itself, helping people.<br />
<br />
5) Practical considerations<br />
<br />
5.1) Are you familiar with any of the following tools or languages?<br />
<br />
Subversion (used for all commits)<br />
Yes. Used in many school and particular projects.<br />
<br />
C++ (language used for all the normal source code)<br />
Yes, even though i prefer C (but understand OOP concepts)<br />
<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I know STL and i'm willing to learn Boost and SDL.<br />
<br />
Python (optional, mainly used for tools)<br />
I know and like python.<br />
<br />
build environments (eg cmake/scons)<br />
I have used scons and make, and cmake ocasionally.<br />
<br />
WML (the wesnoth specific scenario language)<br />
I have written simple scripts in WML.<br />
<br />
Lua (used in combination with WML to create scenarios)<br />
No, I don't know Lua yet.<br />
<br />
5.2) Which tools do you normally use for development? Why do you use them?<br />
<br />
I use Eclipse for Java and Gedit, nano or Sublime Text for C, C++, Python and others.<br />
<br />
5.3) What programming languages are you fluent in?<br />
<br />
I consider I'm fluent in (in no particular order) Java, C, C++, Python, Octave/Matlab, bash and I have occasionally used Lisp and Prolog.<br />
<br />
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!<br />
<br />
No, I wouldn't mind. I'll add my number to the GSoC application.</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Threkk&diff=50370User:Threkk2013-04-22T12:47:59Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
=Description=<br />
<h4>threkk - Improve configuration and behavior in mainline campaigns</h4><br />
<br />
I have been reading about the project, and at first, I would update the current AI with the new capabilities of the engine. After that, I would increase the engine with new behaviours if needed, but after seeing the effect of the previous changes. <br />
<br />
<br />
=IRC=<br />
<br />
threkk<br />
<br />
=Questionnaire=<br />
<br />
1) Basics<br />
<br />
1.1) Write a small introduction to yourself.<br />
<br />
I'm a 4th year CS student. I have been programming since I was 14 years-old, but never nothing too serious. I spend lot of time playing videogames, so a project like this looks awesome for me. I've been using *nix based OS for 7 years, and most of the software I use is open source.<br />
<br />
<br />
1.2) State your preferred email address.<br />
<br />
threkk<at>gmail...<br />
<br />
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?<br />
<br />
threkk<br />
<br />
1.4) Why do you want to participate in summer of code?<br />
<br />
For me is a posibility to participate in deep on a real project. It is also an oportunity to join two of my passions: programming and gaming, while collaborating in an open source project.<br />
<br />
1.5) What are you studying, subject, level and school? <br />
<br />
Currently I'm in the 4th year of Ingeniería Informática (CS) at Universidad de Sevilla, in Spain. During this four years, I've been working with databases, data structures, algorithms, compilers, regexp, software engineering and electronic's stuff.<br />
<br />
1.6) What country are you from, at what time are you most likely to be able to join IRC?<br />
<br />
I'm from Spain, and during summer I could join IRC in any moment of the day.<br />
<br />
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.<br />
<br />
Maybe a trip during 4 or 5 days, but nothing more.<br />
<br />
2) Experience<br />
<br />
2.1) What programs/software have you worked on before?<br />
<br />
Nothing important, most of them personal projects.<br />
<br />
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)<br />
<br />
Yes, in small groups in university projects.<br />
<br />
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?<br />
<br />
No, I don't have participated before.<br />
<br />
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.<br />
<br />
No, I'm not.<br />
<br />
2.5) Gaming experience - Are you a gamer?<br />
<br />
Yes.<br />
<br />
2.5.1) What type of gamer are you?<br />
<br />
I would say hardcore, I spent sometimes too much time playing.<br />
<br />
2.5.2) What type of games?<br />
<br />
I've played many different games, since the most classic like Mario and Space Invaders, to the most recent like League of Legends or The Witcher. In the field of strategy games, I've played Warcraft 3, Imperium 2, Pretorians, Total War... Currently, I'm playing the last Fire Emblem.<br />
<br />
2.5.3) What type of opponents do you prefer? <br />
<br />
I prefer the experienced, but for my is very important the sportmanship.<br />
<br />
2.5.4) Are you more interested in story or gameplay?<br />
<br />
The story is very important for me, because is that hooks you, but a nice story can be ruined by a disastrous gameplay.<br />
<br />
<br />
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
<br />
We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.<br />
<br />
No, I didn't know it existed until I saw it at GSoC page. But I'm going to start playing asap.<br />
<br />
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.<br />
<br />
<br />
3) Communication skills<br />
<br />
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.<br />
<br />
I have a fluent English, spoken and written.<br />
<br />
3.2) What spoken languages are you fluent in?<br />
<br />
I speak Spanish (my mother language) and English fluently. I also speak French and some Japanese.<br />
<br />
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.<br />
<br />
I have participated in various gaming communities, and I know how... rude they can be.<br />
<br />
3.4) Do you give constructive advice? <br />
<br />
At least I try.<br />
<br />
3.5) Do you receive advice well? <br />
<br />
Yes, indeed, if don't know how to do something, I recognise it and look for advives.<br />
<br />
3.6) Are you good at sorting useful criticisms from useless ones?<br />
<br />
I think.<br />
<br />
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<br />
<br />
It depends on the project. I can work at my own, and after that, look where I reached; but my experience in group projects tell me that it's important to establish an objective and some basic guidelines before starting working. In the end, it saves work.<br />
<br />
4) Project<br />
<br />
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?<br />
<br />
I selected it because this year I have had a lot of AI subjects at university, and I would like to proof myself.<br />
<br />
4.2) If you have invented your own project, please describe the project and the scope.<br />
<br />
4.3) Why did you choose this project?<br />
<br />
All the AI projects looked interesting for me, but this maybe a little bit more.<br />
<br />
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".<br />
<br />
I must discuss with the developer team before I can establish a timeline.<br />
<br />
4.5) Include as much technical detail about your implementation as you can<br />
<br />
4.6) What do you expect to gain from this project?<br />
<br />
As I said before, experience working in a serious group project.<br />
<br />
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? <br />
<br />
A good environment and the sense that the work isn't completed yet.<br />
<br />
<br />
5) Practical considerations<br />
<br />
5.1) Are you familiar with any of the following tools or languages?<br />
* Git (used for all commits) <br />
Yes<br />
* C++ (language used for all the normal source code)<br />
More with C than C++, but yes.<br />
* STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I have worked a little with sdl before.<br />
* Python (optional, mainly used for tools)<br />
Yes.<br />
* build environments (eg cmake/scons)<br />
A little.<br />
* WML (the wesnoth specific scenario language)<br />
No.<br />
* Lua (used in combination with WML to create scenarios)<br />
Yes.<br />
5.2) Which tools do you normally use for development? Why do you use them?<br />
<br />
For developing in Java I usually use Eclipse, and for C base projects XCode or Visual Studio. On top of them, I use SublimeText as my main development tool with the terminal, because they allow me to work faster and easier than with an IDE.<br />
<br />
5.3) What programming languages are you fluent in?<br />
<br />
Java, python, haskell, javascript and I think C, but nobody is never fluent in C.<br />
<br />
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!<br />
<br />
I wouldn't mind to talk with anyone. My skype user is the same as the IRC.</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Rsyh93&diff=50369User:Rsyh932013-04-22T12:47:25Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_AI_Recruitment_2013]]<br />
<h1>Proposal is still being edited.</h1><br />
=Description=<br />
<h4>rsyh93 - AI Recruitment Restructuring</h4><br />
===Description of Proposal===<br />
====Test====<br />
<br />
=IRC=<br />
rsyh93<br />
<br />
=Questionnaire=<br />
==Basics==<br />
===Write a small introduction to yourself.===<br />
<br />
===State your preferred email address.===<br />
rsyh93 [at] gmail [dot] com<br />
===If you have chosen a nick for IRC and Wesnoth forums, what is it?===<br />
rsyh93<br />
===Why do you want to participate in summer of code?===<br />
I've always been interested in programming since I was young. I'm also passionate about free/open source software, but I wasn't sure how I should get involved. I feel that the Google Summer of Code program is a great merger of my two interests and, to be honest, a great way to get paid for contributing.<br />
===What are you studying, subject, level and school?===<br />
Currently I'm a first-year community college student about a semester away from an associate degree. I'm planning on pursuing a Computer Science degree once I transfer to a university. As for courses, the most recent Computer Science course I enrolled in was the Data Structures course from my college, and before that I took multiple programming classes in high school and was also a student helper for the programming class afterwards.<br />
===What country are you from, at what time are you most likely to be able to join IRC?===<br />
I'm on the United States East coast and will mostly be available in the evening local time: around 6PM-11PM GMT-5 (11PM-4AM GMT) <br />
===Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.===<br />
I do not have any commitments for the summer.<br />
==Experience==<br />
===What programs/software have you worked on before?===<br />
<br />
===Have you developed software in a team environment before? (As opposed to hacking on something on your own)===<br />
===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?===<br />
No, this will be my first time participating in Google Summer of Code<br />
===Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.===<br />
===Gaming experience - Are you a gamer?===<br />
====What type of gamer are you?====<br />
I consider myself to be a casual gamer: I prefer not to purchase games until they go on sale, and then barely play them after purchase, with certain exceptions.<br />
====What type of games?====<br />
I love all kinds of games, but prefer role-playing games or strategy games, especially those with a competitive aspect. My current favorite game is Starcraft II.<br />
====What type of opponents do you prefer?====<br />
<br />
====Are you more interested in story or gameplay?====<br />
It depends on the game. <br />
====Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.====<br />
<br />
===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.===<br />
<br />
==Communication skills==<br />
===Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.===<br />
English is my preferred language. It's been my main language since I moved to the United States when I was seven. I am able to write college essays or discuss politics in English.<br />
===What spoken languages are you fluent in?===<br />
English<br />
===Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.===<br />
===Do you give constructive advice?===<br />
===Do you receive advice well?===<br />
===Are you good at sorting useful criticisms from useless ones?===<br />
===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===<br />
I would prefer to have complete and detailed knowledge of the problem I am trying to fix. Once I understand the problem, I am mostly able to effectively work on my own.<br />
==Project==<br />
===Did you select a project from our list===</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Trademark/GSoC_2013/Addon_Server:_Create_a_new_and_shiny_one&diff=50368User:Trademark/GSoC 2013/Addon Server: Create a new and shiny one2013-04-22T12:46:36Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas Addon Server 2013]]<br />
<br />
=Caution=<br />
<br />
This proposal is under construction and can be modified any time.<br />
<br />
=Proposal=<br />
==Description==<br />
<h4>Pierre Talbot — Addon Server</h4><br />
Rewrite and improve the addon server with Boost.Asio.<br />
<br />
=IRC=<br />
Trademark<br />
<br />
=Questionnaire=<br />
==Basics==<br />
<br />
===Information===<br />
<br />
<strong>Email :</strong><br />
<br />
<strong>Nickname :</strong> Trademark<br />
<br />
<strong>Study :</strong> Master degree in computer science at the University of Lyon 1<br />
<br />
<strong>Country :</strong> France<br />
<br />
<strong>Availability :</strong> Mostly during the evening (4pm to 9pm UTC)<br />
<br />
===Write a small introduction to yourself.===<br />
<br />
My name is Pierre Talbot, I currently follow a Master Degree (first year) in computer science in Lyon (France). After being a hardcore gamer for few years during high school, I choose to study computer science. So I begun my studies in Belgium and after 2 years I joined the University of Lyon 1 in France. Now, more than anything I like to program and to learn more on the various fields of computer science.<br />
<br />
===Why do you want to participate in summer of code?===<br />
<br />
Because I already participate in the GSoC, I know that is an invaluable program to excel your programming level. Furthermore being paid to learn from experienced people is just an opportunity.<br />
<br />
===Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.===<br />
<br />
I will restart school 2 weeks before the ending. During these weeks I will work more during the week-end instead of balancing the works all over the week. I didn't planned any vacation but if I take some, il will be at most 3 days.<br />
<br />
==Experience==<br />
<br />
===What programs/software have you worked on before?===<br />
<br />
I mainly worked on numerous school projects which involves various skills, the relevants one's for this project were:<br />
<br />
* FTP-like server in C.<br />
* Network game programming in Java and C.<br />
* Web application respecting a web oriented MVC architecture (team of 4 persons).<br />
<br />
I also worked on many C++ projects (data structures implementation, Boost.Check, garbage collector, …) without a networking layer.<br />
<br />
===Have you developed software in a team environment before? (As opposed to hacking on something on your own)===<br />
<br />
Yes, the most of my school projects are in team of 2,3 or 4 students. We are using source versionning such as Mercurial, Git. Depending on the project, we use other team tools such as the ones provided by Redmine.<br />
<br />
I used SVN during my previous GSoC.<br />
<br />
===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?===<br />
<br />
I participated in 2011 as a student in the Boost organisation. <br />
<br />
===Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.===<br />
<br />
===Gaming experience - Are you a gamer?===<br />
<br />
====What type of gamer are you?====<br />
<br />
====What type of games?====<br />
<br />
====What type of opponents do you prefer?====<br />
<br />
====Are you more interested in story or gameplay?====<br />
<br />
====Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.====<br />
<br />
===Patches===<br />
<br />
<br />
==Communication skills==<br />
<br />
===Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.===<br />
<br />
===What spoken languages are you fluent in?===<br />
<br />
<br />
===Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.===<br />
<br />
===Do you give constructive advice?===<br />
<br />
===Do you receive advice well?===<br />
<br />
===Are you good at sorting useful criticisms from useless ones?===<br />
<br />
===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===<br />
<br />
==Project==<br />
<br />
===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?===<br />
<br />
===If you have invented your own project, please describe the project and the scope.===<br />
<br />
===Why did you choose this project?===<br />
<br />
===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".===<br />
<br />
===Include as much technical detail about your implementation as you can===<br />
<br />
===What do you expect to gain from this project?===<br />
<br />
===What would make you stay in the Wesnoth community after the conclusion of SOC?===<br />
<br />
<br />
==Practical considerations==<br />
<br />
===Are you familiar with any of the following tools or languages?===<br />
* Sub&shy;&shy;version (used for all commits)<br />
* C++ (language used for all the normal source code)<br />
* STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
* Python (optional, mainly used for tools)<br />
* build environments (eg cmake/scons)<br />
* WML (the wesnoth specific scenario language)<br />
* Lua (used in combination with WML to create scenarios)<br />
<br />
===Which tools do you normally use for development? Why do you use them?===<br />
<br />
===What programming languages are you fluent in?===<br />
<br />
===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!===</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Addon_Server_2013&diff=50367SoC Ideas Addon Server 20132013-04-22T12:46:25Z<p>Crab: </p>
<hr />
<div>{{SoC2013Idea}}<br />
<br />
=Description=<br />
<h2>Addon Server: Create a new and shiny one</h2><br />
Page for the idea: [[SoC_Ideas_Addon_Server_2013]]<br />
<br />
Wesnoth has an addon server that originally only hosted extra campaigns, but<br />
now also hosts Multiplayer Maps, Factions, Eras and more. Also the amount of<br />
hosted addon has increased over the years. The server itself is almost unchanged<br />
and can use an upgrade. Performance-wise things are not bad, but it would be<br />
nice to store additional meta-information on the server and have a better<br />
integration for translations.<br />
<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 submitted student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no submitted student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Addon Server 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
The first step for this project will be writing the specifications for the new<br />
server and discuss them with our developers and users. Once the specifications<br />
are done you will implement the server and update the in-game user interface.<br />
<br />
Suggested skills: C++, the boost asio library (can be learned during the process).<br />
<br />
=Whom to ask about this=<br />
mordante</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Thunderstruck&diff=50366User:Thunderstruck2013-04-22T12:46:05Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
=Description=<br />
<h4>thunderstruck's proposal draft</h4><br />
<br />
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.<br />
<br />
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.<br />
<br />
This approach would let to dispose of all or most current '#ifdefs' used to create multiplayer campaign or to enable singleplayer campaign to be used as multiplayer and would fix a lot of bugs <br />
related to multiplayer campaign support.<br />
<br />
=The Project=<br />
<br />
<h4>WML</h4><br />
Enable top-level [campaign] and [scenario] tags to work properly with MP campaigns.<br />
<br />
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.<br />
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.<br />
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose MP factions or not.<br />
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.<br />
* The 'allow_player' attributes should be removed from the [side] tags. ?<br />
* better [story] tag support?<br />
* get rid of 'save_id' attribute inside [side] tags. ?<br />
<br />
<h4>Engine</h4><br />
Deal with all changes of WML while keeping support for old ways to create MP campaigns and fix or refactor save/restore code to deal with the current issues.<br />
<br />
* Proper filtering of SP and MP campaigns using 'campaign_type' attribute.<br />
* Enable MP campaigns to use difficulty attributes inside [campaign] tag.<br />
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. <br />
* Refactor or fix the current save/restore code to fix known related problems of MP campaigns.<br />
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).<br />
<br />
<h4>GUI</h4><br />
Tinker to work well with changes made to the engine and implement new elements where needed.<br />
<br />
* In the MP game 'maps to play' list, users should see only one option for one MP campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but MP campaign's name in that list option.<br />
* Difficulties should be allowed to be chosen in the MP game create window along with other options.<br />
* Between every MP campaign's scenarios players should be displayed with manage players window.<br />
* Players should not be allowed to choose any MP factions if campaign's designer specified so, in order to keep campaign well balanced.<br />
* Players should be presented an option to modify turns of the sides.<br />
<br />
=IRC=<br />
<br />
thunderstruck<br />
<br />
=Questionnaire=<br />
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Zazweda&diff=50365User:Zazweda2013-04-22T12:43:17Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI Defense Strategies 2013]]<br />
<br />
=Description=<br />
<h4>Zazweda - Total defense Strategy</h4><br />
<br />
=IRC=<br />
Zazweda, ValentinD<br />
<br />
=Questionnaire=<br />
<h4>1) Basics</h4><br />
<br />
<b>1.1) Write a small introduction to yourself.</b><br />
<br />
I am a 21 yo french student in a Computer Science Engineering school in Belfort (North East). I am currently in the Image Interaction and virtual reality part of the Computer Science department and this is my last year. In the computer science field I love AI, Virtual reality, big data, videogame and I am very enthousiast about the open source principle ! <br />
For the rest of my life I like reading, playing any kind of game (board, role, cards, videogames,...) and finally I play Badminton.<br />
<br />
<b>1.2) State your preferred email address.</b><br />
<br />
valentin[dot]deschaintre[at]gmail.com<br />
<br />
<b>1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?</b><br />
Zazweda<br />
<br />
<b>1.4) Why do you want to participate in summer of code?</b><br />
<br />
The GSoc is an amazing possibility to discover a complete new world and start involving myself in it. I want to be part of some evolution with my knowledges and I hope that I finally have the skills to achieve this !<br />
<br />
<b>1.5) What are you studying, subject, level and school?</b><br />
<br />
I am studying Computer Science in the UTBM (French North East Engineering school). I am currently in the last year of study (school is in 5 years) and am specialised in the Image Interaction and virtual reality field.<br />
<br />
<b>1.6) What country are you from, at what time are you most likely to be able to join IRC?</b><br />
<br />
I am from France (GMT+2 right now), I would mostly be on IRC between 11 am and 11 pm during the GSOC. Before that I try to be on as much as possible, it would mainly be present at night. <br />
<br />
<b>1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.</b><br />
<br />
My exams will be over at the end of June. I would then be fully available until mid August, then a little bit less since school starts again in september (but the beginning is light).<br />
<br />
<h4>2) Experience</h4><br />
<br />
<b>2.1) What programs/software have you worked on before?<b><br />
<br />
I have worked on different projects at school such as a little Angry Birds like game and also an AI for a "Rasend Roboter" board game. I am currently working on animating a 3D character and a "World war simulation between Ants and termites. On my side I developped a little Space Invader in Python.<br />
<br />
I also did a 6 months Internship in a startup Company called "GumGum". I could work on a lot of different projects including a C++ HTTP server or JAVA data handling through ditributed technology such as hadoop. <br />
<br />
<b>2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)</b><br />
<br />
All my school projects are in team from 2 to 4 and I also worked with the others engineers in the company I was in (they were 6)<br />
<br />
<b>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?</b><br />
<br />
It would be my first experience in the GSoc.<br />
<br />
<b>2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.</b><br />
<br />
I am not involved yet in an open source development project but I am willing to now that I have a little bit more experience !<br />
<br />
<b>2.5) Gaming experience - Are you a gamer?/<b><br />
<br />
Yes !<br />
<br />
<b>2.5.1) What type of gamer are you?</b><br />
<br />
I like to play, I can be really fond of different types of games. I can be really passionated about some !<br />
<br />
<b>2.5.2) What type of games?</b><br />
<br />
I played to a lot of different types :<br />
Rts (Age of empires, Warcraft), but also some Moba (LoL), or RPGs (FFX would be the the most played), I also like to play some "old" games such as Magical Drop 3 or DoDonPachi(we have an arcade machine at school). <br />
<br />
<b>2.5.3) What type of opponents do you prefer?</b><br />
<br />
Depends of what I expect from the game, I like AIs because of the technological progress it represents. But in the end playing with or against other real player is often more challenging .<br />
<br />
<b>2.5.4) Are you more interested in story or gameplay?</b><br />
<br />
Story is very important when I play against AI, it often represents what the AI fights for or what it is. The gameplay is the first aspect you see of the game and the one that will follow you until the end, so I would say gameplay !<br />
<br />
<b>2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
<br />
We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.</b><br />
<br />
Yes, I played a few games before mostly multiplayer and a few campaigns, I haven't played intensively but my roommate is willing to fix this "issue" ;).<br />
<br />
<br />
<b>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.</b><br />
<br />
I created (not commited yet, still improving) a MIAs for the guardians that "guards" a zone.<br />
<br />
<h4>3) Communication skills</h4><br />
<br />
<b>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.</b><br />
<br />
I followed European cursus and spent 6 months in California, I would describe my level as "fluent".<br />
<br />
<b>3.2) What spoken languages are you fluent in?</b><br />
<br />
French, English, not bad in German<br />
<br />
<b>3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.</b><br />
<br />
When I play a game I always try to make it as cool as possible. I am not perfect either, but I try to keep calm and "play the game" ! I have been some kind of Community Manager for the website "www.kraland.org" before my internship (then it became a little complicated with the new life and schedule :( ).<br />
<br />
<b>3.4) Do you give constructive advice?</b><br />
<br />
I try not to troll for free ;). More seriously when I give an advice I try to explain why I give it, it might not be a general rule, but I know an unexplained advice is almost "useless".<br />
<br />
<b>3.5) Do you receive advice well?</b><br />
<br />
I try to stay open to any advice as long as people don't start by "omfg u r 2 stupid !" ^^"<br />
<br />
<b>3.6) Are you good at sorting useful criticisms from useless ones?</b><br />
<br />
That was part of my job as Community manager, and it currently is as president of my school association. I try to be as fair as possible and take the maximum of criticisms into account, eventhough it's sometime hard.<br />
<br />
<b>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</b><br />
<br />
I am more the kind of "I want to try my idea coded", of course I think about what I want to code first but I like to prove it's going to work and do what I want.<br />
<br />
<h4>4) Project</h4><br />
<br />
<b>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?</b><br />
<br />
I liked multiple projects, mainly the ones about the AIs. The defense AI and recruiting algorithm look really nice ! <br />
<br />
<b>4.2) If you have invented your own project, please describe the project and the scope.</b><br />
--<br />
<b>4.3) Why did you choose this project?</b><br />
<br />
The AI projects are very interesting to me because, well it's AI and I love everything related to it, I think of it as the next big step in computer evolution ! Implementing an AI for a game on top of all would be a great plus for me since it is a world I know and love.<br />
<br />
<b>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".</b><br />
<br />
I could work from 1st july to 15 august aprox and then a little less from 25 august to end of september (back to school). Before July I have to give all my school projects back and have my final exams for the semester é_è. <br />
<br />
<b>4.5) Include as much technical detail about your implementation as you can</b><br />
<br />
I think that the easiest way to implement easy to use and update AI would be to create one in C++ with all the basic defense behaviour. And add in LUA different MIAs detailing this general behaviour. A little bit like its done now with the "guardian" behaviour and MIAs.<br />
<br />
<b>4.6) What do you expect to gain from this project?</b><br />
<br />
I expect to gain an experience in open source projects, games, improve and learn new AI algorithm. And of course meet new awesome people !<br />
<br />
<b>4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?</b><br />
<br />
I would say the community itself ! Simply the atmosphere around the game I guess. I am willing to involve on a long time and I hope this GSoc could give a head start to it.<br />
<br />
<h4>5) Practical considerations</h4><br />
<br />
<b>5.1) Are you familiar with any of the following tools or languages?</b><br />
<br />
Subversion (used for all commits)<br />
Used it during the entire internship, pretty familiar<br />
Git (I put it as bfw is migrating to it if I understood well)<br />
Used it multiple times for different projects (mainly school ones)<br />
C++ (language used for all the normal source code)<br />
Learned it and used it for different purpose (working with it on my 3D animation project)<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
I used Boost to implement the HTTP server in C++ and am Using the SDL for the animation project. I am willing to learn it further !<br />
Python (optional, mainly used for tools)<br />
Worked with it multiple times, mostly on personnal projects (a little pokemon and space invader with pygame)<br />
build environments (eg cmake/scons)<br />
Not very familiar but willing to learn<br />
WML (the wesnoth specific scenario language)<br />
Getting more familiar with it<br />
Lua (used in combination with WML to create scenarios) <br />
Trying to use it right now modifying and adding some MIAs<br />
<br />
<b>5.2) Which tools do you normally use for development? Why do you use them?</b><br />
<br />
I like eclipse for Java, I have no preferences for C++ developping, I recently tried the eclipse for C++ and the QT IDE, both were nice eventhough I prefered eclipse since I already know its architecture through the Java part. Gedit is useful too sometimes ;).<br />
<br />
<b>5.3) What programming languages are you fluent in?</b><br />
Java, Groovy, C++ are the main languages I know really well.<br />
<br />
<b>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! </b><br />
<br />
I wouldn't mind, if I need to be contacted in any way I would answer the phone ! (I will add it to the Gsoc application!)</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Elf11&diff=50364User:Elf112013-04-22T12:39:55Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI Defense Strategies 2013]]<br />
<br />
=ATTENTION=<br />
'''This proposal is a draft and it will be changed.'''<br />
<br />
=Description=<br />
<h4>elf11 - AI Project</h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
I am thinking about working on one of the AI projects, the total defense project. I still have to talk with a mentor and write a patch for the project, so after doing that and getting better understanding of the existing code I will update this section.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
elf11, elf_11, elf__11<br />
<br />
=Questionnaire=<br />
1) Basics<br />
<br />
1.1) Write a small introduction to yourself.<br />
<br />
I'm elf11, a 3rd year ComputerScience student. I have been studying programming for more than 6 years, I like games(playing and also sticking my nose through their source code). I am a Linux and open source suporter, I have also participated in another open source project.<br />
<br />
1.2) State your preferred email address.<br />
<br />
---<br />
<br />
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?<br />
<br />
elf11<br />
<br />
1.4) Why do you want to participate in summer of code?<br />
<br />
Like I said before I am a suporter of open source and I think that Summer of Code is a good oportunity to join a project and see what everything is about. I was looking through the project ideas and then I saw the Wesnoth project and since I like game programming I gave it a chance. I think this is a good oportunity to leave a mark on something that many other users will enjoy.<br />
<br />
1.5) What are you studying, subject, level and school?<br />
<br />
I am currently a 3rd year student, at the Politehnica University of Bucharest, Automatic and Computer Science Faculty. In the last 3 years I had a lot of programming courses, some of them are listed below(I will list just those that are relevant to this project, though if asked I will add the full list of subjects I have taken):<br />
* Data Structures and Algorithms<br />
* Analysis of Algorithms(theoretical approach)<br />
* Object Oriented Programming<br />
* Computer Graphics<br />
* Algorithms Programming(hands-on approach)<br />
<br />
1.6) What country are you from, at what time are you most likely to be able to join IRC?<br />
<br />
Romania<br />
any time between 6AM and 11PM GMT<br />
<br />
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.<br />
<br />
I do not have any commitments for the summer period.<br />
<br />
2) Experience<br />
<br />
2.1) What programs/software have you worked on before?<br />
<br />
I have worked last Summer for a local company developing a game for the iOS system. I have worked with the VisualStudio IDE for that project, using OpenGLES, C++ and the iOS SDK. <br />
<br />
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)<br />
<br />
Yes, I did. Besides the project I worked last Summer on - where I worked within a team, I also had different school projects that asked for working in a team.<br />
<br />
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?<br />
<br />
I have not participated in the Google Summer of Code before.<br />
<br />
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.<br />
<br />
At the moment I am not involved with any open source development projects.<br />
<br />
2.5) Gaming experience - Are you a gamer?<br />
<br />
Yes, I am.<br />
<br />
2.5.1) What type of gamer are you?<br />
<br />
I used to play a lot of strategy games, my all time favourite being the now old Age of Empires and Civilization(II was my favourite one). Lately I have been playing more RPG games and MMO games, Diablo and Dota.<br />
<br />
2.5.2) What type of games?<br />
<br />
Like I said above, I like strategy games, Age of Empires and Civilization, after those 2 I didn't find anything in that style that I liked as much. I also play Victoria 2: A house divided, a simulation strategy game. On Linux I play Wesnoth, being one of the few good games that have been developed for this operating system. I also play Diablo(RPG game) and Dota.<br />
<br />
non video-games:<br />
<br />
Card games: I am an avid Poker player, also recently I have started learning Bridge.<br />
<br />
Board games: I like playing Risk.<br />
<br />
Also, sometimes Chess and Backgammon. <br />
<br />
2.5.3) What type of opponents do you prefer?<br />
<br />
I prefer challenging opponents, the kind of opponent that you do not really know what it will make next. Also, I like those who have a back-up strategy, in strategy games those who attack from more than one direction and do not leave their home town unprotected either.<br />
<br />
2.5.4) Are you more interested in story or gameplay?<br />
<br />
I think that stroy and gameplay can not be separated one from the other. If a game has a good story, then people would be more inclined to play it, they will wait with baited breath for the next chapter to unfold and will be willing to spend another hour in front of the PC just so they could advance to a higher level and see what waits them there. But, the gameplay is an important part too. If you have a good solid story but the game experience is not the best, the graphics are not at the standard that you are expecting them to be, the AI does not work, not being challenging enough or you can not move your troops as easily as it would be expected then the user experience it will not be great and they might not be convinced to play the game a second time. So, good story and gameplay interleave to make for a great game.<br />
<br />
This being said, I consider there are people that are more interested in developing the gameplay and others that want more to develop the story, in this particular case I am more interested in working on the gameplay.<br />
<br />
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.<br />
<br />
Yes, I did play Wesnoth before hearing about your Google Summer of Code project, I usually play it in the evenings as a relaxation method - it is always a toss between Wesnoth and Mahjong so I do not really know for how long I have played it, but I like more the single player mode.<br />
<br />
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.<br />
<br />
I am looking through the sources and I want to have a discussion with one of the mentors beforehand :).<br />
<br />
3) Communication skills<br />
<br />
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.<br />
<br />
I am fluent.<br />
<br />
3.2) What spoken languages are you fluent in?<br />
<br />
English, Romanian.<br />
<br />
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.<br />
<br />
Yes, I am good at interacting with other players and other developers.<br />
<br />
3.4) Do you give constructive advice?<br />
<br />
I try that every time that I give advice to make it as constructive as possible and for that matter to also make it to the point. <br />
<br />
3.5) Do you receive advice well?<br />
<br />
Yes, I consider that I still have a long way to go in my development endeavour so advice from developers with more experience is always welcome.<br />
<br />
3.6) Are you good at sorting useful criticisms from useless ones<br />
<br />
I like to think that I am able to do that, but if I am doubting it then I ask for a 3rd,4th opinion and then I base my decision on that.<br />
<br />
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<br />
<br />
I like to discuss the project at length before hand, to know exactly what it has to be done in order to achieve the goal, after that discussion I will do a raw draft and add on it as I go by. That is why I consider this starting period very important because I will get familiar with the project and the important parts that I should look after. During the project I like to ask question to know exactly what goes on, because I do not think that one can do a through work without seeing the whole picture.<br />
<br />
4) Project<br />
<br />
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?<br />
<br />
I am interested in the AI project, especially the total defense strategy project. I am not 100% sure which one it will be in the end, since I did not have that discussion with the mentor.<br />
<br />
4.2) If you have invented your own project, please describe the project and the scope.<br />
<br />
4.3) Why did you choose this project?<br />
<br />
I am interested in AI-programming and artificial intelligence and I consider that both this project can add an improvement to the gameplay after they will be finished. Also, I worked last Summer as a developer for a game and I think that I will be well suited for this project and will be able to finish it.<br />
<br />
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".<br />
<br />
4.5) Include as much technical detail about your implementation as you can<br />
<br />
4.6) What do you expect to gain from this project?<br />
<br />
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?<br />
<br />
I plan to be an active developer for Wesnoth regardless the outcome of this Google Summer of Code edition outcome. I consider that it is high time for Linux games to be as competitive as games from other platforms, developers play games too.<br />
<br />
5) Practical considerations<br />
<br />
5.1) Are you familiar with any of the following tools or languages?<br />
<br />
Subversion (used for all commits)<br />
Yes, I am familiar with it, I have used it before - git, svn.<br />
C++ (language used for all the normal source code)<br />
I would rate my C++ knowledge as 8(on a scale from 1 to 10), I am familiar with most of the aspects of this programming language(OOP concepts).<br />
STL, Boost, Sdl (C++ libraries used by Wesnoth)<br />
Not familiar with those libraries, have not used them before but I am willing to learn and I do not think this will hinder my progress on the project.<br />
Python (optional, mainly used for tools)<br />
I would rate my Python language as 7(on a scale from 1 to 10), if we are talking just about the scripting language then it will be higher(8.5), the first rating was done thinking about threads and parallel programming in Python.<br />
build environments (eg cmake/scons)<br />
I am familiar with cmake.<br />
WML (the wesnoth specific scenario language)<br />
I am not familiar with it but I am willing to learn. <br />
Lua (used in combination with WML to create scenarios) <br />
I am not familiar with it but I am willing to learn.<br />
<br />
5.2) Which tools do you normally use for development? Why do you use them?<br />
<br />
I usually use the vim editor, using Makefiles and creating libraries for most of my assignments. I use vim because I feel comfortable with it and the assignments are not that big in number of files. For compiling and debugging I use gcc and gdb and the linux terminal. <br />
For bigger projects development I use Eclipse/CodeBlocks as an IDE. The IDE has the advantage of files being more easily to administrate and incorporated tools for compiling and debugging. <br />
<br />
5.3) What programming languages are you fluent in?<br />
<br />
C, C++, Java, Python<br />
<br />
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!<br />
<br />
I have nothing against other forms of personal contact, I will list my phone and skype contact details in the final application.</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Dragos/GsoC_2013/AI:_Implement_a_%27total_defense%27_strategy&diff=50363User:Dragos/GsoC 2013/AI: Implement a 'total defense' strategy2013-04-22T12:39:15Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC Ideas AI Defense Strategies 2013]]<br />
<br />
=Description=<br />
<h4>Dragos Ristache: Implement a total defense strategy </h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
dragos<br />
<br />
=Questionnaire=<br />
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Dragos/GsoC_2013/AI:_Implement_a_%27total_defense%27_strategy&diff=50362User:Dragos/GsoC 2013/AI: Implement a 'total defense' strategy2013-04-22T12:39:04Z<p>Crab: </p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
[[Category:SoC Ideas AI Defense Strategies 2013]]<br />
<br />
=Description=<br />
<h4>Dragos Ristache: Implement a total defense strategy </h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
dragos<br />
<br />
=Questionnaire=<br />
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=User:Dragos/GsoC_2013/AI:_Implement_a_%27total_defense%27_strategy&diff=50361User:Dragos/GsoC 2013/AI: Implement a 'total defense' strategy2013-04-22T12:38:07Z<p>Crab: added category</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
[[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
=Description=<br />
<h4>Dragos Ristache: Implement a total defense strategy </h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
dragos<br />
<br />
=Questionnaire=<br />
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Defense_Strategies_2013&diff=49641SoC Ideas AI Defense Strategies 20132013-04-09T09:40:34Z<p>Crab: /* Additional Information */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Implement a 'total defense' strategy</h2><br />
<br />
Page for the idea: [[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
AI in wesnoth's is good at killing things but is bad at defending. Therefore we are forced to make it attack at 2:1 odds. This is the single biggest limiter of the AI skill at the moment. To solve that, we need to teach the AI to defend. <br />
<br />
Suggested skills: C++, knowledge of wesnoth's gameplay (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI Defense Strategies 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Currently, the aim is to maximize (enemy losses - aggression*own_losses), where aggression is currently set to 0.4 by default. Teaching the AI to defend would allow us to lower the default aggression value. If we can bring the aggression value close to 0, the problem would be solved.<br />
<br />
What would happen if we set aggression to 0 now? AI would only do the attacks which are 'good at killing things', but would not do the attacks, leaving only several units on the frontline. Moreover, the formula max(enemy_losses - aggression*own_losses) is broken, because it does not consider next_turn retaliation properly. A correct (but not calculable) formula would be max(enemy_losses_defending - aggression*own_losses_attacking - aggression*own_losses_next_turn + enemy_losses_attacking_next_turn + enemy_losses_defending_in_two_turns - aggression*own_losses_attacking_in_two_turns - … ). It's not calculable because we can't predict all the turns in advance with any degree of confidence. However, if we take the *next* turn into account better, then the AI would be able to play in styles other than 'all-out-attack' - because, if you take next turn into account, it makes sense to form defensive lines, block enemy units from reaching your vulnerable units, etc.<br />
<br />
=First steps=<br />
<br />
If you haven't played Wesnoth yet, play one-on-one vs AI, to learn the game rules and to observe how AI plays its turn and selects attacks. <br />
<br />
Change default aggression (by modifying the text file data/ai/utils/default_config.cfg , changing {DEFAULT_ASPECT_VALUE aggression 0.4} to other values like 1.0 or 0.1 or -0.5) and observe results<br />
<br />
Also, set up everything that is required to compile Wesnoth from source.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=Soc_Ideas2013_Template&diff=49570Soc Ideas2013 Template2013-03-31T11:21:38Z<p>Crab: Created page with '{{SoC2013Idea}} A template for the Summer of Code 2013 Idea Page. Copy this to the new idea page, and edit it accordingly. =Description= <h2>New idea template title</h2> Page fo…'</p>
<hr />
<div>{{SoC2013Idea}}<br />
A template for the Summer of Code 2013 Idea Page. Copy this to the new idea page, and edit it accordingly.<br />
<br />
=Description=<br />
<h2>New idea template title</h2><br />
Page for the idea: [[SoC_Ideas2013_Template]]<br />
<br />
Info that will appear on Summer of Code ideas list.<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 submitted student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no submitted student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas IDEA NAME<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
=Whom to ask about this=</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Multiplayer_Campaign_Support_2013&diff=49380SoC Ideas Multiplayer Campaign Support 20132013-03-26T21:06:10Z<p>Crab: </p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Game Engine: Improve Multiplayer Campaign Support</h2><br />
<br />
Page for the idea: [[SoC Ideas Multiplayer Campaign Support 2013]]<br />
<br />
We need to make coding multiplayer campaigns as easy as coding single player campaigns, making it possible to use different difficulty levels, save/restore progress, and switch/remove/add players easily.<br />
<br />
Suggested skills: C++ coding (the project some hard C++ coding tasks in a large codebase)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Multiplayer Campaign Support 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
For a long time, creating the configuration for multiplayer and singleplayer scenarios were handled by different code paths. An effort was made to streamline and unify those paths, to remove some of many bugs that existed there.<br />
<br />
Now, based on this work, we can do further changes allowing a single campaign WML configuration file to work both as a singleplayer and a multiplayer campaign - all the scenarios would be usable both in singleplayer and multiplayer. The multiplayer scenarios might have a different number of players - e.g. scenario 1 might have 1 human player, scenarios 2 and 3 might have 1-2 human players, and scenario 3 might have 1-3 human players. Proper between-scenario GUI dialogs must be created to make it easy to get additional players on the MP server join a game, to make it easy to select who plays which side, and to select additional configurable scenario options. Parts of this work would be usable outside of multiplayer campaign context, in stand-alone multiplayer scenarios.<br />
<br />
To do those changes, wesnoth engine must be improved to load the game configuration correctly (in correct difficulty level, once selected), and to make sure all blocking bugs would be fixed.<br />
<br />
As a result of this work, one of Wesnoth's campaigns would be made available as a multiplayer campaign, in time for the next stable release of Wesnoth.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Multiplayer_Campaign_Support_2013&diff=49379SoC Ideas Multiplayer Campaign Support 20132013-03-26T21:05:14Z<p>Crab: /* Additional Information */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Game Engine: Improve Multiplayer Campaign Support</h2><br />
<br />
We need to make coding multiplayer campaigns as easy as coding single player campaigns, making it possible to use different difficulty levels, save/restore progress, and switch/remove/add players easily.<br />
<br />
Page for the idea: [[SoC Ideas Multiplayer Campaign Support 2013]]<br />
<br />
Suggested skills: C++ coding (the project some hard C++ coding tasks in a large codebase)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Multiplayer Campaign Support 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
For a long time, creating the configuration for multiplayer and singleplayer scenarios were handled by different code paths. An effort was made to streamline and unify those paths, to remove some of many bugs that existed there.<br />
<br />
Now, based on this work, we can do further changes allowing a single campaign WML configuration file to work both as a singleplayer and a multiplayer campaign - all the scenarios would be usable both in singleplayer and multiplayer. The multiplayer scenarios might have a different number of players - e.g. scenario 1 might have 1 human player, scenarios 2 and 3 might have 1-2 human players, and scenario 3 might have 1-3 human players. Proper between-scenario GUI dialogs must be created to make it easy to get additional players on the MP server join a game, to make it easy to select who plays which side, and to select additional configurable scenario options. Parts of this work would be usable outside of multiplayer campaign context, in stand-alone multiplayer scenarios.<br />
<br />
To do those changes, wesnoth engine must be improved to load the game configuration correctly (in correct difficulty level, once selected), and to make sure all blocking bugs would be fixed.<br />
<br />
As a result of this work, one of Wesnoth's campaigns would be made available as a multiplayer campaign, in time for the next stable release of Wesnoth.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Multiplayer_Campaign_Support_2013&diff=49378SoC Ideas Multiplayer Campaign Support 20132013-03-26T20:57:30Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Game Engine: Improve Multiplayer Campaign Support</h2><br />
<br />
We need to make coding multiplayer campaigns as easy as coding single player campaigns, making it possible to use different difficulty levels, save/restore progress, and switch/remove/add players easily.<br />
<br />
Page for the idea: [[SoC Ideas Multiplayer Campaign Support 2013]]<br />
<br />
Suggested skills: C++ coding (the project some hard C++ coding tasks in a large codebase)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Multiplayer Campaign Support 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Multiplayer_Campaign_Support_2013&diff=49377SoC Ideas Multiplayer Campaign Support 20132013-03-26T20:57:19Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Engine: Improve Multiplayer Campaign Support</h2><br />
<br />
We need to make coding multiplayer campaigns as easy as coding single player campaigns, making it possible to use different difficulty levels, save/restore progress, and switch/remove/add players easily.<br />
<br />
Page for the idea: [[SoC Ideas Multiplayer Campaign Support 2013]]<br />
<br />
Suggested skills: C++ coding (the project some hard C++ coding tasks in a large codebase)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Multiplayer Campaign Support 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_Multiplayer_Campaign_Support_2013&diff=49376SoC Ideas Multiplayer Campaign Support 20132013-03-26T20:55:57Z<p>Crab: Created page with '{{Template:SoC2013Idea}} = Description = <h2>Improve Multiplayer Campaign Support</h2> We need to make coding multiplayer campaigns as easy as coding single player campaigns, ma…'</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>Improve Multiplayer Campaign Support</h2><br />
<br />
We need to make coding multiplayer campaigns as easy as coding single player campaigns, making it possible to use different difficulty levels, save/restore progress, and switch/remove/add players easily.<br />
<br />
Page for the idea: [[Multiplayer Campaign Support 2013]]<br />
<br />
Suggested skills: C++ coding (the project some hard C++ coding tasks in a large codebase)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas Multiplayer Campaign Support 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49375SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:49:49Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Improve configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
We need to ensure our mainline campaigns are using the new capabilities of the AI engine, and improve AI in them by using behavior scripts implemented in lua and C++ code.<br />
<br />
Suggested skills: testing and QA skills, C++, lua (can be learned during the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Defense_Strategies_2013&diff=49374SoC Ideas AI Defense Strategies 20132013-03-26T20:49:40Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Implement a 'total defense' strategy</h2><br />
<br />
Page for the idea: [[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
AI in wesnoth's is good at killing things but is bad at defending. Therefore we are forced to make it attack at 2:1 odds. This is the single biggest limiter of the AI skill at the moment. To solve that, we need to teach the AI to defend. <br />
<br />
Suggested skills: C++, knowledge of wesnoth's gameplay (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI Defense Strategies 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Currently, the aim is to maximize (enemy losses - aggression*own_losses), where aggression is currently set to 0.4 by default. Teaching the AI to defend would allow us to lower the default aggression value. If we can bring the aggression value close to 0, the problem would be solved.<br />
<br />
What would happen if we set aggression to 0 now? AI would only do the attacks which are 'good at killing things', but would not do the attacks, leaving only several units on the frontline. Moreover, the formula max(enemy_losses - aggression*own_losses) is broken, because it does not consider next_turn retaliation properly. A correct (but not calculable) formula would be max(enemy_losses_defending - aggression*own_losses_attacking - aggression*own_losses_next_turn + enemy_losses_attacking_next_turn + enemy_losses_defending_in_two_turns - aggression*own_losses_attacking_in_two_turns - … ). It's not calculable because we can't predict all the turns in advance with any degree of confidence. However, if we take the *next* turn into account better, then the AI would be able to play in styles other than 'all-out-attack' - because, if you take next turn into account, it makes sense to form defensive lines, block enemy units from reaching your vulnerable units, etc.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49373SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:48:27Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Improve configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
We need to ensure our mainline campaigns are using the new capabilities of the AI engine, and improve AI in them by using behavior scripts implemented in lua and C++ code.<br />
<br />
<br />
Suggested skills: testing and QA skills, C++, lua (can be learned during the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49372SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:48:07Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: improve configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
We need to ensure our mainline campaigns are using the new capabilities of the AI engine, and improve AI in them by using behavior scripts implemented in lua and C++ code.<br />
<br />
<br />
Suggested skills: testing and QA skills, C++, lua (can be learned during the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49371SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:47:15Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: improve AI configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
We need to ensure our mainline campaigns are using the new capabilities of the AI engine, and improve AI in them by using behavior scripts implemented in lua and C++ code.<br />
<br />
<br />
Suggested skills: testing and QA skills, C++, lua (can be learned during the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49370SoC Ideas AI Recruitment 20132013-03-26T20:45:05Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
Most likely, a new implementation would be coded from scratch, taking parts of existing C++ code as a guideline.<br />
<br />
Suggested skills: mainly C++, a bit of lua (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Defense_Strategies_2013&diff=49369SoC Ideas AI Defense Strategies 20132013-03-26T20:44:48Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Implement a 'total defense' strategy</h2><br />
<br />
Page for the idea: [[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
AI in wesnoth's is good at killing things but is bad at defending. Therefore we are forced to make it attack at 2:1 odds. This is the single biggest limiter of the AI skill at the moment. To solve that, we need to teach the AI to defend. <br />
<br />
<br />
Suggested skills: C++, knowledge of wesnoth's gameplay (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI Defense Strategies 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Currently, the aim is to maximize (enemy losses - aggression*own_losses), where aggression is currently set to 0.4 by default. Teaching the AI to defend would allow us to lower the default aggression value. If we can bring the aggression value close to 0, the problem would be solved.<br />
<br />
What would happen if we set aggression to 0 now? AI would only do the attacks which are 'good at killing things', but would not do the attacks, leaving only several units on the frontline. Moreover, the formula max(enemy_losses - aggression*own_losses) is broken, because it does not consider next_turn retaliation properly. A correct (but not calculable) formula would be max(enemy_losses_defending - aggression*own_losses_attacking - aggression*own_losses_next_turn + enemy_losses_attacking_next_turn + enemy_losses_defending_in_two_turns - aggression*own_losses_attacking_in_two_turns - … ). It's not calculable because we can't predict all the turns in advance with any degree of confidence. However, if we take the *next* turn into account better, then the AI would be able to play in styles other than 'all-out-attack' - because, if you take next turn into account, it makes sense to form defensive lines, block enemy units from reaching your vulnerable units, etc.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49368SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:43:48Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: improve AI configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
<br />
<br />
Suggested skills: testing and QA skills, C++, lua (can be learned during the project).<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49367SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:43:07Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: improve AI configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
<br />
<br />
Suggested skills: playtesting and QA skills, a relatively small C++ and lua experience.<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_in_Mainline_Campaigns_Refactoring_2013&diff=49366SoC Ideas AI in Mainline Campaigns Refactoring 20132013-03-26T20:41:48Z<p>Crab: Created page with '{{Template:SoC2013Idea}} = Description = <h2>AI: improve AI configuration and behavior in mainline campaigns</h2> Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refacto…'</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: improve AI configuration and behavior in mainline campaigns</h2><br />
<br />
Page for the idea: [[SoC Ideas AI in Mainline Campaigns Refactoring_2013]]<br />
<br />
<br />
Required skills: a small amount of C++, a small amount of lua<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI in Mainline Campaigns Refactoring_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
During last several years we have added new capabilities to the AI, and allowed to configure it using Lua snippets. However, current mainline campaigns are not updated to take advantage of the new capabilities. Moreover, scenarios of current mainline campaigns might suggest new capabilities (implemented either in C++ or in Lua) to be added to the AI, and configured in those scenarios.<br />
<br />
The goal of this project is to refactor existing mainline campaign scenarios (starting with easier and simpler campaigns), seeking to improve the scenario-specific AI behavior and coding, where necessary, the new reusable behavior scripts and map-wide goals.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Defense_Strategies_2013&diff=49364SoC Ideas AI Defense Strategies 20132013-03-26T20:33:56Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Implement a 'total defense' strategy</h2><br />
<br />
Page for the idea: [[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
AI in wesnoth's is good at killing things but is bad at defending. Therefore we are forced to make it attack at 2:1 odds. This is the single biggest limiter of the AI skill at the moment. To solve that, we need to teach the AI to defend. <br />
<br />
<br />
Required skills: C++, knowledge of wesnoth's gameplay (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI Defense Strategies 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Currently, the aim is to maximize (enemy losses - aggression*own_losses), where aggression is currently set to 0.4 by default. Teaching the AI to defend would allow us to lower the default aggression value. If we can bring the aggression value close to 0, the problem would be solved.<br />
<br />
What would happen if we set aggression to 0 now? AI would only do the attacks which are 'good at killing things', but would not do the attacks, leaving only several units on the frontline. Moreover, the formula max(enemy_losses - aggression*own_losses) is broken, because it does not consider next_turn retaliation properly. A correct (but not calculable) formula would be max(enemy_losses_defending - aggression*own_losses_attacking - aggression*own_losses_next_turn + enemy_losses_attacking_next_turn + enemy_losses_defending_in_two_turns - aggression*own_losses_attacking_in_two_turns - … ). It's not calculable because we can't predict all the turns in advance with any degree of confidence. However, if we take the *next* turn into account better, then the AI would be able to play in styles other than 'all-out-attack' - because, if you take next turn into account, it makes sense to form defensive lines, block enemy units from reaching your vulnerable units, etc.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Defense_Strategies_2013&diff=49363SoC Ideas AI Defense Strategies 20132013-03-26T20:33:13Z<p>Crab: Created page with '{{Template:SoC2013Idea}} = Description = <h2>AI: Implement a 'total defense' strategy</h2> Page for the idea: SoC Ideas AI Defense Strategies 2013 AI in wesnoth's is good a…'</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Implement a 'total defense' strategy</h2><br />
<br />
Page for the idea: [[SoC Ideas AI Defense Strategies 2013]]<br />
<br />
AI in wesnoth's is good at killing things but is bad at defending. Therefore we are forced to make it attack at 2:1 odds. This is the single biggest limiter of the AI skill at the moment. To solve that, we need to teach the AI to defend. <br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC Ideas AI Defense Strategies 2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Currently, the aim is to maximize (enemy losses - aggression*own_losses), where aggression is currently set to 0.4 by default. Teaching the AI to defend would allow us to lower the default aggression value. If we can bring the aggression value close to 0, the problem would be solved.<br />
<br />
What would happen if we set aggression to 0 now? AI would only do the attacks which are 'good at killing things', but would not do the attacks, leaving only several units on the frontline. Moreover, the formula max(enemy_losses - aggression*own_losses) is broken, because it does not consider next_turn retaliation properly. A correct (but not calculable) formula would be max(enemy_losses_defending - aggression*own_losses_attacking - aggression*own_losses_next_turn + enemy_losses_attacking_next_turn + enemy_losses_defending_in_two_turns - aggression*own_losses_attacking_in_two_turns - … ). It's not calculable because we can't predict all the turns in advance with any degree of confidence. However, if we take the *next* turn into account better, then the AI would be able to play in styles other than 'all-out-attack' - because, if you take next turn into account, it makes sense to form defensive lines, block enemy units from reaching your vulnerable units, etc.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49362SoC Ideas AI Recruitment 20132013-03-26T20:31:04Z<p>Crab: </p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
Most likely, a new implementation would be coded from scratch, taking parts of existing C++ code as a guideline.<br />
<br />
Required skills: mainly C++, a bit of lua (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=Template:SoC2013Idea&diff=49361Template:SoC2013Idea2013-03-26T20:29:51Z<p>Crab: Created page with '<includeonly> {{SoC2013}} </includeonly> {| border=3 align="center" cellpadding="20" cellspacing="0" |align="center" | '''This is a Summer of Code 2013 Idea''' |} <br/> <incl…'</p>
<hr />
<div><includeonly><br />
{{SoC2013}}<br />
</includeonly><br />
<br />
{| border=3 align="center" cellpadding="20" cellspacing="0" <br />
|align="center" | '''This is a Summer of Code 2013 Idea'''<br />
|}<br />
<br/><br />
<br />
<includeonly><br />
[[Category:Summer of Code 2013 Idea]]<br />
</includeonly></div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49360SoC Ideas AI Recruitment 20132013-03-26T20:29:17Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm [5]</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
Most likely, a new implementation would be coded from scratch, taking parts of existing C++ code as a guideline.<br />
<br />
Required skills: mainly C++, a bit of lua (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49359SoC Ideas AI Recruitment 20132013-03-26T20:28:52Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm [5]</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
The implementation would be coded from scratch, taking parts of existing C++ code as a guideline.<br />
Required skills: mainly C++, a bit of lua (can be learned during the project)<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49357SoC Ideas AI Recruitment 20132013-03-26T20:27:56Z<p>Crab: /* Description */</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm [5]</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
The implementation would be coded from scratch, taking parts of existing C++ code as a guideline.<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC_Ideas_AI_Recruitment_2013&diff=49356SoC Ideas AI Recruitment 20132013-03-26T20:23:37Z<p>Crab: Created page with '{{Template:SoC2013Idea}} = Description = <h2>AI: Refactor recruitment algorithm [5]</h2> Page for the idea: SoC_Ideas_AI_Recruitment_2013 We need to refactor existing wesno…'</p>
<hr />
<div>{{Template:SoC2013Idea}}<br />
= Description =<br />
<h2>AI: Refactor recruitment algorithm [5]</h2><br />
<br />
Page for the idea: [[SoC_Ideas_AI_Recruitment_2013]]<br />
<br />
We need to refactor existing wesnoth's recruitment algorithm to:<br />
# support recruiting with multiple leaders.<br />
# support per-leader recruit/recall lists.<br />
# support easy limiting of recruitable units.<br />
# analyze map terrain better<br />
# recruit units that are more useful<br />
# improve counter-recruiting strategies.<br />
# improve recruiting for AI-playable campaigns where AI has to not spend all the gold.<br />
<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% submitted student proposals for this idea''<br />
|oneresultheader=''There is 1 student proposal for this idea''<br />
|suppresserrors=true<br />
|noresultsheader=''There are no student proposals for this idea''<br />
|category=Summer of Code 2013 Student Page&SoC_Ideas_AI_Recruitment_2013<br />
|notcategory=SoC 2013 Not Submitted To Google<br />
|include=#Description<br />
|nottitlematch=SoC2013_Template_of_Student_page<br />
|mode=userformat<br />
|format=,,<br/>See [[%PAGE%|%TITLE%]] for more information.<br/><br/>,<br />
}}<br />
<br />
=Additional Information=<br />
<br />
Recruiting is important for both player and AI.<br />
Units are recruited each turn.<br />
<br />
We now have an implementation of recruiting routine, which tries to recruit units which are good in combat against units already in the field, taking into account the entire map.<br />
But, there are a number of issues, and we want to solve them.<br />
<br />
1) AI only uses first leader to recruit - but, if there are multiple leaders, it might be useful to recruit with all of them. <br />
<br />
2) AI cannot use per-leader recruit lists - but, leaders can have unique recruit lists (ask fendin about this feature).<br />
<br />
3) Scenario editors want the AI recruit all units or most of the units, even if some of them might seem suboptimal from 'combat' point of view, but, as AI only considers combat/movement 'for the entire map', it might miss units which seem suboptimal. An example situation is where a unit has a specific role in the strategy, serving as auxiliary unit or as a hard counter to some specific opponent unit.<br />
<br />
4) One of the tool that scenario editors usually use to make the AI recruit more diverse units (and also for limiting difficulty), is limiting the number of concurrent recruits of specific type in the field. Now they are doing it via a WML macro - it's better if recruiting would allow parameterization, allowing scenario creators to easily specify some 'what to recruit' hints and limitations. An example would be 'consider recruiting water-based because I want this leader to control the waterways' or 'recruit enough scouts in the first three turns because I want the AI to start capturing more villages early'. The optimal number of scouts varies with the map, of course.<br />
<br />
5) This leads to another problem - if AI recruits some units thinking of particular purpose, it must use them properly - i.e., if a fish is recruited, it should not be used to move it to land to fight - otherwise, it makes little sense to recruit the fish in the first place'<br />
<br />
6) Several years ago we tried an approach where the AI was finding 'most important' hexes on map and using the terrain on those hexes to affect it's recruitment patterns (instead of using the entire map)<br />
<br />
7) Recruiting first is a huge disadvantage, because of possibility to recruit counters to enemy units. So, if the AI recruits first, it should recruit to minimize the potential for counter-recruiting (i.e., by making a balanced army which can't be hard countered by enemy potential recruits)<br />
<br />
8) Sometimes it makes sense to hold back and not recruit even if gold is available - for example, if you're playing a campaign and current scenario is already 'beaten', or if you're waiting for the enemy to recruit units to counter them. This makes sense for the AI which usually defends and which usually wins if time runs out - so, the AI can afford to let the player come to it's position, so, it can afford to recruit some scouts and wait for the human to approach before committing to specific types of units. Also, AI has problems with grouping units so if units are recruited one-by-one, they would be would not be sent in a group.<br />
<br />
= More info (irc transcript) = <br />
ok, "1.support recruiting with multiple leaders."<br />
by definition, leader is unit which can recruit. each leader can have his own recruit list in additional to side's recruits (it's a new feature added recently).<br />
now, AI only uses the first leader to recruit (so, if 1st leader is not on keep, it might not recruit even if 2nd leader is on keep and can recruit) 14:07<br />
we need a way for the AI to figure out the fastest way to spend it's gold<br />
for example, if there are two leaders on different keeps, they can both recruit<br />
and, if those leaders are not on keep, AI should figure out a good keep for each leader, and move them to keeps<br />
for now, it doesn't matter if the AI is not splitting the recruits intelligently enough (but it'd be a plus) - i.e. if AI would recruit half of units with leader 1 and half of units with leader 2, that would be better than today.<br />
but, of course, it's possible to figure out a way to recruit units closer to where they'll be needed.<br />
<br />
next, "2. support per-leader recruit/recall lists. " - that is the extension of the previous problem - if we have multiple leaders, they can have their own limitations on what they can recruit/recall.<br />
next, "3. support easy limiting of recruitable units. " - we might want to limit AI to 'up to 3 units of levels 2+' or 'up to 5 Trolls'<br />
currently scenario creators do that by modifying AIs recruit lists on the fly when units recruited or die.<br />
but, it would be much better if they would be simply able to provide values/formula about units which can be recruited now.<br />
for example, before recruiting, AI would be able to check what units are available to recruit, and how many of units of particular type can be now recruited.<br />
note that the desire to limit the recruits is, sometimes, to set the difficulty level - but, sometimes, it is to make the AI recruit more varied units.<br />
generally, usually scenario creators want each unit that the AI is able to recruit, to be recruited even if it is bad - they want player to see a variety of opponents.<br />
moreover, currently AI is overestimating the value of high-level recruits - they cost more, they are good in combat, but they die easily because 3 1st-level units usually survive for longer than 1 3rd-level unit.<br />
so, they would be glad if the AI would recruit a good mix of units. such mix arises naturally from math in some formulas - for example, if AI would recruit 10 woses, an enemy would be able to counter it with units like fire archers or skeletons, which are effective against them.<br />
but, currently-used formulas don't provide a good mix of units.<br />
<br />
next, "4. Analyze map terrain better". basically, on each map, the terrain is varied, but some terrain is not interesting because it's far away from where the combats will be.<br />
generally, on a 2-player map, the area between the combatants is the most interesting, and the corners of the map are not that important<br />
so, it makes sense to recruit units which are better in the middle of the map, where most of the combats would happen<br />
also, sometimes, it's important to recruit some specific units to get villages or to get to targets which are over water - but it's important to recruit only the amount needed to do so <br />
i.e., on starting the game, it makes sense to recruit some fast 'scouts' to get the villages faster - but the AI should determine the correct number of scouts (or let the scenario editor tell it)<br />
<br />
next, "5. recruit units that are more useful " - currently, AIs recruitment and AIs usage of units are independent. so, AI can happily recruit a merman (fish) and then send it to fight over land. so, if AI is recruiting a unit, it'd be good to recruit units for some particular purpose (so, later, AI would remember that and use them for their purpose)<br />
i.e., we should be able to store somewhere in the unit that 'this unit was recruited because we want to get some villages with it', or 'this unit was recruited because we have a target in a forest, and this unit is good there'<br />
this would help both in debugging, and in teaching the AI to send those units where they make most sense<br />
the reverse is also true - we might want to tell the recruitment about our priorities and targets, so it'd recruit units which are useful there<br />
for example ,if we have 3 leaders, in the west, in the east, and in the center, and our target is in the west, it would make sense to recruit with the western leader first and most.<br />
<br />
Next, "6. improve counter-recruiting strategies. " - if human would recruit a unit which is vulnerable to cold, the ai would like to recruit a unit with a cold attack , such as dark adept. this makes sense. But, if the AI would recruit 10 dark adepts, putting all the money there, it's a problem<br />
because, on next turn, human would be able to recruit some units which are useful against dark adepts<br />
but the AI won't have any more money to respond..<br />
so, the AI should recruit a mix of units which can't be countered easily, and which are good both against units human currently has, and against units human can recruit/recall<br />
this is especially bad in campaigns, where human player might have a horde of high-level recalls - so, if AI spends all the gold on 1-2 unit types, human player would be able to recall proper counters<br />
<br />
and the AI is supposed to cheat a little and know what human can recruit.<br />
basically, even a simple minmax calculation would allow the AI to recruit some kind of mix of units - for example, "recruit units which are best in combat over all possible human counters next turn" <br />
if AI recruits a mixed set, it's hard to find a hard counter to it.<br />
i.e., if the AI recruits a dark adept and a skeleton, it can't be countered by berserker easily (since berserker would die to the skeleton)<br />
while, if the AI would recruit two skeletons, they can be countered by dwarven infantry with hammers<br />
and, if the AI would recruit two dark adepts, they can be easily countered by berserker<br />
so, 'mixed recruiting' arises naturally here.<br />
and, last from that list, "7. improve recruiting for AI-playable campaigns where AI has to not spend all the gold."<br />
sometimes, the scenario is already almost won, but the gold would be useful in the next scenarios - it makes sense to stop recruiting or only recruit a handful of units in this case.<br />
so, there should be a way to switch recruitment into 'conserve resources' mode (and back, if necessary)<br />
that's all for the basic list of ideas<br />
it's ok if not all of them are implemented, or if you add some of your own ideas<br />
but, the resulting recruitment should be better than the one we have now.<br />
<br />
=Whom to ask about this=<br />
Crab_ on irc.</div>Crabhttps://wiki.wesnoth.org/index.php?title=SummerOfCodeIdeas&diff=49354SummerOfCodeIdeas2013-03-26T20:01:12Z<p>Crab: /* I want to be one of your Google Summer of Code students, what should I do... */</p>
<hr />
<div>{{SoC2013}}<br />
<br />
= I want to be one of your Google Summer of Code students, what should I do... =<br />
<br />
Welcome!<br />
Here is a quick list of things to do at this time:<br />
<br />
* '''MOST IMPORTANT''' Submit your application to Google till May 3rd.<br />
* '''MOST IMPORTANT''' Join the irc channel (#wesnoth-dev on irc.freenode.net) and talk about your project and your appilication. We will not give formal interviews, but we will clearly favor people we have learned to know during the selection process (basically communication via IRC is mandatory for our project! it is the main way of "every day communication" for Wesnoth. For the same reason, it's also a good idea to regularly read the [http://www.wesnoth.org/irclogs/2013/ IRC logs].).<br />
<br />
* '''VERY IMPORTANT''' Create the wiki page about your idea (Make a copy of the student proposal page template: [[SoC2013 Template of Student page]]):<br />
** Fill the questionnaire.<br />
** Detail your idea as much as possible, look at other students pages, and please give timeline, milestones and studies you've done<br />
* If you haven't done so yet, create an account on gna.org (required for committing later on)<br />
* If you haven't done so yet, create an account on the wesnoth forum, and tell an admin of the forum or leader of the group on the IRC channel to mark it as a GSoC Student account (admins/group leaders are: Boucman, Crab, fendrin/Fabi, Ivanovic, Mordante/SkeletonCrew, Noy, shadowm/shadowmaster, Sirp/Dave, Soliton)<br />
* Though not mandatory, it is highly advisable to go to the [[EasyCoding]] and [[NotSoEasyCoding]] pages and implement one of these ideas (or any idea of similar scope) so we have an idea how you work. Be sure to use your gna account when submitting these patches so we know who it is coming from. You can also implement some features from our feature request database at gna. When you implement something, also list it on your own page with a reference to the patch. This should give you a good idea what the Wesnoth sourcecode is like and will provide a good start to getting used to our coding style, too. You can also start working on your project and submit patches/prototypes related to it<br />
<br />
* For working on Wesnoth you have to be able to compile trunk. To do so you should have a look at the [[WesnothRepository|page about the repository]] and afterwards [[CompilingWesnoth|compile Wesnoth]].<br />
<br />
= Information about our Project =<br />
The information we provided google with about our project can be looked up at the site [[SoC Information for Google]].<br />
<br />
Also see the [[DeveloperResources]] link (from the [[Project]] page).<br />
<br />
= People to bug on IRC =<br />
We have prepared a list of people with their "area of competence". This is to give you an idea on which areas those people can be of help for you. Of course you should always just ask in the IRC chan, but those are the most likely ones to answer questions in the respective area. And here is the list:<br />
<br />
[[SoC People to bug on IRC]]<br />
<br />
= List of Ideas for the Project (Suggestions from wesnoth developers) =<br />
<br />
{| border=1<br />
| NOTE: this list of ideas is automatically generated from the 'description' section of pages in ''Summer of Code 2013 Idea'' category. DO NOT TRY TO EDIT THIS LIST BY HAND - IT WON'T WORK. INSTEAD, CREATE A NEW PAGE WITH THE 'Soc Ideas2013 Template' template.<br />
|-<br />
| NOTE: to add a student page, create a new page based on copy the student proposal page template: [[SoC2013 Template of Student page]]):<br />
|} <br />
<br />
{{#dpl:<br />
|noresultsheader=''No ideas yet. Why not create one?''<br/><br />
|category=Summer of Code 2013 Idea<br />
|include=#Description<br />
|mode=userformat<br />
|format=,,<br/>,<br />
|nottitlematch=SoC_Ideas2013_Template<br />
}}<br />
<br />
=Student proposals not submitted to google=<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% student proposals which were not submitted to google''<br/><br />
|oneresultheader=''There is 1 student proposal which was not submitted to google''<br/><br />
|suppresserrors=true<br />
|noresultsheader=''All the proposals were submitted to google''<br/><br />
|category=Summer of Code 2013 Student Page<br />
|nottitlematch=SoC2013 Template of Student page<br />
|include=#IRC, #SoC Application<br />
|includenotmatch= ,/google/s<br />
|mode=userformat<br />
|format=,,[[%PAGE%|%TITLE%]]<br/>,<br />
}}<br />
<br />
=Student proposals submitted both to wiki and google=<br />
(marked by hand, so if your proposal is not there, don't panic, check google's site instead and ping us, if necessary)<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% student proposals which were submitted both to wiki and to google''<br/><br />
|oneresultheader=''There is 1 student proposal which was submitted both to wiki and to google''<br/><br />
|suppresserrors=true<br />
|noresultsheader=''All the proposals were submitted to google''<br/><br />
|category=Summer of Code 2013 Student Page<br />
|nottitlematch=SoC2013 Template of Student page<br />
|include=#IRC, #SoC Application<br />
|includematch= ,/Submitted to google/s<br />
|mode=userformat<br />
|format=,,[[%PAGE%|%TITLE%]]<br/>,<br />
}}<br />
=Result from Google acceptance=<br />
List of proposals accepted by Google would be available on May 27th</div>Crabhttps://wiki.wesnoth.org/index.php?title=SummerOfCodeIdeas&diff=49353SummerOfCodeIdeas2013-03-26T20:00:25Z<p>Crab: /* Result from Google acceptance */</p>
<hr />
<div>{{SoC2013}}<br />
<br />
= I want to be one of your Google Summer of Code students, what should I do... =<br />
<br />
Here is a quick list of things to do at this time:<br />
<br />
* '''MOST IMPORTANT''' Submit your application to Google till May 3rd.<br />
* '''MOST IMPORTANT''' Join the irc channel (#wesnoth-dev on irc.freenode.net) and talk about your project and your appilication. We will not give formal interviews, but we will clearly favor people we have learned to know during the selection process (basically communication via IRC is mandatory for our project! it is the main way of "every day communication" for Wesnoth. For the same reason, it's also a good idea to regularly read the [http://www.wesnoth.org/irclogs/2013/ IRC logs].).<br />
<br />
* '''VERY IMPORTANT''' Create the wiki page about your idea (Make a copy of the student proposal page template: [[SoC2013 Template of Student page]]):<br />
** Fill the questionnaire.<br />
** Detail your idea as much as possible, look at other students pages, and please give timeline, milestones and studies you've done<br />
* If you haven't done so yet, create an account on gna.org (required for committing later on)<br />
* If you haven't done so yet, create an account on the wesnoth forum, and tell an admin of the forum or leader of the group on the IRC channel to mark it as a GSoC Student account (admins/group leaders are: Boucman, Crab, fendrin/Fabi, Ivanovic, Mordante/SkeletonCrew, Noy, shadowm/shadowmaster, Sirp/Dave, Soliton)<br />
* Though not mandatory, it is highly advisable to go to the [[EasyCoding]] and [[NotSoEasyCoding]] pages and implement one of these ideas (or any idea of similar scope) so we have an idea how you work. Be sure to use your gna account when submitting these patches so we know who it is coming from. You can also implement some features from our feature request database at gna. When you implement something, also list it on your own page with a reference to the patch. This should give you a good idea what the Wesnoth sourcecode is like and will provide a good start to getting used to our coding style, too. You can also start working on your project and submit patches/prototypes related to it<br />
<br />
* For working on Wesnoth you have to be able to compile trunk. To do so you should have a look at the [[WesnothRepository|page about the repository]] and afterwards [[CompilingWesnoth|compile Wesnoth]].<br />
<br />
= Information about our Project =<br />
The information we provided google with about our project can be looked up at the site [[SoC Information for Google]].<br />
<br />
Also see the [[DeveloperResources]] link (from the [[Project]] page).<br />
<br />
= People to bug on IRC =<br />
We have prepared a list of people with their "area of competence". This is to give you an idea on which areas those people can be of help for you. Of course you should always just ask in the IRC chan, but those are the most likely ones to answer questions in the respective area. And here is the list:<br />
<br />
[[SoC People to bug on IRC]]<br />
<br />
= List of Ideas for the Project (Suggestions from wesnoth developers) =<br />
<br />
{| border=1<br />
| NOTE: this list of ideas is automatically generated from the 'description' section of pages in ''Summer of Code 2013 Idea'' category. DO NOT TRY TO EDIT THIS LIST BY HAND - IT WON'T WORK. INSTEAD, CREATE A NEW PAGE WITH THE 'Soc Ideas2013 Template' template.<br />
|-<br />
| NOTE: to add a student page, create a new page based on copy the student proposal page template: [[SoC2013 Template of Student page]]):<br />
|} <br />
<br />
{{#dpl:<br />
|noresultsheader=''No ideas yet. Why not create one?''<br/><br />
|category=Summer of Code 2013 Idea<br />
|include=#Description<br />
|mode=userformat<br />
|format=,,<br/>,<br />
|nottitlematch=SoC_Ideas2013_Template<br />
}}<br />
<br />
=Student proposals not submitted to google=<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% student proposals which were not submitted to google''<br/><br />
|oneresultheader=''There is 1 student proposal which was not submitted to google''<br/><br />
|suppresserrors=true<br />
|noresultsheader=''All the proposals were submitted to google''<br/><br />
|category=Summer of Code 2013 Student Page<br />
|nottitlematch=SoC2013 Template of Student page<br />
|include=#IRC, #SoC Application<br />
|includenotmatch= ,/google/s<br />
|mode=userformat<br />
|format=,,[[%PAGE%|%TITLE%]]<br/>,<br />
}}<br />
<br />
=Student proposals submitted both to wiki and google=<br />
(marked by hand, so if your proposal is not there, don't panic, check google's site instead and ping us, if necessary)<br />
{{#dpl:<br />
|resultsheader=''There are %PAGES% student proposals which were submitted both to wiki and to google''<br/><br />
|oneresultheader=''There is 1 student proposal which was submitted both to wiki and to google''<br/><br />
|suppresserrors=true<br />
|noresultsheader=''All the proposals were submitted to google''<br/><br />
|category=Summer of Code 2013 Student Page<br />
|nottitlematch=SoC2013 Template of Student page<br />
|include=#IRC, #SoC Application<br />
|includematch= ,/Submitted to google/s<br />
|mode=userformat<br />
|format=,,[[%PAGE%|%TITLE%]]<br/>,<br />
}}<br />
=Result from Google acceptance=<br />
List of proposals accepted by Google would be available on May 27th</div>Crabhttps://wiki.wesnoth.org/index.php?title=Template:SoC2013Student&diff=49352Template:SoC2013Student2013-03-26T19:58:45Z<p>Crab: Created page with '<includeonly> {{SoC2013}} </includeonly> {| border=3 align="center" cellpadding="20" cellspacing="0" |align="center" | '''This is a Summer of Code 2013 student page''' |} <br/…'</p>
<hr />
<div><includeonly><br />
{{SoC2013}}<br />
</includeonly><br />
<br />
{| border=3 align="center" cellpadding="20" cellspacing="0" <br />
|align="center" | '''This is a Summer of Code 2013 student page'''<br />
|}<br />
<br/><br />
<br />
<includeonly><br />
[[Category:Summer of Code 2013 Student Page]]<br />
</includeonly></div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC2013_Template_of_Student_page&diff=49351SoC2013 Template of Student page2013-03-26T19:57:50Z<p>Crab: /* Questionnaire */</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
<br />
=ATTENTION=<br />
'''DO NOT EDIT THIS PAGE, SoC2013_Template_of_Student_Page, - MAKE A COPY!'''<br />
<br />
=Description=<br />
<h4>TODO: Copy this page and write "your name - proposal title" in this h4 section </h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
put ONLY your irc nickname in there. in case of alternate nicks, separate by ,<br />
<br />
Example content of this section: "user" "user1, user2" (without the quotes)<br />
<br />
=Questionnaire=<br />
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crabhttps://wiki.wesnoth.org/index.php?title=SoC2013_Template_of_Student_page&diff=49350SoC2013 Template of Student page2013-03-26T19:57:16Z<p>Crab: Created page with '{{SoC2013Student}} Category:SoC_Ideas_Your_Own_Ideas2013 =ATTENTION= '''DO NOT EDIT THIS PAGE, SoC2013_Template_of_Student_Page, - MAKE A COPY!''' =Description= <h4>TODO: C…'</p>
<hr />
<div>{{SoC2013Student}}<br />
[[Category:SoC_Ideas_Your_Own_Ideas2013]]<br />
<br />
=ATTENTION=<br />
'''DO NOT EDIT THIS PAGE, SoC2013_Template_of_Student_Page, - MAKE A COPY!'''<br />
<br />
=Description=<br />
<h4>TODO: Copy this page and write "your name - proposal title" in this h4 section </h4><br />
TODO: Write a small (1-4 sentences) description of your proposal here.<br />
<br />
TODO: Add more first-level sections to detail your proposal<br />
<br />
=IRC=<br />
put ONLY your irc nickname in there. in case of alternate nicks, separate by ,<br />
<br />
Example content of this section: "user" "user1, user2" (without the quotes)<br />
<br />
=Questionnaire=<br />
TODO: fill out this questionnaire<br />
[[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]</div>Crab