Jump to content

DrTodd13

Advanced Members
  • Posts

    1,156
  • Joined

  • Last visited

Everything posted by DrTodd13

  1. DrTodd13

    Jobs

    I guess my title is senior research scientist. I do software research for Intel Labs.
  2. Futurama Lost Alias American Idol Dancing with the Stars Battlestar Galactica Stargate Stargate Atlantis House Bones Iron Chef E.R. Grey's Anatomy
  3. Maybe it would be nice to have some indicator in your profile that would indicate whether you are currently in a "serious" mode or "just having fun" mode.
  4. While we're at it, can we add a "flag" for the anarcho-capitalists out there who don't believe that countries/nations/states have a right to exist? Libertatis Aequilibritas
  5. m_var_name is meant to indicate that this is a member variable of a class (struct) rather than a local or global variable. I picked this up as part of a coding standard on some project I was working on and have kept it. g_variable would mean that the variable is global. Variables without prefixes would be local. To Uday, you can create a C version and tinker with the idea. My only request is that nothing go into active use unless I give additional permission. The idea of lowering the weight of people's ratings who themselves are poorly rated is an appealing one but in my experience, such modifications can potentially lead to instability. I'd have to do some studies to find out what effect such a decreased weight would have.
  6. COPYRIGHT 2006 - Todd A. Anderson No permission to use this code or the ideas embodied herein unless specifically granted by the author. ------------------------------------------------------------------------ The main function of interest is "ComputeReputations." Ratings are on a scale of 0 to 10 and ratings weight maxes out after 20 boards but as you can see this is a configurable parameter. -------------------------------------------------------------------- #define MIN_RATING 0 #define MAX_RATING 10 #define MIN_BOARDS 1 #define MAX_BOARDS 20 using namespace std; class Evaluation { protected: unsigned int m_num_boards; unsigned int m_num_days_since_epoch; unsigned int m_skill; unsigned int m_niceness; public: Evaluation(void) {} Evaluation(unsigned int num_boards,unsigned int days_since_epoch) : m_num_boards(num_boards), m_num_days_since_epoch(days_since_epoch), m_sk ill(UINT_MAX), m_niceness(UINT_MAX) {} void AddBoards(unsigned int num_boards,unsigned int days_since_epoch) { // prevent wrap-around if(m_num_boards + num_boards > m_num_boards) m_num_boards += num_boards; m_num_days_since_epoch = days_since_epoch; } void NewEvaluation(unsigned int skill,unsigned int niceness); unsigned int get_num_boards(void) const { return m_num_boards; } unsigned int get_days_since_epoch(void) const { return m_num_days_since_epoc h; } unsigned int get_skill(void) const { return m_skill; } unsigned int get_niceness(void) const { return m_niceness; } }; class Reputation { protected: map<string,Evaluation> m_evals; double time_weight(unsigned int x) const; public: void AddBoards(const string &username,unsigned int num_boards,unsigned int d ays_since_epoch); // 0 = success // 1 = parameter out of range // 2 = no boards played int NewEvaluation(const string &username,unsigned int skill,unsigned int nic eness); void ComputeReputations(unsigned int days_since_epoch,float &skill_reputatio n,float &niceness_reputation) const; }; void Reputation::AddBoards(const string &username,unsigned int num_boards,unsign ed int days_since_epoch) { map<string,Evaluation>::iterator eval_iter = m_evals.find(username); if(eval_iter == m_evals.end()) { m_evals.insert(pair<string,Evaluation>(username,Evaluation(num_boards,da ys_since_epoch))); } else { eval_iter->second.AddBoards(num_boards,days_since_epoch); } } void Evaluation::NewEvaluation(unsigned int skill,unsigned int niceness) { m_skill = skill; m_niceness = niceness; } int Reputation::NewEvaluation(const string &username,unsigned int skill,unsigned int niceness) { if(skill < MIN_RATING || skill > MAX_RATING || niceness < MIN_RATING || nice ness > MAX_RATING) return 1; map<string,Evaluation>::iterator eval_iter = m_evals.find(username); if(eval_iter == m_evals.end()) { return 2; } else { eval_iter->second.NewEvaluation(skill,niceness); } return 0; } // This is something else I haven't already mentioned. // Ratings degrade in weight over time. If you played with someone // a year ago then your rating counts less than someone who played // with them 2 days ago. There is a lot of time for improvement over // a year but not 2 days. The following piecewise formula is complex // but basically it is relatively flat for up to 80 days and then drops // pretty linearly for another 80 days and then has a relatively long // flat tail. double Reputation::time_weight(unsigned int x) const { double val; if(x<120) { val = 1.5 - 0.5 * exp(x*x/20775.0); } else { val = 0.5 * exp((x-120)/-173.0); } return val; } void Reputation::ComputeReputations(unsigned int days_since_epoch,float &skill_r eputation,float &niceness_reputation) const { map<string,Evaluation>::const_iterator eval_iter; double sum_skill = 0.0; double sum_niceness = 0.0; double sum_weight = 0.0; cout << "ComputeReputations" << endl; for(eval_iter = m_evals.begin(); eval_iter != m_evals.end(); ++eval_iter) { unsigned int num_boards = eval_iter->second.get_num_boards(); num_boards = num_boards > MAX_BOARDS ? MAX_BOARDS : num_boards; cout << "ComputeReputations " << num_boards << endl; if(num_boards >= MIN_BOARDS) { double weight = time_weight(days_since_epoch - eval_iter->second.get _days_since_epoch()) * (num_boards / MAX_BOARDS); sum_skill += weight * eval_iter->second.get_skill(); sum_niceness += weight * eval_iter->second.get_niceness(); sum_weight += weight; } } if(sum_weight == 0.0) { skill_reputation = -1.0; niceness_reputation = -1.0; } else { skill_reputation = sum_skill / sum_weight; niceness_reputation = sum_niceness / sum_weight; } }
  7. Yes, a jerk might rate you as a jerk but that is a reason for not playing with jerks. If you believe the vast majority of people are not jerks then one "jerk" rating won't hurt you. So long as the number of non-jerks you play with (or against) is greater than the number of jerks then you won't be in danger of being categorized a jerk. Perhaps this system would break down if you had all jerks or equal numbers of jerks but I don't believe this to be the case.
  8. People might worry about who they partner with if they expect their partner to view them as less of a good player than they think they are. I'm not sure how you would know that though. Again, if you play one or two hands with someone then you have one or two hands more information about them than someone who hasn't played with them at all. That is why my proposed scheme would give proportionally less weight to ratings based on a small number of hands. Yes, you can rate the same player more than once. Only your latest rating would count. If you play 10 boards and then rate someone and then play another 10 boards with them then your opinion may change. So yes, if we change our opinion then we must ourselves believe that our original opinion was wrong. So let me get this straight, there is some jerk on BBO that nobody would want to play with or against. Your "efficient" method is for everyone on BBO to play with this jerk, then realize he is a jerk, then mark him as an enemy? It seems a lot more efficient to me for 5 or 10 poor souls to have to suffer through the jerk and be able to tell the rest of us "watch our for the jerk."
  9. In a sense, one could argue that you've given captaincy back to 1N opener by making a splinter which is asking for him to evaluate his hand for slam given your spade shortness. He very much likes his hand for slam now and wants to verify it with 4C RKCB. It seems that splinters may transfer captaincy.
  10. If you only give one category on which to rate people and you call that category "skill" then what will people do with someone who is a decent player but a real jerk? I think the tendency will be to attempt to punish them by lowering their skill level. On the likeability factor, if mean people are ostracized and leave, do we care? I think we'd have less bad behavior if we had it. Maybe some people would be rated poorly and wouldn't care. All the mean people could play with just mean people. That is ok too.
  11. Sigi's reply is true but another reason you don't want to show all 3 at once is again the speed issue. If you see two bids at once then you have some time to interpret them while waiting for RHO to bid. Hmm, I guess you are on the wrong track now, Todd. My idea is to hide the fact that a bid (presumably a jump bid) by LHO might or might not give trouble to partner. So you can't show LHOs and partners bid at once (because that would hardly hide the fact if or if not partner needed time to think -- the jumps are usually not the calls that are hard to make :-). What you want to show at once is partner's and RHOs bids, therefore you cannot start interpreting partner's bid before RHO has acted. That is the lag issue that Richard mentioned. What you can do is ask LHO about her bid right away, which you couldn't if you'd see batches of three calls. So that might save time in some cases compared to the "full-on" variant of the method. So in a way what you'd have is some weird "magic mirror screen" where you can see the person on your left but not on your right... --Sigi How do you know it wasn't LHO who paused for thought before making the jump bid? If there is a pause, in many cases you can guess who made the pause even if all 3 bids showed up at once.
  12. Sigi's reply is true but another reason you don't want to show all 3 at once is again the speed issue. If you see two bids at once then you have some time to interpret them while waiting for RHO to bid.
  13. Please, not another masterpoint debacle or any other "rating" system based on attendance.
  14. Screens are inferior to what you can do online. Online, the better method is to make LHO and CHO's bids appear simultaneously and RHO's bid appear when it is made. This will slow things down just a wee bit so maybe it is better to only use this in "serious" mode.
  15. Yes, any ratings scheme should have a purpose in mind. I think the purpose of the self-rating scheme (and the rest of the profile in general) was exactly to be able to facilitate picking partners and opponents to maximize your enjoyment of the game. (If we wanted a "measure your own performance" system then we could use lehmans and keep everyone's lehman number secret.) I think the only thing we might all be able to agree on is that we don't know what the optimal rating system is (including no rating system at all) to best facilitate the goal stated above. Another thing I know is that we'll never know whether something works unless we try it. I can understand Fred's reluctance to offer something that could hurt people's egos. It is too bad you can't try this system in a microcosm. You have to have a lot of people before you can tell whether the system is useful or not. I might suggest that people not even be able to see there own ratings but we all know that people would find out anyway. Would we rate opps? I have oscillated on this one. At this point, I believe this could be useful. We are probably a bit less passionate about opps than partners and less willing to blast them or try to artificially boost them but perhaps the weight shouldn't be as high for opp rating. I don't think the "vote button" should appear only after 20 hands. My proposed weighting system would largely solve the problem of play 1 hand, decide partner is an idiot and give a terrible rating. Your rating wouldn't have hardly any weight if you've only played one hand with the person. Imagine a situation where there is a real jerk who people can't tolerate for more than a few hands. This jerk has a few regular partners who can tolerate him and they give him decent ratings. If you only let his regular partners rate him, then you will miss the fact that the guy is pretty much a jerk and drives away the vast majority of his pick-up partners. People can behave terribly when they are anonymous but when they are concerned about their reputation then their behavior will improve. About the prisoner's dilemma thing, the idea may have some merit but I think the granularity may be too coarse. I would be open to trying the idea though. Another thing I just thought of is that you may be able to detect the people who perpetually give a lower or higher rating than average and to lower the weight of their ratings or possible do something else.
  16. I don't believe anything is going to be _officially_ done about this problem. I think it is time we quit bitching and do something about it ourselves. We need to create some materials and exams that cater to issues found on online bridge, advertise the site and make our online directors certification an expectation of the people running tournaments on BBO. If people really care about this issue then we can apply pressure to not participate in tournaments run by non-certified directors. This would also include a feedback system so that people could lose their certification if they issue too many poor rulings (they could re-certify by taking the test again).
  17. For all those interested, would your opinion change if the sequence was 1m (9-13, showing the corresponding major,♣for♥ and ♦for♠) and the resposne of 2M was often made on 3 card support and a hand with 5-9 points? If this is the case, can anything resembling, "I want to penalize the opps" be possible. I think that any action by opener should show extra length in the trump suit and a maximum. Maybe XX should be 6322 or 7222 max and other bids should be HSGTs.
  18. One problem I had with the Lehman system is its linearity. The lehman system would say that a 60/30 partnership should do the same as a 45/45 partnership. Moreover, will two 60s really beat two 55s by the same amount that two 55s should beat two 50s? I'll stress again that when we talk about ratings systems, we have to ask what the purpose of such a system is. Is the purpose: A) to give players an indication of how good they are, :rolleyes: to give players an indication of how good other pairs are, C) to find new players with which we may be compatible. B would only be useful for the pair itself to monitor its own performance or for others to find potential pairs to play against. As such, I don't think many people would benefit from B. Nobody has yet to propose a system to accurately capture A. To a degree people are right when they say that you can't measure individual performance, only pair performance. So, the lehman system has two problems. 1) Its stated purpose was for people to monitor their own performance when individual performance is really impossible to measure and 2) that they were used for purpose C) when that was not their intent. We know that such a use is inevitable but the system was not designed to be useful for C, only for A. On a side note, why make the ratings visible to others if they were only intended for personal consumption. Anyway, I'll toot my own idea some more. I think people primarily want a system that would let them know whether a pick-up game is going to be enjoyable or not. Once pairs are established then they will be able to track their progress on their own. What is needed is a way to bring compatible people together to form partnerships in a more efficient way. A lehman-style system is not going to give you this information because partly personality is part of the equation. I'm not sure an "amiability" factor is the perfect way to express this but its better than nothing. If there were much more system information in your profile then BBO could do something like search for people waiting to play who are most compatible in terms of system options (and maybe automatically create a CC with the intersection of both people's profiles) and overall ability. When I say ability, I mean ability as judged by others because when forming a new partnership, an external opinion is all that is important.
  19. I think I would give EW 6 tricks. If NS claims 12 tricks and the claim is rejected then his line of play afterwards must be for 12 tricks. Playing 2 clubs and finding they don't split he must then try to take 5 spades and with west having club length the odds would favor the spade finesse which will fail and EW will take 5♦ and 1♠. I agree with you that people don't tend to care about these situations. I had one myself where declarer claimed X tricks, the claim was rejected which woke him up to realize one of his tricks wasn't good and then he didn't even try to take X tricks but took the safe X-2 tricks. The "certified" director was oblivious.
  20. I looked into this topic extensively a few months back. A system is generically a tree shape where the number of children of a node corresponds not only to the number of valid possible calls at that point in the auction but if the call corresponds to interference by opps then every possible meaning they could assign to that bid. In this sense, 10-12 is different from 10-13 or 11-12 or 10-11 or 10+-12 (which is just another way of saying that you aren't strictly using Milton work count but aren't explicitly telling the opponents what you do use). You could theoretically want a different defense against all these but practically you wouldn't. So rather than have large duplicate subtrees as part of the overall system tree, I was working on a way to link one subtree with another subtree so that you would only have to enter that subtree once. The problem is very nasty. If you try to keep it simple then there will always be cases that you can't handle and people will complain. If you do what is actually required to accurately capture what people's agreements are then it is so complicated that nobody would use it. A textual description is never going to allow you have one defense for one kind of NT and another defense for another kind of NT.
  21. If you want to be successful, get a regular partner, pick a system you both like, document it, practice it, establish agreements for specific situations. This will go a long long way. Once you have done this, then how will you know if your system is the best it can be? Should you add a certain convention? It is my opinion that if you only play one system then you don't know what you don't know. There was a time shortly after I started playing where I played a different system _every week_. I did this only because it was fun for me. In the process though, you will learn a lot of bidding theory and will be better placed to make judgements such as whether to add a convention to your competition system. It will also improve your bidding judgment even in your competition system.
  22. I've never understood this mentality. "Self-ratings are meaningless...but we should keep them because they are better than nothing." If they are completely meaningless then wouldn't having nothing at all be better than something wrong most of the time. I don't know about your experience. You may just like to play and the quality of play may not matter much to you. For me, trying to find a quality pick-up game is nearly impossible. I much more seldom play in pick-up games for this reason. Through pain and references from others I have a small set of people that I know that are good enough to play with and I have to restrict myself to this set. In essence, people are already ratings others and to a lesser degree sharing those opinions with others. This system is very inefficient. If you integrated it with BBO then it would become much more efficient. If you don't care what people think of you then why would you care if people were rating you. If such a ratings system helped people find you that you could have an enjoyable game with then why complain? People complain about the effects of the lehman system and its accuracy but surely its accuracy is far better than self-ratings. Lehman's did have some predictive value for me when I was on OKB. People would get angry on OKB about a bad result and then leave the table. I don't find this situation to be particularly better on BBO. At a main bridge club table, what is the average number of hands that you have the same four people at the table? I don't know but my perception is that it is less than 5. Lehman's may generate table churn but BBO has plenty of table churn as well and much of that is due to bad results just like it was on OKB.
  23. Fred recently posted in r.g.b. that he believes self-ratings will improve over time as education improves. Who here believes that there is any significant education of the general BBO populace about what ratings mean? Regardless of the answer to this question, do you believe that self-ratings are getting better, staying the same, or getting worse?
  24. Star Trek fans will get this reference. I've thought before that normal alerts should be "yellow" alerts and that really bizarre stuff should be a "red" alerts. You can guess what the result would be...endless regulations over what is a red alert and what is a yellow and then endless complaints when somebody forgets and makes a yellow alert when it should be a red. Anyway, I don't have a good answer to this problem. Both options have big downsides.
  25. First choice 3♥. Second choice 4♥. Third choice Pass.
×
×
  • Create New...