Answers.Body: <p>From your description, the problem you want to solve is a <strong>linear optimization problem</strong>: suppose we use the indices <span class="math-container">$i$</span> and <span class="math-container">$j$</span> to denote the <span class="math-container">$i-$</span>th class and the <span class="math-container">$j-$</span>th grade. Also, let us call <span class="math-container">$y_j$</span> the current value of the <span class="math-container">$j-th$</span> grade, <span class="math-container">$g_j$</span> the goal value in grade <span class="math-container">$j$</span>, <span class="math-container">$c_{ij}$</span> the impact factor of taking class <span class="math-container">$i$</span> in grade <span class="math-container">$j$</span>, and <span class="math-container">$x_i$</span> the binary variable that indicates if you go to class <span class="math-container">$i$</span> or not. Now, suppose you decided to take certain classes (which is equivalent to choosing the values <span class="math-container">$x_i$</span> for each <span class="math-container">$i$</span>) and measure the new grades <span class="math-container">$\tilde g_j$</span>. If your impact factors are accurate, then the new grades should be <span class="math-container">$\tilde g_j = \sum_i(x_ic_{ij}+y_j)$</span>. Clearly, what you would like is for this new values to be as close as possible to the goal values. So, a possible way to express your optimization problem is that you want to minimize the addition of all these differences:</p>
  
  <p><span class="math-container">$$\min_{x_0,\cdots,x_n} \sum_j g_j - \tilde g_j = \sum_j g_j - \sum_i(x_ic_{ij}+y_j), \\ \text{s.t. } x_i\in\{0,1\}, \forall\hspace 2pt i.$$</span></p>
  
  <p>Most probably, you will have certain time restrictions. For example, maybe each class takes <span class="math-container">$t_i$</span> hours from your time and your total available time is just <span class="math-container">$T$</span> hours. Or maybe you have a limit of classes <span class="math-container">$N$</span> you can take, irrespective of their time duration. With these two constraints, your problem would look like this:</p>
  
  <p><span class="math-container">$$\min_{x_0,\cdots,x_n} \sum_j g_j - \sum_i(x_ic_{ij}+y_j), \\ \text{s.t. } x_i\in\{0,1\}, \forall\hspace 2pt i,\\ \sum_ix_it_i\leq T,\\ \sum_i x_i\leq N.$$</span></p>
  
  <p>Apart from the constraint that <span class="math-container">$x_i$</span> should be 0 or 1, this is a linear optimization problem with linear constraints. <a href="http://web.mit.edu/15.053/www/AMP-Chapter-09.pdf" rel="nofollow noreferrer"><strong>Integer programming</strong></a> is an area of optimization that studies this type of problems so probably it's a good direction for your research.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-21T15:06:19.613Z
Answers.Text: I may have missed something but I am actually quite surprised about how the impact factors are taken into account here. Could you define them in a more explicit way?
Answers.UserDisplayName: Jeanba
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-21T16:37:49.563Z
Answers.Text: I just interpreted the "impact factor" of a class i in grade j as the value improvement that can be obtained in this grade j by taking class i. So, if x_i is 0, then there is no improvement, but if it is 1, the improvement is precisely the value of the impact factor. This is a simple model, but it's the one I understood was proposed in the question.
Answers.UserDisplayName: Diego Gomez
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-22T09:17:16.130Z
Answers.Text: the impact factor (as I have imagined in start) is a value between 0 and 1, with 0 = no impact and 1 = big impact. What I do not know is for how much the grade will be improved if I used the impact factor 1... This is something I am actually making some research... Probably will need some machine learning algorithm to test afterwards the impact of a class on the grades... to improve this impact factor value...
Answers.UserDisplayName: YLM
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-22T12:44:21.400Z
Answers.Text: You should consider using probabilistic graphical models if the impact factors (i.e., a linear model) turn out to be poor descriptors of the effect of taking one class in certain grade. Basically, they would allow you to model how certain interaction of classes affects the distribution of your grades. The benefit of this method is that it's easier to answer questions later of how does taking a class i affect the grade j, in comparison with deep learning methods.
Answers.UserDisplayName: Diego Gomez
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-22T12:46:59.673Z
Answers.Text: Of course, in that case the optimization problem would not be linear and Integer Programming would not be helpful. Non-linear optimization methods like stochastic gradient descent, which means neural networks too, could be helpful. However, I'm not sure how to assure in that case that your x's are either 0 or 1.
Answers.UserDisplayName: Diego Gomez
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-22T17:06:48.497Z
Answers.Text: Thank you for all those informations. I need to go deeper in my research to solve this problem.
Answers.UserDisplayName: YLM
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-11-19T19:35:41.740Z
Answers.LastActivityDate: 2019-11-19T19:46:16.233Z
Answers.LastEditDate: 2019-11-19T19:46:16.233Z
Answers.UserDisplayName: Diego Gomez
Body: <p>Consider a problem with many objectives. In my case, these are school grades for different courses (or subjects). To be more concrete, suppose that my current grade for the math course is <span class="math-container">$12/20$</span> and for the philosophy course is <span class="math-container">$8/20$</span>. My objective is to get <span class="math-container">$16/20$</span> for the math course and <span class="math-container">$15/20$</span> for the philosophy course.</p>
  <p>I have the possibility to take different courses, but I need to decide which ones. These courses can have a different impact depending on the subject. Let's say that the impact factor is in the range <span class="math-container">$[0, 1]$</span>, where <span class="math-container">$0$</span> means no impact and <span class="math-container">$1$</span> means a big impact. Then the math course could have a big impact (e.g. <span class="math-container">$0.9$</span>) on the grade, while maybe a philosophy course may not have such a big impact.</p>
  <p>The overall goal is to increase all the grades as much as possible while taking into account the impact of their associated course. In my case, I can have more than two courses and subjects.</p>
  <p>So, which algorithms can I use to solve this problem?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-06-21T16:32:48.727Z
Comments.Text: I have edited your post to simplify and hopefully clarify your explanation. Please, make sure that the current version is still consistent with your initial problem. Also, if you have found the solution to your problem, feel free to write an answer below or to accept an existing answer (if it solved your problem).
Comments.UserDisplayName: nbro
Tags: <machine-learning><optimization><constraint-satisfaction-problems><linear-programming>
Title: Which algorithm can I use to solve a problem with multiple objectives and constraints?
UserDisplayName: YLM
ThreadText: # Which algorithm can I use to solve a problem with multiple objectives and constraints?
  
  (Asked by: username_0 on 2019-11-19)
  
  Consider a problem with many objectives. In my case, these are school grades for different courses (or subjects). To be more concrete, suppose that my current grade for the math course is $12/20$ and for the philosophy course is $8/20$. My objective is to get $16/20$ for the math course and $15/20$ for the philosophy course.
  
  I have the possibility to take different courses, but I need to decide which ones. These courses can have a different impact depending on the subject. Let's say that the impact factor is in the range $[0, 1]$, where $0$ means no impact and $1$ means a big impact. Then the math course could have a big impact (e.g. $0.9$) on the grade, while maybe a philosophy course may not have such a big impact.
  
  The overall goal is to increase all the grades as much as possible while taking into account the impact of their associated course. In my case, I can have more than two courses and subjects.
  
  So, which algorithms can I use to solve this problem?
  
  **Tags:** machine-learning, optimization, constraint-satisfaction-problems, linear-programming
  > **Comments:**
  > **username_1**: I have edited your post to simplify and hopefully clarify your explanation. Please, make sure that the current version is still consistent with your initial problem. Also, if you have found the solution to your problem, feel free to write an answer below or to accept an existing answer (if it solved your problem).  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_2 on 2019-11-19. Score: 2
  
  From your description, the problem you want to solve is a **linear optimization problem**: suppose we use the indices $i$ and $j$ to denote the $i-$th class and the $j-$th grade. Also, let us call $y\_j$ the current value of the $j-th$ grade, $g\_j$ the goal value in grade $j$, $c\_{ij}$ the impact factor of taking class $i$ in grade $j$, and $x\_i$ the binary variable that indicates if you go to class $i$ or not. Now, suppose you decided to take certain classes (which is equivalent to choosing the values $x\_i$ for each $i$) and measure the new grades $\tilde g\_j$. If your impact factors are accurate, then the new grades should be $\tilde g\_j = \sum\_i(x\_ic\_{ij}+y\_j)$. Clearly, what you would like is for this new values to be as close as possible to the goal values. So, a possible way to express your optimization problem is that you want to minimize the addition of all these differences:
  
  $$\min\_{x\_0,\cdots,x\_n} \sum\_j g\_j - \tilde g\_j = \sum\_j g\_j - \sum\_i(x\_ic\_{ij}+y\_j), \\ \text{s.t. } x\_i\in\{0,1\}, \forall\hspace 2pt i.$$
  
  Most probably, you will have certain time restrictions. For example, maybe each class takes $t\_i$ hours from your time and your total available time is just $T$ hours. Or maybe you have a limit of classes $N$ you can take, irrespective of their time duration. With these two constraints, your problem would look like this:
  
  $$\min\_{x\_0,\cdots,x\_n} \sum\_j g\_j - \sum\_i(x\_ic\_{ij}+y\_j), \\ \text{s.t. } x\_i\in\{0,1\}, \forall\hspace 2pt i,\\ \sum\_ix\_it\_i\leq T,\\ \sum\_i x\_i\leq N.$$
  
  Apart from the constraint that $x\_i$ should be 0 or 1, this is a linear optimization problem with linear constraints. [**Integer programming**](http://web.mit.edu/15.053/www/AMP-Chapter-09.pdf) is an area of optimization that studies this type of problems so probably it's a good direction for your research.
  
  > **Comments:**
  > **username_3**: I may have missed something but I am actually quite surprised about how the impact factors are taken into account here. Could you define them in a more explicit way?  
  > **username_2**: I just interpreted the "impact factor" of a class i in grade j as the value improvement that can be obtained in this grade j by taking class i. So, if x_i is 0, then there is no improvement, but if it is 1, the improvement is precisely the value of the impact factor. This is a simple model, but it's the one I understood was proposed in the question.  
  > **username_0**: the impact factor (as I have imagined in start) is a value between 0 and 1, with 0 = no impact and 1 = big impact. What I do not know is for how much the grade will be improved if I used the impact factor 1... This is something I am actually making some research... Probably will need some machine learning algorithm to test afterwards the impact of a class on the grades... to improve this impact factor value...  
  > **username_2**: You should consider using probabilistic graphical models if the impact factors (i.e., a linear model) turn out to be poor descriptors of the effect of taking one class in certain grade. Basically, they would allow you to model how certain interaction of classes affects the distribution of your grades. The benefit of this method is that it's easier to answer questions later of how does taking a class i affect the grade j, in comparison with deep learning methods.  
  > **username_2**: Of course, in that case the optimization problem would not be linear and Integer Programming would not be helpful. Non-linear optimization methods like stochastic gradient descent, which means neural networks too, could be helpful. However, I'm not sure how to assure in that case that your x's are either 0 or 1.  
  > **username_0**: Thank you for all those informations. I need to go deeper in my research to solve this problem.  
  
  ---
  
  