/**
 * Initialize the t-SNE algorithm and start simulation.
*/
function starttSNE () {
  springForce = false;
  simulation.stop();
  p1 = performance.now();

  simulation
    .alphaDecay(1 - Math.pow(0.001, 1 / ITERATIONS))
    .force(forceName, d3.tSNE()
      // Set the parameter for the algorithm (optional).
      .perplexity(PERPLEXITY)
      .learningRate(LEARNING_RATE)
      // The distance function that will be used to calculate distances
      //  between nodes.
      .distance(function (s, t) {
        return distanceFunction(s, t, props, norm);
      }));
  // Restart the simulation.
  console.log(simulation.force(forceName).perplexity(), simulation.force(forceName).learningRate());
  simulation.alpha(1).restart();
}

/**
 * Initialize the Barnes-Hut algorithm and start simulation.
*/
function startBarnesHutSimulation () {
  console.log('startBarnesHutSimulation');
  alreadyRanIterations = 0;
  manualStop = false;
  springForce = false;
  p1 = performance.now();

  simulation.alphaDecay(1 - Math.pow(0.001, 1 / ITERATIONS))
    .on('tick', ticked)
    .on('end', ended)
    .force(forceName, d3.forceBarnesHut()
    // The distance function that will be used to calculate distances
    //  between nodes.
      .distance(function (s, t) { return distanceFunction(s, t, props, norm); }));
  // Restart the simulation.
  simulation.alpha(1).restart();
}
