Subversion Repositories Remote Hare Voting

Rev

Rev 61 | Rev 63 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 61 Rev 62
Line 19... Line 19...
19
##
19
##
20
## To download the complete source distribution, use Subversion:
20
## To download the complete source distribution, use Subversion:
21
##
21
##
22
##      % svn co http://www.bikmort.com/hare
22
##      % svn co http://www.bikmort.com/hare
23
##
23
##
24
## $Id: tally.py 61 2007-09-23 22:17:14Z jtkorb $
24
## $Id: tally.py 62 2007-09-24 13:57:27Z jtkorb $
25
 
25
 
26
import sys
26
import sys
27
import math 
27
import math 
28
import copy
28
import copy
29
import random
29
import random
Line 73... Line 73...
73
	return self.__forkPendingList(lRedist, "redist", winner)
73
	return self.__forkPendingList(lRedist, "redist", winner)
74
 
74
 
75
    def __forkPendingList(self, lItems, type, data=None):
75
    def __forkPendingList(self, lItems, type, data=None):
76
        if len(lItems) == 1:
76
        if len(lItems) == 1:
77
	    return lItems[0]
77
	    return lItems[0]
78
	if self.p/len(lItems) < 1.0/10000:
78
	if self.p/len(lItems) < 1.0/1000000:
79
	    trace("\tpassing on %d universes (p = %f)" % (len(lItems)-1, self.p/len(lItems)))
79
	    trace("\tpassing on %d universes (p = %f)" % (len(lItems)-1, self.p/len(lItems)))
80
	    Universe.dropped += len(lItems)-1
80
	    Universe.dropped += len(lItems)-1
81
	    return random.choice(lItems)
81
	    return random.choice(lItems)
82
	self.p /= len(lItems)
82
	self.p /= len(lItems)
83
	trace("\tcreating %d universes (p = %f)" % (len(lItems)-1, self.p))
83
	trace("\tcreating %d universes (p = %f)" % (len(lItems)-1, self.p))
Line 308... Line 308...
308
	winners = str(u.winners)
308
	winners = str(u.winners)
309
	trace("RESULTS FOR UNIVERSE %d (p = %f): %s" % (u.id, u.p, winners))
309
	trace("RESULTS FOR UNIVERSE %d (p = %f): %s" % (u.id, u.p, winners))
310
	if winners not in Universe.results: Universe.results[winners] = 0.0
310
	if winners not in Universe.results: Universe.results[winners] = 0.0
311
	Universe.results[winners] += u.p
311
	Universe.results[winners] += u.p
312
 
312
 
313
    trace("\nDropped %d universes with low probability" % Universe.dropped)
313
    trace("\nUsed %d parallel universes (skipped %d with low probability)" %
-
 
314
	(Universe.id, Universe.dropped))
314
    lWinners = []
315
    lWinners = []
315
    for winner in Universe.results.keys():
316
    for winner in Universe.results.keys():
316
	lWinners.append("%f: %s" % (Universe.results[winner], winner))
317
	lWinners.append("%f: %s" % (Universe.results[winner], winner))
317
    lWinners.sort()
318
    lWinners.sort()
318
    lWinners.reverse()
319
    lWinners.reverse()