rank dampening
This commit is contained in:
parent
e83d63eb85
commit
a2244ed58c
|
@ -2,6 +2,7 @@ use crate::graph::{EdgeMatrix, NodeVector, Node};
|
||||||
|
|
||||||
pub struct MyModel {
|
pub struct MyModel {
|
||||||
edges: EdgeMatrix,
|
edges: EdgeMatrix,
|
||||||
|
ranks: Vec<f32>,
|
||||||
size: usize,
|
size: usize,
|
||||||
opt_dist: f32,
|
opt_dist: f32,
|
||||||
c: f32,
|
c: f32,
|
||||||
|
@ -13,7 +14,22 @@ impl MyModel {
|
||||||
pub fn new(edges: EdgeMatrix, size: usize, iterations: usize) -> MyModel {
|
pub fn new(edges: EdgeMatrix, size: usize, iterations: usize) -> MyModel {
|
||||||
let opt_dist = 1.0 / (size as f32).sqrt();
|
let opt_dist = 1.0 / (size as f32).sqrt();
|
||||||
let c = 0.1;
|
let c = 0.1;
|
||||||
MyModel{ edges, size, opt_dist, c: c , dc: c / ((iterations + 1) as f32) }
|
let mut ranks = vec![0.0; size];
|
||||||
|
{
|
||||||
|
let edges = edges.read().unwrap();
|
||||||
|
for i in 0..size {
|
||||||
|
ranks[i] = edges[i].iter().map(|e| e.weight).sum();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MyModel{
|
||||||
|
edges,
|
||||||
|
ranks,
|
||||||
|
size,
|
||||||
|
opt_dist,
|
||||||
|
c: c ,
|
||||||
|
dc: c / ((iterations + 1) as f32)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prepare(& mut self, _nodes: &NodeVector) {
|
pub fn prepare(& mut self, _nodes: &NodeVector) {
|
||||||
|
@ -55,7 +71,7 @@ impl MyModel {
|
||||||
node_x -= f_rep_x;
|
node_x -= f_rep_x;
|
||||||
node_y -= f_rep_y;
|
node_y -= f_rep_y;
|
||||||
} else {
|
} else {
|
||||||
let f_spring = self.c * 0.5 * (dist - self.opt_dist);
|
let f_spring = self.c * 0.5 * (dist - self.opt_dist) / self.ranks[i_node];
|
||||||
let f_spring_x = f_spring * unit_x;
|
let f_spring_x = f_spring * unit_x;
|
||||||
let f_spring_y = f_spring * unit_y;
|
let f_spring_y = f_spring * unit_y;
|
||||||
node_x += f_spring_x;
|
node_x += f_spring_x;
|
||||||
|
|
Loading…
Reference in New Issue