Skip to content

Commit fb85ca4

Browse files
committed
Added randomize_coord_rw_mix. Works pretty well for balanced and find_coords tests.
1 parent 9f457c7 commit fb85ca4

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

research/network_coords/net_coords/src/landmarks/randomize_coord.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,45 @@ pub fn randomize_coord_rw_directional<R: Rng>(upper_constraints: &Vec<u64>,
434434
cur_coord
435435
}
436436

437+
/// Generate a random coordinate using a mix between a random walk
438+
/// coordinate and a random landmark coordinate
439+
pub fn randomize_coord_rw_mix<R: Rng>(upper_constraints: &Vec<u64>,
440+
landmarks: &Vec<usize>, coords: &Vec<Vec<u64>>,
441+
mut rng: &mut R) -> Vec<u64> {
442+
443+
/*
444+
let mut rw_coord = randomize_coord_rw_directional(upper_constraints,
445+
landmarks, coords, rng);
446+
*/
447+
448+
let rlcoord = randomize_coord_landmarks_coords(landmarks, coords, rng);
449+
450+
let mut rw_coord = vec![0; upper_constraints.len()];
451+
452+
let entry_range: Range<usize> = Range::new(0, landmarks.len());
453+
let diag_range: Range<u64> = Range::new(0, 0x1000);
454+
455+
// Get a random landmark:
456+
let rlandmark_coord1 = coords[landmarks[entry_range.ind_sample(rng)]].clone();
457+
let rlandmark_coord2 = coords[landmarks[entry_range.ind_sample(rng)]].clone();
458+
let rlandmark_coord3 = coords[landmarks[entry_range.ind_sample(rng)]].clone();
459+
460+
let diag_val1 = diag_range.ind_sample(rng);
461+
let diag_val2 = diag_range.ind_sample(rng);
462+
let diag_val3 = diag_range.ind_sample(rng);
463+
464+
// Go to the middle between rw coordinate and landmark coordinate.
465+
for i in 0 .. rw_coord.len() {
466+
rw_coord[i] = (5*(rlandmark_coord1[i] + diag_val1) +
467+
(rlandmark_coord2[i] + diag_val2) +
468+
(rlandmark_coord3[i] + diag_val3)) / 7;
469+
// rw_coord[i] = (3*rw_coord[i] + rlcoord[i]) / 4
470+
}
471+
472+
rw_coord
473+
474+
}
475+
437476
//////////////////////////////////////////
438477

439478
/// Slightly change a coordinate (randomly), leaving all entries >= 0

0 commit comments

Comments
 (0)