# Artificial Intelligence for Video Games

Welcome to this learning project dedicated to enlarge both theoretical and practical knowledge about research and artificial intelligence development applied to video games and interactive applications in general.
The original learning project was created in the Spanish Wikiversity.

## Objectives

This learning project offer the possibility to know the fundamentals of artificial intelligence, such as the principals techniques of modeling and development like whatever tools and languages available to develop this type of IT systems, looking for it's practical application in industrial interactive environment. The emphasis is on enabling participants to understand and analyze problems related to reasoning and automatic planning, the behavior of intelligent agents, or computer creativity, and then design and implement effective and efficient computer solutions to these problems.
In addition, participants are encouraged to put what they have learned into use by developing a series of workshops that illustrate all the principles and processes seen in the theory, and that allow them to begin the work of an Artificial Intelligence Engineer for Video games.
On this page you can consult the concepts that are formally addressed in this learning project:
* List of concepts

## Didactic materials

The main didactic materials of this project are the 'lessons' that are developed collaboratively among all the participants. These lessons, and in general the activities of this learning project, may have associated recommended readings : bibliographic sources, guides, articles from Wikipedia itself or from Wikibooks. The most relevant complements for the entire learning project are compiled in the references section of this page.
Although it has a certain theoretical component, this learning project includes numerous 'activities' of a practical nature. Exercises, practical cases, knowledge level tests, group work or similar tasks are welcome, all activities that should be associated with their respective lessons.
There is a class calendar with the real dates of the different editions of the university course that the participants carry out and which suppose the beginning of this learning project. The calendar includes the "real tasks and practices" that have been carried out week after week, so that it can serve as a reference when adapting the learning project to the specific circumstances of each new participant:
* Cursus Calendar

### Lessons

Below is a list of the different lessons that have been generated as teaching material for this learning project. The lessons are organized in different blocks (or themes) and at the end there is a section with annexes that complement the information of the lessons.
It is important that, when creating or editing lessons, keep in mind the following tips:
* Tips for writing lessons

#### Block 1: Introduction to Artificial Intelligence

These lessons introduce basic questions about artificial intelligence and its relation to the world of videogames.
Lecciones:
* Fundamentals of Artificial Intelligence
* History of Artificial Intelligence for Video Games
In this block it is suggested to continue researching different types of intelligence than human (more as an expressive tool), usual applications of AI in video games (distinguishing between genres and available technologies). However, it does not deepen in applications that are far from the scope of the video game.

#### Block 2: Problem Solving

These lessons come fully into the problem of developing computer systems capable of solving problems through reasoning, or at least knowing that they require some intelligence similar in some way to that of the human being. We focus on modeling problem solving as a search in the space of possible states, and in turn when we use different strategies for this search. A typical application in video games is route planning, as will be discussed later.
Lessons:
* Rational models of resolution
* Search in the state space
* Unskilled search strategies
* Informed Search Strategies
* Search with opponents
* Automatic planning
In this block it is suggested to continue researching other paradigms of AI, use of libraries that offer different search strategies, even more specific variants of the algorithms. We will not be able to deepen in the problems of satisfaction of restrictions, very useful in Logistics, but that we will not deal with since it is not so relevant in videogames.

#### Block 3: Knowledge, Reasoning and Decision

These lessons address the issues of representation (frameworks, logic, production rules ...) and use of knowledge (and its types), as well as decision-making.
Lessons:
* Knowledge representation
* Representation in first order logic
* Reasoning in first order logic
* Uncertain knowledge
* Probabilistic reasoning
* Theory of the decision
In this block it will be suggested to continue investigating in: reasoners that can connect externally or go integrated with a videogame, tools and languages to define behavior through rules or other techniques, and even ontologies. Although it is a very important issue, we will not tackle the field of Machine Learning in any block because it remains pending to be addressed in other subjects and their corresponding learning projects.

#### Block 4: Perception, Communication and Action

These lessons address the concept of intelligent agent as well as the most common techniques to achieve autonomous behavior in videogames, delving into issues related to what an intelligent agent does in the game, as well as thinking: perceives, communicates and acts. The typical application in video games is the design of non-player characters (NPCs).
Lessons:
* Multi-agent systems
* Perception
* Movement
* Route planning
* Decision making
* Tactics and strategies
* Tools and systems of Artificial Intelligence
In this block it will be suggested to continue investigating Distributed Artificial Intelligence and multi-agent systems, in Natural Language Processing and probabilistic models to perform some of these functions. We will not see anything about Artificial Vision and Robotics, although they are closely related fields, we will not delve into the use of the current cognitive services offered by the large cloud platforms of Microsoft Azure, IBM Bluemix and others.

#### Block 5: Creativity and Expressiveness

These lessons delve into issues related to the procedural generation of content and advanced techniques to know the player, dynamically adapt the game and evaluate the impact of artificial intelligence (Computational Creativity, in fact, even speaking of Artistic Expressiveness) in the final experience of the player. The typical application in video games is the automatic generation of content such as levels, missions, characters or whole arguments.
Lessons:
* Computational creativity
* Content procedural generation
* Automatic evaluation of the game
In this block it will be suggested to continue investigating in player modeling, dynamic adaptation of the game and evaluation of the experience.

#### Annexes

To complement and summarize the most relevant content of the lessons are offered 'annexes' complementary to these. It is not a matter of making exhaustive lists but of gathering here references mentioned in the relevant lessons and listings for this learning project.
The following annexes are proposed that will be in a permanent process of construction and expansion:
* Glossary of terms and acronyms
* List of relevant video games

### Activities

The activities of this learning project are workshops on specific topics and practices related to these and developed by the participants. These activities will be explained below to serve as examples and case studies for the study.
It is important that, when creating or editing activities, keep in mind the following tips:
* Tips for writing activities

#### Workshops

These are the workshops where specific issues of the development of artificial intelligence systems are addressed:
* Solving puzzles

#### Practices

These practices are cases that students have made throughout this learning project:
* 8 pieces sliding puzzle