private void initGraph() {
		Node firstNode = new SimpleNode(0, Node.Types.SIMPLE, defaultResistance);
		nodes.add(firstNode);

		for(int i = 1; i < kNearestNeighbors / 2; i++) {
			Node nextNode = new SimpleNode(i, Node.Types.SIMPLE, defaultResistance);
			nextNode.addNeighbor(nodes.get(i-1), delaysDistribution.getNextValue(), false);
			nodes.add(nextNode);
			edges.add(new Edge(i-1, i));
			if (i > 1) {
				for (int j = i-2; j >= 0; j--) {
					nextNode.addNeighbor(nodes.get(j), delaysDistribution.getNextValue(), false);
					edges.add(new Edge(i, j));
				}
			}
		}

		for (int i = kNearestNeighbors / 2; i < initialNodesN; i++) {
			Node nextNode = new SimpleNode(i, Node.Types.SIMPLE, defaultResistance);
			nodes.add(nextNode);
			nextNode.addNeighbor(nodes.get(i-1), delaysDistribution.getNextValue(), false);
			edges.add(new Edge(i, i-1));
			for (int j = i - kNearestNeighbors / 2; j < i; j++) {
				nextNode.addNeighbor(nodes.get(j), delaysDistribution.getNextValue(), false);
				edges.add(new Edge(j, i));
			}

		}

		for (int i = 0; i < kNearestNeighbors / 2; i++) {
			for(int j = nodes.size() - 1; j > nodes.size() -1 + i - kNearestNeighbors / 2; j--) {
				nodes.get(i).addNeighbor(nodes.get(j), delaysDistribution.getNextValue(), false);
				edges.add(new Edge(i, j));
			}
			
		}
	}