views:

513

answers:

10

Ok, I'm facing an imminent addition to my family, and working through choice of names.

I've considered writing software to display names and force me to choose which I like better, similar to kitten war.

Once I've got a huge graph, though, I don't know how to process it, especially if there are cycles. for instance, I like mike better than sam, sam better than jared, jared better than mike - it doesn't make sense to simply assign votes and count them (which is what I think kitten war does). Further, I may one day get mike vs jared and vote one way, but vote differently if I get it on another day.

So:

  • Once you have the data, how to process the graph and rank the names?

Alternately:

  • What other useful algorithms might be used to make choices (say vehicle style, if you're looking for a new car)?
+4  A: 

I thought we have been through this, and the answer still is Jon Skeet :) All other data is irrelevant.

EDIT: Congrats BTW :)

leppie
+1 for the jon skeet reference, hopefully you don't get downvoted too much... ;-D
Adam Davis
-1: why do people keep upvoting garbage answers?
Juliet
@Princess - There is some value in making someone smile, but I completely respect your decision to vote down such answers.
Adam Davis
@Princess: in case it bothers you that much, I decided to upvote all of the other answers, fair? ;p
leppie
+2  A: 

If you keep tracks of wins/losses, you could have it prefer to show you names with high win to loss ratios. Eventually, the names that you like will bubble up to the top, and will more likely be compared with each other. You'll probably also want to add some weight to names that haven't been compared yet, or have had very few comparisons.

Weed out names after a certain number of losses, make sure not to compare the same names with each other twice since it's all your opinion anyway.

Once you have the 'cream of the crop' filtered out from the junk, you'll be comparing the best ones directly, competition style, until you choose a winner. (Or just look at them by hand at that point)

Stephen Pape
+6  A: 

You might like to check out the answers to a question I asked a while back: How to rank a million images with a crowdsourced sort - there were some good suggestions on how to process the results of lots of comparison operations to arrive at a ranking.

Paul Dixon
+3  A: 

What other useful algorithms might be used to make choices [...] ?

  1. Supply spousal unit with baby names book.
  2. Await input from spousal unit regarding prospective baby names.

  3. Reject offensive choices

  4. Repeat until you and spousal unit agree on a name, or baby arrives ... in which case, choose easiest-to-spell option on the list so the hospital doesn't screw up the birth certificate

This has worked well for me, twice. And we didn't even need to exercise the 11th hour easiest spelling option!

Cal Jacobson
+6  A: 

for instance, I like mike better than sam, sam better than jared, jared better than mike

If you find this to be the case, you can conclude that you are unsuitable for choosing names and should defer to the significant other for the choice.

David B
LOL - in all fairness she has veto. I'm rather ambivalent which is why I'm looking at aids... She's already told me, though, "We're having our nth boy. This time _you_ get to choose, I'm tired of picking boys names!"
Adam Davis
+4  A: 

This is the wrong implementation: You're Doing It Wrong. This is exactly the correct application for the She'll Always Win algorithm.

brian
+4  A: 

I don't know how scalable this algorithm is, but I've implemented it successfully in several sites I've designed with ranking (adapted from IMDB's rating):

weighted rating (WR) = (v / (v+m)) * R + (m / (v+m)) * C

Where:

  • R = average for the kitten (mean) = (votes / number of people who voted)
  • v = number of votes for the kitten = (votes)
  • m = minimum votes required to be listed in the Top 100 (around 25 is a safe number)
  • C = the mean vote across all kittens = (sum of votes) / (sum of everyone who voted)


The algorithm above works for a kitten war style site, but its not an adequate algorithm for an "expert system" or a recommendation engine.

One approach -- and I can't guarantee a good one -- for a recommendation engine would be to represent different choices in a matrix. Lets say you wanted to pick out a skirt, you might represent different properties of the skirt as follows:

             Fashionable     Affordable     Colorful     Practical
Miniskirt        10              5              7            5
Cheer skirt      3               1              10           1
Grass skirt      2               7              2            1
Jean skirt       9               5              3            10

Now, you ask the user what kind of clothing they want to wear:

  • [X] Something fashionable?
  • [ ] Something affordable?
  • [ ] Something colorful?
  • [X] Something practical?

The input above indicates that a user is looking for something fashionable and practical, without concern for the other properties, so its easy enough to crunch the data above as follows:

             Fashionable     Practical     Total
Jean skirt       9               10         19
Miniskirt        10              5          15
Cheer skirt      3               1           4
Grass skirt      2               1           3

This very simple, yet effective approach works as long as you know the properties of each object you're comparing.

Juliet
That's how I approach multi-variable decisions, such as cars.
Adam Davis
+2  A: 

I'm quite certain that Mike is the correct choice.

Mike
lol - sorry, you're out of the running already... :-O
Adam Davis
+4  A: 

Take a look at Machine Learning papers on "Ranking from Pairwise Comparison/Preference".

Here is one paper to get you started: Pairwise Preference Learning and Ranking

Imran
+3  A: 

This is the algorithm that we used:

  1. Allocate one gender per parent. Designate this parent the primary designator for that sex.
  2. The primary is permitted, nay encouraged, to produce a list of possible offspring designations according to whatever whim or whimsy strikes their fancy at any particular time.
  3. Designate the other parent the alternate. The alternate has only one ability for the gender for which they are not primary and that is the veto. The alternate may express a preference for one particular option over another but is really just kidding themselves.
  4. The veto wins. It requires no justification or explanation (though some is recommended in cases where the parents intend to maintain their state of wedded bliss...).
  5. In cases where the potential child is iteration n>=2, you may consult with iteration n=1 for additional ranking suggestions. For most situations, this heuristic should be considered the deciding vote.

In our case, I was the primary in both cases (two boys) and NumberOneSon was our deciding vote when it came time to pick a designation for SecondSon. And you had better believe that WifeUnit was A-OK swinging her veto around....

In short, congratulations. Parenting is a hoot.

Bob Cross