diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
index f5191941440f620e4f3665bf996f0d6378e1b4c0..3f1e4c4e868988693b2c5199f5e1e1716a6ee7b6 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
@@ -696,7 +696,7 @@ def get_accuracy_graph(train_accuracies, classifier_name, file_name, name="Accur
 class BaseBoost(object):
 
     def __init__(self):
-        self.n_stumps = 1
+        self.n_stumps_per_attribute = 1
 
     def _collect_probas(self, X):
         return np.asarray([clf.predict_proba(X) for clf in self.estimators_generator.estimators_])
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
index c7ebf500968c67104e7f1e4594a26352c6286e46..f5ba4681e3b27c3ed730cf5f14e408ed2813d547 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
@@ -32,7 +32,7 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
         y[y == 0] = -1
 
         if self.estimators_generator is None:
-            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps, self_complemented=True)
+            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps_per_attribute, self_complemented=True)
 
         self.estimators_generator.fit(X, y)
         self.classification_matrix = self._binary_classification_matrix(X)
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/QarBoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/QarBoostUtils.py
index 5fdb396fd98608cc0464e661b3f188cc441b02f9..f684a51804deddd1f848aab7c5253d1486963bfe 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/QarBoostUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/QarBoostUtils.py
@@ -6,7 +6,6 @@ from collections import defaultdict
 import math
 from sklearn.utils.validation import check_is_fitted
 from sklearn.base import BaseEstimator, ClassifierMixin
-from sklearn.metrics import accuracy_score
 import time
 import matplotlib.pyplot as plt
 
@@ -15,19 +14,18 @@ from ... import Metrics
 
 
 class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
-    def __init__(self, n_max_iterations=350, estimators_generator=None, dual_constraint_rhs=0,
+    def __init__(self, n_max_iterations=350, estimators_generator=None,
                  random_state=42, self_complemented=True, twice_the_same=False, old_fashioned=False,
                  previous_vote_weighted=True, c_bound_choice = True, random_start = True,
-                 two_wieghts_problem=False, divided_ponderation=True, n_stumps_per_attribute=None):
+                 two_wieghts_problem=False, divided_ponderation=True, n_stumps_per_attribute=None, use_r=True, plotted_metric=Metrics.zero_one_loss):
         super(ColumnGenerationClassifierQar, self).__init__()
         self.n_max_iterations = n_max_iterations
         self.estimators_generator = estimators_generator
-        self.dual_constraint_rhs = dual_constraint_rhs
         if type(random_state) is int:
             self.random_state = np.random.RandomState(random_state)
         else:
             self.random_state = random_state
-        self.self_complemented =self_complemented
+        self.self_complemented = self_complemented
         self.twice_the_same = twice_the_same
         self.train_time = 0
         self.old_fashioned = old_fashioned
@@ -36,13 +34,13 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
         self.random_start = random_start
         self.two_wieghts_problem = two_wieghts_problem
         self.divided_ponderation = divided_ponderation
-        self.plotted_metric = Metrics.zero_one_loss
+        self.plotted_metric = plotted_metric
         if n_stumps_per_attribute:
-            self.n_stumps = n_stumps_per_attribute
-
+            self.n_stumps_per_attribute = n_stumps_per_attribute
+        self.use_r = use_r
         self.printed_args_name_list = ["n_max_iterations", "self_complemented", "twice_the_same", "old_fashioned",
                                        "previous_vote_weighted", "c_bound_choice", "random_start",
-                                       "two_wieghts_problem", "divided_ponderation", "n_stumps"]
+                                       "two_wieghts_problem", "divided_ponderation", "n_stumps", "use_r"]
 
     def set_params(self, **params):
         self.self_complemented = params["self_complemented"]
@@ -60,7 +58,7 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
             X = np.array(X.todense())
 
         if self.estimators_generator is None:
-            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps,
+            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps_per_attribute,
                                                                    self_complemented=self.self_complemented)
         # Initialization
         y[y == 0] = -1
@@ -93,7 +91,7 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
 
         self.n_total_hypotheses_ = n
         self.n_total_examples = m
-        self.n_max_iterations = 100
+        self.n_max_iterations = n
         self.break_cause = " the maximum number of iterations was attained."
 
         for k in range(min(n, self.n_max_iterations if self.n_max_iterations is not None else np.inf)):
@@ -134,14 +132,24 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
             # Generate the new weight for the new voter
             epsilon = self._compute_epsilon(y)
             self.epsilons.append(epsilon)
+
+            r = self._compute_r(y)
+
             if epsilon == 0. or math.log((1 - epsilon) / epsilon) == math.inf:
                 self.chosen_columns_.pop()
                 self.break_cause = " epsilon was too small."
                 break
+
             if self.divided_ponderation:
-                self.q = (1/(self.n_max_iterations-k))*math.log((1 - epsilon) / epsilon)
+                if self.use_r:
+                    self.q = (1 / (self.n_max_iterations - k)) * 0.5*math.log((1+r)/(1-r))
+                else:
+                    self.q = (1/(self.n_max_iterations-k))*math.log((1 - epsilon) / epsilon)
             else:
-                self.q = math.log((1 - epsilon) / epsilon)
+                if self.use_r:
+                    self.q = 0.5*math.log((1+r)/(1-r))
+                else:
+                    self.q = math.log((1 - epsilon) / epsilon)
             self.weights_.append(self.q)
 
             # Update the distribution on the examples.
@@ -156,7 +164,7 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
             self.previous_margins.append(np.multiply(y, self.previous_vote))
             self.train_metrics.append(self.plotted_metric.score(y, np.sign(self.previous_vote)))
             # self.bounds.append(np.prod(np.sqrt(1-4*np.square(0.5-np.array(self.epsilons)))))
-            r = self._compute_r(y)
+
             if k!=0:
                 self.bounds.append(self.bounds[-1]*math.sqrt(1-r**2))
             else:
@@ -322,7 +330,7 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
             if C1 == 0:
                 return ['break', "the derivate was constant"]
             else :
-                is_acceptable, sol = self._analyze_solutions_one_weight(np.array(float(C0)/C1))
+                is_acceptable, sol = self._analyze_solutions_one_weight(np.array(float(C0)/C1).reshape((1,1)))
                 if is_acceptable:
                     return np.array([sol])
         try:
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv21.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv21.py
index 9274d9dc11ecaff6c5d107c20f305176650626f7..f5b0ba94ef828e6dc505dd4ab09eb4f86a5b80ae 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv21.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostv21.py
@@ -28,7 +28,7 @@ class ColumnGenerationClassifierv21(BaseEstimator, ClassifierMixin, BaseBoost):
             X = np.array(X.todense())
 
         if self.estimators_generator is None:
-            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps, self_complemented=True)
+            self.estimators_generator = StumpsClassifiersGenerator(n_stumps_per_attribute=self.n_stumps_per_attribute, self_complemented=True)
 
         y[y == 0] = -1
 
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC.py
index 34dc7bb0ff662f5badadbd7367d6f6c939a4818f..0279ac4ac9080013e76dcb6842a9559e84487ca9 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC.py
@@ -3,7 +3,6 @@ from ..Monoview.Additions.BoostUtils import getInterpretBase
 from ..Monoview.Additions.QarBoostUtils import ColumnGenerationClassifierQar
 
 
-
 class QarBoostNC(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
 
     def __init__(self, random_state=None, **kwargs):
@@ -13,11 +12,12 @@ class QarBoostNC(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
             twice_the_same=False,
             old_fashioned=False,
             previous_vote_weighted=False,
-            c_bound_choice=False,
-            random_start=True,
-            two_wieghts_problem=True,
+            c_bound_choice=True,
+            random_start=False,
+            two_wieghts_problem=False,
             divided_ponderation=False,
-            n_stumps_per_attribute=100
+            n_stumps_per_attribute=1,
+            use_r=True
             )
         self.param_names = []
         self.distribs = []
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC2.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC2.py
index dac1ca07d01ea532b201f753e496072a80be5b06..2739affea598beee878ca939fc8d7393172d1047 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC2.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC2.py
@@ -8,14 +8,16 @@ class QarBoostNC2(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
     def __init__(self, random_state=None, **kwargs):
         super(QarBoostNC2, self).__init__(
             random_state=random_state,
-            self_complemented=False,
+            self_complemented=True,
             twice_the_same=False,
             old_fashioned=False,
             previous_vote_weighted=False,
             c_bound_choice=True,
             random_start=True,
             two_wieghts_problem=False,
-            divided_ponderation=True
+            divided_ponderation=False,
+            n_stumps_per_attribute=10,
+            use_r=True
             )
         self.param_names = []
         self.distribs = []
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC3.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC3.py
index dbafa810e61f52c47c0ae9e2c2e592b770e00289..7cb49df54f584f395117f33368386c7e401887ca 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC3.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostNC3.py
@@ -15,8 +15,9 @@ class QarBoostNC3(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
             c_bound_choice=True,
             random_start=True,
             two_wieghts_problem=False,
-            divided_ponderation=False,
-            n_stumps_per_attribute=10
+            divided_ponderation=True,
+            n_stumps_per_attribute=1,
+            use_r=True
             )
         self.param_names = []
         self.distribs = []
@@ -31,7 +32,7 @@ class QarBoostNC3(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
         return self.getInterpretQar(directory)
 
     def get_name_for_fusion(self):
-        return "QBN2"
+        return "QBN3"
 
 
 def formatCmdArgs(args):
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv2.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv2.py
index e72688f6c8f7ec97363792631d283e14a2cd42e9..7fb2239a9f8fc71c09d1ac70604adf73c5cc702c 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv2.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv2.py
@@ -8,15 +8,16 @@ class QarBoostv2(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
     def __init__(self, random_state=None, **kwargs):
         super(QarBoostv2, self).__init__(
             random_state=random_state,
-            self_complemented=True,
+            self_complemented=False,
             twice_the_same=False,
             old_fashioned=False,
             previous_vote_weighted=False,
             c_bound_choice=True,
-            random_start=True,
+            random_start=False,
             two_wieghts_problem=False,
             divided_ponderation=False,
-            n_stumps_per_attribute=10
+            n_stumps_per_attribute=1,
+            use_r=True
             )
         self.param_names = []
         self.distribs = []
@@ -28,7 +29,7 @@ class QarBoostv2(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
         return True
 
     def getInterpret(self, directory):
-        return getInterpretBase(self, directory, "QarBoostv2", self.weights_, self.break_cause)
+        return self.getInterpretQar(directory)
 
     def get_name_for_fusion(self):
         return "QBv2"
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv3.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv3.py
index 7b63ea7597fb8117f901281aaba0415468b18c7e..aca342a5ed3fd6483581a1eb86df97e1cea3ad9c 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv3.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/QarBoostv3.py
@@ -8,15 +8,16 @@ class QarBoostv3(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
     def __init__(self, random_state=None, **kwargs):
         super(QarBoostv3, self).__init__(
             random_state=random_state,
-            self_complemented=True,
+            self_complemented=False,
             twice_the_same=False,
             old_fashioned=False,
             previous_vote_weighted=False,
             c_bound_choice=True,
             random_start=True,
             two_wieghts_problem=False,
-            divided_ponderation=False,
-            n_stumps_per_attribute=1
+            divided_ponderation=True,
+            n_stumps_per_attribute=1,
+            use_r=False
         )
         self.param_names = []
         self.distribs = []
@@ -28,7 +29,7 @@ class QarBoostv3(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
         return True
 
     def getInterpret(self, directory):
-        return getInterpretBase(self, directory, "QarBoostv3", self.weights_, self.break_cause)
+        return self.getInterpretQar(directory)
 
     def get_name_for_fusion(self):
         return "QBv3"