did some renaming of main dirs (apps, libs, etc.)
This commit is contained in:
commit
63f8b0a13c
14 files changed
+4047
No files matched your search
+351
@@ -0,0 +1,351 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2004 Stephen Waits
|
||||
|
||||
This software is provided 'as-is', without any express or implied warranty. In
|
||||
no event will the authors be held liable for any damages arising from the use
|
||||
of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it freely,
|
||||
subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not claim
|
||||
that you wrote the original software. If you use this software in a
|
||||
product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "glicko2.h"
|
||||
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
|
||||
|
||||
|
||||
class Glicko2_impl
|
||||
{
|
||||
public:
|
||||
|
||||
// constructors
|
||||
Glicko2_impl();
|
||||
Glicko2_impl(const Glicko2_impl& rhs);
|
||||
|
||||
// copy assignment
|
||||
Glicko2_impl& operator=(const Glicko2_impl& rhs);
|
||||
|
||||
// destructor
|
||||
virtual ~Glicko2_impl();
|
||||
|
||||
// system constants
|
||||
static const double dvolatility;
|
||||
|
||||
// rating data
|
||||
double rating;
|
||||
double deviation;
|
||||
double volatility;
|
||||
|
||||
// result data (copy of each opponent and results, 0.0, 0.5, or 1.0)
|
||||
std::vector<Glicko2> opponents;
|
||||
std::vector<double> results;
|
||||
|
||||
// utility functions
|
||||
double g(const double& deviation);
|
||||
double E(const double& rating, const double& rating_opponent, const double& deviation_opponent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
const double Glicko2_impl::dvolatility = 0.3; // should be [0.3,1.2]
|
||||
|
||||
|
||||
|
||||
Glicko2_impl::Glicko2_impl() :
|
||||
rating(0.0),
|
||||
deviation(0.0),
|
||||
volatility(0.0),
|
||||
opponents(),
|
||||
results()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2_impl::Glicko2_impl(const Glicko2_impl& rhs) :
|
||||
rating(rhs.rating),
|
||||
deviation(rhs.deviation),
|
||||
volatility(rhs.volatility),
|
||||
opponents(rhs.opponents),
|
||||
results(rhs.results)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2_impl& Glicko2_impl::operator=(const Glicko2_impl& rhs)
|
||||
{
|
||||
if ( this == &rhs )
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
rating = rhs.rating;
|
||||
deviation = rhs.deviation;
|
||||
volatility = rhs.volatility;
|
||||
opponents = rhs.opponents;
|
||||
results = rhs.results;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2_impl::~Glicko2_impl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
double Glicko2_impl::g(const double& deviation)
|
||||
{
|
||||
#define PI_SQUARED (9.86960440108935861883)
|
||||
return 1.0 / (sqrt(1.0 + 3.0 * deviation * deviation / PI_SQUARED));
|
||||
}
|
||||
|
||||
|
||||
|
||||
double Glicko2_impl::E(const double& rating, const double& rating_opponent, const double& deviation_opponent)
|
||||
{
|
||||
return 1.0 / (1.0 + exp(-g(deviation_opponent)*(rating - rating_opponent)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Glicko2::Glicko2() :
|
||||
pimpl(0)
|
||||
{
|
||||
pimpl = new Glicko2_impl();
|
||||
|
||||
SetRating(1500.0);
|
||||
SetDeviation(350.0);
|
||||
SetVolatility(0.06);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2::Glicko2(const Glicko2& rhs) :
|
||||
pimpl(0)
|
||||
{
|
||||
pimpl = new Glicko2_impl(*(rhs.pimpl));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2::Glicko2(double rating, double deviation, double volatility) :
|
||||
pimpl(0)
|
||||
{
|
||||
pimpl = new Glicko2_impl;
|
||||
|
||||
SetRating(rating);
|
||||
SetDeviation(deviation);
|
||||
SetVolatility(volatility);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2& Glicko2::operator=(const Glicko2& rhs)
|
||||
{
|
||||
if ( this == &rhs )
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
*pimpl = *rhs.pimpl;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Glicko2::~Glicko2()
|
||||
{
|
||||
delete pimpl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool Glicko2::operator< (const Glicko2& rhs)
|
||||
{
|
||||
return pimpl->rating < rhs.pimpl->rating;
|
||||
}
|
||||
|
||||
|
||||
|
||||
double Glicko2::GetRating() const
|
||||
{
|
||||
return pimpl->rating * 173.7178 + 1500.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
double Glicko2::GetDeviation() const
|
||||
{
|
||||
return pimpl->deviation * 173.7178;
|
||||
}
|
||||
|
||||
|
||||
|
||||
double Glicko2::GetVolatility() const
|
||||
{
|
||||
return pimpl->volatility;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::SetRating(double rating)
|
||||
{
|
||||
pimpl->rating = (rating - 1500.0) / 173.7178;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::SetDeviation(double deviation)
|
||||
{
|
||||
pimpl->deviation = deviation / 173.7178;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::SetVolatility(double volatility)
|
||||
{
|
||||
pimpl->volatility = volatility;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Glicko2::ClearResults()
|
||||
{
|
||||
pimpl->opponents.clear();
|
||||
pimpl->results.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::AddResult(const Glicko2& opponent, RESULT result)
|
||||
{
|
||||
pimpl->opponents.push_back(opponent);
|
||||
|
||||
switch ( result )
|
||||
{
|
||||
case WIN:
|
||||
pimpl->results.push_back(1.0);
|
||||
break;
|
||||
|
||||
case LOSS:
|
||||
pimpl->results.push_back(0.0);
|
||||
break;
|
||||
|
||||
case DRAW:
|
||||
pimpl->results.push_back(0.5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::AddWin(const Glicko2& opponent)
|
||||
{
|
||||
AddResult(opponent,WIN);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::AddLoss(const Glicko2& opponent)
|
||||
{
|
||||
AddResult(opponent,LOSS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::AddDraw(const Glicko2& opponent)
|
||||
{
|
||||
AddResult(opponent,DRAW);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Glicko2::Update()
|
||||
{
|
||||
// bail if no opponents set
|
||||
if ( pimpl->opponents.size() == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// compute variance
|
||||
double variance = 0.0;
|
||||
for ( unsigned int i=0;i<pimpl->opponents.size();i++ )
|
||||
{
|
||||
double g_i = pimpl->g(pimpl->opponents[i].pimpl->deviation);
|
||||
double E_i = pimpl->E(pimpl->rating,pimpl->opponents[i].pimpl->rating,pimpl->opponents[i].pimpl->deviation);
|
||||
variance += g_i * g_i * E_i * (1.0 - E_i);
|
||||
}
|
||||
variance = 1.0 / variance;
|
||||
|
||||
// compute delta
|
||||
double delta = 0.0;
|
||||
for ( unsigned int i=0;i<pimpl->opponents.size();i++ )
|
||||
{
|
||||
delta += pimpl->g(pimpl->opponents[i].pimpl->deviation) * (pimpl->results[i] - pimpl->E(pimpl->rating,pimpl->opponents[i].pimpl->rating,pimpl->opponents[i].pimpl->deviation));
|
||||
}
|
||||
delta *= variance;
|
||||
|
||||
// determine new volatility
|
||||
double new_volatility = 0.0;
|
||||
double a = log(pimpl->volatility*pimpl->volatility);
|
||||
double x = 0.0;
|
||||
double x_new = a;
|
||||
while ( abs(x - x_new) > 0.0000001 )
|
||||
{
|
||||
x = x_new;
|
||||
double d = pimpl->deviation*pimpl->deviation + variance + exp(x);
|
||||
double h1 = -(x - a)/(Glicko2_impl::dvolatility*Glicko2_impl::dvolatility) - 0.5*exp(x)/d + 0.5*exp(x)*(delta/d)*(delta/d);
|
||||
double h2 = -1.0/(Glicko2_impl::dvolatility*Glicko2_impl::dvolatility) - 0.5*exp(x)*(pimpl->deviation*pimpl->deviation+variance)/(d*d) + 0.5*(delta*delta)*exp(x)*((pimpl->deviation*pimpl->deviation) + variance - exp(x))/(d*d*d);
|
||||
x_new = x - h1/h2;
|
||||
}
|
||||
new_volatility = exp(x_new / 2.0);
|
||||
|
||||
// update the rating deviation to the new pre-rating period value
|
||||
double pre_deviation = sqrt( pimpl->deviation*pimpl->deviation + new_volatility*new_volatility );
|
||||
|
||||
// update the rating and deviation
|
||||
double new_deviation = 1.0 / (sqrt( 1.0/(pre_deviation*pre_deviation) + 1.0 / variance));
|
||||
double new_rating = 0.0;
|
||||
for ( unsigned int i=0;i<pimpl->opponents.size();i++ )
|
||||
{
|
||||
new_rating += pimpl->g(pimpl->opponents[i].pimpl->deviation) * (pimpl->results[i] - pimpl->E(pimpl->rating,pimpl->opponents[i].pimpl->rating,pimpl->opponents[i].pimpl->deviation));
|
||||
}
|
||||
new_rating = new_rating * new_deviation * new_deviation;
|
||||
new_rating += pimpl->rating;
|
||||
|
||||
// copy new values
|
||||
pimpl->rating = new_rating;
|
||||
pimpl->deviation = new_deviation;
|
||||
pimpl->volatility = new_volatility;
|
||||
|
||||
// wipe our result lists
|
||||
ClearResults();
|
||||
}
|
||||
|
||||
+245
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2004 Stephen Waits
|
||||
|
||||
This software is provided 'as-is', without any express or implied warranty. In
|
||||
no event will the authors be held liable for any damages arising from the use
|
||||
of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it freely,
|
||||
subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not claim
|
||||
that you wrote the original software. If you use this software in a
|
||||
product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef __glicko2_h__
|
||||
#define __glicko2_h__
|
||||
|
||||
|
||||
|
||||
class Glicko2_impl;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Glicko-2 Rating calculator class.
|
||||
*
|
||||
* This class implements the Glicko-2 rating system algorithm written by
|
||||
* Professor Mark E. Glickman. All rating inputs and outputs are Glicko ratings,
|
||||
* but internally everything is converted to and considered Glicko-2 ratings.
|
||||
*
|
||||
* Glicko-2 is an improvement on the original Glicko, which was, in turn, an
|
||||
* improvement on the ELO system.
|
||||
*
|
||||
* The Glicko-2 system is specified on http://www.glicko.com/
|
||||
*/
|
||||
class Glicko2
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Enumeration of possible results.
|
||||
*/
|
||||
enum RESULT
|
||||
{
|
||||
/**
|
||||
* A win result, internally 1.0.
|
||||
*/
|
||||
WIN,
|
||||
|
||||
/**
|
||||
* A loss result, internally 0.0.
|
||||
*/
|
||||
LOSS,
|
||||
|
||||
/**
|
||||
* A draw result, internally 0.5.
|
||||
*/
|
||||
DRAW
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor. Initializes to a rating of 1500, a rating deviation
|
||||
* of 350, and a volatility of 0.06.
|
||||
*/
|
||||
Glicko2();
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
*
|
||||
* @param rhs Object to copy.
|
||||
*/
|
||||
Glicko2(const Glicko2& rhs);
|
||||
|
||||
/**
|
||||
* Constructor with rating, rating deviation, and volatility specified.
|
||||
*
|
||||
* @param rating Initial rating.
|
||||
* @param deviation Initial rating deviation.
|
||||
* @param volatility Initial volatility.
|
||||
*/
|
||||
Glicko2(double rating, double deviation, double volatility);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Copy assignment operator.
|
||||
*
|
||||
* @param rhs Object to copy.
|
||||
*
|
||||
* @return Reference to self after copy assignment.
|
||||
*/
|
||||
Glicko2& operator=(const Glicko2& rhs);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
virtual ~Glicko2();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Less than comparison operator.
|
||||
*
|
||||
* @param rhs Object to compare against.
|
||||
*
|
||||
* @return true if this object's rating is less than rhs's rating; false otherwise.
|
||||
*/
|
||||
bool operator< (const Glicko2& rhs);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the current rating. This rating is a Glicko rating, not a Glicko2 rating.
|
||||
* For details, please see http://www.glicko.com/
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
double GetRating() const;
|
||||
|
||||
/**
|
||||
* Get the current rating deviation. This is a Glicko rating deviation, not a
|
||||
* Glicko-2 RD. For details, please see http://www.glicko.com/
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
double GetDeviation() const;
|
||||
|
||||
/**
|
||||
* Get the current rating volatility.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
double GetVolatility() const;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set Glicko rating. Internally this is converted to a Glicko2 rating.
|
||||
* For details, please see http://www.glicko.com/
|
||||
*
|
||||
* @param rating Rating.
|
||||
*/
|
||||
void SetRating(double rating);
|
||||
|
||||
/**
|
||||
* Set Glicko rating deviation. Internally this is converted to a Glicko-2 RD.
|
||||
* For details, please see http://www.glicko.com/
|
||||
*
|
||||
* @param deviation Rating deviation.
|
||||
*/
|
||||
void SetDeviation(double deviation);
|
||||
|
||||
/**
|
||||
* Set rating volatility.
|
||||
*
|
||||
* @param volatility Rating volatility.
|
||||
*/
|
||||
void SetVolatility(double volatility);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Clear all results previously added via AddResult(), AddWin(), AddLoss(),
|
||||
* and/or AddDraw(). This method is called automatically whenever Update()
|
||||
* is called.
|
||||
*/
|
||||
void ClearResults();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Add a result to this rating. Note that no calculation is performed until
|
||||
* Update() is called.
|
||||
*
|
||||
* @param opponent Other player in contest.
|
||||
* @param result WIN, LOSS, or DRAW; from the point of view of this player.
|
||||
*/
|
||||
void AddResult(const Glicko2& opponent, RESULT result);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Add a win result to this rating. Note that no calculation is performed until
|
||||
* Update() is called.
|
||||
*
|
||||
* @param opponent Other (losing) player in contest.
|
||||
*/
|
||||
void AddWin(const Glicko2& opponent);
|
||||
|
||||
/**
|
||||
* Add a loss result to this rating. Note that no calculation is performed until
|
||||
* Update() is called.
|
||||
*
|
||||
* @param opponent Other (winning) player in contest.
|
||||
*/
|
||||
void AddLoss(const Glicko2& opponent);
|
||||
|
||||
/**
|
||||
* Add a draw result to this rating. Note that no calculation is performed until
|
||||
* Update() is called.
|
||||
*
|
||||
* @param opponent Other (drawing) player in contest.
|
||||
*/
|
||||
void AddDraw(const Glicko2& opponent);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Update rating based on current results list, and clear results.
|
||||
*/
|
||||
void Update();
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Private Implementation.
|
||||
*/
|
||||
Glicko2_impl* pimpl;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // __glicko2_h__
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
#include "glicko2.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int main()
|
||||
{
|
||||
// Glicko-2 Example
|
||||
// calculation from http://www.glicko.com/glicko2.doc/example.html
|
||||
|
||||
Glicko2 A(1500.0, 200.0, 0.06);
|
||||
Glicko2 B(1400.0, 30.0, 0.06);
|
||||
Glicko2 C(1550.0, 100.0, 0.06);
|
||||
Glicko2 D(1700.0, 300.0, 0.06);
|
||||
|
||||
A.AddWin(B);
|
||||
A.AddLoss(C);
|
||||
A.AddResult(D,Glicko2::LOSS); // alternative way to add a result
|
||||
|
||||
A.Update();
|
||||
|
||||
printf("rating = %f, RD = %f\n", A.GetRating(), A.GetDeviation());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,464 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
<!-- players -->
|
||||
|
||||
<player><name>Mathew Mladin</name></player>
|
||||
<player><name>Jake P Zemke</name></player>
|
||||
<player><name>Miguel Duhamel</name></player>
|
||||
<player><name>Jack E Pfeifer</name></player>
|
||||
<player><name>Lee Acree</name></player>
|
||||
<player><name>Opie Caylor</name></player>
|
||||
<player><name>Scott Jensen</name></player>
|
||||
<player><name>Eric C Wood</name></player>
|
||||
<player><name>Cory Denton West</name></player>
|
||||
<player><name>John Haner</name></player>
|
||||
<player><name>J J Roetlin</name></player>
|
||||
<player><name>Geoff May</name></player>
|
||||
<player><name>Aaron W Yates</name></player>
|
||||
<player><name>Dean Mizdal</name></player>
|
||||
<player><name>David Bell</name></player>
|
||||
<player><name>Eric Bostrom</name></player>
|
||||
<player><name>Larry Pegram</name></player>
|
||||
<player><name>Ben D Bostrom</name></player>
|
||||
<player><name>Joshua Kurt Hayes</name></player>
|
||||
<player><name>Jason Curtis</name></player>
|
||||
<player><name>Shawn M Higbee</name></player>
|
||||
|
||||
|
||||
<!--
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
-->
|
||||
|
||||
<!-- Daytona -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Fontana Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Fontana Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Sears Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Sears Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Barber Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Barber Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Pikes Peak -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road America Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road America Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Brainerd -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Laguna Seca -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Mid Ohio Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Mid Ohio Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road Atlanta Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road Atlanta Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
@@ -0,0 +1,729 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
<!-- players -->
|
||||
|
||||
<player><name>Mathew Mladin</name></player>
|
||||
<player><name>Jake P Zemke</name></player>
|
||||
<player><name>Miguel Duhamel</name></player>
|
||||
<player><name>Jack E Pfeifer</name></player>
|
||||
<player><name>Lee Acree</name></player>
|
||||
<player><name>Ricky Orlando</name></player>
|
||||
<player><name>Pascal Picotte</name></player>
|
||||
<player><name>Opie Caylor</name></player>
|
||||
<player><name>Scott Jensen</name></player>
|
||||
<player><name>Eric C Wood</name></player>
|
||||
<player><name>Marco Martinez</name></player>
|
||||
<player><name>C R Gittere</name></player>
|
||||
<player><name>Cory Denton West</name></player>
|
||||
<player><name>Frank Trombino</name></player>
|
||||
<player><name>John Haner</name></player>
|
||||
<player><name>J J Roetlin</name></player>
|
||||
<player><name>Geoff May</name></player>
|
||||
<player><name>David Bell</name></player>
|
||||
<player><name>Roger Bell</name></player>
|
||||
<player><name>Craig Fitzpatrick</name></player>
|
||||
<player><name>Byron Barbour</name></player>
|
||||
<player><name>Rick R Narup</name></player>
|
||||
<player><name>Aaron W Yates</name></player>
|
||||
<player><name>Dean Mizdal</name></player>
|
||||
<player><name>Anthony W Fania</name></player>
|
||||
<player><name>Eric Bostrom</name></player>
|
||||
<player><name>Larry Pegram</name></player>
|
||||
<player><name>K Mark Crozier</name></player>
|
||||
<player><name>Mike Sullivan</name></player>
|
||||
<player><name>Ben D Bostrom</name></player>
|
||||
<player><name>Ron McGill</name></player>
|
||||
<player><name>Jeffrey S Tigert</name></player>
|
||||
<player><name>Joshua Kurt Hayes</name></player>
|
||||
<player><name>Michael A Hanley</name></player>
|
||||
<player><name>Scott E Carpenter</name></player>
|
||||
<player><name>Jordan M Szoke</name></player>
|
||||
<player><name>John Dugan</name></player>
|
||||
<player><name>Steve Crevier</name></player>
|
||||
<player><name>Martin Craggill</name></player>
|
||||
<player><name>Clint McBain</name></player>
|
||||
<player><name>Jeremy Toye</name></player>
|
||||
<player><name>Chris Siglin</name></player>
|
||||
<player><name>Robert M Christman</name></player>
|
||||
<player><name>Jason Curtis</name></player>
|
||||
<player><name>Mark Ledesma</name></player>
|
||||
<player><name>Garry Combs</name></player>
|
||||
<player><name>Kim Nakashima</name></player>
|
||||
<player><name>Corey Sarros</name></player>
|
||||
<player><name>Kevin Hanson</name></player>
|
||||
<player><name>Jeremiah J Johnson</name></player>
|
||||
<player><name>Jeff Williams</name></player>
|
||||
<player><name>Rob Mesa</name></player>
|
||||
<player><name>Craig Connell</name></player>
|
||||
<player><name>Shawn M Higbee</name></player>
|
||||
<player><name>A J Ammann</name></player>
|
||||
<player><name>David Stanton</name></player>
|
||||
<player><name>Ken Hill</name></player>
|
||||
<player><name>Mark C Foster</name></player>
|
||||
<player><name>Brien K Whitlock</name></player>
|
||||
<player><name>James Randolph</name></player>
|
||||
<player><name>James J King</name></player>
|
||||
<player><name>Andrew Nelson</name></player>
|
||||
<player><name>John Scott Wilson</name></player>
|
||||
<player><name>Thomas G Montano</name></player>
|
||||
<player><name>Kenyon Kluge</name></player>
|
||||
<player><name>Mike Krynock</name></player>
|
||||
<player><name>Michael J Sanchez</name></player>
|
||||
<player><name>John R Jacobi</name></player>
|
||||
<player><name>Lenny Beckman</name></player>
|
||||
<player><name>Michael A Smith</name></player>
|
||||
<player><name>Christian Pistoni</name></player>
|
||||
<player><name>Daniel L Turner</name></player>
|
||||
<player><name>Darren Luck</name></player>
|
||||
<player><name>Andrew J Deatherage</name></player>
|
||||
<player><name>Reuben Frankenfield</name></player>
|
||||
<player><name>Chris M Voelker</name></player>
|
||||
<player><name>Brian Boyd</name></player>
|
||||
<player><name>James Kerker</name></player>
|
||||
<player><name>Paul Ducato</name></player>
|
||||
<player><name>Dave Ebben</name></player>
|
||||
<player><name>David Weber</name></player>
|
||||
<player><name>Jacob L Holden</name></player>
|
||||
<player><name>Jason R Pridmore</name></player>
|
||||
<player><name>Mark Vandal</name></player>
|
||||
<player><name>Roger M Hendricks</name></player>
|
||||
<player><name>Greg J Fryer</name></player>
|
||||
<player><name>Corey D Eaton</name></player>
|
||||
<player><name>Dave Kunzelman</name></player>
|
||||
|
||||
<player><name>Fritz Kling</name></player>
|
||||
<player><name>Jeff Muskopf</name></player>
|
||||
<player><name>Kevin W Pate</name></player>
|
||||
<player><name>Chuck Allen</name></player>
|
||||
<player><name>Charles Sorensen</name></player>
|
||||
<player><name>Jesse A Janisch</name></player>
|
||||
|
||||
<!--
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
<player><name></name></player>
|
||||
-->
|
||||
|
||||
<!-- Daytona -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Ricky Orlando</competitor>
|
||||
<competitor>Pascal Picotte</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Frank Trombino</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Roger Bell</competitor>
|
||||
<competitor>Craig Fitzpatrick</competitor>
|
||||
<competitor>Byron Barbour</competitor>
|
||||
<competitor>Rick R Narup</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Anthony W Fania</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>K Mark Crozier</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Ron McGill</competitor>
|
||||
<competitor>Jeffrey S Tigert</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Michael A Hanley</competitor>
|
||||
<competitor>Scott E Carpenter</competitor>
|
||||
<competitor>Jordan M Szoke</competitor>
|
||||
<competitor>John Dugan</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Fontana Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Martin Craggill</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Clint McBain</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Chris Siglin</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Garry Combs</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Kim Nakashima</competitor>
|
||||
<competitor>Corey Sarros</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Jeff Williams</competitor>
|
||||
<competitor>Rob Mesa</competitor>
|
||||
<competitor>Craig Connell</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>A J Ammann</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Fontana Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Clint McBain</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Jeff Williams</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Rob Mesa</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Corey Sarros</competitor>
|
||||
<competitor>Chris Siglin</competitor>
|
||||
<competitor>Garry Combs</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Craig Connell</competitor>
|
||||
<competitor>Kim Nakashima</competitor>
|
||||
<competitor>Martin Craggill</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>A J Ammann</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Sears Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>David Stanton</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ken Hill</competitor>
|
||||
<competitor>Clint McBain</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>Mark C Foster</competitor>
|
||||
<competitor>Brien K Whitlock</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>James Randolph</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Garry Combs</competitor>
|
||||
<competitor>Rob Mesa</competitor>
|
||||
<competitor>Jeff Williams</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Andrew Nelson</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>John Scott Wilson</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>James J King</competitor>
|
||||
<competitor>Kim Nakashima</competitor>
|
||||
<competitor>Chris Siglin</competitor>
|
||||
<competitor>Craig Connell</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Thomas G Montano</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Kenyon Kluge</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Mike Krynock</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Sears Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Clint McBain</competitor>
|
||||
<competitor>Ken Hill</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Thomas G Montano</competitor>
|
||||
<competitor>Brien K Whitlock</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Kim Nakashima</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>John Scott Wilson</competitor>
|
||||
<competitor>Andrew Nelson</competitor>
|
||||
<competitor>Garry Combs</competitor>
|
||||
<competitor>James J King</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Chris Siglin</competitor>
|
||||
<competitor>David Stanton</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>James Randolph</competitor>
|
||||
<competitor>Jeff Williams</competitor>
|
||||
<competitor>Kenyon Kluge</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Mark C Foster</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Craig Connell</competitor>
|
||||
<competitor>Rob Mesa</competitor>
|
||||
<competitor>Mike Krynock</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Barber Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Byron Barbour</competitor>
|
||||
<competitor>Michael J Sanchez</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Scott E Carpenter</competitor>
|
||||
<competitor>Lenny Beckman</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Rick R Narup</competitor>
|
||||
<competitor>Michael A Smith</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Christian Pistoni</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Barber Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Michael A Smith</competitor>
|
||||
<competitor>Byron Barbour</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Lenny Beckman</competitor>
|
||||
<competitor>Scott E Carpenter</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Rick R Narup</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Michael J Sanchez</competitor>
|
||||
<competitor>Christian Pistoni</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Pikes Peak -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Ricky Orlando</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Daniel L Turner</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Darren Luck</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Lenny Beckman</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road America Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Andrew J Deatherage</competitor>
|
||||
<competitor>Pascal Picotte</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Roger Bell</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Reuben Frankenfield</competitor>
|
||||
<competitor>Chris M Voelker</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Brian Boyd</competitor>
|
||||
<competitor>James Kerker</competitor>
|
||||
<competitor>Lenny Beckman</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Paul Ducato</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Dave Ebben</competitor>
|
||||
<competitor>David Weber</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>Jason R Pridmore</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Road America Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Steve Crevier</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Andrew J Deatherage</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Weber</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Reuben Frankenfield</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Chris M Voelker</competitor>
|
||||
<competitor>Robert M Christman</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Kevin Hanson</competitor>
|
||||
<competitor>Dave Ebben</competitor>
|
||||
<competitor>Lenny Beckman</competitor>
|
||||
<competitor>Brian Boyd</competitor>
|
||||
<competitor>James Kerker</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Roger Bell</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>Pascal Picotte</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Jeremiah J Johnson</competitor>
|
||||
<competitor>Jason R Pridmore</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>Paul Ducato</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Brainerd -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Pascal Picotte</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Andrew J Deatherage</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Mark Vandal</competitor>
|
||||
<competitor>James Kerker</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Roger M Hendricks</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>Greg J Fryer</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jason R Pridmore</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>A J Ammann</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Laguna Seca -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Jeremy Toye</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Martin Craggill</competitor>
|
||||
<competitor>Chris Siglin</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Mike Sullivan</competitor>
|
||||
<competitor>Mark Ledesma</competitor>
|
||||
<competitor>Ken Hill</competitor>
|
||||
<competitor>Marco Martinez</competitor>
|
||||
<competitor>Ricky Orlando</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Thomas G Montano</competitor>
|
||||
<competitor>Brien K Whitlock</competitor>
|
||||
<competitor>Kim Nakashima</competitor>
|
||||
<competitor>Corey D Eaton</competitor>
|
||||
<competitor>Rob Mesa</competitor>
|
||||
<competitor>Dave Kunzelman</competitor>
|
||||
<competitor>Garry Combs</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Jeffrey S Tigert</competitor>
|
||||
<competitor>David Bell</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Mid Ohio Race 1 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>Martin Craggill</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Andrew J Deatherage</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>Fritz Kling</competitor>
|
||||
<competitor>Paul Ducato</competitor>
|
||||
<competitor>Byron Barbour</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Jeff Muskopf</competitor>
|
||||
<competitor>Kevin W Pate</competitor>
|
||||
<competitor>Roger Bell</competitor>
|
||||
<competitor>Chuck Allen</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Charles Sorensen</competitor>
|
||||
<competitor>David Weber</competitor>
|
||||
<competitor>James Kerker</competitor>
|
||||
<competitor>Jesse A Janisch</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>Jason R Pridmore</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
<!-- Mid Ohio Race 2 -->
|
||||
<period>
|
||||
<race>
|
||||
<competitor>Jake P Zemke</competitor>
|
||||
<competitor>Ben D Bostrom</competitor>
|
||||
<competitor>Mathew Mladin</competitor>
|
||||
<competitor>Aaron W Yates</competitor>
|
||||
<competitor>Joshua Kurt Hayes</competitor>
|
||||
<competitor>Jacob L Holden</competitor>
|
||||
<competitor>Eric Bostrom</competitor>
|
||||
<competitor>Larry Pegram</competitor>
|
||||
<competitor>Eric C Wood</competitor>
|
||||
<competitor>John Haner</competitor>
|
||||
<competitor>Lee Acree</competitor>
|
||||
<competitor>Shawn M Higbee</competitor>
|
||||
<competitor>Geoff May</competitor>
|
||||
<competitor>Andrew J Deatherage</competitor>
|
||||
<competitor>Cory Denton West</competitor>
|
||||
<competitor>David Weber</competitor>
|
||||
<competitor>J J Roetlin</competitor>
|
||||
<competitor>Jesse A Janisch</competitor>
|
||||
<competitor>Scott Jensen</competitor>
|
||||
<competitor>Opie Caylor</competitor>
|
||||
<competitor>Jason Curtis</competitor>
|
||||
<competitor>Byron Barbour</competitor>
|
||||
<competitor>Dean Mizdal</competitor>
|
||||
<competitor>C R Gittere</competitor>
|
||||
<competitor>Paul Ducato</competitor>
|
||||
<competitor>Jeff Muskopf</competitor>
|
||||
<competitor>Jack E Pfeifer</competitor>
|
||||
<competitor>Charles Sorensen</competitor>
|
||||
<competitor>Miguel Duhamel</competitor>
|
||||
<competitor>Fritz Kling</competitor>
|
||||
<competitor>Chuck Allen</competitor>
|
||||
<competitor>James Kerker</competitor>
|
||||
<competitor>Roger Bell</competitor>
|
||||
<competitor>Martin Craggill</competitor>
|
||||
<competitor>John R Jacobi</competitor>
|
||||
<competitor>Kevin W Pate</competitor>
|
||||
<competitor>Jason R Pridmore</competitor>
|
||||
</race>
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
@@ -0,0 +1,403 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
<player>
|
||||
<name>penguins</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>no ties</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>zzyzzx</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>spitfires</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>red liners</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>space monkeys</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>phantoms</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>jinx</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>plug uglys</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>shockers</name>
|
||||
</player>
|
||||
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>jinx</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>red liners</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>jinx</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>red liners</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>jinx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>phantoms</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
|
||||
<game>
|
||||
<home>jinx</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>space monkeys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period>
|
||||
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>plug uglys</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>jinx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>phantoms</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- July 26th -->
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>penguins</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>space monkeys</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>red liners</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>jinx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- August 2nd -->
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>jinx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>space monkeys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>red liners</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- August 9th -->
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>jinx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>no ties</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- August 16th -->
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>spitfires</away>
|
||||
<result>win</result> <!-- upset! -->
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>jinx</home>
|
||||
<away>shockers</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- August 23rd -->
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>jinx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- August 30th -->
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
</period>
|
||||
|
||||
<period> <!-- Sep 13th -->
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>phantoms</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>red liners</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<!-- other games unknown!!! -->
|
||||
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
|
||||
@@ -0,0 +1,422 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
<player>
|
||||
<name>penguins</name>
|
||||
<rating>1458.9</rating>
|
||||
<deviation>145.9</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>no ties</name>
|
||||
<rating>1474.4</rating>
|
||||
<deviation>141.2</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>zzyzzx</name>
|
||||
<rating>1747.3</rating>
|
||||
<deviation>146.8</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>spitfires</name>
|
||||
<rating>1688.8</rating>
|
||||
<deviation>152.5</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>space monkeys</name>
|
||||
<rating>1666.4</rating>
|
||||
<deviation>132.5</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>plug uglys</name>
|
||||
<rating>1247.4</rating>
|
||||
<deviation>149.5</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>shockers</name>
|
||||
<rating>1117.6</rating>
|
||||
<deviation>162.1</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>phantoms</name>
|
||||
<rating>1527.9</rating>
|
||||
<deviation>134.9</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>buk hockey</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>battle apples</name>
|
||||
</player>
|
||||
|
||||
|
||||
<!-- 9/20/2004 -->
|
||||
<period>
|
||||
<game> <!-- no line -->
|
||||
<home>shockers</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game> <!-- spitfires over penguins -->
|
||||
<home>spitfires</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game> <!-- zzyzzx over space monkeys -->
|
||||
<home>zzyzzx</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game> <!-- no line -->
|
||||
<home>no ties</home>
|
||||
<away>buk hockey</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 9/27/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>buk hockey</home>
|
||||
<away>space monkeys</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 10/04/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>buk hockey</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 10/11/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>buk hockey</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 10/25/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>plug uglys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>shockers</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>spitfires</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>space monkeys</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>buk hockey</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 11/01/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>buk hockey</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 11/15/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>buk hockey</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 11/22/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>buk hockey</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>shockers</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 11/29/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>buk hockey</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 12/06/2004 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>battle apples</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>penguins</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>buk hockey</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>phantoms</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- 1/17/2005 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>buk hockey</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
|
||||
@@ -0,0 +1,503 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
<player>
|
||||
<name>no ties</name>
|
||||
<rating>1472.6</rating>
|
||||
<deviation>100.3</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>zzyzzx</name>
|
||||
<rating>1657.5</rating>
|
||||
<deviation>106.0</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>penguins</name>
|
||||
<rating>1436.3</rating>
|
||||
<deviation>103.2</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>spitfires</name>
|
||||
<rating>1801.5</rating>
|
||||
<deviation>112.3</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>space monkeys</name>
|
||||
<rating>1659.8</rating>
|
||||
<deviation>98.1</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>plug uglys</name>
|
||||
<rating>1125.4</rating>
|
||||
<deviation>113.1</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>shockers</name>
|
||||
<rating>1196.3</rating>
|
||||
<deviation>117.0</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>phantoms</name>
|
||||
<rating>1652.6</rating>
|
||||
<deviation>98.6</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>battle apples</name>
|
||||
<rating>1302.6</rating>
|
||||
<deviation>156.9</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>blackouts</name>
|
||||
<rating>1531.3</rating>
|
||||
<deviation>121.4</deviation>
|
||||
<variance>0.06</variance>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>coaches team</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>old school</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>ballistic</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>velocity</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>puck heads</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>demons</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>section 8</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>who's your daddy</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>blackhawks</name>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>tiger sharks</name>
|
||||
</player>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>blackouts</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>space monkeys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>coaches team</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>no ties</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>blackouts</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>old school</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>coaches team</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>coaches team</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>blackouts</home>
|
||||
<away>old school</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>old school</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>blackouts</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>coaches team</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>shockers</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>blackouts</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>old school</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>spitfires</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>coaches team</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>space monkeys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>old school</home>
|
||||
<away>coaches team</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>spitfires</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>blackouts</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>blackouts</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>no ties</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>coaches team</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>plug uglys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>old school</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>blackouts</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>old school</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>plug uglys</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>spitfires</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>coaches team</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>space monkeys</home>
|
||||
<away>battle apples</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>coaches team</home>
|
||||
<away>blackouts</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>plug uglys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>old school</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>old school</home>
|
||||
<away>shockers</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- mon, 4/25 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>coaches team</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>battle apples</home>
|
||||
<away>no ties</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>old school</home>
|
||||
<away>zzyzzx</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>penguins</home>
|
||||
<away>phantoms</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>blackouts</home>
|
||||
<away>plug uglys</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>space monkeys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- wed, 4/27 -->
|
||||
<period>
|
||||
<game>
|
||||
<home>shockers</home>
|
||||
<away>ballistic</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>blackhawks</home>
|
||||
<away>puck heads</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>section 8</home>
|
||||
<away>velocity</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>demons</home>
|
||||
<away>spitfires</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>who's your daddy</home>
|
||||
<away>tiger sharks</away>
|
||||
<result>draw</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
<!-- mon, 5/2 (playoffs round 1) -->
|
||||
<period>
|
||||
<game>
|
||||
<home>no ties</home>
|
||||
<away>penguins</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>phantoms</home>
|
||||
<away>space monkeys</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>zzyzzx</home>
|
||||
<away>coaches team</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
<game>
|
||||
<home>spitfires</home>
|
||||
<away>blackouts</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<ratingdoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.waits.net/XML/xmlrate.xsd">
|
||||
|
||||
|
||||
<player>
|
||||
<name>A</name>
|
||||
<rating>1500</rating>
|
||||
<deviation>200</deviation>
|
||||
<volatility>0.06</volatility>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>B</name>
|
||||
<rating>1400</rating>
|
||||
<deviation>30</deviation>
|
||||
<volatility>0.06</volatility>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>C</name>
|
||||
<rating>1550</rating>
|
||||
<deviation>100</deviation>
|
||||
<volatility>0.06</volatility>
|
||||
</player>
|
||||
|
||||
<player>
|
||||
<name>D</name>
|
||||
<rating>1700</rating>
|
||||
<deviation>300</deviation>
|
||||
<volatility>0.06</volatility>
|
||||
</player>
|
||||
|
||||
|
||||
<period>
|
||||
<game>
|
||||
<home>A</home>
|
||||
<away>B</away>
|
||||
<result>win</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>A</home>
|
||||
<away>C</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
|
||||
<game>
|
||||
<home>A</home>
|
||||
<away>D</away>
|
||||
<result>loss</result>
|
||||
</game>
|
||||
</period>
|
||||
|
||||
</ratingdoc>
|
||||
|
||||
+240
@@ -0,0 +1,240 @@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2004 Stephen Waits
|
||||
#
|
||||
# This software is provided 'as-is', without any express or implied warranty. In
|
||||
# no event will the authors be held liable for any damages arising from the use
|
||||
# of this software.
|
||||
#
|
||||
# Permission is granted to anyone to use this software for any purpose,
|
||||
# including commercial applications, and to alter it and redistribute it freely,
|
||||
# subject to the following restrictions:
|
||||
#
|
||||
# 1. The origin of this software must not be misrepresented; you must not claim
|
||||
# that you wrote the original software. If you use this software in a
|
||||
# product, an acknowledgment in the product documentation would be
|
||||
# appreciated but is not required.
|
||||
#
|
||||
# 2. Altered source versions must be plainly marked as such, and must not be
|
||||
# misrepresented as being the original software.
|
||||
#
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
import math
|
||||
import copy
|
||||
|
||||
|
||||
class Glicko2:
|
||||
"""
|
||||
Glicko-2 Rating calculator class.
|
||||
|
||||
This class implements the Glicko-2 rating system algorithm written by
|
||||
Professor Mark E. Glickman. All rating inputs and outputs are Glicko ratings,
|
||||
but internally everything is converted to and considered Glicko-2 ratings.
|
||||
|
||||
Glicko-2 is an improvement on the original Glicko, which was, in turn, an
|
||||
improvement on the ELO system.
|
||||
|
||||
The Glicko-2 system is specified on http://www.glicko.com/
|
||||
"""
|
||||
|
||||
WIN = 1.0
|
||||
LOSS = 0.0
|
||||
DRAW = 0.5
|
||||
|
||||
dvolatility = 0.3
|
||||
|
||||
def __init__ (self, rating = 1500.0, deviation = 350.0, volatility = 0.06):
|
||||
"""
|
||||
Constructor with rating, rating deviation, and volatility optionally
|
||||
specified. If nothing specified, nitializes to a rating of 1500, a
|
||||
rating deviation of 350, and a volatility of 0.06.
|
||||
"""
|
||||
|
||||
# creat state vars
|
||||
self.__rating = 0.0
|
||||
self.__deviation = 0.0
|
||||
self.__volatility = 0.0
|
||||
|
||||
# create empty result lists
|
||||
self.__opponents = []
|
||||
self.__results = []
|
||||
|
||||
# initialize state
|
||||
self.SetRating(rating)
|
||||
self.SetDeviation(deviation)
|
||||
self.SetVolatility(volatility)
|
||||
|
||||
def __cmp__(self, other):
|
||||
"""Comparison operator"""
|
||||
return cmp( self.__rating, other.__rating )
|
||||
|
||||
|
||||
def GetRating (self):
|
||||
"""
|
||||
Get the current rating. This rating is a Glicko rating, not a Glicko2 rating.
|
||||
For details, please see http://www.glicko.com/
|
||||
"""
|
||||
return (self.__rating * 173.7178) + 1500.0
|
||||
|
||||
def GetDeviation (self):
|
||||
"""
|
||||
Get the current rating deviation. This is a Glicko rating deviation, not a
|
||||
Glicko-2 RD. For details, please see http://www.glicko.com/
|
||||
"""
|
||||
return self.__deviation * 173.7178
|
||||
|
||||
def GetVolatility (self):
|
||||
"""
|
||||
Get the current rating volatility.
|
||||
"""
|
||||
return self.__volatility
|
||||
|
||||
def SetRating (self, rating):
|
||||
"""
|
||||
Set Glicko rating. Internally this is converted to a Glicko2 rating.
|
||||
For details, please see http://www.glicko.com/
|
||||
"""
|
||||
self.__rating = (rating - 1500.0) / 173.7178
|
||||
|
||||
def SetDeviation(self, deviation):
|
||||
"""
|
||||
Set Glicko rating deviation. Internally this is converted to a Glicko-2 RD.
|
||||
For details, please see http://www.glicko.com/
|
||||
"""
|
||||
self.__deviation = deviation / 173.7178
|
||||
|
||||
def SetVolatility(self, volatility):
|
||||
"""
|
||||
Set rating volatility.
|
||||
"""
|
||||
self.__volatility = volatility
|
||||
|
||||
def ClearResults (self):
|
||||
"""
|
||||
Clear all results previously added via AddResult(), AddWin(), AddLoss(),
|
||||
and/or AddDraw(). This method is called automatically whenever Update()
|
||||
is called.
|
||||
"""
|
||||
self.__opponents = []
|
||||
self.__results = []
|
||||
|
||||
def AddResult (self, opponent, result):
|
||||
"""
|
||||
Add a result to this rating. Note that no calculation is performed until
|
||||
Update() is called.
|
||||
"""
|
||||
self.__opponents.append(copy.copy(opponent))
|
||||
self.__results.append(copy.copy(result)) # copy probably not needed
|
||||
|
||||
def AddWin (self, opponent):
|
||||
"""
|
||||
Add a win result to this rating. Note that no calculation is performed until
|
||||
Update() is called.
|
||||
"""
|
||||
self.AddResult(opponent, self.WIN)
|
||||
|
||||
def AddLoss (self, opponent):
|
||||
"""
|
||||
Add a loss result to this rating. Note that no calculation is performed until
|
||||
Update() is called.
|
||||
"""
|
||||
self.AddResult(opponent, self.LOSS)
|
||||
|
||||
def AddDraw (self, opponent):
|
||||
"""
|
||||
Add a draw result to this rating. Note that no calculation is performed until
|
||||
Update() is called.
|
||||
"""
|
||||
self.AddResult(opponent, self.DRAW)
|
||||
|
||||
def Update (self):
|
||||
"""
|
||||
Update rating based on current results list, and clear results.
|
||||
"""
|
||||
|
||||
# util func
|
||||
def g (deviation):
|
||||
"""
|
||||
Internal utility function.
|
||||
"""
|
||||
return 1.0 / (math.sqrt(1.0 + 3.0 * deviation * deviation / (math.pi * math.pi)));
|
||||
|
||||
# util func
|
||||
def E (rating, rating_opponent, deviation_opponent):
|
||||
"""
|
||||
Internal utility function.
|
||||
"""
|
||||
return 1.0 / (1.0 + math.exp(-g(deviation_opponent)*(rating - rating_opponent)));
|
||||
|
||||
# bail if no opponents set
|
||||
if len(self.__opponents) == 0:
|
||||
return
|
||||
|
||||
# compute variance
|
||||
variance = 0.0
|
||||
for opp in self.__opponents:
|
||||
g_i = g(opp.__deviation)
|
||||
E_i = E(self.__rating,opp.__rating,opp.__deviation)
|
||||
variance += g_i * g_i * E_i * (1.0 - E_i)
|
||||
variance = 1.0 / variance
|
||||
|
||||
# compute delta
|
||||
delta = 0.0
|
||||
for i in range(len(self.__opponents)):
|
||||
delta += g(self.__opponents[i].__deviation) * (self.__results[i] - E(self.__rating, self.__opponents[i].__rating, self.__opponents[i].__deviation))
|
||||
delta *= variance
|
||||
|
||||
# determine new volatility
|
||||
new_volatility = 0.0
|
||||
a = math.log( math.pow(self.__volatility,2.0) )
|
||||
x = 0.0
|
||||
x_new = a
|
||||
while ( abs(x - x_new) > 0.0000001 ):
|
||||
x = x_new;
|
||||
d = math.pow(self.__deviation,2.0) + variance + math.exp(x)
|
||||
h1 = -(x - a)/(math.pow(self.dvolatility,2.0)) - 0.5*math.exp(x)/d + 0.5*math.exp(x)*(delta/d)*(delta/d)
|
||||
h2 = -1.0/(math.pow(self.dvolatility,2.0)) - 0.5*math.exp(x)*(math.pow(self.__deviation,2.0)+variance)/(pow(d,2.0)) + 0.5*(math.pow(delta,2.0))*math.exp(x)*((math.pow(self.__deviation,2.0)) + variance - math.exp(x))/(pow(d,3.0))
|
||||
x_new = x - h1/h2
|
||||
new_volatility = math.exp(x_new / 2.0)
|
||||
|
||||
# update the rating deviation to the new pre-rating period value
|
||||
pre_deviation = math.sqrt( math.pow(self.__deviation,2.0) + math.pow(new_volatility,2.0) )
|
||||
|
||||
# update the rating and deviation
|
||||
new_deviation = 1.0 / (math.sqrt( 1.0/(pow(pre_deviation,2.0)) + 1.0 / variance))
|
||||
new_rating = 0.0
|
||||
for i in range(len(self.__opponents)):
|
||||
new_rating += g(self.__opponents[i].__deviation) * (self.__results[i] - E(self.__rating, self.__opponents[i].__rating, self.__opponents[i].__deviation))
|
||||
new_rating = new_rating * pow(new_deviation,2.0)
|
||||
new_rating += self.__rating
|
||||
|
||||
# copy new values
|
||||
self.__rating = new_rating
|
||||
self.__deviation = new_deviation
|
||||
self.__volatility = new_volatility
|
||||
|
||||
# wipe our result lists
|
||||
self.ClearResults()
|
||||
|
||||
|
||||
|
||||
# test code
|
||||
if __name__ == "__main__":
|
||||
|
||||
A = Glicko2(1500.0, 200.0, 0.06)
|
||||
B = Glicko2(1400.0, 30.0, 0.06)
|
||||
C = Glicko2(1550.0, 100.0, 0.06)
|
||||
D = Glicko2(1700.0, 300.0, 0.06)
|
||||
|
||||
A.AddWin(B)
|
||||
A.AddLoss(C)
|
||||
A.AddResult(D,Glicko2.LOSS)
|
||||
|
||||
A.Update();
|
||||
|
||||
print "rating",A.GetRating(), "deviation",A.GetDeviation()
|
||||
|
||||
Executable
+228
@@ -0,0 +1,228 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import glicko2
|
||||
import xml.dom.minidom
|
||||
|
||||
# globals
|
||||
gPlayers = dict()
|
||||
gTeams = dict()
|
||||
|
||||
|
||||
def getText(nodelist):
|
||||
rc = ""
|
||||
for node in nodelist:
|
||||
if node.nodeType == node.TEXT_NODE:
|
||||
rc = rc + node.data
|
||||
return rc
|
||||
|
||||
|
||||
def parsePlayers (docroot):
|
||||
|
||||
# get players
|
||||
playerelements = docroot.getElementsByTagName("player")
|
||||
|
||||
# parse each player
|
||||
for player in playerelements:
|
||||
|
||||
# get the name
|
||||
namenode = player.getElementsByTagName("name")
|
||||
assert namenode
|
||||
name = getText(namenode[0].childNodes)
|
||||
|
||||
# setup default rating data
|
||||
g2 = glicko2.Glicko2()
|
||||
|
||||
# look for rating
|
||||
ratingnode = player.getElementsByTagName("rating")
|
||||
if ratingnode:
|
||||
g2.SetRating( float(getText(ratingnode[0].childNodes)) )
|
||||
|
||||
# look for deviation
|
||||
deviationnode = player.getElementsByTagName("deviation")
|
||||
if deviationnode:
|
||||
g2.SetDeviation( float(getText(deviationnode[0].childNodes)) )
|
||||
|
||||
# look for volatility
|
||||
volatilitynode = player.getElementsByTagName("volatility")
|
||||
if volatilitynode:
|
||||
g2.SetVolatility( float(getText(volatilitynode[0].childNodes)) )
|
||||
|
||||
# add to dictionary
|
||||
gPlayers[name] = g2
|
||||
|
||||
|
||||
def parseTeams (docroot):
|
||||
|
||||
# get teams
|
||||
teamelements = docroot.getElementsByTagName("team")
|
||||
|
||||
# parse each team
|
||||
for team in teamelements:
|
||||
|
||||
# get the name
|
||||
namenode = team.getElementsByTagName("name")
|
||||
assert namenode
|
||||
name = getText(namenode[0].childNodes)
|
||||
|
||||
# add name to our dictionary
|
||||
gTeams[name] = []
|
||||
|
||||
# look for members, add to dictionary
|
||||
membernode = team.getElementsByTagName("member")
|
||||
assert membernode # makes certain team is not empty
|
||||
for member in membernode:
|
||||
gTeams[name].append( getText(member.childNodes) )
|
||||
|
||||
|
||||
def outputPlayers():
|
||||
sorted = [(v, k) for k, v in gPlayers.items()]
|
||||
sorted.sort()
|
||||
sorted.reverse() # so largest is first
|
||||
sorted = [(k, v) for v, k in sorted]
|
||||
i = 0
|
||||
for k,v in sorted:
|
||||
i += 1
|
||||
print "%3d%30s: %6.1f +/- %5.1f %0.05f" % \
|
||||
( i, k, v.GetRating(), v.GetDeviation(), v.GetVolatility() )
|
||||
|
||||
|
||||
|
||||
|
||||
def handlePeriods (docroot):
|
||||
|
||||
# our period count
|
||||
periodcount = 0
|
||||
|
||||
# get all periods
|
||||
periodelements = docroot.getElementsByTagName("period")
|
||||
|
||||
# handle each period
|
||||
for period in periodelements:
|
||||
|
||||
# track period id
|
||||
periodcount += 1
|
||||
print
|
||||
print "after rating period",periodcount
|
||||
|
||||
# deal with either a race or a game node
|
||||
for node in period.childNodes:
|
||||
if node.nodeType == node.ELEMENT_NODE:
|
||||
if node.tagName == "race":
|
||||
handleRace(node)
|
||||
elif node.tagName == "game":
|
||||
handleGame(node)
|
||||
|
||||
# all games entered for this period, now update all players ratings
|
||||
for k,v in gPlayers.items():
|
||||
v.Update()
|
||||
|
||||
# sort players for output
|
||||
outputPlayers()
|
||||
|
||||
|
||||
def handleRace (race):
|
||||
|
||||
# get competitors
|
||||
competitornodes = race.getElementsByTagName("competitor")
|
||||
|
||||
# a list of our racers
|
||||
racelist = []
|
||||
|
||||
for competitor in competitornodes:
|
||||
|
||||
# get name from XML
|
||||
competitorname = getText(competitor.childNodes)
|
||||
|
||||
# look name up in our team list
|
||||
if gTeams.has_key(competitorname):
|
||||
competitornames = gTeams[competitorname]
|
||||
else:
|
||||
competitornames = [competitorname]
|
||||
|
||||
# make all of these competitors losers to everyone already in the list
|
||||
for plist in racelist:
|
||||
for pl in plist:
|
||||
for co in competitornames:
|
||||
gPlayers[pl].AddWin(gPlayers[co])
|
||||
gPlayers[co].AddLoss(gPlayers[pl])
|
||||
|
||||
# now let's add this list to our race list
|
||||
racelist.append( competitornames )
|
||||
|
||||
|
||||
|
||||
def handleGame (game):
|
||||
|
||||
# get home
|
||||
homenode = game.getElementsByTagName("home")
|
||||
assert homenode
|
||||
home = getText(homenode[0].childNodes)
|
||||
|
||||
# get away
|
||||
awaynode = game.getElementsByTagName("away")
|
||||
assert awaynode
|
||||
away = getText(awaynode[0].childNodes)
|
||||
|
||||
# get result
|
||||
resultnode = game.getElementsByTagName("result")
|
||||
assert resultnode
|
||||
result = getText(resultnode[0].childNodes)
|
||||
assert result == "win" or result == "loss" or result == "draw"
|
||||
|
||||
# see if home is a team
|
||||
if gTeams.has_key(home):
|
||||
homeplayernames = gTeams[home]
|
||||
else:
|
||||
homeplayernames = [home]
|
||||
|
||||
# see if away is a team
|
||||
if gTeams.has_key(away):
|
||||
awayplayernames = gTeams[away]
|
||||
else:
|
||||
awayplayernames = [away]
|
||||
|
||||
# determine each team's result
|
||||
if result == "win":
|
||||
homeresult = glicko2.Glicko2.WIN
|
||||
awayresult = glicko2.Glicko2.LOSS
|
||||
elif result == "loss":
|
||||
homeresult = glicko2.Glicko2.LOSS
|
||||
awayresult = glicko2.Glicko2.WIN
|
||||
elif result == "draw":
|
||||
homeresult = glicko2.Glicko2.DRAW
|
||||
awayresult = glicko2.Glicko2.DRAW
|
||||
|
||||
# now let's add all the results to the Glicko2 objects
|
||||
for hname in homeplayernames:
|
||||
for aname in awayplayernames:
|
||||
gPlayers[hname].AddResult( gPlayers[aname], homeresult )
|
||||
for aname in awayplayernames:
|
||||
for hname in homeplayernames:
|
||||
gPlayers[aname].AddResult( gPlayers[hname], awayresult )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def main ():
|
||||
|
||||
# parse input document
|
||||
docroot = xml.dom.minidom.parse(sys.argv[1])
|
||||
|
||||
# build player & team list
|
||||
parsePlayers(docroot)
|
||||
parseTeams(docroot)
|
||||
|
||||
# show initial ratings
|
||||
print "initial ratings"
|
||||
outputPlayers()
|
||||
|
||||
# process all the periods
|
||||
handlePeriods(docroot)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
|
||||
<xs:simpleType name="ratingtype">
|
||||
<xs:restriction base="xs:decimal">
|
||||
<xs:minInclusive value="100.0"/>
|
||||
<xs:maxInclusive value="4000.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="deviationtype">
|
||||
<xs:restriction base="xs:decimal">
|
||||
<xs:minInclusive value="0.0"/>
|
||||
<xs:maxInclusive value="700.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="volatilitytype">
|
||||
<xs:restriction base="xs:decimal">
|
||||
<xs:minInclusive value="0.0"/>
|
||||
<xs:maxInclusive value="10.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="nametype">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:whiteSpace value="collapse"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="commenttype">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:whiteSpace value="preserve"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="resulttype">
|
||||
<xs:restriction base ="xs:string">
|
||||
<xs:enumeration value="win"/>
|
||||
<xs:enumeration value="loss"/>
|
||||
<xs:enumeration value="draw"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:complexType name="racetype">
|
||||
<xs:choice>
|
||||
<xs:element minOccurs="1" maxOccurs="unbounded" name="competitor" type="nametype"/>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="gametype">
|
||||
<xs:all>
|
||||
<xs:element minOccurs="1" name="home" type="nametype"/>
|
||||
<xs:element minOccurs="1" name="away" type="nametype"/>
|
||||
<xs:element minOccurs="1" name="result" type="resulttype"/>
|
||||
<xs:element minOccurs="0" name="comment" type="commenttype"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="periodtype">
|
||||
<xs:choice>
|
||||
<xs:element maxOccurs="unbounded" name="game" type="gametype"/>
|
||||
<xs:element maxOccurs="unbounded" name="race" type="racetype"/>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="teamtype">
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="1" maxOccurs="1" name="name" type="nametype"/>
|
||||
<xs:element minOccurs="1" maxOccurs="unbounded" name="member" type="nametype"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="playertype">
|
||||
<xs:all>
|
||||
<xs:element minOccurs="1" name="name" type="nametype"/>
|
||||
<xs:element minOccurs="0" name="rating" type="ratingtype"/>
|
||||
<xs:element minOccurs="0" name="deviation" type="deviationtype"/>
|
||||
<xs:element minOccurs="0" name="volatility" type="volatilitytype"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ratingdoctype">
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="1" maxOccurs="unbounded" name="player" type="playertype"/>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="team" type="teamtype"/>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" name="period" type="periodtype"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="ratingdoc" type="ratingdoctype"/>
|
||||
|
||||
</xs:schema>
|
||||
Executable
+230
@@ -0,0 +1,230 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2004 Stephen Waits
|
||||
#
|
||||
# This software is provided 'as-is', without any express or implied warranty. In
|
||||
# no event will the authors be held liable for any damages arising from the use
|
||||
# of this software.
|
||||
#
|
||||
# Permission is granted to anyone to use this software for any purpose,
|
||||
# including commercial applications, and to alter it and redistribute it freely,
|
||||
# subject to the following restrictions:
|
||||
#
|
||||
# 1. The origin of this software must not be misrepresented; you must not claim
|
||||
# that you wrote the original software. If you use this software in a
|
||||
# product, an acknowledgment in the product documentation would be
|
||||
# appreciated but is not required.
|
||||
#
|
||||
# 2. Altered source versions must be plainly marked as such, and must not be
|
||||
# misrepresented as being the original software.
|
||||
#
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
# Glicko-2 Rating calculator class.
|
||||
#
|
||||
# This class implements the Glicko-2 rating system algorithm written by
|
||||
# Professor Mark E. Glickman. All rating inputs and outputs are Glicko ratings,
|
||||
# but internally everything is converted to and considered Glicko-2 ratings.
|
||||
#
|
||||
# Glicko-2 is an improvement on the original Glicko, which was, in turn, an
|
||||
# improvement on the ELO system.
|
||||
#
|
||||
# The Glicko-2 system is specified on http://www.glicko.com/
|
||||
#
|
||||
class Glicko2
|
||||
|
||||
protected
|
||||
|
||||
# Glicko2 reprensentation (Glicko2 uses different scales from Glicko)
|
||||
attr_accessor :g2rating, :g2deviation, :g2volatility
|
||||
|
||||
# a nested Class to hold a single result
|
||||
Result = Struct.new(:opponent, :result)
|
||||
|
||||
public
|
||||
|
||||
WIN = 1.0
|
||||
LOSS = 0.0
|
||||
DRAW = 0.5
|
||||
|
||||
# Constructor with rating, rating deviation, and volatility optionally
|
||||
# specified. If nothing specified, nitializes to a rating of 1500, a
|
||||
# rating deviation of 350, and a volatility of 0.06.
|
||||
def initialize(rating = 1500.0, deviation = 350.0, volatility = 0.06)
|
||||
@dvolatility = 0.3
|
||||
self.rating = rating
|
||||
self.deviation = deviation
|
||||
self.volatility = volatility
|
||||
clear_results
|
||||
end
|
||||
|
||||
include Comparable
|
||||
|
||||
# Comparison operator
|
||||
def <=>(other)
|
||||
self.rating <=> other.rating
|
||||
end
|
||||
|
||||
# Get the current rating. This rating is a Glicko rating, not a Glicko2 rating.
|
||||
# For details, please see http://www.glicko.com/
|
||||
def rating
|
||||
(@g2rating * 173.7178) + 1500.0
|
||||
end
|
||||
|
||||
# Set Glicko rating. Internally this is converted to a Glicko2 rating.
|
||||
# For details, please see http://www.glicko.com/
|
||||
def rating=(r)
|
||||
@g2rating = (r - 1500.0) / 173.7178
|
||||
end
|
||||
|
||||
# Get the current rating deviation. This is a Glicko rating deviation, not a
|
||||
# Glicko-2 RD. For details, please see http://www.glicko.com/
|
||||
def deviation
|
||||
@g2deviation * 173.7178
|
||||
end
|
||||
|
||||
# Set Glicko rating deviation. Internally this is converted to a Glicko-2 RD.
|
||||
# For details, please see http://www.glicko.com/
|
||||
def deviation=(d)
|
||||
@g2deviation = d / 173.7178
|
||||
end
|
||||
|
||||
# Get the current rating volatility.
|
||||
def volatility
|
||||
@g2volatility
|
||||
end
|
||||
|
||||
# Set rating volatility.
|
||||
def volatility=(v)
|
||||
@g2volatility = v
|
||||
end
|
||||
|
||||
# Clear all results previously added via add_result(), add_win(), add_loss(),
|
||||
# and/or add_draw(). This method is called automatically whenever update()
|
||||
# is called.
|
||||
def clear_results
|
||||
@opponents = []
|
||||
@results = []
|
||||
end
|
||||
|
||||
# Add a result to this rating. Note that no calculation is performed until
|
||||
# update() is called.
|
||||
def add_result(opponent,result)
|
||||
@results.push( Result.new(opponent.clone, result) )
|
||||
end
|
||||
|
||||
# Add a win result to this rating. Note that no calculation is performed until
|
||||
# update() is called.
|
||||
def add_win(opponent)
|
||||
add_result(opponent,Glicko2::WIN)
|
||||
end
|
||||
|
||||
# Add a loss result to this rating. Note that no calculation is performed until
|
||||
# update() is called.
|
||||
def add_loss(opponent)
|
||||
add_result(opponent,Glicko2::LOSS)
|
||||
end
|
||||
|
||||
# Add a draw result to this rating. Note that no calculation is performed until
|
||||
# update() is called.
|
||||
def add_draw(opponent)
|
||||
add_result(opponent,Glicko2::DRAW)
|
||||
end
|
||||
|
||||
# Update rating based on current results list, and clear results.
|
||||
def update
|
||||
|
||||
# util func
|
||||
def Glicko2.g(deviation)
|
||||
1.0 / (Math.sqrt(1.0 + 3.0 * deviation ** 2.0 / (Math::PI ** 2.0)))
|
||||
end
|
||||
|
||||
# util func
|
||||
def Glicko2.E(rating, rating_opponent, deviation_opponent)
|
||||
1.0 / (1.0 + Math.exp(-Glicko2.g(deviation_opponent)*(rating - rating_opponent)));
|
||||
end
|
||||
|
||||
# bail if no opponents set
|
||||
if @results.empty?
|
||||
return nil
|
||||
end
|
||||
|
||||
# compute variance
|
||||
|
||||
#variance = 0.0
|
||||
#@results.inject(0.0) do |variance,r|
|
||||
# g_i = Glicko2.g(r.opponent.g2deviation)
|
||||
# e_i = Glicko2.E(@g2rating,r.opponent.g2rating,r.opponent.g2deviation)
|
||||
# g_i ** 2.0 * e_i * (1.0 - e_i)
|
||||
#end
|
||||
|
||||
variance = 0.0
|
||||
@results.each do |r|
|
||||
g_i = Glicko2.g(r.opponent.g2deviation)
|
||||
e_i = Glicko2.E(@g2rating,r.opponent.g2rating,r.opponent.g2deviation)
|
||||
variance += g_i ** 2.0 * e_i * (1.0 - e_i)
|
||||
end
|
||||
variance = 1.0 / variance
|
||||
|
||||
# compute delta
|
||||
delta = 0.0
|
||||
@results.each do |r|
|
||||
delta += Glicko2.g(r.opponent.g2deviation) * (r.result - Glicko2.E(@g2rating, r.opponent.g2rating, r.opponent.g2deviation))
|
||||
end
|
||||
delta *= variance
|
||||
|
||||
# determine new volatility
|
||||
new_volatility = 0.0
|
||||
a = Math.log( @g2volatility**2.0 )
|
||||
x = 0.0
|
||||
x_new = a
|
||||
while ( (x - x_new).abs > 0.0000001 )
|
||||
x = x_new
|
||||
d = @g2deviation**2.0 + variance + Math.exp(x)
|
||||
h1 = -(x - a)/(@dvolatility**2.0) - 0.5*Math.exp(x)/d + 0.5*Math.exp(x)*(delta/d)*(delta/d)
|
||||
h2 = -1.0/(@dvolatility**2.0) - 0.5*Math.exp(x)*(@g2deviation**2.0+variance)/(d**2.0) + 0.5*(delta**2.0)*Math.exp(x)*((@g2deviation**2.0) + variance - Math.exp(x))/(d**3.0)
|
||||
x_new = x - h1/h2
|
||||
end
|
||||
new_volatility = Math.exp(x_new / 2.0)
|
||||
|
||||
# update the rating deviation to the new pre-rating period value
|
||||
pre_deviation = Math.sqrt( @g2deviation**2.0 + new_volatility**2.0 )
|
||||
|
||||
# update the rating and deviation
|
||||
new_deviation = 1.0 / (Math.sqrt( 1.0/(pre_deviation**2.0) + 1.0 / variance))
|
||||
new_rating = 0.0
|
||||
@results.each do |r|
|
||||
new_rating += Glicko2.g(r.opponent.g2deviation) * (r.result - Glicko2.E(@g2rating, r.opponent.g2rating, r.opponent.g2deviation))
|
||||
end
|
||||
new_rating = new_rating * new_deviation**2.0
|
||||
new_rating += @g2rating
|
||||
|
||||
# wipe our result lists
|
||||
clear_results
|
||||
|
||||
# copy new values
|
||||
@g2deviation = new_deviation
|
||||
@g2volatility = new_volatility
|
||||
@g2rating = new_rating
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
A = Glicko2.new(1500.0, 200.0, 0.06)
|
||||
B = Glicko2.new(1400.0, 30.0, 0.06)
|
||||
C = Glicko2.new(1550.0, 100.0, 0.06)
|
||||
D = Glicko2.new(1700.0, 300.0, 0.06)
|
||||
|
||||
A.add_win(B)
|
||||
A.add_loss(C)
|
||||
A.add_result(D,0.0)
|
||||
|
||||
A.update()
|
||||
|
||||
print "rating ", A.rating, " deviation ", A.deviation
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
require "rexml/document"
|
||||
|
||||
file = File.new( "../py/data/hockey-2005.xml" )
|
||||
|
||||
doc = REXML::Document.new(file)
|
||||
|
||||
# each rating doc
|
||||
doc.elements.each("ratingdoc") do |root|
|
||||
|
||||
# each player
|
||||
root.elements.each("player") do |player|
|
||||
|
||||
name = player.elements["name"].text
|
||||
rating = 1500.0
|
||||
deviation = 350.0
|
||||
variance = 0.06
|
||||
|
||||
# TODO: find better "Ruby-esqe" way of doing these
|
||||
if player.elements["rating"]
|
||||
rating = player.elements["rating"].text
|
||||
end
|
||||
if player.elements["deviation"]
|
||||
deviation = player.elements["deviation"].text
|
||||
end
|
||||
if player.elements["variance"]
|
||||
variance = player.elements["variance"].text
|
||||
end
|
||||
|
||||
puts name,rating,deviation,variance
|
||||
puts
|
||||
|
||||
end
|
||||
|
||||
# each rating period
|
||||
root.elements.each("period") do |period|
|
||||
|
||||
# each regular game
|
||||
period.elements.each("game") do |game|
|
||||
puts "home",game.elements["home"].text
|
||||
puts "away",game.elements["away"].text
|
||||
puts "result",game.elements["result"].text
|
||||
puts
|
||||
end
|
||||
|
||||
# each race
|
||||
period.elements.each("race") do |race|
|
||||
race.elements.each("competitor") do |c|
|
||||
puts c.text
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in new issue
Block a user