code: func Simulate(clients []*Client, truth [][]time.Duration, cycles int) {
  	rand.Seed(1)
  
  	nodes := len(clients)
  	for cycle := 0; cycle < cycles; cycle++ {
  		for i, _ := range clients {
  			if j := rand.Intn(nodes); j != i {
  				c := clients[j].GetCoordinate()
  				rtt := truth[i][j]
  				node := fmt.Sprintf("node_%d", j)
  				clients[i].Update(node, c, rtt)
  			}
  		}
  	}
  }
docs: // Simulate runs the given number of cycles using the given list of clients and
  // truth matrix. On each cycle, each client will pick a random node and observe
  // the truth RTT, updating its coordinate estimate. The RNG is re-seeded for
  // each simulation run to get deterministic results (for this algorithm and the
  // underlying algorithm which will use random numbers for position vectors when
  // starting out with everything at the origin).