Repository: 1QB-Information-Technologies/ccvm (language: python)

Issue:
Update data structure of problem instance
### Feature Description
**Please describe the feature you would like to see added:**

Based on user expectation, the structure of the instance file for the BoxQP problem needs to be updated:
- The first row of the instance file (`instance_info`) has additional fields: `best_sol` in 3rd col,  `sol_time_bfgs` in 6th col, `num_frac_values` in 8th col
- Compared the old data structure we have an additional row at the end of the new instance file.

### Rationale
**Why is this feature important? What problem does it solve?**

Aforementioned additional fields are required for benchmarking purposes. That is, they will be used as a baseline for comparing the outcome of the solvers 


Update data structure of problem instance
### Feature Description
**Please describe the feature you would like to see added:**

Based on user expectation, the structure of the instance file for the BoxQP problem needs to be updated:
- The first row of the instance file (`instance_info`) has additional fields: `best_sol` in 3rd col,  `sol_time_bfgs` in 6th col, `num_frac_values` in 8th col
- Compared the old data structure we have an additional row at the end of the new instance file.

### Rationale
**Why is this feature important? What problem does it solve?**

Aforementioned additional fields are required for benchmarking purposes. That is, they will be used as a baseline for comparing the outcome of the solvers 




Discussion / hints:

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index abfd8758..a07d5fc5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Changed
 - Updated internal data handling that have improved performance and reduced memory usage.
+- Updated data structure for new problem instance file:
+	-- Additional fields (`best_sol`, `sol_time_bfgs`, and `num_frac_values`) are added so that additional values in the first line can be extracted properly,
+	-- A field `solution_vector` is added to extract a list of values from the final line
 
 ## [0.1.2] - 2023-03-09
 ### Fixed
diff --git a/README.md b/README.md
index 8d3afc59..83c633e3 100644
--- a/README.md
+++ b/README.md
@@ -38,7 +38,7 @@ This software package includes solvers for continuous optimization problems. The
 ```
 
 2. Go into `examples/` and run the demo scripts.
-    - `ccvm_boxqp.py`: Solve a BoxQP problem using a CCVM simulator, w/o plotting
+    - `ccvm_boxqp_dl.py`: Solve a BoxQP problem using a CCVM simulator, w/o plotting
     - `ccvm_boxqp_plot.py`: Solve a BoxQP problem using a CCVM simulator, w/ time-to-solution (TTS) plotting
     - For more demo scripts see `examples/README.md`
 
@@ -111,7 +111,7 @@ boxqp_instance.scale_coefs(solver.get_scaling_factor(boxqp_instance.q_matrix))
 ##### 5. Solve the Problem Instance
 
 ```python
-solution = solver.solve(
+solution = solver(
     instance=boxqp_instance,
     post_processor=None,
 )
diff --git a/ccvm_simulators/problem_classes/README.md b/ccvm_simulators/problem_classes/README.md
index cf034f80..518602d9 100644
--- a/ccvm_simulators/problem_classes/README.md
+++ b/ccvm_simulators/problem_classes/README.md
@@ -31,12 +31,18 @@ independet of the particular random instances generated.
 The first line of each instance file contains the following information, in this order:
 - instance size
 - optimum solution (example files used the Gurobi solver to determine these values)
+- best solution (example files used the BFGS solver to determine these values)
 - whether the solution is optimal (`True` or `False`)
+- solution time for Gurobi to solve it 
+- solution time for BFGS to solve it
 - the seed number used for generating the instance in `torch`.
+- number of fractional values in the solution
 
 The second line contains the elements of the vector `V`, which describes the instance.
 
-The rest of the lines hold the elements of the `Q` matrix.
+The rest of the lines before the last line hold the elements of the `Q` matrix.
+
+The final line contains list of additional (optional) information in the problem instance.
 
 You can specify a file delimiter of your choice. Then remember to
 provide it when initializing the ProblemInstance.
diff --git a/ccvm_simulators/problem_classes/boxqp/problem_instance.py b/ccvm_simulators/problem_classes/boxqp/problem_instance.py
index 5a50b536..9d35d9c5 100644
--- a/ccvm_simulators/problem_classes/boxqp/problem_instance.py
+++ b/ccvm_simulators/problem_classes/boxqp/problem_instance.py
@@ -44,19 +44,28 @@ def __init__(
 
         Attributes:
             problem_size (int): instance size. Defaults to None.
-            optimal_sol (float): the optimal solution to the problem. Defaults to None.
+            optimal_sol (float): the optimal solution via Gurobi to the problem. Defaults to None.
+            best_sol (float): the best solution via BFGS. Defaults to None
             optimality (bool): indicates whether the solution is
                 optimal (True or False). Defaults to None.
+            sol_time_gb (float): the time for Gurobi to solve it
+            sol_time_bfgs (float): the time for BFGS to solve it
+            num_frac_values (int): number of fractional values in the solution
             q_matrix (torch.tensor): Q matrix of the QP problem. Defaults to None.
             v_vector (torch.tensor): V vector of the QP problem. Defaults to None.
+            solution_vector (list): the vector of solution to the problem instance found using Gurobi
             scaled_by (float): scaling value of the coefficient. Defaults to 1.
         """
         self.problem_size = None
         self.optimal_sol = None
+        self.best_sol = None
         self.optimality = None
         self.sol_time_gb = None
+        self.sol_time_bfgs = None
+        self.num_frac_values = None
         self.q_matrix = None
         self.v_vector = None
+        self.solution_vector = None
         self.scaled_by = 1
         self.device = device
         self._custom_name = False
@@ -126,11 +135,16 @@ def load_instance(
                 # Save all metadata from the file
                 problem_size = int(instance_info[0])
                 optimal_sol = float(instance_info[1])
-                if instance_info[2].lower() == "true":
+                best_sol = float(instance_info[2])
+                if instance_info[3].lower() == "true":
                     optimality = True
                 else:
                     optimality = False
-                sol_time_gb = float(instance_info[3])
+                sol_time_gb = float(instance_info[4])
+                sol_time_bfgs = float(instance_info[5])
+                num_frac_values = int(
+                    instance_info[7]
+                )  # seed=int(instance_info[6]) # discarded
 
                 # Initialize the q_matrix and v_vector matrices
                 rval_q = torch.zeros(
@@ -143,10 +157,22 @@ def load_instance(
                 for idx in range(0, problem_size):
                     rval_v[idx] = -torch.Tensor([float(line_data_v[idx])])
                 # Read in the q_matrix matrix
-                for idx, line in enumerate(lines[2:]):
+                for idx, line in enumerate(lines[2 : problem_size + 2]):
                     line_data = line.split("\n")[0].split(file_delimiter)
                     for j, value in enumerate(line_data[:problem_size]):
                         rval_q[idx, j] = -torch.Tensor([float(value)])
+
+                # Read the last line as an additional information
+                solution_vector = []
+                try:
+                    last_raw_data_line = lines[problem_size + 2].split("\n")[0].split(file_delimiter)
+                    for v in last_raw_data_line:
+                        if not v == "":
+                            solution_vector.append(float(v))
+                except IndexError:
+                    # solution_vector was not supplied
+                    pass
+                        
             except Exception as e:
                 raise Exception("Error reading instance file: " + str(e))
 
@@ -155,10 +181,14 @@ def load_instance(
         self.instance_type = instance_type
         self.problem_size = problem_size
         self.optimal_sol = optimal_sol
+        self.best_sol = best_sol
         self.optimality = optimality
         self.sol_time_gb = sol_time_gb
+        self.sol_time_bfgs = sol_time_bfgs
+        self.num_frac_values = num_frac_values
         self.q_matrix = rval_q
         self.v_vector = rval_v
+        self.solution_vector = solution_vector
         self.scaled_by = 1
 
         # Set the name of the instance if the user has not set it
diff --git a/ccvm_simulators/solution.py b/ccvm_simulators/solution.py
index bf390518..8b781889 100644
--- a/ccvm_simulators/solution.py
+++ b/ccvm_simulators/solution.py
@@ -18,6 +18,9 @@ class Solution:
         solve_time (float): Time to solve the problem.
         pp_time (float):  Time to post-process the problem.
         optimal_value (float): The optimal objective value for the given problem instance.
+        best_value (float): The best objective value for the given problem instance.
+        num_frac_values (int): Number of fractional values in the solutions of given problem instance.
+        solution_vector (list): Vector of solution to the problem instance found using Gurobi.
         variables (dict): A dict object to store solution related variables.
             Some fields might be solver-dependent, such as mu, sigma and s.
             - problem_variables (torch.Tensor): The values of the problem
@@ -50,6 +53,9 @@ class Solution:
     solve_time: float
     pp_time: float
     optimal_value: float
+    best_value: float
+    num_frac_values: int
+    solution_vector: list
     variables: dict = field(repr=False)
     evolution_file: str = None
     device: str = field(default="cpu", repr=False)
diff --git a/ccvm_simulators/solvers/algorithms.py b/ccvm_simulators/solvers/algorithms.py
index dcce3e1e..20b06154 100644
--- a/ccvm_simulators/solvers/algorithms.py
+++ b/ccvm_simulators/solvers/algorithms.py
@@ -1,5 +1,6 @@
 class AdamParameters:
     """Validates and stores the parameters required for the Adam algorithm."""
+
     def __init__(self, alpha=0.1, beta1=0.9, beta2=0.999, add_assign=True):
         """
         Initializes the AdamParameters object with the given hyperparameters.
diff --git a/ccvm_simulators/solvers/dl_solver.py b/ccvm_simulators/solvers/dl_solver.py
index 375600db..e16dfcd2 100644
--- a/ccvm_simulators/solvers/dl_solver.py
+++ b/ccvm_simulators/solvers/dl_solver.py
@@ -409,6 +409,8 @@ def _solve(
         confs = self.change_variables(problem_variables, S)
         objval = instance.compute_energy(confs)
 
+        # TODO: Move the rest of the code to DLSolver.__call__() and update the return accordingly
+
         if evolution_step_size:
             # Write samples to file
             # Overwrite file if it exists
@@ -433,6 +435,9 @@ def _solve(
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={
                 "problem_variables": problem_variables,
                 "s": s,
@@ -651,7 +656,6 @@ def update_grads_without_moment2_addassign(gradc, grads, mhatc, mhats):
                 v_c = beta2 * v_c + (1.0 - beta2) * torch.pow(c_grads, 2)
                 v_s = beta2 * v_s + (1.0 - beta2) * torch.pow(s_grads, 2)
 
-
                 # Compute bias correction in 2nd moment
                 beta2i = 1.0 - beta2 ** (i + 1)
                 vhat_c = v_c / beta2i
@@ -729,6 +733,8 @@ def update_grads_without_moment2_addassign(gradc, grads, mhatc, mhats):
         confs = self.change_variables(problem_variables, S)
         objval = instance.compute_energy(confs)
 
+        # TODO: Move the rest of the code to DLSolver.__call__() and update the return accordingly
+
         if evolution_step_size:
             # Write samples to file
             # Overwrite file if it exists
@@ -753,6 +759,9 @@ def update_grads_without_moment2_addassign(gradc, grads, mhatc, mhats):
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={
                 "problem_variables": problem_variables,
                 "s": s,
@@ -767,14 +776,14 @@ def update_grads_without_moment2_addassign(gradc, grads, mhatc, mhats):
         return solution
 
     def __call__(
-            self,
-            instance,
-            post_processor=None,
-            pump_rate_flag=True,
-            g=0.05,
-            evolution_step_size=None,
-            evolution_file=None,
-            algorithm_parameters=None,
+        self,
+        instance,
+        post_processor=None,
+        pump_rate_flag=True,
+        g=0.05,
+        evolution_step_size=None,
+        evolution_file=None,
+        algorithm_parameters=None,
     ):
         """Solves the given problem instance choosing one of the available DL-CCVM solvers.
 
@@ -802,6 +811,9 @@ def __call__(
             solution (Solution): The solution to the problem instance.
         """
 
+        # TODO: Get the solution object from DLSolver._solve() or _solve_adam()
+        #      and return the outcomes properly
+
         if algorithm_parameters is None:
             # Use the original DL solver
             return self._solve(
@@ -810,7 +822,7 @@ def __call__(
                 pump_rate_flag,
                 g,
                 evolution_step_size,
-                evolution_file
+                evolution_file,
             )
         elif isinstance(algorithm_parameters, AdamParameters):
             # Use the DL solver with the Adam algorithm
@@ -821,7 +833,9 @@ def __call__(
                 pump_rate_flag,
                 g,
                 evolution_step_size,
-                evolution_file
+                evolution_file,
             )
         else:
-            raise ValueError(f"Solver option type {type(algorithm_parameters)} is not supported.")
+            raise ValueError(
+                f"Solver option type {type(algorithm_parameters)} is not supported."
+            )
diff --git a/ccvm_simulators/solvers/langevin_solver.py b/ccvm_simulators/solvers/langevin_solver.py
index 17bcb629..a6a9ccb8 100644
--- a/ccvm_simulators/solvers/langevin_solver.py
+++ b/ccvm_simulators/solvers/langevin_solver.py
@@ -340,6 +340,9 @@ def _solve(
         # Stop the timer for the solve
         solve_time = time.time() - solve_time_start
 
+        # TODO: Similar to DLSolver, move the rest of the code to the LangevinSolver.__call__()
+        #       and update the return accordingly
+
         # Run the post processor on the results, if specified
         if post_processor:
             post_processor_object = PostProcessorFactory.create_postprocessor(
@@ -380,6 +383,9 @@ def _solve(
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={"problem_variables": problem_variables},
             device=device,
         )
@@ -574,6 +580,10 @@ def _solve_adam(
         # Stop the timer for the solve
         solve_time = time.time() - solve_time_start
 
+        # TODO: Similar in DLSolver._solve() and DLSolver._solve_adam(),
+        #       move the rest of the code segments to the LangevinSolver.__call__()
+        #       and update the return accordingly
+
         # Run the post processor on the results, if specified
         if post_processor:
             post_processor_object = PostProcessorFactory.create_postprocessor(
@@ -614,6 +624,9 @@ def _solve_adam(
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={"problem_variables": problem_variables},
             device=device,
         )
@@ -657,9 +670,19 @@ def __call__(
         """
         if algorithm_parameters is None:
             # Use the original Langevin solver
-            return self._solve(instance, post_processor, evolution_step_size, evolution_file)
+            return self._solve(
+                instance, post_processor, evolution_step_size, evolution_file
+            )
         elif isinstance(algorithm_parameters, AdamParameters):
             # Use the Langevin solver with the Adam algorithm
-            return self._solve_adam(instance, algorithm_parameters.to_dict(), post_processor, evolution_step_size, evolution_file)
+            return self._solve_adam(
+                instance,
+                algorithm_parameters.to_dict(),
+                post_processor,
+                evolution_step_size,
+                evolution_file,
+            )
         else:
-            raise ValueError(f"Solver option type {type(algorithm_parameters)} is not supported.")
+            raise ValueError(
+                f"Solver option type {type(algorithm_parameters)} is not supported."
+            )
diff --git a/ccvm_simulators/solvers/mf_solver.py b/ccvm_simulators/solvers/mf_solver.py
index eaf41935..185d4515 100644
--- a/ccvm_simulators/solvers/mf_solver.py
+++ b/ccvm_simulators/solvers/mf_solver.py
@@ -423,6 +423,9 @@ def _solve(
 
         solve_time = time.time() - solve_time_start
 
+        # TODO: Similar to DLSolver, move the rest of the code to the MFSolver.__call__()
+        #       and update the return accordingly
+
         # Run the post processor on the results, if specified
         if post_processor:
             post_processor_object = PostProcessorFactory.create_postprocessor(
@@ -466,6 +469,9 @@ def _solve(
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={
                 "problem_variables": problem_variables,
                 "mu": mu,
@@ -712,6 +718,9 @@ def update_grads_without_moment2_addassign(grads, mhat):
 
         solve_time = time.time() - solve_time_start
 
+        # TODO: Similar to the solver methos in LangevinSolver and DLSolver
+        #       move the rest of the statements and update the return accordingly
+
         # Run the post processor on the results, if specified
         if post_processor:
             post_processor_object = PostProcessorFactory.create_postprocessor(
@@ -755,6 +764,9 @@ def update_grads_without_moment2_addassign(grads, mhat):
             solve_time=solve_time,
             pp_time=pp_time,
             optimal_value=instance.optimal_sol,
+            best_value=instance.best_sol,
+            num_frac_values=instance.num_frac_values,
+            solution_vector=instance.solution_vector,
             variables={
                 "problem_variables": problem_variables,
                 "mu": mu,
@@ -808,14 +820,14 @@ def __call__(
             solution (Solution): The solution to the problem instance.
         """
         if algorithm_parameters is None:
-        # Use the original MF solver
+            # Use the original MF solver
             return self._solve(
                 instance,
                 post_processor,
                 g,
                 pump_rate_flag,
                 evolution_step_size,
-                evolution_file
+                evolution_file,
             )
         elif isinstance(algorithm_parameters, AdamParameters):
             # Use the MF solver with Adam algorithm
@@ -826,7 +838,9 @@ def __call__(
                 g,
                 pump_rate_flag,
                 evolution_step_size,
-                evolution_file
+                evolution_file,
             )
         else:
-            raise ValueError(f"Solver option type {type(algorithm_parameters)} is not supported.")
+            raise ValueError(
+                f"Solver option type {type(algorithm_parameters)} is not supported."
+            )
diff --git a/examples/README.md b/examples/README.md
index f5d176b3..13ace985 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -20,10 +20,18 @@ The following folders contain our example problem instances:
 
 Identical problem instances across folders have the same properties except that different seed numbers were used to generate them. The instances in the `tuning_instances` folder are used to tune the parameters of the solvers in the package. We then use the parameters to solve the test instances to ensure the performance of the solver is independent of the particular random problem instances generated.
 
-The first line of each instance file contains the following information:
-- the problem instance size
-- the optimum solution
-- whether the solution is optimal (True or False)
-- the seed number used for generating the problem instance in `torch`
+The first line of each instance file contains the following information, in this order:
+- instance size
+- optimum solution (example files used the Gurobi solver to determine these values)
+- best solution (example files used the BFGS solver to determine these values)
+- whether the solution is optimal (`True` or `False`)
+- solution time for Gurobi to solve it 
+- solution time for BFGS to solve it
+- the seed number used for generating the instance in `torch`.
+- number of fractional values in the solution
 
-The second line of the instance file contains the elements of the vector $V$, which defines the instance. The rest of the lines in the file contain the matrix $Q$.
+The second line contains the elements of the vector `V`, which describes the instance.
+
+The rest of the lines before the last line hold the elements of the `Q` matrix.
+
+The final line contains the vector of the solution to the problem instance
\ No newline at end of file
diff --git a/examples/ccvm_boxqp_dl.py b/examples/ccvm_boxqp_dl.py
index f1feaac9..2d186200 100644
--- a/examples/ccvm_boxqp_dl.py
+++ b/examples/ccvm_boxqp_dl.py
@@ -29,12 +29,14 @@
         boxqp_instance.scale_coefs(solver.get_scaling_factor(boxqp_instance.q_matrix))
 
         # Solve the problem using the Adam algorithm
-        adam_parameters = AdamParameters(alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False)
+        adam_parameters = AdamParameters(
+            alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False
+        )
 
         solution = solver(
             instance=boxqp_instance,
             post_processor=None,
-            algorithm_parameters=adam_parameters, # Set to None to use the original DL algorithm
+            algorithm_parameters=adam_parameters,  # Set to None to use the original DL algorithm
         )
 
         print(solution)
diff --git a/examples/ccvm_boxqp_mf.py b/examples/ccvm_boxqp_mf.py
index 9896fb6a..72bd7cbd 100644
--- a/examples/ccvm_boxqp_mf.py
+++ b/examples/ccvm_boxqp_mf.py
@@ -36,12 +36,14 @@
         boxqp_instance.scale_coefs(solver.get_scaling_factor(boxqp_instance.q_matrix))
 
         # Solve the problem using the Adam algorithm
-        adam_parameters = AdamParameters(alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False)
+        adam_parameters = AdamParameters(
+            alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False
+        )
 
         solution = solver(
             instance=boxqp_instance,
             post_processor=None,
-            algorithm_parameters=adam_parameters, # Set to None to use the original MF algorithm
+            algorithm_parameters=adam_parameters,  # Set to None to use the original MF algorithm
         )
 
         print(solution)
diff --git a/examples/langevin_boxqp.py b/examples/langevin_boxqp.py
index 0b9c2537..2ca0a528 100644
--- a/examples/langevin_boxqp.py
+++ b/examples/langevin_boxqp.py
@@ -34,12 +34,13 @@
         boxqp_instance.scale_coefs(solver.get_scaling_factor(boxqp_instance.q_matrix))
 
         # Solve the problem using the Adam algorithm
-        adam_parameters = AdamParameters(alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False)
-
+        adam_parameters = AdamParameters(
+            alpha=0.001, beta1=0.9, beta2=0.999, add_assign=False
+        )
         solution = solver(
             instance=boxqp_instance,
             post_processor=None,
-            algorithm_parameters=adam_parameters, # Set to None to use the original Langevin algorithm
+            algorithm_parameters=adam_parameters,  # Set to None to use the original Langevin algorithm
         )
 
         print(solution)
diff --git a/examples/plots/DL-CCVM_TTS_cpu_plot.png b/examples/plots/DL-CCVM_TTS_cpu_plot.png
new file mode 100644
index 00000000..18a51aeb
Binary files /dev/null and b/examples/plots/DL-CCVM_TTS_cpu_plot.png differ
diff --git a/examples/tuning_instances/tuningH020-100-0.in b/examples/tuning_instances/tuningH020-100-0.in
new file mode 100644
index 00000000..68c8e4cd
--- /dev/null
+++ b/examples/tuning_instances/tuningH020-100-0.in
@@ -0,0 +1,23 @@
+20	130.714187	120.533024	True	0.0596	0.0649	0	0
+10.087280898069611	-12.44305548105992	-1.2148236554755254	0.5648168169183179	-30.973145872942894	3.4196523503294234	-3.5727892837251822	17.939179484350163	-25.641738789690166	-8.212533009356447	-3.4966110655400193	1.3292565953641255	12.101677061718831	-4.306434182724974	-12.709362215726706	-15.328007500741013	-53.94302740217192	-16.72939550095601	-10.131666297684188	2.7930160734407874	
+8.86305893593271	-9.858446177194887	-1.9375235713416803	1.9663912319761774	5.727621421803324	0.09829298549897217	0.25063386718369385	2.795182913900474	-1.0665075091446694	-3.4252603947580265	10.995772198820855	12.074255965451236	-7.258558121546757	-5.8377124779540654	-5.947362723708828	-0.2525293340735923	-1.7277013221813773	5.120409281823908	-0.9831634245183797	-2.608619469243905	
+-9.858446177194885	9.333263632644124	10.43365349260507	-7.1340858978526605	-0.28984635906031503	-1.0586376951516667	4.983580332506311	-3.03091523408705	-1.5977258779061834	6.278949456001676	4.596585221544624	2.503143198600721	-4.7891727953148955	-0.7327840328076645	-2.1068003399599324	10.202202632875396	13.381794208297642	5.159988374902264	-0.7823204999935325	-0.5847511399896829	
+-1.9375235713416812	10.433653492605071	1.5527343918034755	-2.6177739313552797	-9.12583433524127	6.255939936667333	-14.571356908880944	4.25752897139911	0.6160147455657924	-1.0965047813115048	3.3892172073736737	-7.1213199650537975	7.6204307206906075	-0.5078391673425633	6.750003035301231	3.630277184826862	2.494370094529099	5.431109664175738	0.6296346979854864	3.211014372550862	
+1.9663912319761765	-7.1340858978526605	-2.6177739313552792	9.31846828017092	4.244787005241093	-6.150143312946102	-2.1561269837087758	-2.5985017926861707	3.230126164744592	-1.4275926415888238	0.8114800091531671	1.6618242917160297	4.802434584813969	-0.7018785889739908	2.34876293916566	-4.413628414435653	-1.2012674364317129	6.3670843188464294	-2.5151518331561302	-6.973445970042086	
+5.727621421803324	-0.28984635906031375	-9.12583433524127	4.244787005241093	20.15541575934174	3.097735156371585	-1.8492566300252142	-5.038647351671167	9.672428300421892	-0.9422960212126333	-0.018455874007991306	-0.5902936868262897	-1.3707208792814887	-5.110407691866517	-4.9736126964224425	-4.372766091854149	15.475242350815662	8.75978868021917	-1.607365245209653	-1.6881830312092234	
+0.09829298549897245	-1.0586376951516672	6.255939936667333	-6.150143312946102	3.0977351563715847	-6.017181572426528	7.093828160010818	0.20550497914137547	-7.1171885510637445	1.3443990325557742	4.476412793814015	6.1260223712110635	-14.70329556141055	6.017442428039782	0.7140339067363188	4.094759804015349	4.2440978207983795	-4.067211035313667	-1.1578681422718748	0.2916827045995379	
+0.25063386718369324	4.983580332506311	-14.571356908880944	-2.1561269837087753	-1.8492566300252142	7.093828160010818	-5.489595370101825	0.464067912723738	8.560313543498511	2.457353613795316	-2.225712576103099	-10.198597361010254	11.640024379698133	-13.104140488422358	-7.635378107929114	-7.02544337856305	-1.4249754768379408	-0.8334627868103994	6.709876956445383	1.410925371499719	
+2.795182913900475	-3.03091523408705	4.25752897139911	-2.598501792686171	-5.038647351671167	0.20550497914137547	0.4640679127237375	11.830620594847714	-8.72989862709536	2.785788306016201	2.660572631586901	1.9194089948337438	-12.038596666784247	0.0512765686554243	-0.2271815394901968	-5.0821958008972645	-3.826338906339102	-3.5116609340322174	3.8914462483955856	-1.3855944088482757	
+-1.0665075091446694	-1.5977258779061834	0.6160147455657937	3.230126164744591	9.672428300421892	-7.1171885510637445	8.560313543498513	-8.72989862709536	2.3393140997903212	3.335299707568599	-4.547989900871264	0.16602126386799923	-2.403628957566903	1.941376441581631	0.4697762766855446	0.559825397976711	4.724913941056908	-7.694831887378623	-0.36596112132107206	3.680907451563029	
+-3.4252603947580265	6.278949456001677	-1.096504781311505	-1.427592641588824	-0.9422960212126333	1.3443990325557742	2.457353613795316	2.7857883060162005	3.3352997075685984	-5.271639976541123	1.2393215903261012	-4.3029667361639525	2.992323053348615	0.3857597505852123	-0.34569701387813795	1.6016038916394848	4.159864934279838	6.334495474769928	3.5654396488319624	-2.3515654047691656	
+10.995772198820857	4.596585221544624	3.3892172073736733	0.811480009153168	-0.018455874007991282	4.476412793814016	-2.225712576103099	2.6605726315869003	-4.547989900871264	1.239321590326101	9.078546691694562	-0.6289454291948475	-5.979251167321565	-6.4265233431318345	2.557789385222285	6.624205675850539	4.753186704729475	4.233259178025088	-3.588701979647439	1.2557749708199832	
+12.074255965451236	2.503143198600721	-7.1213199650537975	1.6618242917160302	-0.5902936868262895	6.1260223712110635	-10.198597361010256	1.9194089948337434	0.16602126386799926	-4.3029667361639525	-0.6289454291948476	-4.110011823999081	5.730314854214891	-2.857838550630473	4.2073800220508275	1.8620073101508765	-1.7315781531312435	0.7974454176989063	1.6026491683548674	-1.8301272633026067	
+-7.2585581215467565	-4.7891727953148955	7.620430720690608	4.802434584813969	-1.3707208792814893	-14.703295561410549	11.640024379698133	-12.038596666784247	-2.403628957566904	2.992323053348615	-5.979251167321564	5.730314854214891	-0.5270374875572611	8.787678205674704	-1.0255386489021416	2.8836619243048625	-2.185888338114094	-4.808142946098227	-6.855564841332104	1.2587297800892365	
+-5.8377124779540654	-0.7327840328076651	-0.5078391673425642	-0.7018785889739908	-5.1104076918665164	6.017442428039782	-13.104140488422358	0.051276568655424244	1.9413764415816306	0.38575975058521234	-6.426523343131835	-2.857838550630473	8.787678205674705	10.453464624609929	9.387875772397008	-1.933287162795821	0.12381436857540498	2.2960621376762873	3.0366084653244156	-0.2290943180633521	
+-5.947362723708828	-2.106800339959933	6.75000303530123	2.348762939165661	-4.9736126964224425	0.7140339067363188	-7.635378107929114	-0.2271815394901962	0.4697762766855443	-0.34569701387813795	2.557789385222285	4.2073800220508275	-1.0255386489021416	9.387875772397008	13.690079066153725	7.401994053205731	6.709765626151061	11.242773919019353	-1.0523756350426807	0.4840134105537958	
+-0.2525293340735924	10.202202632875398	3.630277184826861	-4.413628414435653	-4.372766091854149	4.094759804015349	-7.02544337856305	-5.0821958008972645	0.559825397976711	1.6016038916394848	6.624205675850539	1.862007310150877	2.883661924304862	-1.9332871627958215	7.401994053205731	19.390296480002927	9.886480449105967	5.661682233514462	-1.5832591494236439	0.12474133350396942	
+-1.7277013221813777	13.381794208297642	2.494370094529099	-1.2012674364317133	15.475242350815662	4.2440978207983795	-1.4249754768379408	-3.826338906339102	4.724913941056909	4.159864934279838	4.753186704729475	-1.731578153131244	-2.185888338114094	0.123814368575405	6.709765626151062	9.886480449105969	29.410023474057695	11.63483236376654	1.7428531057996106	-0.17314487197796924	
+5.120409281823908	5.159988374902264	5.431109664175737	6.3670843188464294	8.75978868021917	-4.067211035313668	-0.8334627868103994	-3.5116609340322174	-7.694831887378623	6.334495474769929	4.233259178025088	0.7974454176989059	-4.808142946098227	2.2960621376762878	11.242773919019353	5.661682233514462	11.634832363766538	6.426412686368047	-11.753835144208665	-1.0594094191329118	
+-0.9831634245183792	-0.782320499993532	0.629634697985486	-2.51515183315613	-1.6073652452096527	-1.1578681422718753	6.709876956445383	3.8914462483955856	-0.36596112132107245	3.5654396488319624	-3.5887019796474386	1.6026491683548671	-6.855564841332103	3.0366084653244156	-1.0523756350426807	-1.5832591494236439	1.7428531057996104	-11.753835144208663	14.688487631106923	1.98518486731934	
+-2.6086194692439055	-0.584751139989682	3.2110143725508618	-6.973445970042086	-1.6881830312092234	0.2916827045995377	1.410925371499719	-1.3855944088482757	3.680907451563029	-2.3515654047691656	1.2557749708199835	-1.8301272633026069	1.2587297800892363	-0.22909431806335212	0.4840134105537959	0.12474133350396942	-0.1731448719779695	-1.0594094191329118	1.9851848673193404	0.9977232255296955	
+1.0	1.0	1.0	0.0	0.0	1.0	0.0	1.0	0.0	1.0	1.0	1.0	0.0	1.0	1.0	1.0	1.0	1.0	0.0	0.0	
\ No newline at end of file
diff --git a/examples/tuning_instances/tuningH020-100-10.in b/examples/tuning_instances/tuningH020-100-10.in
new file mode 100644
index 00000000..86cc1725
--- /dev/null
+++ b/examples/tuning_instances/tuningH020-100-10.in
@@ -0,0 +1,23 @@
+20	152.602291	147.960031	True	0.0687	0.0017	10	1
+6.55278211535826	26.470988395629238	-14.897186731719145	10.395656362826305	-22.05875402050769	-1.5114009893917126	-6.833167299529663	15.366012406943385	18.681704726702513	10.8852219578601	13.324706471949998	-4.839155300167012	22.391444285433558	12.469093418236747	-20.156194999350024	-23.401284456225238	13.789232354600546	-29.6245453800882	13.58087623347738	5.938172913922883	
+-21.243890383400895	-3.988264712228007	-7.621357325768197	-5.656558466392048	-0.6687252425432011	6.933186635138443	0.0022049254778148055	11.714146440245145	12.294646388770941	0.7680632814252816	5.202351252993051	-2.1915133661470327	-5.370929513043189	-2.56137181337984	1.6131134775503568	-2.7538676453553497	12.66001049029718	-5.008454305922502	-6.1243216783126755	1.948384152174744	
+-3.988264712228007	-2.147706046717449	3.259529969119094	2.4783206813968017	11.697838359403322	-8.755449236876437	-1.3928784076709226	-5.523956598348611	-2.5116250867798247	-1.7165287050683657	-13.197965787528878	-4.415420792446116	-9.738468442466678	-9.097526006197652	3.2778639230766546	0.1988935594806641	6.795134720877594	3.4471128281939376	-14.020816492302247	6.914090688085658	
+-7.621357325768197	3.2595299691190935	10.914873310463221	1.1196933097686943	-5.279626577151485	1.9293846638464422	-1.3672704148563055	2.1657684517766227	3.71639610319628	-5.978561887407472	-1.9801767262637013	2.348765077051741	4.351574235785557	-2.603870866463969	-1.1007853906828322	3.150621376219221	0.6041740739792207	-4.138976958314043	2.423986348947145	1.0993764805478445	
+-5.656558466392047	2.4783206813968026	1.1196933097686939	-9.857493291016908	-1.9288950656972053	-6.3064108774384	1.815801865733447	-1.4970909077530143	0.05338212250037715	-1.6770201466410604	-0.9502376271373604	1.213464330374137	-8.710471774155938	-1.5528390063140343	1.4942793660962799	3.8243081456852193	0.16367619774962414	9.257804176898372	-1.1882242923786699	-6.369671586867056	
+-0.668725242543201	11.697838359403322	-5.279626577151485	-1.9288950656972046	-18.306026418531335	-4.454180635014381	3.3396871852758983	2.437295434608914	17.20331053188646	1.6086493902737602	-4.807862624643244	5.070622240810606	-11.365638112299868	-1.243761851334278	3.480454287135601	4.512120860381645	0.5986193283426048	3.201996796640032	15.206255852917057	0.7845970527306929	
+6.933186635138444	-8.755449236876437	1.9293846638464418	-6.306410877438397	-4.454180635014379	14.67558989320912	6.412672086890078	-5.615158170664385	1.7554543828361318	-0.2203249781124835	7.968088212002641	11.591181330833352	9.497934783067405	1.3323612939567775	-6.082324762957307	-10.239776732179433	-7.632766309480187	-5.484326562716803	1.8273387839629096	0.7677104526285878	
+0.002204925477814964	-1.3928784076709226	-1.367270414856306	1.815801865733447	3.3396871852758974	6.412672086890078	-6.308075838190996	-12.17877836405106	7.713933159440996	-3.631970201874793	13.283425299292498	-9.53608608625253	-3.485771981845985	-3.9404696164037207	4.332862423785162	-4.777901563737519	-4.102444329958091	-2.6305089478872	1.7576001506475056	-5.802905443528794	
+11.714146440245145	-5.523956598348611	2.1657684517766222	-1.497090907753014	2.4372954346089144	-5.615158170664385	-12.178778364051063	9.77694634360597	-19.92247800079397	1.8885481877474244	-4.573721636165267	3.495855435442849	-2.148751000873256	8.171502456133565	-3.7249342468834703	2.269650821145986	-2.47408341701773	17.274832203896143	-6.874703917056558	6.212826597286941	
+12.294646388770941	-2.511625086779825	3.71639610319628	0.05338212250037738	17.20331053188646	1.7554543828361315	7.713933159440996	-19.92247800079397	0.8188792816470473	-3.516874768883124	-4.705947126276244	1.621186311872245	7.9364309233695405	-6.111291754267368	-0.057687561534824176	-3.343294405500477	-9.070588204771632	-5.561144939006115	-9.32433071359175	0.11865389154265744	
+0.7680632814252826	-1.7165287050683662	-5.978561887407472	-1.6770201466410604	1.6086493902737595	-0.22032497811248375	-3.6319702018747937	1.8885481877474242	-3.516874768883124	1.0850701280145734	-0.9470016835744178	-7.0727666904733955	-4.970888127482483	-4.375726300293512	0.6205523540435092	2.585750196979889	1.6336224159794408	5.042412912807089	-1.3663402379393126	3.3337911116276002	
+5.202351252993051	-13.19796578752888	-1.9801767262637	-0.9502376271373604	-4.807862624643244	7.968088212002641	13.283425299292498	-4.573721636165268	-4.705947126276246	-0.9470016835744178	-2.0946999242410005	3.037198583397408	3.4554712915762087	4.336016468091784	2.9461630645544425	-7.694468597797987	-10.012838555261544	8.171874137093502	8.52295292262251	3.8100795581822293	
+-2.1915133661470327	-4.415420792446117	2.3487650770517416	1.2134643303741368	5.070622240810606	11.591181330833354	-9.53608608625253	3.49585543544285	1.6211863118722458	-7.072766690473396	3.037198583397408	-8.56592297627548	6.896567359292155	-0.09334010790810036	0.2725005715258007	-3.9701285573684926	-0.9691849489597432	-9.454546592989063	-6.858617260396457	2.3838539536461334	
+-5.3709295130431896	-9.738468442466678	4.351574235785557	-8.71047177415594	-11.36563811229987	9.497934783067405	-3.4857719818459847	-2.1487510008732573	7.9364309233695405	-4.970888127482483	3.455471291576209	6.896567359292156	-19.737157511885332	-3.6211228424551067	-2.4839573703540925	-3.3503230249906166	-3.79372991408374	13.131568652526862	-0.6283274037694551	13.647509976671934	
+-2.56137181337984	-9.097526006197652	-2.6038708664639687	-1.5528390063140343	-1.2437618513342787	1.3323612939567775	-3.9404696164037207	8.171502456133567	-6.111291754267368	-4.375726300293512	4.336016468091784	-0.09334010790809925	-3.6211228424551076	-3.1169459411842704	0.9660011398350025	-0.9118789320619911	5.321873649111405	10.411118477818524	-2.465747657256808	-0.36653690856328325	
+1.613113477550358	3.277863923076655	-1.100785390682832	1.4942793660962792	3.480454287135601	-6.082324762957306	4.332862423785162	-3.7249342468834703	-0.05768756153482446	0.6205523540435093	2.9461630645544425	0.27250057152580137	-2.4839573703540916	0.9660011398350022	3.02075267705597	6.803081807559396	2.8910364308337164	-1.7909329414780024	0.93382794220741	-12.141867971871376	
+-2.7538676453553497	0.19889355948066412	3.1506213762192217	3.8243081456852193	4.5121208603816445	-10.239776732179433	-4.77790156373752	2.2696508211459854	-3.343294405500477	2.585750196979889	-7.694468597797987	-3.970128557368492	-3.3503230249906166	-0.9118789320619911	6.803081807559397	9.877574763419032	3.5600537177292364	6.261523083954565	-2.238509187306634	-4.201998442440615	
+12.660010490297182	6.795134720877594	0.6041740739792212	0.16367619774962425	0.5986193283426047	-7.632766309480189	-4.102444329958091	-2.4740834170177304	-9.070588204771633	1.6336224159794417	-10.012838555261544	-0.9691849489597434	-3.79372991408374	5.321873649111405	2.891036430833717	3.560053717729237	-7.902189732765539	7.008425249106685	-1.5969159729497633	3.0570639461972875	
+-5.008454305922501	3.4471128281939376	-4.138976958314043	9.257804176898372	3.2019967966400316	-5.484326562716802	-2.6305089478872006	17.274832203896143	-5.561144939006115	5.042412912807088	8.171874137093502	-9.454546592989063	13.13156865252686	10.411118477818524	-1.7909329414780024	6.261523083954563	7.008425249106685	-12.146586212789382	0.10332318651410073	-10.698058184810273	
+-6.124321678312676	-14.020816492302247	2.423986348947145	-1.1882242923786692	15.206255852917055	1.82733878396291	1.7576001506475059	-6.874703917056558	-9.32433071359175	-1.3663402379393126	8.52295292262251	-6.858617260396457	-0.6283274037694553	-2.4657476572568084	0.93382794220741	-2.2385091873066343	-1.596915972949763	0.10332318651410026	-12.27844225363516	-6.708091059444423	
+1.948384152174744	6.914090688085658	1.0993764805478448	-6.369671586867055	0.7845970527306926	0.7677104526285881	-5.802905443528794	6.212826597286943	0.11865389154265724	3.3337911116276002	3.8100795581822298	2.3838539536461334	13.647509976671934	-0.3665369085632833	-12.141867971871376	-4.201998442440615	3.057063946197288	-10.698058184810273	-6.708091059444423	0.1553061489510402	
+1.0	0.0	0.0	0.0	0.0	1.0	0.0	1.0	1.0	0.0	1.0	1.0	1.0	1.0	0.0	0.0	0.1107	0.0	0.0	1.0	
\ No newline at end of file
diff --git a/examples/tuning_instances/tuningP020-50-0.in b/examples/tuning_instances/tuningP020-50-0.in
deleted file mode 100644
index 328d83fd..00000000
--- a/examples/tuning_instances/tuningP020-50-0.in
+++ /dev/null
@@ -1,22 +0,0 @@
-20	269.791831	True	0.0145	0
-20.0	30.770627024270297	50.0	43.5	5.005116320799399	-31.784109968711157	-16.718025638013994	73.5	26.18565323968715	16.561358137424367	19.0	-10.0	15.284834183358203	31.611732404707112	-11.219820035160684	37.047271376452926	58.485766381663474	12.489647222545514	29.97846749843479	51.2419814804898	
--46.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	-25.601178037973085	0.0	0.0	0.9354831577751985	1.2556919557947792	-5.229882504875548	0.0	-2.6467467283480826	-10.01573625671544	0.0	0.0	-0.9868502014615244	-6.0378002271239435	12.096143858108341	-4.462077866765878	12.3711844727345	-4.5057982801696115	-2.321337753530534	4.667223366612881	
-0.0	0.0	-26.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	0.0	0.0	-23.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	0.9354831577751974	0.0	0.0	-27.862703316824796	3.9470489668603648	7.668624395136454	0.0	11.748020479920076	-9.355999861835059	0.0	0.0	-4.852690689633248	-20.518910092804045	-1.4913175953614186	-4.988504757773894	-3.487084984541326	-4.69974687385148	3.553288281812829	-1.852538643520633	
-0.0	1.2556919557947779	0.0	0.0	3.9470489668603634	-25.898403164083625	4.830005221008427	0.0	9.271647730053301	13.361068348813474	0.0	0.0	-13.890035422153488	7.211914011299015	-2.23033403355666	8.068243946821534	3.0456011412293416	7.213548004531507	-5.6821971375511895	-1.6351309806466283	
-0.0	-5.229882504875549	0.0	0.0	7.668624395136454	4.830005221008428	-32.695481049025716	0.0	4.0667429976256155	1.987535243641832	0.0	0.0	5.565624762113158	-5.4912021534803745	0.16367925747732762	1.999713768523734	-1.021037641657685	-3.4468730254998743	5.628466209731032	1.3089256668713367	
-0.0	0.0	0.0	0.0	0.0	0.0	0.0	-69.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	-2.6467467283480812	0.0	0.0	11.748020479920074	9.2716477300533	4.0667429976256155	0.0	-27.481435583105785	-4.7817795551979785	0.0	0.0	5.291014326770963	12.711347687175882	0.43092601836428285	-8.24022591008047	5.489372507185203	-3.8202407185312635	-1.8978858276112809	12.431850932349475	
-0.0	-10.015736256715442	0.0	0.0	-9.355999861835057	13.361068348813474	1.987535243641833	0.0	-4.781779555197979	-47.84502732218589	0.0	0.0	4.898625494923804	-7.163810897273876	7.104535298309259	-6.532053906752195	-8.32950847116451	6.494020271732808	-2.310438859779366	5.529624179767629	
-0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	-20.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	-2.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	0.0	
-0.0	-0.9868502014615264	0.0	0.0	-4.852690689633248	-13.890035422153488	5.565624762113157	0.0	5.291014326770963	4.898625494923802	0.0	0.0	-22.20378831119878	-2.9491753841068453	-2.446974722264197	1.871916979062467	-5.596511429026527	-12.407708281273083	-10.177194762105117	-2.1953548945056918	
-0.0	-6.037800227123944	0.0	0.0	-20.518910092804045	7.211914011299015	-5.4912021534803745	0.0	12.711347687175882	-7.163810897273877	0.0	0.0	-2.9491753841068453	-36.410098235069114	-1.2008955485439095	-7.2649884694013345	-0.16392373808912183	-9.609244629859852	-5.316640259639322	-12.73324895433498	
-0.0	12.096143858108343	0.0	0.0	-1.4913175953614184	-2.2303340335566606	0.1636792574773275	0.0	0.4309260183642834	7.104535298309259	0.0	0.0	-2.446974722264197	-1.2008955485439095	-18.961742832665372	5.02863683159708	-10.576051678379732	3.7371658663604603	-8.474873618806788	1.3012013258936417	
-0.0	-4.462077866765878	0.0	0.0	-4.988504757773894	8.068243946821532	1.9997137685237332	0.0	-8.24022591008047	-6.532053906752195	0.0	0.0	1.8719169790624661	-7.264988469401335	5.028636831597078	-45.93887259557877	5.941829564712094	-1.39496720040215	9.504692253794362	-7.863366649696917	
-0.0	12.3711844727345	0.0	0.0	-3.4870849845413248	3.045601141229341	-1.0210376416576852	0.0	5.489372507185204	-8.329508471164512	0.0	0.0	-5.5965114290265285	-0.16392373808912142	-10.576051678379732	5.941829564712096	-33.154639617198725	-9.622401404904489	-8.613699342751708	-7.4839612212760125	
-0.0	-4.5057982801696115	0.0	0.0	-4.699746873851479	7.213548004531508	-3.4468730254998747	0.0	-3.8202407185312643	6.494020271732806	0.0	0.0	-12.40770828127308	-9.609244629859852	3.737165866360461	-1.3949672004021494	-9.62240140490449	-44.12315349429998	-6.6790136575405095	-6.816890403268468	
-0.0	-2.3213377535305346	0.0	0.0	3.553288281812829	-5.6821971375511895	5.628466209731032	0.0	-1.8978858276112813	-2.310438859779367	0.0	0.0	-10.177194762105117	-5.31664025963932	-8.474873618806786	9.504692253794364	-8.613699342751708	-6.679013657540508	-28.791613277480643	-7.639914272739444	
-0.0	4.667223366612881	0.0	0.0	-1.8525386435206328	-1.6351309806466285	1.308925666871337	0.0	12.431850932349473	5.529624179767627	0.0	0.0	-2.195354894505692	-12.73324895433498	1.3012013258936432	-7.863366649696915	-7.4839612212760125	-6.816890403268468	-7.6399142727394445	-31.031863163309843	


Test patch:
diff --git a/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test002.in b/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test002.in
index ded2e34f..241cf82d 100644
--- a/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test002.in
+++ b/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test002.in
@@ -1,4 +1,5 @@
-2	799.560976	True	0.0946	4
+2	152.602291	147.960031	True	0.0687	0.0017	10	1
 31	37
 -41	-35
--20	-30
\ No newline at end of file
+-20	-30
+1.0	0.0	
\ No newline at end of file
diff --git a/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test020-100-10.in b/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test020-100-10.in
index 2e36a3fd..86cc1725 100644
--- a/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test020-100-10.in
+++ b/ccvm_simulators/problem_classes/boxqp/tests/test_instances/test020-100-10.in
@@ -1,22 +1,23 @@
-20	799.560976	True	0.0946	10
-31	37	31	5	47	24	-35	29	30	-12	5	-1	40	-48	20	47	-45	22	-21	-31	
--41	-35	14	-22	39	43	-21	-42	23	-50	-10	-14	-34	-39	4	38	12	-17	22	28	
--35	1	4	27	19	-37	-25	-37	42	36	-20	-20	39	-38	15	-19	7	-14	-23	-32	
-14	4	-28	-27	44	-39	-22	24	38	-41	-35	-32	30	21	38	-39	-33	-4	-43	25	
--22	27	-27	46	38	-6	-45	-46	21	38	38	0	4	-16	-35	27	38	-35	-44	35	
-39	19	44	38	46	12	7	29	-8	7	47	0	-5	-10	39	23	-13	-50	-32	-27	
-43	-37	-39	-6	12	-36	1	29	-33	0	3	-25	-2	-33	-18	31	30	-9	40	-38	
--21	-25	-22	-45	7	1	23	14	-12	-28	46	16	17	12	45	49	-23	32	12	27	
--42	-37	24	-46	29	29	14	-17	45	-7	38	46	23	-10	-7	40	21	-42	35	22	
-23	42	38	21	-8	-33	-12	45	-37	-9	-17	-46	37	44	-22	-11	41	-41	-43	-28	
--50	36	-41	38	7	0	-28	-7	-9	-20	-41	-48	15	-37	25	2	-45	43	34	-2	
--10	-20	-35	38	47	3	46	38	-17	-41	-5	-32	0	-6	-49	13	27	-32	-23	33	
--14	-20	-32	0	0	-25	16	46	-46	-48	-32	18	-36	-46	-44	-8	23	-6	40	-12	
--34	39	30	4	-5	-2	17	23	37	15	0	-36	28	29	-29	19	-2	10	8	-37	
--39	-38	21	-16	-10	-33	12	-10	44	-37	-6	-46	29	-34	24	-46	-28	-31	35	23	
-4	15	38	-35	39	-18	45	-7	-22	25	-49	-44	-29	24	12	35	-18	31	-37	17	
-38	-19	-39	27	23	31	49	40	-11	2	13	-8	19	-46	35	-48	-20	-33	9	20	
-12	7	-33	38	-13	30	-23	21	41	-45	27	23	-2	-28	-18	-20	26	-40	29	-18	
--17	-14	-4	-35	-50	-9	32	-42	-41	43	-32	-6	10	-31	31	-33	-40	-1	40	-41	
-22	-23	-43	-44	-32	40	12	35	-43	34	-23	40	8	35	-37	9	29	40	-29	34	
-28	-32	25	35	-27	-38	27	22	-28	-2	33	-12	-37	23	17	20	-18	-41	34	6	
+20	152.602291	147.960031	True	0.0687	0.0017	10	1
+6.55278211535826	26.470988395629238	-14.897186731719145	10.395656362826305	-22.05875402050769	-1.5114009893917126	-6.833167299529663	15.366012406943385	18.681704726702513	10.8852219578601	13.324706471949998	-4.839155300167012	22.391444285433558	12.469093418236747	-20.156194999350024	-23.401284456225238	13.789232354600546	-29.6245453800882	13.58087623347738	5.938172913922883	
+-21.243890383400895	-3.988264712228007	-7.621357325768197	-5.656558466392048	-0.6687252425432011	6.933186635138443	0.0022049254778148055	11.714146440245145	12.294646388770941	0.7680632814252816	5.202351252993051	-2.1915133661470327	-5.370929513043189	-2.56137181337984	1.6131134775503568	-2.7538676453553497	12.66001049029718	-5.008454305922502	-6.1243216783126755	1.948384152174744	
+-3.988264712228007	-2.147706046717449	3.259529969119094	2.4783206813968017	11.697838359403322	-8.755449236876437	-1.3928784076709226	-5.523956598348611	-2.5116250867798247	-1.7165287050683657	-13.197965787528878	-4.415420792446116	-9.738468442466678	-9.097526006197652	3.2778639230766546	0.1988935594806641	6.795134720877594	3.4471128281939376	-14.020816492302247	6.914090688085658	
+-7.621357325768197	3.2595299691190935	10.914873310463221	1.1196933097686943	-5.279626577151485	1.9293846638464422	-1.3672704148563055	2.1657684517766227	3.71639610319628	-5.978561887407472	-1.9801767262637013	2.348765077051741	4.351574235785557	-2.603870866463969	-1.1007853906828322	3.150621376219221	0.6041740739792207	-4.138976958314043	2.423986348947145	1.0993764805478445	
+-5.656558466392047	2.4783206813968026	1.1196933097686939	-9.857493291016908	-1.9288950656972053	-6.3064108774384	1.815801865733447	-1.4970909077530143	0.05338212250037715	-1.6770201466410604	-0.9502376271373604	1.213464330374137	-8.710471774155938	-1.5528390063140343	1.4942793660962799	3.8243081456852193	0.16367619774962414	9.257804176898372	-1.1882242923786699	-6.369671586867056	
+-0.668725242543201	11.697838359403322	-5.279626577151485	-1.9288950656972046	-18.306026418531335	-4.454180635014381	3.3396871852758983	2.437295434608914	17.20331053188646	1.6086493902737602	-4.807862624643244	5.070622240810606	-11.365638112299868	-1.243761851334278	3.480454287135601	4.512120860381645	0.5986193283426048	3.201996796640032	15.206255852917057	0.7845970527306929	
+6.933186635138444	-8.755449236876437	1.9293846638464418	-6.306410877438397	-4.454180635014379	14.67558989320912	6.412672086890078	-5.615158170664385	1.7554543828361318	-0.2203249781124835	7.968088212002641	11.591181330833352	9.497934783067405	1.3323612939567775	-6.082324762957307	-10.239776732179433	-7.632766309480187	-5.484326562716803	1.8273387839629096	0.7677104526285878	
+0.002204925477814964	-1.3928784076709226	-1.367270414856306	1.815801865733447	3.3396871852758974	6.412672086890078	-6.308075838190996	-12.17877836405106	7.713933159440996	-3.631970201874793	13.283425299292498	-9.53608608625253	-3.485771981845985	-3.9404696164037207	4.332862423785162	-4.777901563737519	-4.102444329958091	-2.6305089478872	1.7576001506475056	-5.802905443528794	
+11.714146440245145	-5.523956598348611	2.1657684517766222	-1.497090907753014	2.4372954346089144	-5.615158170664385	-12.178778364051063	9.77694634360597	-19.92247800079397	1.8885481877474244	-4.573721636165267	3.495855435442849	-2.148751000873256	8.171502456133565	-3.7249342468834703	2.269650821145986	-2.47408341701773	17.274832203896143	-6.874703917056558	6.212826597286941	
+12.294646388770941	-2.511625086779825	3.71639610319628	0.05338212250037738	17.20331053188646	1.7554543828361315	7.713933159440996	-19.92247800079397	0.8188792816470473	-3.516874768883124	-4.705947126276244	1.621186311872245	7.9364309233695405	-6.111291754267368	-0.057687561534824176	-3.343294405500477	-9.070588204771632	-5.561144939006115	-9.32433071359175	0.11865389154265744	
+0.7680632814252826	-1.7165287050683662	-5.978561887407472	-1.6770201466410604	1.6086493902737595	-0.22032497811248375	-3.6319702018747937	1.8885481877474242	-3.516874768883124	1.0850701280145734	-0.9470016835744178	-7.0727666904733955	-4.970888127482483	-4.375726300293512	0.6205523540435092	2.585750196979889	1.6336224159794408	5.042412912807089	-1.3663402379393126	3.3337911116276002	
+5.202351252993051	-13.19796578752888	-1.9801767262637	-0.9502376271373604	-4.807862624643244	7.968088212002641	13.283425299292498	-4.573721636165268	-4.705947126276246	-0.9470016835744178	-2.0946999242410005	3.037198583397408	3.4554712915762087	4.336016468091784	2.9461630645544425	-7.694468597797987	-10.012838555261544	8.171874137093502	8.52295292262251	3.8100795581822293	
+-2.1915133661470327	-4.415420792446117	2.3487650770517416	1.2134643303741368	5.070622240810606	11.591181330833354	-9.53608608625253	3.49585543544285	1.6211863118722458	-7.072766690473396	3.037198583397408	-8.56592297627548	6.896567359292155	-0.09334010790810036	0.2725005715258007	-3.9701285573684926	-0.9691849489597432	-9.454546592989063	-6.858617260396457	2.3838539536461334	
+-5.3709295130431896	-9.738468442466678	4.351574235785557	-8.71047177415594	-11.36563811229987	9.497934783067405	-3.4857719818459847	-2.1487510008732573	7.9364309233695405	-4.970888127482483	3.455471291576209	6.896567359292156	-19.737157511885332	-3.6211228424551067	-2.4839573703540925	-3.3503230249906166	-3.79372991408374	13.131568652526862	-0.6283274037694551	13.647509976671934	
+-2.56137181337984	-9.097526006197652	-2.6038708664639687	-1.5528390063140343	-1.2437618513342787	1.3323612939567775	-3.9404696164037207	8.171502456133567	-6.111291754267368	-4.375726300293512	4.336016468091784	-0.09334010790809925	-3.6211228424551076	-3.1169459411842704	0.9660011398350025	-0.9118789320619911	5.321873649111405	10.411118477818524	-2.465747657256808	-0.36653690856328325	
+1.613113477550358	3.277863923076655	-1.100785390682832	1.4942793660962792	3.480454287135601	-6.082324762957306	4.332862423785162	-3.7249342468834703	-0.05768756153482446	0.6205523540435093	2.9461630645544425	0.27250057152580137	-2.4839573703540916	0.9660011398350022	3.02075267705597	6.803081807559396	2.8910364308337164	-1.7909329414780024	0.93382794220741	-12.141867971871376	
+-2.7538676453553497	0.19889355948066412	3.1506213762192217	3.8243081456852193	4.5121208603816445	-10.239776732179433	-4.77790156373752	2.2696508211459854	-3.343294405500477	2.585750196979889	-7.694468597797987	-3.970128557368492	-3.3503230249906166	-0.9118789320619911	6.803081807559397	9.877574763419032	3.5600537177292364	6.261523083954565	-2.238509187306634	-4.201998442440615	
+12.660010490297182	6.795134720877594	0.6041740739792212	0.16367619774962425	0.5986193283426047	-7.632766309480189	-4.102444329958091	-2.4740834170177304	-9.070588204771633	1.6336224159794417	-10.012838555261544	-0.9691849489597434	-3.79372991408374	5.321873649111405	2.891036430833717	3.560053717729237	-7.902189732765539	7.008425249106685	-1.5969159729497633	3.0570639461972875	
+-5.008454305922501	3.4471128281939376	-4.138976958314043	9.257804176898372	3.2019967966400316	-5.484326562716802	-2.6305089478872006	17.274832203896143	-5.561144939006115	5.042412912807088	8.171874137093502	-9.454546592989063	13.13156865252686	10.411118477818524	-1.7909329414780024	6.261523083954563	7.008425249106685	-12.146586212789382	0.10332318651410073	-10.698058184810273	
+-6.124321678312676	-14.020816492302247	2.423986348947145	-1.1882242923786692	15.206255852917055	1.82733878396291	1.7576001506475059	-6.874703917056558	-9.32433071359175	-1.3663402379393126	8.52295292262251	-6.858617260396457	-0.6283274037694553	-2.4657476572568084	0.93382794220741	-2.2385091873066343	-1.596915972949763	0.10332318651410026	-12.27844225363516	-6.708091059444423	
+1.948384152174744	6.914090688085658	1.0993764805478448	-6.369671586867055	0.7845970527306926	0.7677104526285881	-5.802905443528794	6.212826597286943	0.11865389154265724	3.3337911116276002	3.8100795581822298	2.3838539536461334	13.647509976671934	-0.3665369085632833	-12.141867971871376	-4.201998442440615	3.057063946197288	-10.698058184810273	-6.708091059444423	0.1553061489510402	
+1.0	0.0	0.0	0.0	0.0	1.0	0.0	1.0	1.0	0.0	1.0	1.0	1.0	1.0	0.0	0.0	0.1107	0.0	0.0	1.0	
\ No newline at end of file
diff --git a/ccvm_simulators/problem_classes/boxqp/tests/test_problem_instance.py b/ccvm_simulators/problem_classes/boxqp/tests/test_problem_instance.py
index 0cc16ef9..5b7e68be 100644
--- a/ccvm_simulators/problem_classes/boxqp/tests/test_problem_instance.py
+++ b/ccvm_simulators/problem_classes/boxqp/tests/test_problem_instance.py
@@ -97,19 +97,32 @@ def test_load_instance_cpu(self):
             file_path=self.file_path,
             file_delimiter="\t",
         )
-
-        expected_optimal_sol = 799.560976
+        
+        expected_optimal_sol = 152.602291    
+        expected_best_sol = 147.960031
 
         # check all class variable type if function runs successfully
         assert isinstance(problem_instance.optimal_sol, float)
+        assert isinstance(problem_instance.best_sol, float)
         assert problem_instance.optimal_sol == expected_optimal_sol
+        assert problem_instance.best_sol == expected_best_sol
         assert isinstance(problem_instance.sol_time_gb, float)
+        assert isinstance(problem_instance.sol_time_bfgs, float)
 
-        error_message = "optimal_sol must be greater than 0"
-        self.assertGreater(problem_instance.optimal_sol, 0, error_message)
+    
+        self.assertGreater(
+            problem_instance.optimal_sol, 0, "optimal_sol must be greater than 0"
+        )
+        self.assertGreater(
+            problem_instance.best_sol, 0, "best_sol must be greater than 0"
+        )
 
-        error_message = "sol_time_gb must be greater than 0"
-        self.assertGreater(problem_instance.sol_time_gb, 0, error_message)
+        self.assertGreater(
+            problem_instance.sol_time_gb, 0, "sol_time_gb must be greater than 0"
+        )
+        self.assertGreater(
+            problem_instance.sol_time_bfgs, 0, "sol_time_bfgs must be greater than 0"
+        )
 
     def test_scale_coefs_one_time(self):
         """Test successfully scaling the instance's coefficients."""
diff --git a/ccvm_simulators/tests/test_solution.py b/ccvm_simulators/tests/test_solution.py
index a87abe6b..fc742f4b 100644
--- a/ccvm_simulators/tests/test_solution.py
+++ b/ccvm_simulators/tests/test_solution.py
@@ -5,7 +5,7 @@
 
 
 class TestSolution(unittest.TestCase):
-    def setUp(self):
+    def setUp(self):       
         self.problem_size = 10
         self.batch_size = 5
         self.instance_name = "test_instance"
@@ -13,6 +13,9 @@ def setUp(self):
         self.solve_time = 2.0
         self.pp_time = 3.0
         self.optimal_value = 3.2
+        self.best_value = 3.2
+        self.num_frac_values = 1
+        self.solution_vector = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0]
         self.device = "cpu"
         self.evolution_file = "test"
         self.iterations = 1
@@ -28,6 +31,9 @@ def test_save_file_invalid_tensor_name(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             self.variables,
             self.evolution_file,
             self.device,
@@ -49,6 +55,9 @@ def test_save_file_invalid_variable_type(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             variable,
             self.evolution_file,
             self.device,
@@ -71,6 +80,9 @@ def test_save_file_valid_parameters(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             self.variables,
             self.evolution_file,
             self.device,
@@ -102,6 +114,9 @@ def test_solution_stats_objective_values_out_of_range(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             self.variables,
             self.evolution_file,
             self.device,
@@ -135,6 +150,9 @@ def test_solution_stats_solutions_within_limit(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             self.variables,
             self.evolution_file,
             self.device,
@@ -155,8 +173,7 @@ def test_solution_stats_solutions_within_limit(self):
         assert original_solution_stats == expected_solution_stats
 
     def test_get_meta_dict(self):
-        """Test solution performance for values parameters with no impact on solution stats"""
-
+        """Test solution performance for values parameters with no impact on solution stats"""    
         solution = Solution(
             self.problem_size,
             self.batch_size,
@@ -166,6 +183,9 @@ def test_get_meta_dict(self):
             self.solve_time,
             self.pp_time,
             self.optimal_value,
+            self.best_value,
+            self.num_frac_values,
+            self.solution_vector,
             self.variables,
             self.evolution_file,
             self.device,
@@ -179,7 +199,10 @@ def test_get_meta_dict(self):
             "solve_time": self.solve_time,
             "pp_time": self.pp_time,
             "optimal_value": self.optimal_value,
+            "best_value": self.best_value,
+            "num_frac_values": self.num_frac_values,
             "evolution_file": self.evolution_file,
+            "solution_vector": self.solution_vector,
             "solution_performance": {
                 "optimal": 0.0,
                 "one_percent": 0.0,
diff --git a/examples/test_instances/test020-100-10.in b/examples/test_instances/test020-100-10.in
index 2e36a3fd..86cc1725 100644
--- a/examples/test_instances/test020-100-10.in
+++ b/examples/test_instances/test020-100-10.in
@@ -1,22 +1,23 @@
-20	799.560976	True	0.0946	10
-31	37	31	5	47	24	-35	29	30	-12	5	-1	40	-48	20	47	-45	22	-21	-31	
--41	-35	14	-22	39	43	-21	-42	23	-50	-10	-14	-34	-39	4	38	12	-17	22	28	
--35	1	4	27	19	-37	-25	-37	42	36	-20	-20	39	-38	15	-19	7	-14	-23	-32	
-14	4	-28	-27	44	-39	-22	24	38	-41	-35	-32	30	21	38	-39	-33	-4	-43	25	
--22	27	-27	46	38	-6	-45	-46	21	38	38	0	4	-16	-35	27	38	-35	-44	35	
-39	19	44	38	46	12	7	29	-8	7	47	0	-5	-10	39	23	-13	-50	-32	-27	
-43	-37	-39	-6	12	-36	1	29	-33	0	3	-25	-2	-33	-18	31	30	-9	40	-38	
--21	-25	-22	-45	7	1	23	14	-12	-28	46	16	17	12	45	49	-23	32	12	27	
--42	-37	24	-46	29	29	14	-17	45	-7	38	46	23	-10	-7	40	21	-42	35	22	
-23	42	38	21	-8	-33	-12	45	-37	-9	-17	-46	37	44	-22	-11	41	-41	-43	-28	
--50	36	-41	38	7	0	-28	-7	-9	-20	-41	-48	15	-37	25	2	-45	43	34	-2	
--10	-20	-35	38	47	3	46	38	-17	-41	-5	-32	0	-6	-49	13	27	-32	-23	33	
--14	-20	-32	0	0	-25	16	46	-46	-48	-32	18	-36	-46	-44	-8	23	-6	40	-12	
--34	39	30	4	-5	-2	17	23	37	15	0	-36	28	29	-29	19	-2	10	8	-37	
--39	-38	21	-16	-10	-33	12	-10	44	-37	-6	-46	29	-34	24	-46	-28	-31	35	23	
-4	15	38	-35	39	-18	45	-7	-22	25	-49	-44	-29	24	12	35	-18	31	-37	17	
-38	-19	-39	27	23	31	49	40	-11	2	13	-8	19	-46	35	-48	-20	-33	9	20	
-12	7	-33	38	-13	30	-23	21	41	-45	27	23	-2	-28	-18	-20	26	-40	29	-18	
--17	-14	-4	-35	-50	-9	32	-42	-41	43	-32	-6	10	-31	31	-33	-40	-1	40	-41	
-22	-23	-43	-44	-32	40	12	35	-43	34	-23	40	8	35	-37	9	29	40	-29	34	
-28	-32	25	35	-27	-38	27	22	-28	-2	33	-12	-37	23	17	20	-18	-41	34	6	
+20	152.602291	147.960031	True	0.0687	0.0017	10	1
+6.55278211535826	26.470988395629238	-14.897186731719145	10.395656362826305	-22.05875402050769	-1.5114009893917126	-6.833167299529663	15.366012406943385	18.681704726702513	10.8852219578601	13.324706471949998	-4.839155300167012	22.391444285433558	12.469093418236747	-20.156194999350024	-23.401284456225238	13.789232354600546	-29.6245453800882	13.58087623347738	5.938172913922883	
+-21.243890383400895	-3.988264712228007	-7.621357325768197	-5.656558466392048	-0.6687252425432011	6.933186635138443	0.0022049254778148055	11.714146440245145	12.294646388770941	0.7680632814252816	5.202351252993051	-2.1915133661470327	-5.370929513043189	-2.56137181337984	1.6131134775503568	-2.7538676453553497	12.66001049029718	-5.008454305922502	-6.1243216783126755	1.948384152174744	
+-3.988264712228007	-2.147706046717449	3.259529969119094	2.4783206813968017	11.697838359403322	-8.755449236876437	-1.3928784076709226	-5.523956598348611	-2.5116250867798247	-1.7165287050683657	-13.197965787528878	-4.415420792446116	-9.738468442466678	-9.097526006197652	3.2778639230766546	0.1988935594806641	6.795134720877594	3.4471128281939376	-14.020816492302247	6.914090688085658	
+-7.621357325768197	3.2595299691190935	10.914873310463221	1.1196933097686943	-5.279626577151485	1.9293846638464422	-1.3672704148563055	2.1657684517766227	3.71639610319628	-5.978561887407472	-1.9801767262637013	2.348765077051741	4.351574235785557	-2.603870866463969	-1.1007853906828322	3.150621376219221	0.6041740739792207	-4.138976958314043	2.423986348947145	1.0993764805478445	
+-5.656558466392047	2.4783206813968026	1.1196933097686939	-9.857493291016908	-1.9288950656972053	-6.3064108774384	1.815801865733447	-1.4970909077530143	0.05338212250037715	-1.6770201466410604	-0.9502376271373604	1.213464330374137	-8.710471774155938	-1.5528390063140343	1.4942793660962799	3.8243081456852193	0.16367619774962414	9.257804176898372	-1.1882242923786699	-6.369671586867056	
+-0.668725242543201	11.697838359403322	-5.279626577151485	-1.9288950656972046	-18.306026418531335	-4.454180635014381	3.3396871852758983	2.437295434608914	17.20331053188646	1.6086493902737602	-4.807862624643244	5.070622240810606	-11.365638112299868	-1.243761851334278	3.480454287135601	4.512120860381645	0.5986193283426048	3.201996796640032	15.206255852917057	0.7845970527306929	
+6.933186635138444	-8.755449236876437	1.9293846638464418	-6.306410877438397	-4.454180635014379	14.67558989320912	6.412672086890078	-5.615158170664385	1.7554543828361318	-0.2203249781124835	7.968088212002641	11.591181330833352	9.497934783067405	1.3323612939567775	-6.082324762957307	-10.239776732179433	-7.632766309480187	-5.484326562716803	1.8273387839629096	0.7677104526285878	
+0.002204925477814964	-1.3928784076709226	-1.367270414856306	1.815801865733447	3.3396871852758974	6.412672086890078	-6.308075838190996	-12.17877836405106	7.713933159440996	-3.631970201874793	13.283425299292498	-9.53608608625253	-3.485771981845985	-3.9404696164037207	4.332862423785162	-4.777901563737519	-4.102444329958091	-2.6305089478872	1.7576001506475056	-5.802905443528794	
+11.714146440245145	-5.523956598348611	2.1657684517766222	-1.497090907753014	2.4372954346089144	-5.615158170664385	-12.178778364051063	9.77694634360597	-19.92247800079397	1.8885481877474244	-4.573721636165267	3.495855435442849	-2.148751000873256	8.171502456133565	-3.7249342468834703	2.269650821145986	-2.47408341701773	17.274832203896143	-6.874703917056558	6.212826597286941	
+12.294646388770941	-2.511625086779825	3.71639610319628	0.05338212250037738	17.20331053188646	1.7554543828361315	7.713933159440996	-19.92247800079397	0.8188792816470473	-3.516874768883124	-4.705947126276244	1.621186311872245	7.9364309233695405	-6.111291754267368	-0.057687561534824176	-3.343294405500477	-9.070588204771632	-5.561144939006115	-9.32433071359175	0.11865389154265744	
+0.7680632814252826	-1.7165287050683662	-5.978561887407472	-1.6770201466410604	1.6086493902737595	-0.22032497811248375	-3.6319702018747937	1.8885481877474242	-3.516874768883124	1.0850701280145734	-0.9470016835744178	-7.0727666904733955	-4.970888127482483	-4.375726300293512	0.6205523540435092	2.585750196979889	1.6336224159794408	5.042412912807089	-1.3663402379393126	3.3337911116276002	
+5.202351252993051	-13.19796578752888	-1.9801767262637	-0.9502376271373604	-4.807862624643244	7.968088212002641	13.283425299292498	-4.573721636165268	-4.705947126276246	-0.9470016835744178	-2.0946999242410005	3.037198583397408	3.4554712915762087	4.336016468091784	2.9461630645544425	-7.694468597797987	-10.012838555261544	8.171874137093502	8.52295292262251	3.8100795581822293	
+-2.1915133661470327	-4.415420792446117	2.3487650770517416	1.2134643303741368	5.070622240810606	11.591181330833354	-9.53608608625253	3.49585543544285	1.6211863118722458	-7.072766690473396	3.037198583397408	-8.56592297627548	6.896567359292155	-0.09334010790810036	0.2725005715258007	-3.9701285573684926	-0.9691849489597432	-9.454546592989063	-6.858617260396457	2.3838539536461334	
+-5.3709295130431896	-9.738468442466678	4.351574235785557	-8.71047177415594	-11.36563811229987	9.497934783067405	-3.4857719818459847	-2.1487510008732573	7.9364309233695405	-4.970888127482483	3.455471291576209	6.896567359292156	-19.737157511885332	-3.6211228424551067	-2.4839573703540925	-3.3503230249906166	-3.79372991408374	13.131568652526862	-0.6283274037694551	13.647509976671934	
+-2.56137181337984	-9.097526006197652	-2.6038708664639687	-1.5528390063140343	-1.2437618513342787	1.3323612939567775	-3.9404696164037207	8.171502456133567	-6.111291754267368	-4.375726300293512	4.336016468091784	-0.09334010790809925	-3.6211228424551076	-3.1169459411842704	0.9660011398350025	-0.9118789320619911	5.321873649111405	10.411118477818524	-2.465747657256808	-0.36653690856328325	
+1.613113477550358	3.277863923076655	-1.100785390682832	1.4942793660962792	3.480454287135601	-6.082324762957306	4.332862423785162	-3.7249342468834703	-0.05768756153482446	0.6205523540435093	2.9461630645544425	0.27250057152580137	-2.4839573703540916	0.9660011398350022	3.02075267705597	6.803081807559396	2.8910364308337164	-1.7909329414780024	0.93382794220741	-12.141867971871376	
+-2.7538676453553497	0.19889355948066412	3.1506213762192217	3.8243081456852193	4.5121208603816445	-10.239776732179433	-4.77790156373752	2.2696508211459854	-3.343294405500477	2.585750196979889	-7.694468597797987	-3.970128557368492	-3.3503230249906166	-0.9118789320619911	6.803081807559397	9.877574763419032	3.5600537177292364	6.261523083954565	-2.238509187306634	-4.201998442440615	
+12.660010490297182	6.795134720877594	0.6041740739792212	0.16367619774962425	0.5986193283426047	-7.632766309480189	-4.102444329958091	-2.4740834170177304	-9.070588204771633	1.6336224159794417	-10.012838555261544	-0.9691849489597434	-3.79372991408374	5.321873649111405	2.891036430833717	3.560053717729237	-7.902189732765539	7.008425249106685	-1.5969159729497633	3.0570639461972875	
+-5.008454305922501	3.4471128281939376	-4.138976958314043	9.257804176898372	3.2019967966400316	-5.484326562716802	-2.6305089478872006	17.274832203896143	-5.561144939006115	5.042412912807088	8.171874137093502	-9.454546592989063	13.13156865252686	10.411118477818524	-1.7909329414780024	6.261523083954563	7.008425249106685	-12.146586212789382	0.10332318651410073	-10.698058184810273	
+-6.124321678312676	-14.020816492302247	2.423986348947145	-1.1882242923786692	15.206255852917055	1.82733878396291	1.7576001506475059	-6.874703917056558	-9.32433071359175	-1.3663402379393126	8.52295292262251	-6.858617260396457	-0.6283274037694553	-2.4657476572568084	0.93382794220741	-2.2385091873066343	-1.596915972949763	0.10332318651410026	-12.27844225363516	-6.708091059444423	
+1.948384152174744	6.914090688085658	1.0993764805478448	-6.369671586867055	0.7845970527306926	0.7677104526285881	-5.802905443528794	6.212826597286943	0.11865389154265724	3.3337911116276002	3.8100795581822298	2.3838539536461334	13.647509976671934	-0.3665369085632833	-12.141867971871376	-4.201998442440615	3.057063946197288	-10.698058184810273	-6.708091059444423	0.1553061489510402	
+1.0	0.0	0.0	0.0	0.0	1.0	0.0	1.0	1.0	0.0	1.0	1.0	1.0	1.0	0.0	0.0	0.1107	0.0	0.0	1.0	
\ No newline at end of file