Test with xp-offset.
This commit is contained in:
@@ -139,6 +139,7 @@ pub struct LikelihoodFactor {
|
|||||||
mean: VariableId,
|
mean: VariableId,
|
||||||
value: VariableId,
|
value: VariableId,
|
||||||
variance: f64,
|
variance: f64,
|
||||||
|
exp_offset: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LikelihoodFactor {
|
impl LikelihoodFactor {
|
||||||
@@ -148,6 +149,7 @@ impl LikelihoodFactor {
|
|||||||
mean: VariableId,
|
mean: VariableId,
|
||||||
value: VariableId,
|
value: VariableId,
|
||||||
variance: f64,
|
variance: f64,
|
||||||
|
exp_offset: f64,
|
||||||
) -> LikelihoodFactor {
|
) -> LikelihoodFactor {
|
||||||
variable_arena[mean].attach_factor(id);
|
variable_arena[mean].attach_factor(id);
|
||||||
variable_arena[value].attach_factor(id);
|
variable_arena[value].attach_factor(id);
|
||||||
@@ -157,6 +159,7 @@ impl LikelihoodFactor {
|
|||||||
mean,
|
mean,
|
||||||
value,
|
value,
|
||||||
variance,
|
variance,
|
||||||
|
exp_offset,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +171,10 @@ impl LikelihoodFactor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let a = 1.0 / (1.0 + self.variance * (x.pi() - fx.pi()));
|
let a = 1.0 / (1.0 + self.variance * (x.pi() - fx.pi()));
|
||||||
let gaussian = Gaussian::from_pi_tau(a * (x.pi() - fx.pi()), a * (x.tau() - fx.tau()));
|
let gaussian = Gaussian::from_pi_tau(
|
||||||
|
a * (x.pi() - fx.pi()) + self.exp_offset,
|
||||||
|
a * (x.tau() - fx.tau())
|
||||||
|
);
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"Likelihood::up var={:?}, value={:?}",
|
"Likelihood::up var={:?}, value={:?}",
|
||||||
|
|||||||
27
src/lib.rs
27
src/lib.rs
@@ -39,6 +39,7 @@ pub const DELTA: f64 = 0.0001;
|
|||||||
pub trait Rateable {
|
pub trait Rateable {
|
||||||
fn mu(&self) -> f64;
|
fn mu(&self) -> f64;
|
||||||
fn sigma(&self) -> f64;
|
fn sigma(&self) -> f64;
|
||||||
|
fn experience(&self) -> usize;
|
||||||
|
|
||||||
fn skill(&self) -> f64 {
|
fn skill(&self) -> f64 {
|
||||||
self.mu() - 3.0 * self.sigma()
|
self.mu() - 3.0 * self.sigma()
|
||||||
@@ -54,11 +55,12 @@ pub trait RateableMut {
|
|||||||
pub struct Rating {
|
pub struct Rating {
|
||||||
pub mu: f64,
|
pub mu: f64,
|
||||||
pub sigma: f64,
|
pub sigma: f64,
|
||||||
|
pub experience: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Rating {
|
impl Rating {
|
||||||
pub fn new(mu: f64, sigma: f64) -> Rating {
|
pub fn new(mu: f64, sigma: f64) -> Rating {
|
||||||
Rating { mu, sigma }
|
Rating { mu, sigma, experience: 0 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,6 +72,10 @@ impl Rateable for Rating {
|
|||||||
fn sigma(&self) -> f64 {
|
fn sigma(&self) -> f64 {
|
||||||
self.sigma
|
self.sigma
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn experience(&self) -> usize {
|
||||||
|
self.experience
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RateableMut for Rating {
|
impl RateableMut for Rating {
|
||||||
@@ -96,7 +102,7 @@ pub struct TrueSkill {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TrueSkill {
|
impl TrueSkill {
|
||||||
pub fn rate<R>(&self, ratings: &[(R, u16)], ranks: &[u16], min_delta: f64) -> Vec<Rating>
|
pub fn rate<R>(&self, ratings: &[(R, u16)], ranks: &[u16], min_delta: f64, experience_map: &[f64]) -> Vec<Rating>
|
||||||
where
|
where
|
||||||
R: Rateable,
|
R: Rateable,
|
||||||
{
|
{
|
||||||
@@ -145,11 +151,23 @@ impl TrueSkill {
|
|||||||
|
|
||||||
let perf_layer = rating_vars
|
let perf_layer = rating_vars
|
||||||
.iter()
|
.iter()
|
||||||
|
.zip(ratings.iter())
|
||||||
.zip(perf_vars.iter().map(|(variable, _)| variable))
|
.zip(perf_vars.iter().map(|(variable, _)| variable))
|
||||||
.map(|(rating_var, perf)| {
|
.map(|((rating_var, (rating, _)), perf)| {
|
||||||
factor_id += 1;
|
factor_id += 1;
|
||||||
|
|
||||||
LikelihoodFactor::new(&mut variable_arena, factor_id, *rating_var, *perf, beta_sqr)
|
let experience = if rating.experience() < experience_map.len() {
|
||||||
|
experience_map[rating.experience()]
|
||||||
|
} else {
|
||||||
|
0.0
|
||||||
|
};
|
||||||
|
|
||||||
|
LikelihoodFactor::new(&mut variable_arena,
|
||||||
|
factor_id,
|
||||||
|
*rating_var,
|
||||||
|
*perf,
|
||||||
|
beta_sqr,
|
||||||
|
experience)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
@@ -265,6 +283,7 @@ impl TrueSkill {
|
|||||||
.map(|value| Rating {
|
.map(|value| Rating {
|
||||||
mu: value.mu(),
|
mu: value.mu(),
|
||||||
sigma: value.sigma(),
|
sigma: value.sigma(),
|
||||||
|
experience: 0,
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user