WBF VP scale changes Huzzah!
#41
Posted 2013-January-26, 15:36
At the end, those artificial VP's could be wiped out without changing anything.
#43
Posted 2013-January-27, 02:33
fromageGB, on 2013-January-26, 13:38, said:
Currently we give Av+ for half the boards of the match in the EBU - ie 3IMPs per board for four boards of an eight-board match, which translates to 15 on the current EBU scale, would be 14.39 on the new continuous scale, and would be 14 on the new discrete scale. I wonder why you think it should be less than 12?
London UK
#44
Posted 2013-January-27, 03:26
gordontd, on 2013-January-27, 02:33, said:
If you want to mirror the use of average-pluses in other circumstances, shouldn't the score for a bye depend on the circumstances? If it's unexpected, eg one caused by the opponents' absence, you should give either +3 IMPs per board, or the team's own VP average* for the entire event (both before and after the bye), whichever is higher. If, on the other hand, the bye is a feature of the movement, they should always get their own VP average, ie the equivalent of factoring in a pairs event.
I dislike giving people unearned good scores, so if I wrote the rules they'd always get their own VP average. Similarly, in a pairs event I'd score all unplayed boards by factoring.
* In a Swiss, arguably the VP average should be adjusted according to their position in the field when the bye occurred. If, for example, you obtained your average when lying 30th, but your bye occurred when you were lying 10th, you don't deserve to receive as much as your own average.
This post has been edited by gnasher: 2013-January-27, 03:29
#45
Posted 2013-January-27, 05:23
Fluffy, on 2013-January-26, 23:48, said:
Never played a swiss with byes. When there is an odd number of teams, 3 are thrust into a RR for two matches.
Being dropped into a swiss from the mother event is different.
#46
Posted 2013-January-27, 06:20
fromageGB, on 2013-January-26, 13:38, said:
No, I think a third of the cube of pi is not enough; 4 times Euler's constant would be closer to the mark if you ask me.
-- Bertrand Russell
#47
Posted 2013-January-27, 07:03
gordontd, on 2013-January-27, 02:33, said:
Gnasher said it well.
I remember missing the motorway exit while getting to the Great Northern Swiss Pairs, arriving too late for the first round, and being awarded 10/20 for the starting point on the next round, and this seemed sensible. 12/20 would not be. However, I was actually awarded half(or a quarter) of a green for the missed round (which you would get for a 10/10 draw) which made me think the best way to increase your greens would be to enter for lots of events and not turn up. You'd need to be Abramovich, though.
#48
Posted 2013-January-27, 08:27
fromageGB, on 2013-January-27, 07:03, said:
That doesn't sound right to me (on either count). You were directly at fault for not having played the match, so you certainly shouldn't be getting 10 VPs, never mind a quarter green point.
London UK
#50
Posted 2013-January-27, 10:34
gnasher, on 2013-January-27, 03:26, said:
I dislike giving people unearned good scores, so if I wrote the rules they'd always get their own VP average. Similarly, in a pairs event I'd score all unplayed boards by factoring.
* In a Swiss, arguably the VP average should be adjusted according to their position in the field when the bye occurred. If, for example, you obtained your average when lying 30th, but your bye occurred when you were lying 10th, you don't deserve to receive as much as your own average.
Then at which point do you establish an average? Some things could end up skewed: i.e. the tournament favourites may have a more difficult schedule at the beginning which would artificially deflate their average, while a weak team may have an easy schedule at the beginning artificially inflating their average.
#51
Posted 2013-January-27, 11:00
olien, on 2013-January-27, 10:34, said:
Their final score for the bye is calculated at the end of the event. For assignment purposes and to show their running score, you recalculate it after each round, based on all their results to date.
#52
Posted 2013-May-10, 10:42
#53
Posted 2013-September-29, 05:00
woefuwabit, on 2012-September-17, 13:59, said:
Comparing my results to the scales in there gives me some off-by-1 errors.
I don't have the USBF COC scales. Are they different from what the WBF published?
I had some trouble understanding the way the WBF Scoring Panel dealt with the Concavity Rule (see the January 2013 report), but I think I get it now. I didn't follow their idea of using a vector of boolean and handled the problem by defining different array sizes for the scores array, the differences array and the second differences array.
I'm not much of a programmer (not even "Intermediate", I think), and I didn't bother with classes or even functions. The total code is way smaller than a hundred lines. I would politely ask to concentrate on correctness (does the code produce correct results?) rather than my odd programming style. :-)
The C++ code will compile with recent versions of g++, and probably with most C++ compilers. I checked the output against the 10, 14, 16, 20 and 32 tables on the WBF Continuous VP Scale that can be found on the Web (and which doesn't contain tables for 24, 28, 40, 48, 60, 64 boards).
/* Reference: The New WBF IMP to VP Scales Technical Report of WBF Scoring Panel (January 2013) */ #include <iostream> #include <cmath> using namespace std; int main() { const double R = 0.2360679775; /* == Tau^3 == sqrt(5) - 2 */ const double V0 = 10.0; /* VP score in drawn match */ double N, /* number of boards played */ X, /* maximum win IMP margin, 15*sqrt(N) */ VP, VPraw; cout << "number of boards played: "; cin >> N; // CALCULATION OF RAW VP SCORES X = 15 * sqrt(N); int blitz = ceil(X); // IMP margin for 20-0 score double * scores; // array of VP scores scores = new double[blitz+1]; // including zero margin for (int i=0; i!=blitz+1; ++i) // i is the IMP margin { // calculate VP scores VPraw = V0 + V0 * ((1 - pow(R, i/X)) / (1 - R)); VP = min((round(100 * VPraw) /100), 2*V0); // rounding // add score to array scores[i] = VP; } // CORRECTION OF CONCAVITY RULE VIOLATIONS int * diff; // array of differences diff = new int[blitz]; for (int i=0; i!=blitz; ++i) diff[i] = round(100*(scores[i+1] - scores[i])); int * diff2; // array of second differences diff2 = new int[blitz-1]; for (int i=0; i!=blitz-1; ++i) diff2[i] = diff[i+1] - diff[i]; bool violation = true; while (violation) { violation = false; for (int i=0; i!=blitz-1; ++i) { if (diff2[i] > 0) { scores[i+1] += 0.01; --diff2[i]; violation = true; } } if (violation) { /* recalculate arrays diff and diff2 */ for (int i=0; i!=blitz; ++i) diff[i] = round(100*(scores[i+1] - scores[i])); for (int i=0; i!=blitz-1; ++i) diff2[i] = diff[i+1] - diff[i]; } } // SEND SCALE TO SCREEN cout << endl << endl; cout << "WBF CONTINUOUS VP SCALE for " << N << " boards" << endl << "(trailing zeros not shown)" << endl << endl << endl << "IMP margin and score" << endl; for (int i=0; i!=blitz+1; ++i) cout << i << " " << scores[i] << " - " << 20 - scores[i] << endl; cout << endl << endl; delete [] scores; delete [] diff; delete [] diff2; char ch; cin >> ch; return 0; }