diff --git a/Exercise sheet 4/exercise_sheet_04.ipynb b/Exercise sheet 4/exercise_sheet_04.ipynb index 9df15ea..d427e97 100644 --- a/Exercise sheet 4/exercise_sheet_04.ipynb +++ b/Exercise sheet 4/exercise_sheet_04.ipynb @@ -916,11 +916,35 @@ "def remains_valid_after_move(x,i,next_position,L):\n", " '''Returns True if replacing x[i] by next_position would yield a valid configuration,\n", " otherwise False.'''\n", - " # We need to create a copy as not to alter the original x\n", - " # outside this function.\n", - " copy_x = np.copy(x)\n", - " copy_x[i] = next_position\n", - " return disk_config_valid(copy_x, L)" + " # We need to ensure that x is not changed after this function,\n", + " # as alterations done on x will affect x outside the function.\n", + " \n", + " #current_position = np.copy(x[i])\n", + " current_position = x[i].copy()\n", + " #print(type(current_position))\n", + " x[i] = next_position\n", + " ret = disk_config_valid(x, L)\n", + " x[i] = current_position\n", + " return ret\n", + " \n", + " # An alternative approach was to fully copy x, but that turned\n", + " # out to be a lot slower:\n", + " #copy_x = np.copy(x)\n", + " #copy_x[i] = next_position\n", + " #return disk_config_valid(copy_x, L)\n", + " \n", + " # This was tested using the following code.\n", + " #\n", + " # L = 11.3\n", + " # N = 20\n", + " # delta = .3\n", + " # x = generate_initial_positions(N, L)\n", + " # %timeit [MH_disk_move(x, L, delta) for _ in range(1000)]\n", + " #\n", + " # For the full copy method:\n", + " # 2.05 s ± 46.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", + " # For the current method, changing x[i] back:\n", + " # 138 ms ± 12.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)" ] }, {