I am working with a big set of data right now and I wrote a program that calculates a result based on some inputs. I have 10 inputs, each of them has about 20 different possible values. I am not sure what technique to use to find the combination of these inputs that will produce the biggest result.
Here is a made up example that is equivalent in essence to the real thing, but more simple to demonstrate:
There are movies, users and user ratings. Let's say we have information about users' age, country, gender, zodiac sign, hair color, etc. The goal in this scenario would be to find the combination of age interval, country, gender, etc. that would result in the biggest average rating for a particular movie. Finally let's add a restriction of minimum number of votes, so that when we get a combination of inputs that returns us a single user that gave the movie a perfect score - we ignore this combination.
What I've already tried:
- Nested for loops. This way all the possible combinations will be tested but it will run for a month - too long.
- Some kind of a genetic algorithm. I let the program choose random values for inputs and save and reuse the values that contributed to the best results. Apply some mutation when the program gets stuck on the same values for too long. I got some good results using this method but I couldn't reproduce them often on different runs so I guess maybe I am missing out on even better results using this approach.
- I tried to analyze each input separately, giving the rest of them default values, and then combining best individual inputs together. Same result as for method #2.
I would like to know if there are known algorithms/techniques to solve this kind of problems.