A semi-related observation here: the final gain/loss of XP depends somewhat on the order that the votes arrive in. Specifically, the earlier the plus votes arrive, the greater the final XP gain. I wrote some code to demonstrate this:

use strict; use warnings; use List::Util qw( sum ); use Readonly; Readonly my $NORM => 9.8316; # value @ 1179169191 test_votes_xp( $_ ) for 5, 10, 15, 20, 30, 40; sub test_votes_xp { my ( $count ) = @_; my $iterations = 100; print "Testing $count vote pairs\n"; printf "Alternating: %.2f avg XP gain\n", average_xp_from_votes( $iterations, [(+1, -1) x $count] ); printf "All up, then all down: %.2f avg XP gain\n", average_xp_from_votes( $iterations, [(+1) x $count, (-1) x +$count] ); printf "All down, then all up: %.2f avg XP gain\n", average_xp_from_votes( $iterations, [(-1) x $count, (+1) x +$count] ); print "\n"; } sub average_xp_from_votes { my ( $iterations, $votes_ref ) = @_; my @xp_changes; while ( $iterations-- > 0 ) { push @xp_changes, xp_from_votes( @{$votes_ref} ); } return ( sum @xp_changes ) / scalar @xp_changes; } sub xp_from_votes { my @votes = @_; my $rep = 0; my $xp_change = 0; foreach my $vote ( @votes ) { if ( $vote > 0 ) { if ( ( $NORM > $rep && rand() < 1/3 ) || ( $NORM <= $rep && $rep < 2*$NORM && rand() < 1/2 +) || ( 2*$NORM <= $rep && $rep < 3*$NORM && rand() < 2/ +3 ) || ( 3*$NORM <= $rep && $rep < 4*$NORM && rand() < 3/ +4 ) || 4*$NORM <= $rep ) { $xp_change += $vote; } } else { if ( ( $NORM > $rep && rand() < 1/3 ) || ( $NORM <= $rep && $rep < 2*$NORM && rand() < 1/3 +) || ( 2*$NORM <= $rep && $rep < 3*$NORM && rand() < 1/ +3 ) || ( 3*$NORM <= $rep && $rep < 4*$NORM && rand() < 1/ +4 ) ) { $xp_change += $vote; } } $rep += $vote; } return $xp_change; } __END__ Testing 5 vote pairs Alternating: -0.09 avg XP gain All up, then all down: -0.07 avg XP gain All down, then all up: 0.13 avg XP gain Testing 10 vote pairs Alternating: -0.16 avg XP gain All up, then all down: 0.11 avg XP gain All down, then all up: 0.39 avg XP gain Testing 15 vote pairs Alternating: -0.22 avg XP gain All up, then all down: 0.76 avg XP gain All down, then all up: 0.10 avg XP gain Testing 20 vote pairs Alternating: -0.28 avg XP gain All up, then all down: 1.65 avg XP gain All down, then all up: -0.07 avg XP gain Testing 30 vote pairs Alternating: -0.59 avg XP gain All up, then all down: 4.75 avg XP gain All down, then all up: 0.30 avg XP gain Testing 40 vote pairs Alternating: -0.59 avg XP gain All up, then all down: 10.63 avg XP gain All down, then all up: -0.16 avg XP gain

Every test simulates a node that receives the same number of plus and minus votes (i.e., the final rep is zero). In the cases where the votes are alternating or all the negative votes arrive first, the resulting XP change would normally be zero (the non-zero reports are the result of randomness). The case when all up votes are cast before all down votes is the one that shows the variation. In that case, the resulting XP change is higher than it would be if the votes arrived in alternating order or with all the down votes cast first.

Granted, these are very contrived examples, and even in them, there still isn't a notable effect until the node gets 15 votes in a row. Still, I wonder if it would be possible to have a system that does something similar to the system we have now but does not depend on vote order.


In reply to XP changes affected by vote order by kyle
in thread Why loose XP if $REP > $NORM ? by RL

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.