assigning probability weights to many-parameter combinations

No.13364265 ViewReplyOriginalReport
I have a mathematical problem

Let's say I'm making a video game that revolves around (not completely) randomly generated characters
each character is built from component parts, each with associated rarity
for example, eye colour, would have 25% blue and 75% brown
skin colour would be most often lighter tones
hair colour would be often brown, sometimes blonde, rarely ginger, etc...
at this point it would be easy to create a generator that selects parameters one at a time... however I feel this would be too random, and create ugly characters
so I want to add conditions that forbid, or make less likely, certain combinations
For example, a dark skinned character should usually have darker hair... a white character would only rarely have woolly afro hair, ginger hair is likely to have freckles etc...
and to add another complication, I'd like there to be a feature where you can "lock" a certain trait while rolling a random character.

What is the most efficient way I can organise all these dependent, related probabilities?
The most inefficient way to do this would be a many dimensional matrix, or very long list, to store weights of every possible combination. Surely there are better ways to do this.