コード例 #1
0
ファイル: model.py プロジェクト: tomsilver/thesis
def runGame(competitors):
	myplot.init()

	for t in range(TRIALS):
		selectedCompetitor1 = random.choice(competitors)
		selectedCompetitor2 = selectedCompetitor1
		while selectedCompetitor1 == selectedCompetitor2:
			selectedCompetitor2 = random.choice(competitors)

		currentRatingof1 = selectedCompetitor1.rating
		currentRatingof2 = selectedCompetitor2.rating

		print "Facing off competitor (", currentRatingof1, 
		print "/", selectedCompetitor1.id, ") vs. competitor (",
		print currentRatingof2, "/", selectedCompetitor2.id, ")"


		# 1 judges 2
		numCorrectof2 = selectedCompetitor1.judge.judgeCompetitor(selectedCompetitor2.subject)
		estRatingof2 = selectedCompetitor1.judge.guessCompetitorRating()
		selectedCompetitor2.totalCorrectAnswers += numCorrectof2

		# 2 judges 1
		numCorrectof1 = selectedCompetitor2.judge.judgeCompetitor(selectedCompetitor1.subject)
		estRatingof1 = selectedCompetitor2.judge.guessCompetitorRating()
		selectedCompetitor1.totalCorrectAnswers += numCorrectof1

		# Cannot predict on the first time
		if estRatingof1 is not None and estRatingof2 is not None:

			score1 = CORRECT_SCALE*numCorrectof1-abs(estRatingof2-currentRatingof2)
			score2 = CORRECT_SCALE*numCorrectof2-abs(estRatingof1-currentRatingof1)

			if score1 > score2:
				print "First competitor is winner!"
				score1 = 1.0
				score2 = 0.0

			elif score2 > score1:
				print "Second competitor is winner!"
				score1 = 0.0
				score2 = 1.0

			else:
				print "Draw!"
				score1 = 0.5
				score2 = 0.5

			newRating1, newRating2 = elo(score1, score2, currentRatingof1, currentRatingof2)
			selectedCompetitor1.rating = newRating1
			selectedCompetitor2.rating = newRating2

			# myplot.plotRatings(competitors)
			# myplot.draw()
			# time.sleep(0.5)
			# myplot.close()


		selectedCompetitor1.finishCompetition(currentRatingof2)
		selectedCompetitor2.finishCompetition(currentRatingof1)

	for competitor in competitors:
		print competitor.id,
		print ":",
		print competitor.totalCorrectAnswers

	myplot.plotRatings(competitors)
	myplot.show()
コード例 #2
0
ファイル: fakeCompetition.py プロジェクト: tomsilver/thesis
def main():
    maxQuestionAvg = 2000
    minQuestionAvg = 400
    questionInterval = (maxQuestionAvg - minQuestionAvg) / QUESTION_LIMIT
    questionBank = [
        fakeNormal.FakeNormalQuestion(i, midpoint_rating=r)
        for i, r in enumerate(range(minQuestionAvg, maxQuestionAvg, questionInterval))
    ]
    assert len(questionBank) == QUESTION_LIMIT

    maxCompAvg = 1800
    minCompAvg = 600
    compInterval = (maxCompAvg - minCompAvg) / NUM_COMPETITORS
    competitors = [
        fakeNormal.FakeNormalCompetitor(questionBank, r) for r in range(minCompAvg, maxCompAvg, compInterval)
    ]
    assert len(competitors) == NUM_COMPETITORS

    for competitor in competitors:
        competitor.init()

    myplot.init()

    for t in range(TRIALS):
        selectedCompetitor1 = random.choice(competitors)
        selectedCompetitor2 = selectedCompetitor1
        while selectedCompetitor1 == selectedCompetitor2:
            selectedCompetitor2 = random.choice(competitors)

        actualRatingof1 = selectedCompetitor1.hiddenRating
        actualRatingof2 = selectedCompetitor2.hiddenRating
        currentRatingof1 = selectedCompetitor1.rating
        currentRatingof2 = selectedCompetitor2.rating

        print "Facing off competitor (", currentRatingof1,
        print "/", actualRatingof1, ") vs. competitor (",
        print currentRatingof2, "/", actualRatingof2, ")"

        # 1 judges 2
        numCorrectof2 = selectedCompetitor1.judge.judgeCompetitor(selectedCompetitor2.subject)
        estRatingof2 = selectedCompetitor1.judge.guessCompetitorRating()

        # 2 judges 1
        numCorrectof1 = selectedCompetitor2.judge.judgeCompetitor(selectedCompetitor1.subject)
        estRatingof1 = selectedCompetitor2.judge.guessCompetitorRating()

        # Cannot predict on the first time
        if estRatingof1 is not None and estRatingof2 is not None:

            score1 = CORRECT_SCALE * numCorrectof1 - abs(estRatingof2 - currentRatingof2)
            score2 = CORRECT_SCALE * numCorrectof2 - abs(estRatingof1 - currentRatingof1)

            if score1 > score2:
                print "First competitor is winner!"
                score1 = 1.0
                score2 = 0.0

            elif score2 > score1:
                print "Second competitor is winner!"
                score1 = 0.0
                score2 = 1.0

            else:
                print "Draw!"
                score1 = 0.5
                score2 = 0.5

            newRating1, newRating2 = elo(score1, score2, currentRatingof1, currentRatingof2)
            selectedCompetitor1.rating = newRating1
            selectedCompetitor2.rating = newRating2

            # myplot.plotCompRatings(competitors)
            # myplot.draw()
            # time.sleep(0.5)
            # myplot.close()

        selectedCompetitor1.finishCompetition(currentRatingof2)
        selectedCompetitor2.finishCompetition(currentRatingof1)

    myplot.plotCompRatings(competitors)
    myplot.show()