Answers.Body: <p>A simple <a href="https://en.wikipedia.org/wiki/Decision_tree" rel="nofollow noreferrer">decision tree</a> would be suitable, and represents one of the easiest forms of AI.  <a href="https://en.wikipedia.org/wiki/KISS_principle" rel="nofollow noreferrer">Don't over-complicate simple problems</a>.</p>
  
  <p>The simplest approach would likely run faster, and require less system resources, so, unless this project is designed as an entree into machine learning, that approach is way overkill for this simple problem.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-09-13T19:02:02.267Z
Answers.Text: could you please revise your answer(opinion based)
Answers.UserDisplayName: quintumnia
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-09-13T20:43:35.283Z
Answers.Text: See my edits.  We appreciate you contributing, but a little more elaboration would make your answers more useful.
Answers.UserDisplayName: DukeZhou
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-09-13T05:59:25.680Z
Answers.LastActivityDate: 2017-09-13T20:42:32.053Z
Answers.LastEditDate: 2017-09-13T20:42:32.053Z
Answers.UserDisplayName: solarflare
Answers.Body: <p>even though that's not really AI, the easiest way to do that would probably be to put coefficients on each question</p>
  
  <p>e.g. your question would have something like</p>
  
  <pre><code>grammar=0.55
  vocabulary=0.45
  if(won){
    success=-1
  }else{
    success=1
  }
  </code></pre>
  
  <p>the lower the level, the less questions of this type will appear</p>
  
  <p>at the end of the level, you sum each question times how much did the player succeed </p>
  
  <p>player.level is a real number array </p>
  
  <pre><code>for each question{
     player.level["grammar"]=player.level["grammar"]+question.grammar*question.success
     player.level["vocabulary"]=player.level["vocabulary"]+question.vocabulary*question.success
  }
  </code></pre>
  
  <p>then when you initialize the level, generate the questions according to the player's level
  choice is a random real number between 0 and sum of all player.level (offseted to be above 0)</p>
  
  <pre><code>for each player.level{
     if choice&gt;player.level{
        choice=choice-player.level
     }else{
        return question_type=player.level.type
     }
  }
  </code></pre>
  
  <p>though a "true" AI can make the same or better choices of questions, it will probably be slower, and require more data than a simple algorithm like this one.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2016-12-15T10:18:25.177Z
Answers.LastActivityDate: 2016-12-15T10:18:25.177Z
Answers.UserDisplayName: satibel
Answers.Body: <p>You can implement a Reinforcement Learning agent with the following aspects:</p>
  
  <h2>Action Space</h2>
  
  <p>An action of adding or removing a question of a certain category, e.g. 
  Add a grammar question, remove a grammar question, add vocabulary question, etc.</p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?a&space;%5Cin&space;%5Cleft&space;%5C%7B&space;a_%7Bgrammar%7D%5E%7B&plus;%7D,&space;a_%7Bgrammar%7D%5E%7B-%7D,a_%7Bvocab%7D%5E%7B&plus;%7D,a_%7Bvocab%7D%5E%7B-%7D,&space;%5Ccdots&space;%5Cright&space;%5C%7D" title="a \in \left \{ a_{grammar}^{+}, a_{grammar}^{-},a_{vocab}^{+},a_{vocab}^{-}, \cdots \right \}" /> </p>
  
  <h2>State Space</h2>
  
  <p>Using the <a href="https://www.goodreads.com/book/show/66354.Flow" rel="nofollow noreferrer">Flow Model</a>, you can build a vector of flow features per topic. such that each element in that vector is either challenging, normal, boring </p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?%5Cphi%5ET&space;=&space;%5Cleft&space;(&space;%5Cvarphi%5E%7B(grammar)%7D,&space;%5Cvarphi%5E%7B(vocab)%7D,&space;%5Ccdots&space;%5Cright&space;)" title="\phi^T = \left ( \varphi^{(grammar)}, \varphi^{(vocab)}, \cdots \right )" /></p>
  
  <p>such that </p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?%5Cvarphi%5E%7B(i)%7D&space;%5Cin&space;%5Cleft&space;%5C%7B&space;-1,&space;0,&space;&plus;1&space;%5Cright&space;%5C%7D" title="\varphi^{(i)} \in \left \{ -1, 0, +1 \right \}" /></p>
  
  <p>where -1 is boring, 0 is just right, and +1 is challenging, or the other way around </p>
  
  <p>then you flatten this vector into a scalar integer </p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?s&space;:&space;%5Cmathbb%7BZ%7D%5En&space;%5Cmapsto&space;%5Cmathbb%7BZ%7D" title="s : \mathbb{Z}^n \mapsto \mathbb{Z}" /></p>
  
  <p>where n is number of subjects, and Z is the set of integer numbers </p>
  
  <h2>Reward Signal</h2>
  
  <p>Use a combination of:</p>
  
  <ul>
  <li>participation time</li>
  <li>player score</li>
  <li>distance from equilibrium </li>
  </ul>
  
  <p>to define a reward signal. and make the model learn the optimal flow for this user. </p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?r_%7Bt%7D&space;:&space;%5Cleft&space;(&space;%5Cpsi,&space;T_%7Bparticipating%7D,&space;%5Cleft&space;%5C|&space;%5Cphi&space;-&space;%5Cphi%5E%7B*%7D&space;%5Cright&space;%5C|&space;%5Cright&space;)&space;%5Cmapsto&space;%5Cmathbb%7BR%7D" title="r_{t} : \left ( \psi, T_{participating}, \left \| \phi - \phi^{*} \right \| \right ) \mapsto \mathbb{R}" /></p>
  
  <p>such that <img src="https://latex.codecogs.com/gif.latex?%5Cpsi&space;%5Cin&space;%5Cmathbb%7BR%7D%5En" title="\psi \in \mathbb{R}^n" /> is user score in each subject 
  and </p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?%5Cleft&space;%5C|&space;%5Cphi&space;-&space;%5Cphi%5E%7B*%7D&space;%5Cright&space;%5C|&space;%5Cin&space;%5Cmathbb%7BR%7D" title="\left \| \phi - \phi^{*} \right \| \in \mathbb{R}" /></p>
  
  <p>is a distance function defining how far this user is from equilibrium in skills to learn </p>
  
  <h2>Algorithm</h2>
  
  <p>using the above model, you can build a simple Q-Learning agent, trying to maximize the reward signal by picking the optimal action, in terms of adding and removing questions, or challenges of a certain subject.</p>
  
  <p>and of course, the reward signal is a function of how long the player spends playing, how challenged or bored the player is, and how far the player is from the optimal learning goal</p>
  
  <p><img src="https://latex.codecogs.com/gif.latex?Q_%7Bs_t,a_t%7D&space;%5Cleftarrow&space;Q_%7Bs_t,a_t%7D&space;&plus;&space;%5Calpha&space;%5Cleft&space;(&space;r_t&space;&plus;&space;%5Cgamma&space;v_%7Bs_%7Bt&plus;1%7D%7D&space;-&space;Q_%7Bs_t,&space;a_t%7D&space;%5Cright&space;)" title="Q_{s_t,a_t} \leftarrow Q_{s_t,a_t} + \alpha \left ( r_t + \gamma v_{s_{t+1}} - Q_{s_t, a_t} \right )" /></p>
  
  <p>where v is the value of a certain state, Q is the value of a state/action pair </p>
  
  <p>Good luck </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-09-13T16:51:21.120Z
Answers.LastActivityDate: 2017-09-13T16:51:21.120Z
Answers.UserDisplayName: A.Rashad
Answers.Body: <p>You could build a MLC(machine learning classifier)  based on her/his answers and apply that to a large database of questions to see which type of questions will probably yield an incorrect answer. </p>
  
  <p>And then provide those questions (Assuming one would learn more from working at her/his weaknesses) to provide a steeper learning curve, continuously adapting the MLC.</p>
  
  <p><a href="http://www.deeplearningbook.org/" rel="nofollow noreferrer">http://www.deeplearningbook.org/</a> Chapter 5, also findable on github, has a very clear and relatively simple explanation on how to build a basic MLC, and what the problems/critical issues/parameters in application could be/are.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-12T18:54:23.543Z
Answers.Text: Could you please expand the acronym MLC at its first use?  Using acronyms without expanding them can confuse people who aren't already familiar with the term, especially if the term is overloaded with multiple expansions.
Answers.UserDisplayName: mindcrime
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-12T19:40:44.037Z
Answers.Text: @mindcrime Thank you! I did. I'm fairly new with it myself so I should've known.
Answers.UserDisplayName: a.t.
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-08-12T17:19:31.430Z
Answers.LastActivityDate: 2017-08-12T19:39:30.537Z
Answers.LastEditDate: 2017-08-12T19:39:30.537Z
Answers.UserDisplayName: a.t.
Body: <p>I am creating a game application that will generate a new level based on the performance of the user in the previous level.<br>
  The application is regarding language improvement, to be precise. Suppose the user performed well in grammar-related questions and weak on vocabulary in a particular level. Then the new level generated will be more focused on improving the vocabulary of the user.<br>
  All the questions will be present in a database with tags related to sections or category that they belong to. <strong>What AI concepts can I use to develop an application mentioned above</strong>?</p>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-04-19T20:14:59.027Z
Comments.Text: You don't really need an AI to do all those things. Can you please elaborate on certain reasons why you will be needing AI algorithms instead of normal ones. Your application will only require certain degree of programming and data base skills.
Comments.UserDisplayName: Ugnes
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-07-13T15:10:56.447Z
Comments.Text: @Ugnes ,Any application on earth can have AI capabilities.
Comments.UserDisplayName: quintumnia
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-07-13T19:12:23.280Z
Comments.Text: I don't really understand what you're asking.   You've identified a number of candidate  approaches --> "machine learning , planning systems , reinforcement learning and case-based-reasoning", and one or more of those might be useful for the system you're building.  But what exactly is it you want to know?
Comments.UserDisplayName: mindcrime
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T18:40:42.207Z
Comments.Text: @mindcrime The OP has a concept that needs to be narrowed down.And this question has received vague answers.Where were we?
Comments.UserDisplayName: quintumnia
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-09-13T18:41:15.500Z
Comments.Text: @Ugnes This question needs revision.
Comments.UserDisplayName: quintumnia
Tags: <machine-learning><deep-learning><algorithm><ai-design><path-planning>
Title: Which methods or algorithms to develop a learning application?
UserDisplayName: Abdallah .E Abdallah
ThreadText: # Which methods or algorithms to develop a learning application?
  
  (Asked by: username_0 on 2016-12-07)
  
  I am creating a game application that will generate a new level based on the performance of the user in the previous level.  
  The application is regarding language improvement, to be precise. Suppose the user performed well in grammar-related questions and weak on vocabulary in a particular level. Then the new level generated will be more focused on improving the vocabulary of the user.  
  All the questions will be present in a database with tags related to sections or category that they belong to. **What AI concepts can I use to develop an application mentioned above**?
  
  **Tags:** machine-learning, deep-learning, algorithm, ai-design, path-planning
  
  > **Comments:**
  > **username_1**: You don't really need an AI to do all those things. Can you please elaborate on certain reasons why you will be needing AI algorithms instead of normal ones. Your application will only require certain degree of programming and data base skills.  
  > **username_2**: @username_1 ,Any application on earth can have AI capabilities.  
  > **username_3**: I don't really understand what you're asking.   You've identified a number of candidate  approaches --> "machine learning , planning systems , reinforcement learning and case-based-reasoning", and one or more of those might be useful for the system you're building.  But what exactly is it you want to know?  
  > **username_2**: @username_3 The OP has a concept that needs to be narrowed down.And this question has received vague answers.Where were we?  
  > **username_2**: @username_1 This question needs revision.  
  
  ---
  
  ## 4 answers
  
  ### Answer by username_4 on 2017-09-13. Score: 2
  
  A simple [decision tree](https://en.wikipedia.org/wiki/Decision_tree) would be suitable, and represents one of the easiest forms of AI. [Don't over-complicate simple problems](https://en.wikipedia.org/wiki/KISS_principle).
  
  The simplest approach would likely run faster, and require less system resources, so, unless this project is designed as an entree into machine learning, that approach is way overkill for this simple problem.
  
  > **Comments:**
  > **username_2**: could you please revise your answer(opinion based)  
  > **username_5**: See my edits.  We appreciate you contributing, but a little more elaboration would make your answers more useful.  
  
  ---
  
  ### Answer by username_6 on 2016-12-15. Score: 2
  
  even though that's not really AI, the easiest way to do that would probably be to put coefficients on each question
  
  e.g. your question would have something like
  
  ```
  grammar=0.55
  vocabulary=0.45
  if(won){
    success=-1
  }else{
    success=1
  }
  
  ```
  
  the lower the level, the less questions of this type will appear
  
  at the end of the level, you sum each question times how much did the player succeed
  
  player.level is a real number array
  
  ```
  for each question{
     player.level["grammar"]=player.level["grammar"]+question.grammar*question.success
     player.level["vocabulary"]=player.level["vocabulary"]+question.vocabulary*question.success
  }
  
  ```
  
  then when you initialize the level, generate the questions according to the player's level
  choice is a random real number between 0 and sum of all player.level (offseted to be above 0)
  
  ```
  for each player.level{
     if choice>player.level{
        choice=choice-player.level
     }else{
        return question_type=player.level.type
     }
  }
  
  ```
  
  though a "true" AI can make the same or better choices of questions, it will probably be slower, and require more data than a simple algorithm like this one.
  
  
  ---
  
  ### Answer by username_7 on 2017-09-13. Score: 2
  
  You can implement a Reinforcement Learning agent with the following aspects:
  
  ## Action Space
  
  An action of adding or removing a question of a certain category, e.g.
  Add a grammar question, remove a grammar question, add vocabulary question, etc.
  
  ![](https://latex.codecogs.com/gif.latex?a&space;%5Cin&space;%5Cleft&space;%5C%7B&space;a_%7Bgrammar%7D%5E%7B&plus;%7D,&space;a_%7Bgrammar%7D%5E%7B-%7D,a_%7Bvocab%7D%5E%7B&plus;%7D,a_%7Bvocab%7D%5E%7B-%7D,&space;%5Ccdots&space;%5Cright&space;%5C%7D "a \in \left \{ a_{grammar}^{+}, a_{grammar}^{-},a_{vocab}^{+},a_{vocab}^{-}, \cdots \right \}")
  
  ## State Space
  
  Using the [Flow Model](https://www.goodreads.com/book/show/66354.Flow), you can build a vector of flow features per topic. such that each element in that vector is either challenging, normal, boring
  
  ![](https://latex.codecogs.com/gif.latex?%5Cphi%5ET&space;=&space;%5Cleft&space;(&space;%5Cvarphi%5E%7B(grammar)%7D,&space;%5Cvarphi%5E%7B(vocab)%7D,&space;%5Ccdots&space;%5Cright&space;) "\phi^T = \left ( \varphi^{(grammar)}, \varphi^{(vocab)}, \cdots \right )")
  
  such that
  
  ![](https://latex.codecogs.com/gif.latex?%5Cvarphi%5E%7B(i)%7D&space;%5Cin&space;%5Cleft&space;%5C%7B&space;-1,&space;0,&space;&plus;1&space;%5Cright&space;%5C%7D "\varphi^{(i)} \in \left \{ -1, 0, +1 \right \}")
  
  where -1 is boring, 0 is just right, and +1 is challenging, or the other way around
  
  then you flatten this vector into a scalar integer
  
  ![](https://latex.codecogs.com/gif.latex?s&space;:&space;%5Cmathbb%7BZ%7D%5En&space;%5Cmapsto&space;%5Cmathbb%7BZ%7D "s : \mathbb{Z}^n \mapsto \mathbb{Z}")
  
  where n is number of subjects, and Z is the set of integer numbers
  
  ## Reward Signal
  
  Use a combination of:
  
  * participation time
  * player score
  * distance from equilibrium
  
  to define a reward signal. and make the model learn the optimal flow for this user.
  
  ![](https://latex.codecogs.com/gif.latex?r_%7Bt%7D&space;:&space;%5Cleft&space;(&space;%5Cpsi,&space;T_%7Bparticipating%7D,&space;%5Cleft&space;%5C|&space;%5Cphi&space;-&space;%5Cphi%5E%7B*%7D&space;%5Cright&space;%5C|&space;%5Cright&space;)&space;%5Cmapsto&space;%5Cmathbb%7BR%7D "r_{t} : \left ( \psi, T_{participating}, \left \| \phi - \phi^{*} \right \| \right ) \mapsto \mathbb{R}")
  
  such that ![](https://latex.codecogs.com/gif.latex?%5Cpsi&space;%5Cin&space;%5Cmathbb%7BR%7D%5En "\psi \in \mathbb{R}^n") is user score in each subject
  and
  
  ![](https://latex.codecogs.com/gif.latex?%5Cleft&space;%5C|&space;%5Cphi&space;-&space;%5Cphi%5E%7B*%7D&space;%5Cright&space;%5C|&space;%5Cin&space;%5Cmathbb%7BR%7D "\left \| \phi - \phi^{*} \right \| \in \mathbb{R}")
  
  is a distance function defining how far this user is from equilibrium in skills to learn
  
  ## Algorithm
  
  using the above model, you can build a simple Q-Learning agent, trying to maximize the reward signal by picking the optimal action, in terms of adding and removing questions, or challenges of a certain subject.
  
  and of course, the reward signal is a function of how long the player spends playing, how challenged or bored the player is, and how far the player is from the optimal learning goal
  
  ![](https://latex.codecogs.com/gif.latex?Q_%7Bs_t,a_t%7D&space;%5Cleftarrow&space;Q_%7Bs_t,a_t%7D&space;&plus;&space;%5Calpha&space;%5Cleft&space;(&space;r_t&space;&plus;&space;%5Cgamma&space;v_%7Bs_%7Bt&plus;1%7D%7D&space;-&space;Q_%7Bs_t,&space;a_t%7D&space;%5Cright&space;) "Q_{s_t,a_t} \leftarrow Q_{s_t,a_t} + \alpha \left ( r_t + \gamma v_{s_{t+1}} - Q_{s_t, a_t} \right )")
  
  where v is the value of a certain state, Q is the value of a state/action pair
  
  Good luck
  
  
  ---
  
  ### Answer by username_8 on 2017-08-12. Score: 2
  
  You could build a MLC(machine learning classifier) based on her/his answers and apply that to a large database of questions to see which type of questions will probably yield an incorrect answer.
  
  And then provide those questions (Assuming one would learn more from working at her/his weaknesses) to provide a steeper learning curve, continuously adapting the MLC.
  
  <http://www.deeplearningbook.org/> Chapter 5, also findable on github, has a very clear and relatively simple explanation on how to build a basic MLC, and what the problems/critical issues/parameters in application could be/are.
  
  > **Comments:**
  > **username_3**: Could you please expand the acronym MLC at its first use?  Using acronyms without expanding them can confuse people who aren't already familiar with the term, especially if the term is overloaded with multiple expansions.  
  > **username_8**: @username_3 Thank you! I did. I'm fairly new with it myself so I should've known.  
  
  ---
  
  