Since the GPLed dating platform code out there is crappy PHP work and not suited to help geeks meet each other either, I started designing a new matching algorithm in course of the rewrite of geekdarling.ch as a Ruby application.
Basically the idea is quite easy. First I travel the bipartite tree and cut it into subtrees matching the basic requirement of matching sexual orientation and this way saving CPU power by checking for bidirectional preferences.
For the example on the upper graphics that would mean: R=(((6+1)/2)+((3+4)/2)+0)/3=2.3
Another practical example: Let's say I choose under "preferred editor" select that it's absolutely important to me that my partner like vim too, then anyone who likes vim as well will be given 100 additional points when being weighted in our matching algorithm, and so all the vim using geek girls are listed first (followed by the emacs users ;-)).
I'm not quite done yet, but that's where I'm going 🙂
Please gimme feedback.