From the algorithmic point of view — which is to say, paying attention to some mathematical abstraction, and ignoring how close it is to the real problem — I think you're okay. Edmonds's "blossom" algorithm (Canad. J. Math 1965) is a polynomial-time algoritm for solving the minimal-weight perfect-matching problem: given a score for how much "cognitive dissonance" each person would have playing each character (which could just be a distance between the high-dimensional points corresponding to their questionnaire responses, but more involved is ok too), the algorithm will produce the matching with the minimal total dissonance.
One glaring shortcoming for your real problem is that it can't take inter-assignment relationships into account: "Player A will be much happier playing role X if B plays Y than if C plays Y" is right out. (Mathematically, that would mean your objective function isn't linear in the matching.) I don't know how much you do that sort of thing.
no subject
One glaring shortcoming for your real problem is that it can't take inter-assignment relationships into account: "Player A will be much happier playing role X if B plays Y than if C plays Y" is right out. (Mathematically, that would mean your objective function isn't linear in the matching.) I don't know how much you do that sort of thing.