diff --git a/examples/generate_position_trajectory.py b/examples/generate_position_trajectory.py index 22da494..8f0817c 100644 --- a/examples/generate_position_trajectory.py +++ b/examples/generate_position_trajectory.py @@ -17,12 +17,12 @@ boundary_constraints = {"position": {"initial": [0, 0, 0], "final": [2.5, 0.25, 0.5]}} # Calculate the translation trajectory given the invariants data -invariants, trajectory, mf, progress_values = generate_trajectory_translation(invariant_model, boundary_constraints) +invariants, trajectory, mf, progress_values = generate_trajectory_translation(invariant_model, boundary_constraints,len(invariant_model)) # Plotting results plotters.plot_trajectory_and_bounds(boundary_constraints, trajectory) # generated trajectory and boundary constraints -plotters.plot_moving_frames(trajectory, mf) # calculated moving frames along trajectory -plotters.animate_moving_frames(trajectory, mf) # animated moving frames along trajectory +plotters.plot_moving_frames(trajectory, mf.T) # calculated moving frames along trajectory +plotters.animate_moving_frames(trajectory, mf.T) # animated moving frames along trajectory # Plot the invariant model and the calculated invariants plotters.compare_invariants(invariants, invariant_model[:,1:], progress_values, invariant_model[:,0]) \ No newline at end of file diff --git a/examples/trajectory_generation/online_generation.py b/examples/trajectory_generation/online_generation.py index 61a2f09..2a7f52b 100644 --- a/examples/trajectory_generation/online_generation.py +++ b/examples/trajectory_generation/online_generation.py @@ -9,6 +9,8 @@ import invariants_py.spline_handler as spline_handler import invariants_py.plotting_functions.plotters as plotters +solver = 'fatrop' + """Input data""" data_location = dh.find_data_path("sine_wave.txt") @@ -74,12 +76,38 @@ R_FS_start = movingframes[current_index] R_FS_end = movingframes[-1] +boundary_constraints = { + "position": { + "initial": p_obj_start, + "final": p_obj_end + }, + "moving-frame": { + "translational": { + "initial": R_FS_start, + "final": R_FS_end + } + }, +} +initial_values = { + "trajectory": { + "position": calculate_trajectory + }, + "moving-frame": { + "translational": movingframes, + }, + "invariants": { + "translational": model_invariants, + } +} + +weights = {} +weights['w_invars'] = np.array([5 * 10 ** 1, 1.0, 1.0]) # specify optimization problem symbolically -FS_online_generation_problem = OCP_gen_pos(N=number_samples,w_invars = 10**2*np.array([10**1, 1.0, 1.0])) +FS_online_generation_problem = OCP_gen_pos(boundary_constraints,number_samples,solver=solver) # Solve -new_invars, new_trajectory, new_movingframes = FS_online_generation_problem.generate_trajectory(U_demo = model_invariants, p_obj_init = calculate_trajectory, R_t_init = movingframes, R_t_start = R_FS_start, R_t_end = R_FS_end, p_obj_start = p_obj_start, p_obj_end = p_obj_end, step_size = new_stepsize) +new_invars, new_trajectory, new_movingframes = FS_online_generation_problem.generate_trajectory(model_invariants,boundary_constraints,new_stepsize,weights,initial_values=initial_values) fig = plt.figure(figsize=(14,8)) @@ -112,10 +140,35 @@ #%% Visualization -window_len = 20 +window_len = 40 + +boundary_constraints = { + "position": { + "initial": calculate_trajectory[current_index], + "final": calculate_trajectory[current_index] # will be updated later + }, + "moving-frame": { + "translational": { + "initial": movingframes[current_index], + "final": movingframes[-1] + }, + }, +} + +initial_values = { + "trajectory": { + "position": calculate_trajectory, + }, + "moving-frame": { + "translational": movingframes, + }, + "invariants": { + "translational": model_invariants, + } +} # specify optimization problem symbolically -FS_online_generation_problem = OCP_gen_pos(N=window_len,w_invars = 10**1*np.array([10**1, 1.0, 1.0])) +FS_online_generation_problem = OCP_gen_pos(boundary_constraints, number_samples, solver = solver) @@ -139,14 +192,14 @@ # Boundary constraints current_index = round( (current_progress - old_progress) * len(calculate_trajectory)) #print(current_index) - p_obj_start = calculate_trajectory[current_index] - p_obj_end = trajectory[-1] - current_progress*np.array([-0.2, 0.0, 0.0]) - R_FS_start = movingframes[current_index] - R_FS_end = movingframes[-1] + boundary_constraints["position"]["initial"] = calculate_trajectory[current_index] + boundary_constraints["position"]["final"] = trajectory[-1] - current_progress*np.array([-0.2, 0.0, 0.0]) + boundary_constraints["moving-frame"]["translational"]["initial"] = movingframes[current_index] + boundary_constraints["moving-frame"]["translational"]["final"] = movingframes[-1] # Calculate remaining trajectory - new_invars, calculate_trajectory, movingframes = FS_online_generation_problem.generate_trajectory(U_demo = model_invariants, p_obj_init = calculate_trajectory, R_t_init = movingframes, R_t_start = R_FS_start, R_t_end = R_FS_end, p_obj_start = p_obj_start, p_obj_end = p_obj_end, step_size = new_stepsize) - + new_invars, calculate_trajectory, movingframes = FS_online_generation_problem.generate_trajectory(model_invariants,boundary_constraints,new_stepsize,weights,initial_values) + movingframes = movingframes.T # Visualization #clear_output(wait=True) diff --git a/invariants_py/generate_trajectory/opti_generate_position_traj_from_vector_invars.py b/invariants_py/generate_trajectory/opti_generate_position_traj_from_vector_invars.py index 3bbff6b..7384814 100644 --- a/invariants_py/generate_trajectory/opti_generate_position_traj_from_vector_invars.py +++ b/invariants_py/generate_trajectory/opti_generate_position_traj_from_vector_invars.py @@ -212,7 +212,7 @@ def generate_trajectory(self, invariant_model, boundary_constraints, step_size, if i!= N-1: invars[i,:] = self.solution[i].T p_obj_sol[i,:] = self.solution[N-1+i].T - R_t_sol = self.solution[2*N-1+i] + R_t_sol[:,:,i] = self.solution[2*N-1+i] # Extract the solved variables invariants = np.array(invars) @@ -268,46 +268,46 @@ def generate_trajectory(self, invariant_model, boundary_constraints, step_size, # return invariants, calculated_trajectory, calculated_movingframe - def generate_trajectory_global(self,invars_demo,initial_values,boundary_constraints,step_size): + # def generate_trajectory_global(self,invars_demo,initial_values,boundary_constraints,step_size): - N = self.N + # N = self.N - # Initialize states - for k in range(N): - self.opti.set_initial(self.R_t[k], initial_values["moving-frame"]["translational"][k]) - self.opti.set_initial(self.p_obj[k], initial_values["trajectory"]["position"][k]) + # # Initialize states + # for k in range(N): + # self.opti.set_initial(self.R_t[k], initial_values["moving-frame"]["translational"][k]) + # self.opti.set_initial(self.p_obj[k], initial_values["trajectory"]["position"][k]) - # Initialize controls - for k in range(N-1): - self.opti.set_initial(self.invars[:,k], invars_demo[k,:]) - - # Set values boundary constraints - #self.opti.set_value(self.R_t_start,boundary_constraints["moving-frame"]["translational"]["initial"]) - #self.opti.set_value(self.R_t_end,boundary_constraints["moving-frame"]["translational"]["final"]) - self.opti.set_value(self.p_obj_start,boundary_constraints["position"]["initial"]) - self.opti.set_value(self.p_obj_end,boundary_constraints["position"]["final"]) + # # Initialize controls + # for k in range(N-1): + # self.opti.set_initial(self.invars[:,k], invars_demo[k,:]) + + # # Set values boundary constraints + # #self.opti.set_value(self.R_t_start,boundary_constraints["moving-frame"]["translational"]["initial"]) + # #self.opti.set_value(self.R_t_end,boundary_constraints["moving-frame"]["translational"]["final"]) + # self.opti.set_value(self.p_obj_start,boundary_constraints["position"]["initial"]) + # self.opti.set_value(self.p_obj_end,boundary_constraints["position"]["final"]) - # Set values parameters - self.opti.set_value(self.h,step_size) - for k in range(N-1): - self.opti.set_value(self.invars_demo[:,k], invars_demo[k,:]) + # # Set values parameters + # self.opti.set_value(self.h,step_size) + # for k in range(N-1): + # self.opti.set_value(self.invars_demo[:,k], invars_demo[k,:]) - # Solve the NLP - sol = self.opti.solve_limited() - self.sol = sol + # # Solve the NLP + # sol = self.opti.solve_limited() + # self.sol = sol - # Extract the solved variables - invariants = sol.value(self.invars).T - invariants = np.vstack((invariants,[invariants[-1,:]])) - calculated_trajectory = np.array([sol.value(i) for i in self.p_obj]) - calculated_movingframe = np.array([sol.value(i) for i in self.R_t]) + # # Extract the solved variables + # invariants = sol.value(self.invars).T + # invariants = np.vstack((invariants,[invariants[-1,:]])) + # calculated_trajectory = np.array([sol.value(i) for i in self.p_obj]) + # calculated_movingframe = np.array([sol.value(i) for i in self.R_t]) - return invariants, calculated_trajectory, calculated_movingframe + # return invariants, calculated_trajectory, calculated_movingframe def generate_trajectory_translation(invariant_model, boundary_constraints, N=100): # Specify optimization problem symbolically - OCP = OCP_gen_pos(N = N) + OCP = OCP_gen_pos(boundary_constraints,N = N) # Initial values initial_values, initial_values_dict = generate_initvals_from_constraints_opti(boundary_constraints, N) @@ -318,7 +318,7 @@ def generate_trajectory_translation(invariant_model, boundary_constraints, N=100 model_invariants,progress_step = sh.interpolate_invariants(spline_invariant_model, progress_values) # Calculate remaining trajectory - invariants, trajectory, mf = OCP.generate_trajectory_global(model_invariants,initial_values_dict,boundary_constraints,progress_step) + invariants, trajectory, mf = OCP.generate_trajectory(model_invariants,boundary_constraints,progress_step,initial_values=initial_values_dict) return invariants, trajectory, mf, progress_values diff --git a/invariants_py/ocp_initialization.py b/invariants_py/ocp_initialization.py index cc458dc..7db7e11 100644 --- a/invariants_py/ocp_initialization.py +++ b/invariants_py/ocp_initialization.py @@ -126,7 +126,7 @@ def generate_initvals_from_constraints_opti(boundary_constraints,N, skip = {}, q "translational": initial_movingframes }, "invariants": { - "translational": initial_invariants + "translational": initial_invariants.T } } diff --git a/notebooks/online_trajectory_generation.ipynb b/notebooks/online_trajectory_generation.ipynb index 9ed03e1..9d3a1de 100644 --- a/notebooks/online_trajectory_generation.ipynb +++ b/notebooks/online_trajectory_generation.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "e1a22b02", "metadata": { "execution": { @@ -23,20 +23,7 @@ "shell.execute_reply": "2024-04-25T14:26:43.589301Z" } }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import numpy as np\n", "import invariants_py.data_handler as dh\n", @@ -60,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 26, "id": "7aaa65fe", "metadata": { "execution": { @@ -94,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "84d5e750", "metadata": { "execution": { @@ -104,18 +91,7 @@ "shell.execute_reply": "2024-04-25T14:26:43.644421Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Plot trajectory\n", "fig = plt.figure(figsize=(8,8))\n", @@ -140,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "b645a753", "metadata": { "execution": { @@ -150,82 +126,7 @@ "shell.execute_reply": "2024-04-25T14:26:44.676926Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "******************************************************************************\n", - "This program contains Ipopt, a library for large-scale nonlinear optimization.\n", - " Ipopt is released as open source code under the Eclipse Public License (EPL).\n", - " For more information visit https://github.com/coin-or/Ipopt\n", - "******************************************************************************\n", - "\n", - "This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.\n", - "\n", - "Number of nonzeros in equality constraint Jacobian...: 11805\n", - "Number of nonzeros in inequality constraint Jacobian.: 0\n", - "Number of nonzeros in Lagrangian Hessian.............: 5907\n", - "\n", - "Total number of variables............................: 2277\n", - " variables with only lower bounds: 0\n", - " variables with lower and upper bounds: 0\n", - " variables with only upper bounds: 0\n", - "Total number of equality constraints.................: 1818\n", - "Total number of inequality constraints...............: 0\n", - " inequality constraints with only lower bounds: 0\n", - " inequality constraints with lower and upper bounds: 0\n", - " inequality constraints with only upper bounds: 0\n", - "\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 0 3.0200000e-28 6.37e-01 1.99e-18 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", - " 1 3.0963620e-02 3.39e+00 2.03e-01 -1.7 1.01e+01 -4.0 1.00e+00 1.00e+00h 1\n", - " 2 1.6079867e-01 1.49e+00 3.06e-01 -1.7 3.64e+00 -2.7 1.00e+00 1.00e+00h 1\n", - " 3 2.2061526e-01 1.23e+00 2.32e-01 -1.7 6.79e+00 -3.1 1.00e+00 2.50e-01h 3\n", - " 4 3.3602133e-01 2.15e-01 1.44e-01 -1.7 1.84e+00 -2.7 1.00e+00 1.00e+00h 1\n", - " 5 1.2998709e-01 2.30e-01 2.39e-01 -1.7 2.61e+00 -3.2 1.00e+00 1.00e+00h 1\n", - " 6 3.8716788e-02 6.03e-02 7.64e-02 -1.7 1.68e+00 -3.7 1.00e+00 1.00e+00h 1\n", - " 7 2.1199708e-02 4.98e-02 1.40e-02 -2.5 1.57e+00 -4.2 1.00e+00 1.00e+00h 1\n", - " 8 1.5029483e-02 2.09e-02 3.47e-03 -2.5 2.27e+00 -4.6 1.00e+00 1.00e+00h 1\n", - " 9 1.1744466e-02 1.08e-02 5.50e-04 -3.8 2.51e+00 -5.1 1.00e+00 1.00e+00h 1\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 10 1.0604116e-02 3.03e-03 1.38e-04 -3.8 1.97e+00 -5.6 1.00e+00 1.00e+00h 1\n", - " 11 1.0278333e-02 4.92e-03 1.01e-04 -3.8 4.94e+00 - 1.00e+00 1.00e+00H 1\n", - " 12 1.0337613e-02 1.29e-03 1.23e-05 -3.8 1.83e+00 - 1.00e+00 1.00e+00h 1\n", - " 13 1.0225027e-02 3.89e-05 1.78e-07 -5.0 2.94e-01 - 1.00e+00 1.00e+00h 1\n", - "\n", - "Number of Iterations....: 13\n", - "\n", - " (scaled) (unscaled)\n", - "Objective...............: 1.0225027415757572e-02 1.0225027415757572e-02\n", - "Dual infeasibility......: 1.7788795360633594e-07 1.7788795360633594e-07\n", - "Constraint violation....: 3.8884893458934755e-05 3.8884893458934755e-05\n", - "Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Complementarity.........: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Overall NLP error.......: 3.8884893458934755e-05 3.8884893458934755e-05\n", - "\n", - "\n", - "Number of objective function evaluations = 18\n", - "Number of objective gradient evaluations = 14\n", - "Number of equality constraint evaluations = 18\n", - "Number of inequality constraint evaluations = 0\n", - "Number of equality constraint Jacobian evaluations = 14\n", - "Number of inequality constraint Jacobian evaluations = 0\n", - "Number of Lagrangian Hessian evaluations = 13\n", - "Total seconds in IPOPT = 0.135\n", - "\n", - "EXIT: Optimal Solution Found.\n", - " solver : t_proc (avg) t_wall (avg) n_eval\n", - " nlp_f | 544.00us ( 30.22us) 540.74us ( 30.04us) 18\n", - " nlp_g | 2.19ms (121.50us) 2.09ms (116.23us) 18\n", - " nlp_grad_f | 648.00us ( 43.20us) 643.69us ( 42.91us) 15\n", - " nlp_hess_l | 8.77ms (674.77us) 8.79ms (676.10us) 13\n", - " nlp_jac_g | 4.13ms (275.13us) 4.14ms (275.86us) 15\n", - " total | 136.39ms (136.39ms) 136.35ms (136.35ms) 1\n" - ] - } - ], + "outputs": [], "source": [ "# specify optimization problem symbolically\n", "FS_calculation_problem = OCP_calc_pos(window_len=nb_samples, bool_unsigned_invariants = False, \n", @@ -248,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "e9451f8c", "metadata": { "execution": { @@ -258,18 +159,7 @@ "shell.execute_reply": "2024-04-25T14:26:44.741704Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 0, 's [-]')" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Plot trajectory\n", "fig = plt.figure(figsize=(6,6))\n", @@ -294,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "6c809853", "metadata": { "execution": { @@ -304,55 +194,14 @@ "shell.execute_reply": "2024-04-25T14:26:44.750022Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.73548207, -0.74418658, -0.75352654, -0.7641319 , -0.77642628,\n", - " -0.79058614, -0.80652644, -0.8239157 , -0.84222057, -0.86077599,\n", - " -0.87886982, -0.89582805, -0.91108803, -0.92424987, -0.93509938,\n", - " -0.94360064, -0.94986356, -0.95409665, -0.95655521, -0.95749457,\n", - " -0.95713536, -0.95564383, -0.95312469, -0.94962137, -0.94512066,\n", - " -0.93956188, -0.93285074, -0.92487801, -0.91554191, -0.90477233,\n", - " -0.8925502 , -0.87891634, -0.86397105, -0.84786824, -0.83080728,\n", - " -0.81302403, -0.79478132, -0.77635832, -0.75803685, -0.74008771,\n", - " -0.72276034, -0.70627214, -0.69079162, -0.67641737, -0.66316372,\n", - " -0.65095503, -0.63962479, -0.62892186, -0.61852472, -0.60805964,\n", - " -0.59711704, -0.58526521, -0.57206655, -0.55710199, -0.54000027,\n", - " -0.52046347, -0.49828643, -0.47337417, -0.44576091, -0.41562852,\n", - " -0.38331937, -0.34934228, -0.31437197, -0.27923861, -0.24490183,\n", - " -0.21240693, -0.18282607, -0.15718752, -0.13639648, -0.12115707,\n", - " -0.11190703, -0.10877618, -0.11157506, -0.11981403, -0.13275215,\n", - " -0.1494736 , -0.16898065, -0.19028706, -0.21249832, -0.23486878,\n", - " -0.25683456, -0.2780264 , -0.2982657 , -0.31754238, -0.3359746 ,\n", - " -0.35375586, -0.3710947 , -0.38815333, -0.40499958, -0.42158299,\n", - " -0.4377371 , -0.45320613, -0.46768747, -0.48087915, -0.49252106,\n", - " -0.50242194, -0.51047178, -0.51664265, -0.52098105, -0.5235946 ,\n", - " -0.52463607, -0.52428726, -0.5227452 , -0.52021194, -0.51688818,\n", - " -0.51296794, -0.50862957, -0.50402288, -0.49925594, -0.4943843 ,\n", - " -0.48940594, -0.48426451, -0.47885921, -0.47305754, -0.46670877,\n", - " -0.45965559, -0.4517427 , -0.44282601, -0.43278665, -0.42154684,\n", - " -0.40908036, -0.39541582, -0.38063887, -0.36489606, -0.34839232,\n", - " -0.33137554, -0.31411046, -0.29685223, -0.27982691, -0.26321398,\n", - " -0.24713116, -0.23162498, -0.21666924, -0.20217372, -0.18800322,\n", - " -0.17400365, -0.16003244, -0.14598845, -0.13183576, -0.11761921,\n", - " -0.10346823, -0.08958818, -0.07623891, -0.06370064, -0.05223442,\n", - " -0.04204456, -0.03324674, -0.02584747, -0.01973647, -0.01469169,\n", - " -0.01039894, -0.00648844])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "movingframes[:,0,0]" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "387caaaf", "metadata": { "execution": { @@ -362,18 +211,7 @@ "shell.execute_reply": "2024-04-25T14:26:44.760159Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "'{\"initial_frames\": [-0.7354820707527998, -0.7441865792842562, -0.7535265393482449, -0.7641319042555841, -0.7764262827868026, -0.7905861369433176, -0.8065264382392542, -0.8239157031121543, -0.8422205664582105, -0.8607759889777776, -0.8788698225908399, -0.8958280498089974, -0.9110880312589881, -0.9242498653445215, -0.9350993824612414, -0.9436006426715684, -0.9498635627578491, -0.9540966511611219, -0.956555211689457, -0.9574945745061234, -0.9571353646216326, -0.955643827941104, -0.9531246892185798, -0.9496213650376302, -0.9451206613064747, -0.9395618759506432, -0.9328507416293833, -0.9248780095534326, -0.9155419119944411, -0.9047723326709101, -0.8925501979730056, -0.8789163355088694, -0.8639710529235579, -0.8478682384196513, -0.8308072758187404, -0.8130240286912706, -0.7947813165055523, -0.7763583213359967, -0.7580368473216657, -0.7400877078482362, -0.7227603396939214, -0.7062721447107446, -0.6907916181176871, -0.6764173668623314, -0.6631637239843898, -0.6509550254395495, -0.6396247877605269, -0.6289218610718474, -0.618524723633949, -0.6080596401362062, -0.5971170368199659, -0.5852652098992299, -0.5720665529388995, -0.5571019885391463, -0.5400002693121734, -0.520463465232856, -0.4982864296342042, -0.4733741689164109, -0.4457609121344769, -0.41562852372917075, -0.38331937032547775, -0.3493422795474519, -0.3143719652589165, -0.27923860994983907, -0.24490182591642354, -0.2124069251459941, -0.18282607485894217, -0.15718751873208486, -0.13639647933029692, -0.12115706745650619, -0.11190702508401684, -0.10877617843603907, -0.11157505961683507, -0.11981402660516222, -0.13275214642739938, -0.1494736036618982, -0.16898064580274738, -0.19028705838749038, -0.2124983210721228, -0.2348687766850492, -0.2568345616889065, -0.2780264016753053, -0.29826569686666426, -0.31754238174992333, -0.3359746011278195, -0.3537558585661091, -0.3710946962517176, -0.38815333030745836, -0.40499958420232346, -0.4215829862462827, -0.4377370980493927, -0.45320613072511234, -0.4676874659556289, -0.48087915448165963, -0.4925210606725624, -0.5024219417801719, -0.5104717848644236, -0.5166426528348158, -0.5209810543922079, -0.5235946031071874, -0.5246360650808649, -0.5242872554696243, -0.5227451986195926, -0.5202119363571065, -0.516888180613099, -0.5129679442385883, -0.508629570404077, -0.5040228762173851, -0.49925593700092924, -0.49438430083493, -0.4894059433012666, -0.4842645129843982, -0.47885920612800736, -0.4730575399178019, -0.466708767706754, -0.45965559352674135, -0.4517426999707371, -0.4428260082275361, -0.4327866523802379, -0.42154684252775676, -0.40908035821701927, -0.3954158167917041, -0.38063886625144777, -0.36489606308362976, -0.348392315346648, -0.3313755417642274, -0.31411046007767196, -0.29685222952066836, -0.2798269085591328, -0.2632139786761455, -0.24713116271685126, -0.23162498489838276, -0.21666923660417062, -0.2021737213340847, -0.1880032170378304, -0.1740036461421749, -0.16003244420268076, -0.14598844520407747, -0.13183576081148404, -0.11761921161962355, -0.1034682270638291, -0.08958818017955572, -0.07623890656960261, -0.06370064404187521, -0.05223442398283273, -0.04204455557832571, -0.03324674395744755, -0.02584747022238174, -0.01973646541802382, -0.014691691423411753, -0.010398941838698215, -0.006488438835384177, -0.11169961086543746, -0.11639177785681232, -0.12148840577276328, -0.12735803075024413, -0.1342801564904132, -0.14242297085990818, -0.1518317637997604, -0.16242837597940363, -0.17402210147305808, -0.18633208393442785, -0.19901831512999157, -0.2117171591331918, -0.22407718730773504, -0.23579135361244144, -0.24662162398137563, -0.2564121871992522, -0.2650906282551171, -0.27265901538106285, -0.27917746275700245, -0.2847435699410223, -0.289471439904815, -0.2934745747570687, -0.2968552054447239, -0.2996991735400641, -0.30207414054658577, -0.3040303360389757, -0.30560400021338174, -0.3068233937319109, -0.3077165139549765, -0.30831913254621895, -0.3086813694418196, -0.30887069043484455, -0.30897039383294533, -0.30907441162905036, -0.3092799688514501, -0.3096795444219874, -0.3103532209617429, -0.3113622246349984, -0.31274439553207983, -0.3145120057296641, -0.31665181256180813, -0.31912747777105704, -0.3218853483587398, -0.32486412798876774, -0.3280067035563887, -0.3312724411733262, -0.3346492673160301, -0.33816347672616864, -0.34188491225115947, -0.3459269215691278, -0.3504419810111676, -0.35561303098224245, -0.36163817761007633, -0.368705976695315, -0.3769635179649262, -0.38648424636806933, -0.39724093498747187, -0.4090863632385158, -0.42174389708267895, -0.43481238732166144, -0.4477891087617065, -0.4601100509434782, -0.47120370929138483, -0.48055404003954727, -0.48776683588054154, -0.4926307846548708, -0.49516348887666406, -0.4956345185105137, -0.49455976843847177, -0.49266421944571637, -0.4908153706026526, -0.489935239170656, -0.4909028818611074, -0.4944604556178652, -0.5011361793267783, -0.5111974416545025, -0.5246415850840143, -0.5412230433796935, -0.5605086272340978, -0.5819482051028664, -0.6049497911919898, -0.628951579166722, -0.6534830213281293, -0.6782007535262816, -0.7028859039834137, -0.7273997119460512, -0.751601934145371, -0.7752488398340825, -0.7979082471064275, -0.8189263378482355, -0.8374605096539032, -0.8525734904482588, -0.8633631304426729, -0.8690934054469542, -0.8692948508753868, -0.8638174345527937, -0.8528364228903346, -0.8368197044153175, -0.8164670328709606, -0.7926339185023503, -0.7662518946192896, -0.7382570861876646, -0.7095347568289304, -0.6808829074806102, -0.6529929062387531, -0.6264299918793854, -0.6016028036771627, -0.5787358281254216, -0.5578608504990831, -0.5388293663116412, -0.5213484312985479, -0.5050367726620241, -0.4894849461787776, -0.47430448173743, -0.4591616113064116, -0.44379377579914425, -0.42801118670914556, -0.41169607415604986, -0.3948068306047327, -0.3773802155000327, -0.35952199131398316, -0.34138884406217473, -0.323173623292961, -0.3050966525746628, -0.28739272335705673, -0.2702894955861451, -0.2539826559194086, -0.23861886230243667, -0.22428992813496287, -0.21103084841525913, -0.1988204424936791, -0.18758604625318412, -0.17721234916885442, -0.16755466909165204, -0.15845550448563298, -0.14976194180450972, -0.1413423434445908, -0.13310031733558866, -0.12498395529989315, -0.11699027146926964, -0.10916411390131185, -0.10159159468134216, -0.09438803616702694, -0.08768031855124536, -0.08158692577309676, -0.07619917487698531, -0.07156507797358315, -0.06767865578177983, -0.06447571602529661, -0.06183595988993392, -0.05959270349921436, -0.05755156610355034, 0.6682733877153486, 0.6577532132996959, 0.6460946698401642, 0.6323625273824538, 0.6157362007621345, 0.5955579406705245, 0.5713687295476688, 0.5429364094940793, 0.5102752562978942, 0.4736507863756094, 0.4335661042300085, 0.39072749744570506, 0.34598850729151565, 0.3002743139800441, 0.2544935447012117, 0.2094532551879171, 0.16578969240387395, 0.12392212757737113, 0.08403643979606132, 0.04610087145230204, 0.009911105020524499, -0.024851553155473757, -0.05856934832756259, -0.09165003714786417, -0.1244918438863781, -0.15744560175902808, -0.19077678738299866, -0.22463342781360202, -0.2590244494320732, -0.2938136313929588, -0.3287401122961893, -0.36346260553628423, -0.3976070896126754, -0.43080452279002057, -0.4627151012735018, -0.4930422386265152, -0.5215398058566931, -0.5480161491735634, -0.5723387666041367, -0.594435215582142, -0.6142884216025335, -0.6319325698560029, -0.6474554246644983, -0.6610029154253293, -0.6727760687959528, -0.6830214568122777, -0.692020279885816, -0.7000746924535044, -0.7074908825943067, -0.7145622078160602, -0.7215555990248834, -0.7287007127351068, -0.7361783872905695, -0.7441067197139367, -0.7525295926474891, -0.7614142989594294, -0.7706595078542442, -0.7801108921990421, -0.7895815490516489, -0.7988758784795669, -0.8078145202378325, -0.8162555532161987, -0.8241072697424154, -0.8313302339735515, -0.8379282655253703, -0.843929039202729, -0.8493566246690666, -0.854200463576551, -0.8583866362682461, -0.8617569327417525, -0.8640603471150399, -0.8649598236487792, -0.8640547848349984, -0.860917851860571, -0.8551408177225422, -0.8463810058015633, -0.8343987201851706, -0.8190787992319912, -0.8004323069010736, -0.7785785897357042, -0.7537085885144003, -0.726029260841608, -0.6956914736960665, -0.6627150340780403, -0.6269325089064078, -0.5879704302599211, -0.5452855573539589, -0.49826582585837725, -0.4463731520213616, -0.3892896250662362, -0.32703547883598094, -0.2600299789755239, -0.1890837050451866, -0.11532579428169637, -0.04008812016031186, 0.03522045434713438, 0.10922803465503428, 0.18069528592297326, 0.248586973229107, 0.31211327809953615, 0.3707431937000237, 0.4241898473585311, 0.4723755792422079, 0.5153858400110136, 0.5534216808774395, 0.5867728029388692, 0.6158143173963583, 0.6410048260737741, 0.6628726620467966, 0.6819943186242574, 0.6989638279122729, 0.7143542871639086, 0.7286824551326953, 0.7423847255455612, 0.7558044518558104, 0.7691907154092377, 0.7827064469584731, 0.7964358055577307, 0.8103864057712075, 0.824493677146372, 0.8386353995083875, 0.8526529360722297, 0.8663688121462804, 0.8795987801386858, 0.8921661126853153, 0.9039197599345814, 0.9147509464830061, 0.9246005658860803, 0.9334568182189078, 0.9413496105384858, 0.9483433155255245, 0.9545277408583565, 0.9600079615084695, 0.9648933950381605, 0.9692871103498106, 0.9732767521597772, 0.9769278857541003, 0.9802807422439181, 0.9833511344746744, 0.9861351309232987, 0.9886168738905737, 0.9907780249226861, 0.9926069497700846, 0.9941057685447432, 0.9952932645793473, 0.9962032516083844, 0.996879772444616, 0.9973708900341888, 0.9977230820123678, 0.9979775157314424, 0.998168212074827, 0.9983213034096577, 0.6081605076864892, 0.5975767118510735, 0.5858644343818447, 0.5720926165514261, 0.5554538849123566, 0.5353136505063755, 0.5112455754490326, 0.48305763008098584, 0.4508079924440181, 0.41480501453795554, 0.3755883661034437, 0.3338900144527679, 0.2905751356308033, 0.24656534349775658, 0.20275141724850437, 0.1599108623263016, 0.11864220528557698, 0.07932250696662552, 0.04209398468088127, 0.006881584942076257, -0.026561629584295057, -0.058597192659448925, -0.08965178671376675, -0.12018063808339942, -0.1506340121557609, -0.18142091699537768, -0.21287226728218292, -0.24520884921213937, -0.2785181572701764, -0.3127448912896513, -0.34770561010934925, -0.3831251162059714, -0.4186759017388752, -0.4540086993732918, -0.4887716777986739, -0.5226219470233502, -0.5552330665603964, -0.5863019372343018, -0.6155585642600286, -0.6427739280267025, -0.6677634706137867, -0.6903914513376211, -0.7105814712191465, -0.7283291337265382, -0.7437070338966417, -0.7568629234605202, -0.7680160380369043, -0.7774500596630329, -0.785501792302946, -0.792548518415682, -0.7989971694130104, -0.8052742942529246, -0.8118116332197478, -0.8190229068918287, -0.8272750693486025, -0.8368610338385979, -0.8479758028959884, -0.8606939537844948, -0.8749473932874166, -0.8905065181839287, -0.906968726315657, -0.9237558984504813, -0.9401223276336748, -0.9551766991323807, -0.9679214713991957, -0.9773095189471608, -0.9823146052756496, -0.9820101777325273, -0.9756486351953547, -0.9627310500586918, -0.9430580133679182, -0.9167548855914651, -0.8842684781763195, -0.8463363357921925, -0.8039331096271964, -0.7582005933523634, -0.7103691593107971, -0.6616783226981335, -0.6133031696921379, -0.5662921391035545, -0.5215187291777446, -0.47964606459559467, -0.44110158408994327, -0.4060623507519729, -0.37445488512072594, -0.34597320058664455, -0.32011984145933586, -0.2962729745716179, -0.2737696282788923, -0.25198852558838103, -0.23041883469253865, -0.20870218625372305, -0.1866436856669178, -0.16419403360278098, -0.14141210681041846, -0.11842248412838519, -0.09537762796373264, -0.07242654196508175, -0.04969068265311228, -0.027248748867683463, -0.00512942271360954, 0.016685632153355407, 0.038250112412901105, 0.05963604153785406, 0.08091598586668013, 0.10215884376234272, 0.12344326144320109, 0.14487413123547732, 0.16659070055607683, 0.18876617810336818, 0.21159615431123455, 0.2352759625312487, 0.25997545807787387, 0.2858187185943572, 0.31287018591375787, 0.3411285516955407, 0.3705278405883354, 0.4009388588940199, 0.43216798558955144, 0.46395900087778014, 0.4960046000032425, 0.5279654549264863, 0.5594886105667395, 0.5902228665079342, 0.619836165959926, 0.6480357625995998, 0.6745865816115808, 0.6993212696046571, 0.7221407606137361, 0.7430100707796817, 0.7619506867916881, 0.7790299363409714, 0.7943485169434613, 0.8080271777065274, 0.8201939360689954, 0.8309733353741484, 0.8404786028517905, 0.8488075249470801, 0.8560424962100612, 0.8622541130032313, 0.8675073657648196, 0.8718687625355502, 0.8754126049924587, 0.8782247816085058, 0.880402605138167, 0.8820507513308458, 0.8832748628101317, 0.8841747047275442, 0.8848387210149097, 0.8853411492866023, 0.8857417784761779, 0.8860876591681418, 0.3259543834075811, 0.3239986839206932, 0.3217814838095794, 0.31909940513889257, 0.31574529316234623, 0.31151541989619, 0.30621831878089867, 0.29968701823847965, 0.29179429030400766, 0.28246822020127055, 0.27170484951071805, 0.25957455579867095, 0.2462194939735443, 0.2318410272699812, 0.21667864532309644, 0.20098502364212625, 0.18500199632222628, 0.16894129096113278, 0.15297349796680423, 0.13722708086068622, 0.12179723288465884, 0.10676019560836379, 0.09218689218632786, 0.07815373377304619, 0.06475274271149455, 0.05210205374270091, 0.040355289943718974, 0.02970733295563441, 0.020394793295665764, 0.012689709069536365, 0.006883445052118216, 0.003262287700730688, 0.0020821917412520625, 0.00354831082796317, 0.007801598875807191, 0.014912071258073336, 0.024877603938437718, 0.03762679272175682, 0.05302395574607831, 0.07087689618050158, 0.0909472639740062, 0.11296039353907532, 0.13661109420234668, 0.1615658089012045, 0.1874650492111357, 0.21392597813435088, 0.24054301782359838, 0.2668875932284041, 0.29250815088776916, 0.3169295570202176, 0.33965056156698403, 0.36014011593550954, 0.37783591794480065, 0.3921487945293482, 0.40247255159266454, 0.4081962735356242, 0.4087185266558783, 0.4034654639877374, 0.3919148698048829, 0.3736254297052657, 0.34826919856310673, 0.31566661856479994, 0.2758238865169409, 0.22896973206601884, 0.1755859155028381, 0.11642598899670867, 0.05251792181801161, -0.01485412093235285, -0.08419268357126036, -0.15385350199982822, -0.22213009228653766, -0.28734803556038185, -0.34795943215565606, -0.40262873455522863, -0.45030063327181014, -0.49024103321596707, -0.5220472946271824, -0.5456290494822481, -0.5611637752491823, -0.5690339643346236, -0.5697513063758901, -0.5638707845025027, -0.5518986224253511, -0.5342069627419299, -0.5109739400544946, -0.4821642513523565, -0.4475644202683585, -0.40687960433274717, -0.35986955821428673, -0.3064877193649304, -0.24699399954166315, -0.18201473670296084, -0.11253869163686663, -0.03985173322307919, 0.03457010074433032, 0.10917938106134427, 0.1824682561092958, 0.2530645774078109, 0.31980616476634205, 0.3817857591303521, 0.43836758588886304, 0.48917557484368573, 0.5340608057447939, 0.5730568365378328, 0.6063322690783525, 0.6341594750925682, 0.6569018649449893, 0.6750014142031967, 0.6889568938836563, 0.6992974294296537, 0.7065515017389897, 0.7112132360606839, 0.7137148155318743, 0.714410979649523, 0.7135747161935005, 0.7114032497903281, 0.7080317514373593, 0.703546624340034, 0.6979949592242324, 0.6913950506963729, 0.6837525617630543, 0.6750785907213342, 0.6654020856407578, 0.6547757155505413, 0.6432807945406968, 0.6310324649176104, 0.6181819527569713, 0.6049119147542161, 0.5914259380380941, 0.5779374725966309, 0.5646598702072787, 0.5517976006339782, 0.5395388016957872, 0.5280488190205775, 0.5174646044187279, 0.5078901353248281, 0.49939284229325037, 0.4920014182974376, 0.4857056397418052, 0.48045843661209015, 0.47618066210445875, 0.4727684642827162, 0.47010252368067273, 0.4680580583143157, 0.46651381628900407, 0.4653587770897178, 0.4644962653530702, 0.46384550026840077, 0.46334132214427204, 0.46293266584312875, 0.4625797148628435, 0.4622494261661508, 0.7238057530359879, 0.733435176148681, 0.7437874509663497, 0.7555698761214386, 0.7692698612417271, 0.7851099686446297, 0.8030308344765428, 0.8227048236899196, 0.8435807277395371, 0.864955887504728, 0.8860643417880765, 0.9061670096437525, 0.924630827321269, 0.9409863747398048, 0.9549566941886137, 0.966454122620967, 0.97555025634437, 0.9824290214171507, 0.9873333822360544, 0.990515719987424, 0.9921995627060696, 0.9925566751685482, 0.9916977132207413, 0.9896711372743092, 0.9864669265205411, 0.982024721209438, 0.9762468000817294, 0.969015649532285, 0.9602151890053496, 0.9497533449717821, 0.9375796069780701, 0.9236919659046456, 0.9081347402166385, 0.8909917005733886, 0.8723784489873188, 0.8524357486027457, 0.83132427068532, 0.8092198780426446, 0.7863068475311225, 0.762771426312625, 0.7387979431974053, 0.7145636616581656, 0.6902266639211885, 0.6659088237102931, 0.6416838703725951, 0.6175726601493698, 0.593542636039553, 0.5695137953009521, 0.5453725623383481, 0.5209899353502921, 0.4962388388669096, 0.4710095499720771, 0.44522717628828357, 0.4188753425316413, 0.3920218372167899, 0.3648368533354276, 0.33760028048001883, 0.3107004833306099, 0.28462763604822555, 0.2599601204582035, 0.2373415261558035, 0.21745042631615774, 0.2009676607204554, 0.18854295393491108, 0.18076029735947188, 0.17810375564897923, 0.1809275132308622, 0.1894321263047758, 0.20364673533358393, 0.2234194033817956, 0.24841813676934543, 0.2781440580920517, 0.3119556188107848, 0.34909983254842913, 0.38874920163019694, 0.430046292990668, 0.4721534090860707, 0.5143008757711277, 0.5558279727421489, 0.5962113957980413, 0.6350819339579786, 0.6722336635121907, 0.7076262246369832, 0.7413698090478891, 0.7736812695110702, 0.8048096088554074, 0.8349345225848558, 0.8640531602793297, 0.8918926678361534, 0.9178825602408065, 0.9411991249153042, 0.9608755995583604, 0.9759506175944643, 0.9856185566775835, 0.9893477684897781, 0.986947404843089, 0.9785822365337812, 0.9647439106434094, 0.9461893122317578, 0.9238592529653222, 0.898790420060866, 0.8720333955739906, 0.8445858806519689, 0.8173458316478134, 0.7910840172842757, 0.7664208495138177, 0.7437963718597458, 0.7234446104987919, 0.705386517825014, 0.6894431061776541, 0.6752710483165786, 0.6624181574417188, 0.6503836681461656, 0.6386687976470357, 0.6268132128813444, 0.6144153768891258, 0.6011385709245997, 0.5867156316553858, 0.570960809691335, 0.5537818215623307, 0.535180279092115, 0.5152415284687004, 0.4941266823306153, 0.47207026976250016, 0.4493700629295534, 0.4263614336660943, 0.4033811656802001, 0.3807358300545219, 0.3586820146019198, 0.3374099956873433, 0.3170304256997284, 0.29756783517028823, 0.2789629225407375, 0.26108589220532424, 0.24376026707169982, 0.22679343952095837, 0.21001065720486925, 0.1932874542789012, 0.17657477099227897, 0.15991460604086663, 0.14344313699363767, 0.12738038697848228, 0.11200615161201442, 0.0976222659744704, 0.08450888835243936, 0.07288311506248145, 0.06286368834597343, 0.05444806755844065, 0.04750396521170829, 0.04177477718783183, 0.03690138577298, 0.03246308018850316, -0.2986754572890323, -0.298476996745592, -0.2982628513948424, -0.298014397204626, -0.29771348529790614, -0.2973431784144985, -0.296889163694186, -0.2963416077457308, -0.2956971045936029, -0.29496033639032476, -0.29414505523812146, -0.29327403170115135, -0.29237780003113223, -0.29149236498299996, -0.2906562937614214, -0.2899075867436429, -0.28928065561699556, -0.2888036931262068, -0.2884965758710809, -0.28836927258779416, -0.28842059175689183, -0.2886370166596364, -0.2889913500025414, -0.2894409086344254, -0.28992508044004245, -0.2903622347880523, -0.29064629607532766, -0.2906436854993633, -0.29019164434871136, -0.28909907695157955, -0.28715086453544975, -0.2841160095009983, -0.279759150728384, -0.273854302146292, -0.2661993093172975, -0.25662949161058185, -0.2450291425526931, -0.23133981548622234, -0.21556457296903972, -0.19776803646466748, -0.17807271675100808, -0.1566523653906478, -0.13372313489321513, -0.10953346557568668, -0.08435392485658683, -0.05846841798344815, -0.032167971183061875, -0.005747849568850055, 0.0204916502533907, 0.04624086757120711, 0.07117352241304718, 0.09493750822198195, 0.11714479189090214, 0.13736148208897775, 0.15509927991215097, 0.16980985249534647, 0.18088394564390592, 0.18765715963197385, 0.18942437054993527, 0.18546467859089488, 0.17507822171706053, 0.15763488757103206, 0.1326330541884284, 0.09976412085923933, 0.05897611946908281, 0.010527772889626443, -0.044976406802112734, -0.10657861139363782, -0.17299373179422, -0.24267027755501241, -0.3138821436706709, -0.3848419630875858, -0.45382280394119734, -0.5192732982110507, -0.5799123059023233, -0.6347925560347498, -0.6833277495101492, -0.7252834567126956, -0.7607374453326204, -0.790018733897807, -0.8136361589630563, -0.8322066011529312, -0.8463909269063256, -0.8568430211787134, -0.8641745428360925, -0.868935374288221, -0.8716075712743555, -0.8726091702547578, -0.8723034910729849, -0.87100981096113, -0.8690123999747467, -0.8665663197296474, -0.8638994742056246, -0.8612114473332916, -0.8586704003236395, -0.8564093815315127, -0.8545231456805926, -0.8530664337986547, -0.8520543759027825, -0.85146514837858, -0.8512444636552853, -0.8513112148020375, -0.8515636728824886, -0.8518858222054361, -0.8521535713433366, -0.8522406450842062, -0.8520237986400571, -0.851386767941219, -0.8502224448259676, -0.8484331358143619, -0.8459292497091718, -0.842627200480291, -0.8384474873392791, -0.8333137735780288, -0.8271534523752012, -0.8198998321174565, -0.8114957528615138, -0.8018982908607943, -0.7910842268522363, -0.7790558398950724, -0.7658461816607396, -0.7515227602674328, -0.7361889447815577, -0.7199829196202007, -0.7030742847437816, -0.6856583545939043, -0.6679483433802935, -0.6501660474171406, -0.6325321678345539, -0.6152574290663394, -0.5985353428248251, -0.582537032225569, -0.5674081422317736, -0.5532675206686617, -0.5402071296845686, -0.52829258816015, -0.5175638288216331, -0.5080355455455255, -0.49969741917716415, -0.49251444728870614, -0.4864279965759262, -0.4813581885092717, -0.4772077918851697, -0.47386741741040483, -0.47122147643354856, -0.46915411603024737, -0.46755430079681365, -0.46631947248482786, -0.46535766691056574, -0.46458804361255285, -0.46393987659172364, -0.4633501962062746, 0.9387636361735768, 0.9388706165463782, 0.9389874713895677, 0.9391249801272522, 0.9392944023918367, 0.9395073509845394, 0.93977533178812, 0.9401089962167481, 0.9405171994649293, 0.9410059775215239, 0.9415775918011104, 0.9422298307349256, 0.9429557333547338, 0.9437437655531243, 0.9445783385131445, 0.9454405794199001, 0.946309295443362, 0.9471620524627395, 0.9479763200274794, 0.9487306714635426, 0.9494060258816578, 0.9499868719243989, 0.9504623849756079, 0.950827356378213, 0.9510828899670755, 0.9512367897226985, 0.9513034766398435, 0.951303172947649, 0.9512600397931492, 0.9511990272154195, 0.9511414182009881, 0.9510994129998478, 0.9510704862053903, 0.9510324802220984, 0.9509403815812907, 0.9507254783175084, 0.9502972049887574, 0.949547551776034, 0.9483575395969468, 0.9466049996400346, 0.9441727730048307, 0.9409565171459731, 0.9368715665936705, 0.9318586070900355, 0.925888133968955, 0.9189638559485267, 0.9111254429186921, 0.9024511081656622, 0.8930603890071643, 0.8831172373686117, 0.8728331707969279, 0.862469706854691, 0.8523386613044751, 0.8427983038015423, 0.8342431214452705, 0.8270852221327102, 0.8217261870356501, 0.8185194316171752, 0.8177248471494973, 0.8194595773691379, 0.8236508726226418, 0.82999857523722, 0.8379553886089166, 0.8467323033114967, 0.855334089598523, 0.8626256990902071, 0.8674254232798906, 0.8686156320018217, 0.8652577486977693, 0.8566958771222543, 0.8426340037471058, 0.8231750512839994, 0.7988156841438835, 0.7703975829172124, 0.7390226358026942, 0.7059449704825372, 0.672455734499375, 0.639776234174836, 0.6089718145048555, 0.5808937937067422, 0.5561512482155864, 0.5351097371145915, 0.5179107057140759, 0.5045034321917495, 0.4946812323551381, 0.4881155046570153, 0.48438430572457597, 0.48299544600664046, 0.4834067187292406, 0.4850467418916876, 0.4873388910207171, 0.48972903289768016, 0.4917162334991781, 0.49288392947188425, 0.4929278620518182, 0.4916769724924873, 0.48910397514817205, 0.4853233083870037, 0.4805760753861586, 0.4752040320362286, 0.4696163546334677, 0.4642532659669063, 0.45955031347969943, 0.4559066993700768, 0.45366021929660194, 0.45307057315738447, 0.4543119258788893, 0.4574744830673124, 0.4625736179181974, 0.4695641346646358, 0.4783566473052797, 0.48883307395853987, 0.5008590278815681, 0.5142920305417483, 0.5289856411624724, 0.5447903912364701, 0.5615527920735072, 0.5791136081918118, 0.5973061927863098, 0.6159554694155324, 0.6348782952686457, 0.6538857860943935, 0.6727874314369457, 0.691396292400586, 0.7095345393404469, 0.7270389390752829, 0.7437660030959418, 0.7595963266160527, 0.7744374320438361, 0.7882247083540478, 0.8009204579223403, 0.8125114074019459, 0.8230051985972214, 0.8324264288281237, 0.8408127670144867, 0.8482115517645483, 0.8546771261524395, 0.8602690065269613, 0.8650508030115123, 0.8690896460825764, 0.872455738905014, 0.8752216678966802, 0.8774613125643758, 0.8792483458490391, 0.8806544553155878, 0.8817475435256731, 0.8825902190267301, 0.8832388049999612, 0.8837429129282329, 0.8841456303282185, 0.8844843421737199, 0.8847921335128414, -0.1718023158282567, -0.17156245854474486, -0.17129515301782722, -0.17097344717676144, -0.17056650852978952, -0.170038809324118, -0.16934984822453125, -0.16845456794929325, -0.1673045904699447, -0.1658503693750667, -0.16404421824714863, -0.16184391094022887, -0.1592163626220389, -0.15614105002147724, -0.15261317247095338, -0.14864649408101743, -0.1442757117539423, -0.13955831984249256, -0.13457590561766591, -0.1294347040236839, -0.12426528349889567, -0.11922152621919485, -0.1144792281124872, -0.11023452756918628, -0.10670183916418112, -0.10411062163521151, -0.10270014731810712, -0.10271155255608018, -0.1043770198239013, -0.10790663719308928, -0.11347417539443394, -0.12120350505981449, -0.13115750400262613, -0.14333103304739644, -0.15764892752424794, -0.17396914688699325, -0.1920904956628348, -0.21176393614163858, -0.23270631347649517, -0.2546148917896706, -0.27718122726510896, -0.3001033406939276, -0.32309535311608706, -0.3458939074493775, -0.3682611563005747, -0.3899845803555372, -0.4108741724182548, -0.4307578212866834, -0.44947601691938405, -0.46687705863065276, -0.4828138012300541, -0.49714281396692067, -0.5097266816723622, -0.5204399186359071, -0.5291783125141556, -0.5358704901973192, -0.5404895466228744, -0.5430620318204293, -0.5436715128931985, -0.5424543120001167, -0.5395860335279892, -0.5352591592825761, -0.5296540065128729, -0.5229071692267252, -0.5150828431356079, -0.5061528410424305, -0.49599028707187814, -0.4843799694191902, -0.4710456495480577, -0.4556917192764361, -0.4380538827066829, -0.4179515575797645, -0.39533400902887295, -0.3703130855660775, -0.34317750115596163, -0.31438634570433927, -0.2845427242471913, -0.2543517039976313, -0.22456918625143407, -0.1959492839174894, -0.1691970731348469, -0.14493161212920794, -0.12366171905468075, -0.10577479788869225, -0.0915370251434435, -0.08110163382379602, -0.07452118359426059, -0.07175972937695518, -0.07270168915387293, -0.07715583706672015, -0.08485470994438123, -0.09545138068657957, -0.10851756371908688, -0.12354730521814333, -0.13996887472995045, -0.15716566497263393, -0.1745052903273688, -0.1913735695234433, -0.20720812670320424, -0.2215261623804793, -0.23394309150881246, -0.24418143710640847, -0.2520707705557999, -0.2575399192964467, -0.26060333068481867, -0.26134346092807437, -0.25989127005418616, -0.25640730530647327, -0.25106564327610265, -0.24404205233435491, -0.23550686521974407, -0.22562221919786954, -0.2145426494699299, -0.2024178447058044, -0.1893964160039783, -0.17562971991572365, -0.1612750279529509, -0.14649748669628557, -0.13147038168017033, -0.11637336952060358, -0.101388611272052, -0.08669516871478698, -0.0724623993962625, -0.05884312603793383, -0.045967451520251223, -0.03393807305247362, -0.022827730621657612, -0.012678986202359601, -0.00350614453991969, 0.0047010987488872455, 0.0119728171050906, 0.018353542755779054, 0.023897224601156696, 0.028663062581858342, 0.032712587938098114, 0.036108042374013403, 0.038911828932360976, 0.041186614601593494, 0.04299555962872595, 0.044402192553348895, 0.04546961591805706, 0.046259000329148606, 0.0468276321149321, 0.04722694265949298, 0.04750097167879984, 0.04768559565246136, 0.04780861757329397, 0.047890579117066, 0.04794601135134415, 0.04798482822974261, 0.04801362239329228, 0.04803670829342201, 0.3470804292531153, 0.340582726649771, 0.33400192758469316, 0.32734765576146707, 0.32061708686465235, 0.31379314812396897, 0.3069023635795919, 0.29994474888211126, 0.29290485222889323, 0.28577865074131636, 0.2785647499896784, 0.27125410623887575, 0.2638327241081774, 0.25626129878544596, 0.24851550999135041, 0.24059886539281938, 0.2325177996368927, 0.22427607795622576, 0.21588607620094863, 0.20741127096047957, 0.19893390663962934, 0.1904840670070508, 0.18206136566078948, 0.17366702916425716, 0.16531861029792635, 0.15704829924539498, 0.1488785317195982, 0.14084836458798378, 0.13298546799601643, 0.12524309099936284, 0.11757535164379493, 0.10997953434165483, 0.10246514955930061, 0.09505369819194957, 0.08777557434760905, 0.0806564126911263, 0.07370921676081003, 0.06692550099994757, 0.06029943447954532, 0.053842872666190734, 0.04755339786505067, 0.04140014087189261, 0.03537185473675591, 0.029463900095147356, 0.02366891588296297, 0.017975889400688, 0.012378479075468506, 0.006872540496144258, 0.001456544968969533, -0.0038645792511290116, -0.00908342726941285, -0.014207167718412345, -0.019240631625682847, -0.02416437388921909, -0.02895119586718497, -0.03358320062476589, -0.03804731708597619, -0.042323801832820376, -0.04637932406810409, -0.05019009394167158, -0.05373723927808757, -0.0570007510548423, -0.059958436889424, -0.06259618270830278, -0.06491092205536887, -0.06690982157762687, -0.06861530619179435, -0.0700653435105574, -0.0713083544594693, -0.07239343348627418, -0.0733729780445687, -0.07430146421791409, -0.07523394425077286, -0.07621955245547257, -0.07730107874745792, -0.07851555698415562, -0.07989388688588941, -0.08145898534223746, -0.08322549695335787, -0.08519557220059808, -0.08736529204642238, -0.08972833453039622, -0.09229372097461318, -0.09507147717785383, -0.09806851117780288, -0.10127842795622662, -0.10464654907531826, -0.10811923520593207, -0.11161936300779808, -0.11506264462325905, -0.1184755138143422, -0.1219483279337751, -0.12552091802369325, -0.12921119209014997, -0.13304771774088797, -0.13702643651003246, -0.1411283802460783, -0.14535417056375777, -0.1496861386189097, -0.15411669231348496, -0.15862584285687242, -0.1631744122022882, -0.16773548114927425, -0.17226381096653368, -0.17675244629746056, -0.18122026013661938, -0.1856943844902209, -0.19016759384352952, -0.19461813434183067, -0.1990402160675994, -0.20340736950286728, -0.20770006162953533, -0.21191508966321798, -0.21604941312374246, -0.2201201956436318, -0.2241405264639194, -0.2280950923358338, -0.23196280833492353, -0.2357248024047528, -0.23938211130903705, -0.24293466481223197, -0.24637674961311626, -0.24969297115362457, -0.25287228459038713, -0.2559072389431511, -0.2587919063793715, -0.2615464350948702, -0.26416822053349315, -0.266651089655507, -0.26899378462261736, -0.2711982956702789, -0.27326998805470815, -0.2752160623260537, -0.2770417503117935, -0.2787481943878209, -0.2803326209566674, -0.28179235665637725, -0.2831261302402056, -0.28433081234508684, -0.28540383123868174, -0.2863504021577203, -0.28717698424868593, -0.28788838533305433, -0.28849003967916415, -0.2889895539385192, -0.2893967852514804, -0.2897235215483357, -0.2899806808854604, -0.2901784910393492, -0.29032419602460835, -0.2904242545564073, -0.2904864856392199, 1.6514644310390634, 1.6504628047099144, 1.6494175792604304, 1.648326490256124, 1.647183406678162, 1.6459784225639378, 1.644708833815901, 1.643367758625631, 1.6419461221582103, 1.6404381663826717, 1.6388401434908524, 1.6371480892020076, 1.635358093413992, 1.6334608582736156, 1.6314510660738812, 1.6293311953753726, 1.627105339622866, 1.6247774159468433, 1.6223540522145057, 1.6198570366851563, 1.617314452203441, 1.6147391102431212, 1.6121340753997813, 1.6095021495074813, 1.6068505863865439, 1.6041908284441322, 1.601530816184191, 1.5988835547550238, 1.5962580782942335, 1.5936379823138564, 1.5910058970155319, 1.5883581468905326, 1.5856946571120625, 1.5830191949975607, 1.5803386820849246, 1.5776585744466731, 1.574980012594517, 1.5722962108698362, 1.5696016944581184, 1.5668989675005867, 1.5641858809440323, 1.5614488443056027, 1.5586834173448951, 1.5558891770371328, 1.5530653125957785, 1.5502095712623793, 1.5473217310493959, 1.544401801262214, 1.541449547889865, 1.5384659799068814, 1.5354507160187276, 1.532391355375861, 1.529272150851491, 1.5260877442881544, 1.5228345277021376, 1.5195000896285522, 1.5160660301419617, 1.5125173389900812, 1.5088514870297596, 1.5050620321749337, 1.5011432893732712, 1.4970988707219588, 1.4929481878036925, 1.488718324424947, 1.484441141181648, 1.4801548404582376, 1.4758912693810422, 1.4716646588447524, 1.4674709579732705, 1.4633104296290629, 1.4591757473272478, 1.4550485759949612, 1.4508978080839345, 1.4467016179251166, 1.442440391675887, 1.4380870357979234, 1.4336072307362708, 1.4289677080122862, 1.4241395651179811, 1.4191120687195946, 1.4138778992676144, 1.40842925812051, 1.4027228171777109, 1.3967178620834637, 1.3903857094656102, 1.3837304602778104, 1.3768587785460604, 1.369875497556999, 1.3629331754918057, 1.3561975013188032, 1.3496182291342387, 1.3430295485506354, 1.3363712537036447, 1.3296298069644974, 1.322776494484683, 1.3158441293896543, 1.3088904170785725, 1.3019371267542423, 1.2950333293757126, 1.2882070360837095, 1.2815001182316907, 1.2749750829082653, 1.268667609143594, 1.2626302664256845, 1.2568569544670287, 1.2513063916760092, 1.2459282447302695, 1.2407144751778836, 1.2356727684861906, 1.2307923536798233, 1.2260864193776468, 1.2215616568402279, 1.2172095790009576, 1.2130240779223433, 1.2089810062948378, 1.2050627284104949, 1.2012804620647968, 1.1976504903844214, 1.1941860107100162, 1.190880992661613, 1.1877299631119103, 1.184731768360315, 1.1818926821169127, 1.179214150944482, 1.1766938792296362, 1.1743279667073443, 1.1720913414558785, 1.1699780685787933, 1.167985579972431, 1.166108085784458, 1.1643381113982902, 1.1626664252048473, 1.1610831522007021, 1.1595806521041812, 1.1581551059374005, 1.1568063365204215, 1.1555344172813304, 1.1543384553734617, 1.1532195247283001, 1.152178817933638, 1.1512106661499748, 1.1503083967471412, 1.14946771570895, 1.1486849917595896, 1.1479557362598016, 1.1472742228076072, 1.146633003898362, 1.1460270753504078, 1.1454536064838057, 1.1449190447137125, 1.144434806758237, 1.1440031270063344, 1.6022148596261045, 1.6080378719312605, 1.6137668486781729, 1.6193723295556932, 1.6248251712135435, 1.6301000528531409, 1.635134796256167, 1.639889900540182, 1.6443400310311482, 1.6484572938810147, 1.6522193290783294, 1.655614926583821, 1.6586408001178123, 1.6613068943487217, 1.6636180097120206, 1.665573063016478, 1.6671745818029735, 1.6684286924662988, 1.669341899656752, 1.6699181287060967, 1.6701661506988232, 1.6701001658689212, 1.6697320722305844, 1.6690693594403572, 1.668117023703851, 1.6668798376120808, 1.6653604646955744, 1.6635648236277396, 1.6614984719415455, 1.6591470731446651, 1.6564911316596318, 1.6535230552084739, 1.6502417345034144, 1.646655104196515, 1.6427811265509173, 1.6386418928835134, 1.6342579536124315, 1.6296399055947928, 1.624801778634545, 1.6197732107006242, 1.6145762725952428, 1.6092101019912037, 1.6036894889763356, 1.5980352998334477, 1.5922652988909447, 1.586391587404454, 1.5804277239590478, 1.5743854040081002, 1.568274078332531, 1.5621048205380814, 1.555885742265317, 1.549601005868217, 1.5432297509190236, 1.536774742924841, 1.5302444678482885, 1.5236314895094012, 1.5169178283150062, 1.5100924373350912, 1.5031664206946715, 1.4961392254001762, 1.4890061587617367, 1.4817724605353562, 1.4744631465758946, 1.467107768800701, 1.4597365621982914, 1.452385722530138, 1.4450793276922658, 1.437814327479409, 1.4305630507273912, 1.4233152926031754, 1.4160607885070997, 1.4087852171150472, 1.4014680371318369, 1.3941213183323173, 1.3867750602374656, 1.379456250968101, 1.3721853509311202, 1.3649862505903059, 1.3578874078582763, 1.350937427300189, 1.344178973047128, 1.3376438730850053, 1.3313169662380175, 1.3251910030252942, 1.319277725519724, 1.3136244237272032, 1.3083589866725935, 1.3035860923488345, 1.2994174331741795, 1.2959361699263023, 1.2930909956882533, 1.2908024262678572, 1.2890598880614637, 1.287875496743004, 1.2872629474516262, 1.2872436120672617, 1.2878288516904521, 1.2890220402779808, 1.2908147041129536, 1.29319340348292, 1.2961313252861553, 1.2995789335406542, 1.3034849062928047, 1.3077738480339258, 1.3123998629058935, 1.3173463923277522, 1.3226131000400314, 1.3281647152242626, 1.3339484821740344, 1.3399333747243598, 1.3460632747792098, 1.3522939138786496, 1.3586088470609512, 1.3649974931873405, 1.3714867212342672, 1.3781045251304422, 1.3848376364804094, 1.391664495327874, 1.398567356791724, 1.4055653249065658, 1.4126776110153985, 1.4199129935527894, 1.4272577436018041, 1.4347024054639976, 1.4422400647330422, 1.4498609693860771, 1.4576209504803104, 1.4655131105340853, 1.4735120160305917, 1.4815991576587935, 1.4897611961093018, 1.4979946682292526, 1.5063051443000899, 1.5146949716356755, 1.5231535870304975, 1.5316552642533316, 1.5401771721789828, 1.5487071035936681, 1.557221252781687, 1.5656925196857379, 1.5741469299833697, 1.5826214959668448, 1.59112995729683, 1.5996713450307651, 1.6082425846609167, 1.616844524185709, 1.6254936122265142, 1.6341718402695413, 1.6428294000639756, 1.6512754277984742, 1.6592357738482477, 1.666592922286669], \"invariants_model\": [1.334939137978655, 1.3357175919920583, 1.3328707817996968, 1.3280982493013616, 1.3237687136388532, 1.311515721218315, 1.2971338754758213, 1.2843235152019012, 1.2718981043601654, 1.2603994968827663, 1.2520552535174378, 1.2483478412261153, 1.2538632026079202, 1.2661813508409678, 1.2807958972855291, 1.2972216864998831, 1.315738993616489, 1.3347408980051327, 1.345857280117346, 1.345871009994493, 1.342810572633423, 1.3413178542308606, 1.3410357428472852, 1.3393345195893032, 1.3338826941132957, 1.3262956367540775, 1.3139293582377751, 1.2986512189907462, 1.2928613870408745, 1.2967695713419742, 1.303350310539818, 1.310517009009405, 1.3160086331793013, 1.3178683652730103, 1.3164148966899236, 1.3134089636964097, 1.3124423875186337, 1.3126534523116211, 1.3100548608808626, 1.3069413182952045, 1.308906884027257, 1.311680720435601, 1.3135817168597597, 1.3150488788505466, 1.3169533708582575, 1.3184588528505155, 1.319444381718396, 1.3198475741800537, 1.3187853946417551, 1.3164133268915919, 1.3173378291743048, 1.3221353131420224, 1.325565960861965, 1.3263614343637666, 1.3277935856463334, 1.3320474251004455, 1.3378802709207516, 1.34123378020372, 1.3447505968046976, 1.3495250257341262, 1.3539289144066282, 1.3545094769390353, 1.3506539184709878, 1.3423766206066063, 1.3286633232939955, 1.3117389206486203, 1.2964617693472633, 1.2872030400725345, 1.2809310745377622, 1.2779020791401423, 1.279221543321839, 1.2865139008325157, 1.2947002700633192, 1.301307829619825, 1.307486731174793, 1.3149264240311105, 1.323413511864808, 1.3323333586625816, 1.3378361689639315, 1.3406270478044653, 1.3423484905102172, 1.3526101165591855, 1.3706839434045393, 1.3936242870185793, 1.4143038841801303, 1.4121462976362367, 1.3900479437756712, 1.3411534064341626, 1.2660135045204202, 1.2070231038368557, 1.1846242420286228, 1.1790190875885282, 1.1823231053313523, 1.1978196402531558, 1.215320797916378, 1.2307640812842204, 1.250382654366303, 1.2688354905917458, 1.289095315345772, 1.3074111009534741, 1.3179920209483118, 1.3240226389608412, 1.319676287966549, 1.3155157451898367, 1.3186429556867372, 1.3311986958921884, 1.3426996945597816, 1.3483910541939383, 1.3527764730742589, 1.3493571938707885, 1.340139530266836, 1.3303032424197812, 1.3201901502422535, 1.3166993627311296, 1.3191832392556446, 1.3188988507776478, 1.3141859283968134, 1.3059203218223836, 1.301186275219379, 1.2999743576116793, 1.3004500418230602, 1.298805568583972, 1.2961535773761224, 1.2932362384020104, 1.2898147329874572, 1.2970465077506992, 1.3043124383708884, 1.3086507869299313, 1.311272429670067, 1.3129968491905337, 1.3153210070368702, 1.3195385549074794, 1.3249681189283926, 1.3294256660219783, 1.330428911854514, 1.32837087381565, 1.324863870344452, 1.3180870477079176, 1.3075503731852163, 1.3014696505918397, 1.3015139434210834, 1.304093205148015, 1.3069503186862326, 1.309750981659303, 1.3130618334184139, 1.3192118377121014, 1.3228847249176432, 1.319178781868358, 1.2865574781464562, 1.2123055911285037, 1.120250163989968, 1.120250163989968, -2.194611271788231, -2.399180362038973, -2.7841624990956313, -3.314579665560144, -3.94616943977802, -4.629911296020995, -5.316081489549785, -5.957992959943561, -6.515594147161653, -6.958006981894841, -7.264938531769866, -7.427328713756413, -7.447573799604523, -7.339162284695767, -7.12482795227354, -6.83390049571473, -6.499443549634697, -6.154836945707768, -5.830056914904782, -5.548170437439217, -5.323950769635234, -5.165266724028421, -5.075066583790151, -5.051761614262776, -5.0886675306417, -5.17379676511415, -5.290483171793412, -5.418615362514316, -5.536599029775523, -5.625085374088334, -5.670508467999515, -5.665723963742871, -5.608681964006241, -5.500576944949356, -5.344479936837692, -5.144503111586744, -4.90552576176648, -4.633631138999194, -4.3357497149046775, -4.018835987068219, -3.6901341377655816, -3.358733699796959, -3.036491161768844, -2.736768208316681, -2.473059273092347, -2.258525026901732, -2.105059381344159, -2.022043374514705, -2.015797919221573, -2.0899307568548195, -2.245665645124444, -2.4810909185524723, -2.789383909282663, -3.157852604241177, -3.5688546096760363, -4.00138112920393, -4.432159297196656, -4.8362630670401225, -5.188208480213951, -5.463708723059738, -5.641185502731863, -5.70257329972513, -5.633964860544832, -5.426488393687861, -5.076952280657344, -4.587877722094372, -3.967306237233341, -3.228790785679397, -2.391099484444848, -1.4774740492057092, -0.5144976894924952, 0.4691616621023629, 1.4437935623948128, 2.380037865622604, 3.251224047161921, 4.035840345093969, 4.719341022947389, 5.295187838017189, 5.765010730243051, 6.138700919471406, 6.435069800835499, 6.682485460168713, 6.917216264698964, 7.178586755362443, 7.502235314361331, 7.911869428552484, 8.411186232621153, 8.981413543285218, 9.585522842412404, 10.176031518555403, 10.704626678741768, 11.130394341725355, 11.42520735587199, 11.575181566573681, 11.578271224737183, 11.440695707276504, 11.174474570998015, 10.795703998989264, 10.322808489152518, 9.775353128009566, 9.172370348777372, 8.531015371090488, 7.86563854397858, 7.1875888877884035, 6.508614852802466, 5.845210537752823, 5.218742863565501, 4.6522457702796975, 4.167223642832584, 3.7798316323484564, 3.497371593698139, 3.3176921382729705, 3.231206603386401, 3.223502431936525, 3.278272131000785, 3.3798661372868555, 3.5133215731904643, 3.6629677572126913, 3.8125370413376727, 3.947398682891077, 4.056274210966457, 4.130398762987794, 4.162084299331287, 4.145666730061275, 4.079641432441093, 3.9678542671955896, 3.8182568128904317, 3.6407477573388736, 3.446662728062142, 3.2484499733366556, 3.0587997172154875, 2.8894970418275845, 2.749919646487338, 2.6456080091507115, 2.577386707674404, 2.540959160833105, 2.5272421092143094, 2.523556773581991, 2.515112873397639, 2.4869256214472935, 2.4258324564334477, 2.322519275714334, 2.1735189253166824, 1.9820460161061086, 1.7575984746619548, 1.5150252580965429, 1.2726623595425313, 1.050155141337741, 0.8663569148012087, 0.7368337633037757, 0.6709400528997651, 0.6709400528997651, -0.05003658121221557, -0.05500808819995341, -0.06522516331745896, -0.08112617123270097, -0.10319966675488774, -0.13186983869518293, -0.16739332488466557, -0.2097768634518211, -0.25870981119596353, -0.3135164206348185, -0.3731468238681835, -0.43621138726484426, -0.5010174628765692, -0.5655575102206981, -0.6274802996146184, -0.6840826785593315, -0.7323191877831837, -0.7688459619936742, -0.7901161729671344, -0.7925124626206413, -0.7724592918331858, -0.7264789156230175, -0.6512011414688684, -0.5434036615375519, -0.40013399981632913, -0.2189421024547114, 0.0017789058418474397, 0.26240558983866846, 0.5617243130078495, 0.896675474175393, 1.2622672140786313, 1.6517001102567126, 2.05670423184299, 2.4680388560347186, 2.8760702675509626, 3.271340954970787, 3.6450851134985394, 3.98967080035949, 4.298886030641306, 4.568048271577085, 4.7939769866675235, 4.97485352759493, 5.109974721993804, 5.199410327187843, 5.243572579477372, 5.242718648977996, 5.196438732223857, 5.103189759891702, 4.959930760337254, 4.761913630415269, 4.502685494600009, 4.1743425227593915, 3.7680563867712955, 3.2748647138237676, 2.6866806102258307, 1.997443555042583, 1.204305155426802, 0.30873223857955046, -0.6825995910270564, -1.7572449171983304, -2.896875699447961, -4.077680335671352, -5.271279453583286, -6.446088545958996, -7.568981101483925, -8.607075412019027, -9.529490851860542, -10.308938371438744, -10.923043715737267, -11.35534303244753, -11.595948512419097, -11.641876269288634, -11.49703607021032, -11.171883465870886, -10.682717771792683, -10.050625435608783, -9.300136845071473, -8.45772076022511, -7.550264153821033, -6.603684637949323, -5.641792173655392, -4.685487541143783, -3.752355103285619, -2.856657403731638, -2.0096344490939435, -1.219954838083173, -0.49417512224638455, 0.1628854584219831, 0.7478381852918323, 1.2583807768925703, 1.6928514407161652, 2.0498623054284173, 2.328121912489174, 2.526434973830769, 2.643925593671088, 2.6805234786639236, 2.637517923701736, 2.5179420597096924, 2.3266656207826713, 2.0703057714742727, 1.7571098901148172, 1.3967926247419633, 1.0002144040872478, 0.5789112140002269, 0.14445655153549142, -0.292271895910315, -0.7217698245599995, -1.1364037999467504, -1.5306698362735989, -1.9011578030880405, -2.246228006770485, -2.565494701581974, -2.859234610503437, -3.127848015355754, -3.371457347817672, -3.589679630189696, -3.7815620161399686, -3.9456308780845237, -4.08002258968966, -4.182717947269789, -4.251860696013564, -4.286052273680972, -4.284552375666554, -4.247374650064557, -4.175338885171396, -4.070110963041737, -3.934205872607833, -3.7708873571527257, -3.583970805777601, -3.3775747555060827, -3.1558824519671456, -2.9229512559957636, -2.6825957683564483, -2.4383539718691902, -2.1935249539737036, -1.951254031100793, -1.7146328245954505, -1.4867678776524298, -1.2707728318055136, -1.0696476554687246, -0.8860575034235924, -0.7220908415316456, -0.5790576262988593, -0.45737686182074194, -0.3565889450972787, -0.27549621806127383, -0.21238864260167822, -0.1652832098816528, -0.1321703233760795, -0.11125550536326582, -0.10117387771859036, -0.10117387771859036]}'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import json\n", "initialvalues_frames = np.hstack((movingframes[:,0,0], movingframes[:,1,0], movingframes[:,2,0], movingframes[:,0,1], movingframes[:,1,1], movingframes[:,2,1], movingframes[:,0,2], movingframes[:,1,2], movingframes[:,2,2], calculate_trajectory[:,0], calculate_trajectory[:,1], calculate_trajectory[:,2]))\n", @@ -393,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 32, "id": "ba977be9", "metadata": { "execution": { @@ -424,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "4544c60d", "metadata": { "execution": { @@ -434,15 +272,7 @@ "shell.execute_reply": "2024-04-25T14:26:44.801084Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Assume the task is at s=0.4, resample invariants between s=0.4 and s=1.0:\n" - ] - } - ], + "outputs": [], "source": [ "# Parameterize invariants as a spline\n", "knots = np.concatenate(([arclength_n[0]],[arclength_n[0]],arclength_n,[arclength_n[-1]],[arclength_n[-1]]))\n", @@ -479,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "e97f3292", "metadata": { "execution": { @@ -489,79 +319,7 @@ "shell.execute_reply": "2024-04-25T14:26:45.008961Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.\n", - "\n", - "Number of nonzeros in equality constraint Jacobian...: 3075\n", - "Number of nonzeros in inequality constraint Jacobian.: 0\n", - "Number of nonzeros in Lagrangian Hessian.............: 1305\n", - "\n", - "Total number of variables............................: 597\n", - " variables with only lower bounds: 0\n", - " variables with lower and upper bounds: 0\n", - " variables with only upper bounds: 0\n", - "Total number of equality constraints.................: 480\n", - "Total number of inequality constraints...............: 0\n", - " inequality constraints with only lower bounds: 0\n", - " inequality constraints with lower and upper bounds: 0\n", - " inequality constraints with only upper bounds: 0\n", - "\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 0 0.0000000e+00 4.23e-01 0.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", - " 1 1.8529216e-01 4.21e-01 4.46e-01 -1.7 3.84e+01 - 1.00e+00 3.91e-03h 9\n", - " 2 7.4873503e-01 4.20e-01 9.96e-01 -1.7 3.50e+01 - 1.00e+00 3.91e-03h 9\n", - " 3 1.7016711e+00 4.18e-01 1.34e+00 -1.7 3.97e+01 - 1.00e+00 3.91e-03h 9\n", - " 4 3.0554138e+00 4.16e-01 2.03e+00 -1.7 4.11e+01 - 1.00e+00 3.91e-03h 9\n", - " 5 3.8881581e+00 4.16e-01 2.06e+00 -1.7 5.69e+01 - 1.00e+00 1.95e-03h 10\n", - " 6 2.6805737e+02 6.85e-01 4.78e+02 -1.7 5.55e+00 - 1.00e+00 1.25e-01h 4\n", - " 7 2.7298955e+04 9.95e-01 6.36e+04 -1.7 2.65e+00 - 1.00e+00 1.00e+00h 1\n", - " 8 4.9803016e+04 1.77e-01 6.80e+04 -1.7 4.38e-01 4.0 1.00e+00 1.00e+00h 1\n", - " 9 3.6523993e+04 4.76e-01 7.17e+04 -1.7 1.64e+01 - 1.00e+00 1.25e-01f 4\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 10 3.4616144e+04 5.27e-01 7.32e+04 -1.7 1.52e+01 - 1.00e+00 6.25e-02f 5\n", - " 11 2.9161546e+04 4.55e-01 5.10e+04 -1.7 4.69e+00 - 1.00e+00 5.00e-01f 2\n", - " 12 2.8087655e+04 2.41e-01 8.20e+04 -1.7 1.50e+00 - 1.00e+00 1.00e+00f 1\n", - " 13 2.6746292e+04 1.88e-02 5.69e+03 -1.7 1.32e-01 3.5 1.00e+00 1.00e+00f 1\n", - " 14 2.5080184e+04 1.39e-02 2.85e+03 -1.7 9.75e-01 - 1.00e+00 1.00e+00f 1\n", - " 15 2.4991969e+04 1.52e-04 5.29e+01 -1.7 1.16e-02 3.0 1.00e+00 1.00e+00f 1\n", - " 16 2.5005370e+04 3.55e-06 4.59e-01 -2.5 1.40e-02 - 1.00e+00 1.00e+00h 1\n", - " 17 2.5005353e+04 3.29e-12 1.85e-07 -5.7 5.95e-06 - 1.00e+00 1.00e+00f 1\n", - "\n", - "Number of Iterations....: 17\n", - "\n", - " (scaled) (unscaled)\n", - "Objective...............: 2.5005352880137511e+04 2.5005352880137511e+04\n", - "Dual infeasibility......: 1.8468455209585954e-07 1.8468455209585954e-07\n", - "Constraint violation....: 3.2889246881495637e-12 3.2889246881495637e-12\n", - "Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Complementarity.........: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Overall NLP error.......: 2.8058786716998293e-10 1.8468455209585954e-07\n", - "\n", - "\n", - "Number of objective function evaluations = 73\n", - "Number of objective gradient evaluations = 18\n", - "Number of equality constraint evaluations = 79\n", - "Number of inequality constraint evaluations = 0\n", - "Number of equality constraint Jacobian evaluations = 18\n", - "Number of inequality constraint Jacobian evaluations = 0\n", - "Number of Lagrangian Hessian evaluations = 17\n", - "Total seconds in IPOPT = 0.128\n", - "\n", - "EXIT: Optimal Solution Found.\n", - " solver : t_proc (avg) t_wall (avg) n_eval\n", - " nlp_f | 956.00us ( 13.10us) 932.24us ( 12.77us) 73\n", - " nlp_g | 9.75ms (123.42us) 9.72ms (122.99us) 79\n", - " nlp_grad_f | 832.00us ( 43.79us) 833.33us ( 43.86us) 19\n", - " nlp_hess_l | 34.39ms ( 2.02ms) 34.43ms ( 2.03ms) 17\n", - " nlp_jac_g | 39.22ms ( 2.06ms) 39.29ms ( 2.07ms) 19\n", - " total | 129.66ms (129.66ms) 129.61ms (129.61ms) 1\n" - ] - } - ], + "outputs": [], "source": [ "# new constraints\n", "current_index = round(current_progress*len(trajectory))\n", @@ -570,20 +328,43 @@ "R_FS_start = movingframes[current_index]\n", "R_FS_end = movingframes[-1]\n", "\n", + "boundary_constraints = {\n", + " \"position\": {\n", + " \"initial\": p_obj_start,\n", + " \"final\": p_obj_end\n", + " },\n", + " \"moving-frame\": {\n", + " \"translational\": {\n", + " \"initial\": R_FS_start,\n", + " \"final\": R_FS_end\n", + " }\n", + " },\n", + "}\n", + "initial_values = {\n", + " \"trajectory\": {\n", + " \"position\": calculate_trajectory\n", + " },\n", + " \"moving-frame\": {\n", + " \"translational\": movingframes,\n", + " },\n", + " \"invariants\": {\n", + " \"translational\": model_invariants,\n", + " }\n", + "}\n", + "\n", + "weights = {}\n", + "weights['w_invars'] = np.array([5 * 10 ** 1, 1.0, 1.0])\n", + "\n", "# specify optimization problem symbolically\n", - "FS_online_generation_problem = OCP_gen_pos(N=number_samples,w_invars = 10**2*np.array([10**1, 1.0, 1.0]))\n", + "FS_online_generation_problem = OCP_gen_pos(boundary_constraints,number_samples,solver='ipopt')\n", "\n", "# Solve\n", "calculate_trajectory = init_vals_calculate_trajectory\n", "movingframes = init_vals_movingframes\n", - "new_invars, new_trajectory, new_movingframes = FS_online_generation_problem.generate_trajectory(U_demo = model_invariants, \n", - " p_obj_init = calculate_trajectory, \n", - " R_t_init = movingframes, \n", - " R_t_start = R_FS_start, \n", - " R_t_end = R_FS_end, \n", - " p_obj_start = p_obj_start, \n", - " p_obj_end = p_obj_end, \n", - " step_size = new_stepsize)\n", + "new_invars, new_trajectory, new_movingframes = FS_online_generation_problem.generate_trajectory(model_invariants,\n", + " boundary_constraints,\n", + " new_stepsize,weights,\n", + " initial_values=initial_values)\n", "\n" ] }, @@ -597,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "345eccee", "metadata": { "execution": { @@ -607,16 +388,7 @@ "shell.execute_reply": "2024-04-25T14:26:45.074819Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_142293/2650737203.py:27: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", - " plt.show()\n" - ] - } - ], + "outputs": [], "source": [ "# Plot trajectory\n", "fig = plt.figure(figsize=(12,6))\n", @@ -659,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "a5a8d6f9", "metadata": { "execution": { @@ -669,88 +441,12 @@ "shell.execute_reply": "2024-04-25T14:26:47.710283Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current progress = 0.9500000000000003\n", - "This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.\n", - "\n", - "Number of nonzeros in equality constraint Jacobian...: 1515\n", - "Number of nonzeros in inequality constraint Jacobian.: 0\n", - "Number of nonzeros in Lagrangian Hessian.............: 645\n", - "\n", - "Total number of variables............................: 297\n", - " variables with only lower bounds: 0\n", - " variables with lower and upper bounds: 0\n", - " variables with only upper bounds: 0\n", - "Total number of equality constraints.................: 240\n", - "Total number of inequality constraints...............: 0\n", - " inequality constraints with only lower bounds: 0\n", - " inequality constraints with lower and upper bounds: 0\n", - " inequality constraints with only upper bounds: 0\n", - "\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 0 0.0000000e+00 1.42e-02 0.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n", - " 1 2.5111447e-01 1.42e-02 2.52e-02 -3.8 1.27e+01 - 1.00e+00 9.77e-04h 11\n", - " 2r 2.5111447e-01 1.42e-02 9.99e+02 -1.8 0.00e+00 - 0.00e+00 4.77e-07R 22\n", - " 3r 3.0401070e+00 1.32e-02 9.18e+02 -1.8 2.67e+01 - 1.00e+00 5.27e-04f 1\n", - " 4r 2.3503170e+05 3.31e-01 5.82e+02 -1.8 1.56e+01 - 5.14e-01 3.38e-01f 1\n", - " 5r 2.4087857e+05 3.28e-01 6.18e+02 -1.8 4.68e+00 0.0 1.00e+00 1.34e-02f 1\n", - " 6r 2.4733835e+05 2.69e-01 3.29e+02 -1.8 8.86e-01 - 1.00e+00 2.45e-01f 1\n", - " 7r 2.2922586e+05 1.50e-01 3.04e+01 -1.8 4.51e-01 - 1.00e+00 9.26e-01f 1\n", - " 8r 2.5956520e+05 7.22e-03 8.85e-01 -1.8 3.25e-01 - 1.00e+00 1.00e+00f 1\n", - " 9 2.6381714e+05 3.90e-04 8.25e+03 -3.8 9.98e-01 -4.0 1.00e+00 1.00e+00h 1\n", - "iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n", - " 10 2.6382447e+05 4.72e-04 6.18e+03 -3.8 4.60e-01 - 1.00e+00 2.50e-01h 3\n", - " 11 2.6386280e+05 7.91e-04 3.21e+02 -3.8 3.43e-01 - 1.00e+00 1.00e+00H 1\n", - " 12 2.6386278e+05 3.11e-05 7.42e-01 -3.8 2.37e-02 - 1.00e+00 1.00e+00h 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 13 2.6386279e+05 1.62e-08 4.02e-04 -5.7 5.00e-04 -2.7 1.00e+00 1.00e+00h 1\n", - " 14 2.6386279e+05 8.88e-16 1.71e-09 -8.6 5.29e-08 -3.1 1.00e+00 1.00e+00h 1\n", - "\n", - "Number of Iterations....: 14\n", - "\n", - " (scaled) (unscaled)\n", - "Objective...............: 2.6386278700645582e+05 2.6386278700645582e+05\n", - "Dual infeasibility......: 1.7114185624222955e-09 1.7114185624222955e-09\n", - "Constraint violation....: 8.8817841970012523e-16 8.8817841970012523e-16\n", - "Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Complementarity.........: 0.0000000000000000e+00 0.0000000000000000e+00\n", - "Overall NLP error.......: 6.4459001246877352e-13 1.7114185624222955e-09\n", - "\n", - "\n", - "Number of objective function evaluations = 45\n", - "Number of objective gradient evaluations = 10\n", - "Number of equality constraint evaluations = 55\n", - "Number of inequality constraint evaluations = 0\n", - "Number of equality constraint Jacobian evaluations = 16\n", - "Number of inequality constraint Jacobian evaluations = 0\n", - "Number of Lagrangian Hessian evaluations = 14\n", - "Total seconds in IPOPT = 0.089\n", - "\n", - "EXIT: Optimal Solution Found.\n", - " solver : t_proc (avg) t_wall (avg) n_eval\n", - " nlp_f | 15.79ms ( 32.43us) 5.48ms ( 11.26us) 487\n", - " nlp_g | 116.43ms (230.10us) 39.69ms ( 78.43us) 506\n", - " nlp_grad | 24.99ms ( 1.32ms) 8.97ms (472.29us) 19\n", - " nlp_grad_f | 23.84ms (101.88us) 8.39ms ( 35.86us) 234\n", - " nlp_hess_l | 704.35ms ( 3.56ms) 246.81ms ( 1.25ms) 198\n", - " nlp_jac_g | 989.86ms ( 4.12ms) 346.03ms ( 1.44ms) 240\n", - " total | 271.27ms (271.27ms) 90.38ms ( 90.38ms) 1\n" - ] - } - ], + "outputs": [], "source": [ "# Specify optimization problem symbolically\n", - "window_len = 20\n", - "FS_online_generation_problem = OCP_gen_pos(N=window_len,w_invars = 10**1*np.array([10**1, 1.0, 1.0]))\n", + "window_len = 40\n", + "FS_online_generation_problem = OCP_gen_pos(boundary_constraints, number_samples, solver = 'ipopt')\n", + "\n", "\n", "# Initializing loop\n", "current_progress = 0.0\n", @@ -769,18 +465,16 @@ " # Select new boundary constraints\n", " current_index = round( (current_progress - old_progress) * len(calculate_trajectory))\n", " #print(current_index)\n", - " p_obj_start = calculate_trajectory[current_index]\n", - " p_obj_end = trajectory[-1] - current_progress*np.array([-0.2, 0.0, 0.0])\n", - " R_FS_start = movingframes[current_index] \n", - " R_FS_end = movingframes[-1] \n", + " boundary_constraints[\"position\"][\"initial\"] = calculate_trajectory[current_index]\n", + " boundary_constraints[\"position\"][\"final\"] = trajectory[-1] - current_progress*np.array([-0.2, 0.0, 0.0])\n", + " boundary_constraints[\"moving-frame\"][\"translational\"][\"initial\"] = movingframes[current_index] \n", + " boundary_constraints[\"moving-frame\"][\"translational\"][\"final\"] = movingframes[-1] \n", + " \n", "\n", " # Calculate remaining trajectory\n", - " new_invars, calculate_trajectory, movingframes = FS_online_generation_problem.generate_trajectory(U_demo = model_invariants, \n", - " p_obj_init = calculate_trajectory, \n", - " R_t_init = movingframes, R_t_start = R_FS_start, \n", - " R_t_end = R_FS_end, p_obj_start = p_obj_start, \n", - " p_obj_end = p_obj_end, step_size = new_stepsize)\n", - "\n", + " new_invars, calculate_trajectory, movingframes = FS_online_generation_problem.generate_trajectory(model_invariants,boundary_constraints,new_stepsize,weights,initial_values)\n", + " movingframes = movingframes.T\n", + " \n", " # Plot trajectory\n", " clear_output(wait=True)\n", " fig = plt.figure(figsize=(14,8))\n", @@ -854,7 +548,7 @@ "lastKernelId": null }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -868,7 +562,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.8.10" } }, "nbformat": 4,