Переглянути джерело

修复灰色聚类评估法计算错误

Ulricy 1 рік тому
батько
коміт
06e7aacbe3
1 змінених файлів з 14 додано та 10 видалено
  1. 14 10
      QFD/algorithm/GreyClusterEvaluation.cpp

+ 14 - 10
QFD/algorithm/GreyClusterEvaluation.cpp

@@ -40,9 +40,15 @@ void GreyClusterEvaluation::triangularwhiteningweight(int sam, double front_val,
 {
     auto pFunc1 = [](double left, double right) { return (left + right) / 2; };
     auto pFunc2 = [](double v, double left_left, double left_right) {
+        if (left_left == left_right) {
+            return 0.0;
+        }
         return (v - left_left) / (left_right - left_left);
     };
     auto pFunc3 = [](double v, double left_right, double right_right) {
+        if (right_right == left_right) {
+            return 0.0;
+        }
         return (right_right - v) / (right_right - left_right);
     };
 
@@ -51,21 +57,23 @@ void GreyClusterEvaluation::triangularwhiteningweight(int sam, double front_val,
         double r1 = pFunc1(ranges_.at(sam).at(i).left_val, ranges_.at(sam).at(i).right_val);
         double r2 = pFunc2(front_val, ranges_.at(sam).at(i).left_left, r1);
         double r3 = pFunc3(front_val, r1, ranges_.at(sam).at(i).right_right);
-        if ((front_val >= ranges_.at(sam).at(i).left_left) && (front_val <= r1))
+        if ((front_val >= ranges_.at(sam).at(i).left_left) && (front_val <= r1)) {
             ranges_cv_[sam][i].front_val = r2;
-        else if ((front_val >= r1) && (front_val <= ranges_.at(sam).at(i).right_right))
+        } else if ((front_val >= r1) && (front_val <= ranges_.at(sam).at(i).right_right)) {
             ranges_cv_[sam][i].front_val = r3;
-        else
+        } else {
             ranges_cv_[sam][i].front_val = 0;
+        }
 
         r2 = pFunc2(back_val, ranges_.at(sam).at(i).left_left, r1);
         r3 = pFunc3(back_val, r1, ranges_.at(sam).at(i).right_right);
-        if ((back_val >= ranges_.at(sam).at(i).left_left) && (back_val <= r1))
+        if ((back_val >= ranges_.at(sam).at(i).left_left) && (back_val <= r1)) {
             ranges_cv_[sam][i].back_val = r2;
-        else if ((back_val >= r1) && (back_val <= ranges_.at(sam).at(i).right_right))
+        } else if ((back_val >= r1) && (back_val <= ranges_.at(sam).at(i).right_right)) {
             ranges_cv_[sam][i].back_val = r3;
-        else
+        } else {
             ranges_cv_[sam][i].back_val = 0;
+        }
     }
 }
 
@@ -117,10 +125,6 @@ BestIndex GreyClusterEvaluation::getBestIndex() const
         }
     }
 
-    for (GCEmat m : ranges_weight_) {
-        qDebug() << __FUNCTION__ << __LINE__ << m.front_val << m.back_val << endl;
-    }
-
     return index;
 }