Browse Source

Merge branch 'master' of http://101.43.129.26:10880/chengxr/QFD2

chengxr 1 year ago
parent
commit
0c3201b238

+ 3 - 3
QFD/algorithm/ConsistencyCheck.cpp

@@ -62,11 +62,11 @@ void ConsistencyCheck::calc(const QVector<qreal> &nxnValus)
 
     // CI=(λ-n)/(n-1)
     m_CI         = (awiDividedWiAverage - m_nodes.count()) / (m_nodes.count() - 1);
-    qreal result = RI[m_nodes.count() - 1];
-    if (result == 0) {
+    qreal result = m_nodes.count() <= 10 ? RI[m_nodes.count() - 1] : RI[9];
+    if (qFuzzyCompare(result, 0)) {
         m_CR = 0;
     } else {
-        m_CR = m_CI / RI[m_nodes.count() - 1];
+        m_CR = m_CI / result;
     }
 
     //    qDebug() << RI[m_nodes.count() - 1] << "m_CI" << m_CI << "m_CR" << m_CR;

+ 2 - 2
QFD/algorithm/ConsistencyCheck.h

@@ -5,7 +5,7 @@
 #include <QVector>
 
 /**
- * @brief 专家输入数据校验
+ * @brief 专家输入数据校验, AHP
  */
 class ConsistencyCheck
 {
@@ -26,7 +26,7 @@ public:
     ConsistencyCheck(const QStringList &nodes, const QVector<qreal> &nxnValus);
 
     const QVector<qreal> &getSqartnValues() const { return m_sqartnValues; }
-    const QVector<qreal> &getWieghts() const { return m_weights; }
+    const QVector<qreal> &getWeights() const { return m_weights; }
     const QVector<qreal> &getAverageWeights() const { return m_averageWeights; }
     const QStringList &getNodes() const { return m_nodes; }
 

+ 14 - 24
QFD/algorithm/HierarchicalAnalysis.cpp

@@ -2,7 +2,7 @@
 #include <QtMath>
 #include <QDebug>
 
-HierarchicalAnalysis::HierarchicalAnalysis(const QStringList& nodes, const QVector<qreal>& nxnValus)
+HierarchicalAnalysis::HierarchicalAnalysis(const QStringList &nodes, const QVector<qreal> &nxnValus)
     : m_nodes(nodes),
       m_sqartnValues(QVector<double>(nodes.count(), 0)),
       m_weights(QVector<double>(nodes.count(), 0)),
@@ -14,41 +14,35 @@ HierarchicalAnalysis::HierarchicalAnalysis(const QStringList& nodes, const QVect
     calc(nxnValus);
 }
 
-void HierarchicalAnalysis::calc(const QVector<qreal>& nxnValus)
+void HierarchicalAnalysis::calc(const QVector<qreal> &nxnValus)
 {
     // qDebug() << "HierarchicalAnalysis nxnValus" << nxnValus;
 
     QVector<qreal> nodeMul(m_nodes.count(), 1);
-    for (int m = 0; m < m_nodes.count(); ++m)
-    {
-        for (int n = 0; n < m_nodes.count(); ++n)
-        {
+    for (int m = 0; m < m_nodes.count(); ++m) {
+        for (int n = 0; n < m_nodes.count(); ++n) {
             nodeMul[m] *= nxnValus[m * m_nodes.count() + n];
         }
     }
     //    qDebug() << "nodeMul" << nodeMul;
 
     qreal nSum = 0;
-    for (int n = 0; n < m_sqartnValues.count(); ++n)
-    {
+    for (int n = 0; n < m_sqartnValues.count(); ++n) {
         m_sqartnValues[n] = qPow(nodeMul[n], (qreal)1 / m_sqartnValues.count());
         nSum += m_sqartnValues[n];
     }
 
     // qDebug() << "sqartnValues" << m_sqartnValues;
 
-    for (int w = 0; w < m_weights.count(); ++w)
-    {
+    for (int w = 0; w < m_weights.count(); ++w) {
         m_weights[w] = m_sqartnValues[w] / nSum;
     }
 
     // qDebug() << "weights" << m_weights;
 
     // m0*w0+m1*w1+m2*w2+m3*w3...mn*wn
-    for (int m = 0; m < m_nodes.count(); ++m)
-    {
-        for (int n = 0; n < m_nodes.count(); ++n)
-        {
+    for (int m = 0; m < m_nodes.count(); ++m) {
+        for (int n = 0; n < m_nodes.count(); ++n) {
             m_averageWeights[m] += nxnValus[m * m_nodes.count() + n] * m_weights[n];
         }
     }
@@ -58,8 +52,7 @@ void HierarchicalAnalysis::calc(const QVector<qreal>& nxnValus)
     // Awi/Wi
     QVector<qreal> awiDividedWi(m_nodes.count(), 0);
     qreal awiDividedWiAverage = 0;
-    for (int m = 0; m < m_nodes.count(); ++m)
-    {
+    for (int m = 0; m < m_nodes.count(); ++m) {
         awiDividedWi[m] = m_averageWeights[m] / m_weights[m];
         awiDividedWiAverage += awiDividedWi[m];
     }
@@ -68,15 +61,12 @@ void HierarchicalAnalysis::calc(const QVector<qreal>& nxnValus)
     //    qDebug() << "awiDividedWi" << awiDividedWi;
 
     // CI=(λ-n)/(n-1)
-    m_CI = (awiDividedWiAverage - m_nodes.count()) / (m_nodes.count() - 1);
-    qreal result = RI[m_nodes.count() - 1];
-    if (result == 0)
-    {
+    m_CI         = (awiDividedWiAverage - m_nodes.count()) / (m_nodes.count() - 1);
+    qreal result = m_nodes.count() <= 10 ? RI[m_nodes.count() - 1] : RI[9];
+    if (qFuzzyCompare(result, 0)) {
         m_CR = 0;
-    }
-    else
-    {
-        m_CR = m_CI / RI[m_nodes.count() - 1];
+    } else {
+        m_CR = m_CI / result;
     }
 
     //    qDebug() << RI[m_nodes.count() - 1] << "m_CI" << m_CI << "m_CR" << m_CR;

+ 12 - 27
QFD/algorithm/HierarchicalAnalysis.h

@@ -5,7 +5,7 @@
 #include <QVector>
 
 /**
- * @brief 专家输入数据校验
+ * @brief AHP
  */
 class HierarchicalAnalysis
 {
@@ -23,43 +23,28 @@ public:
      *          HierarchicalAnalysis cc(ll, nn);
      *          qDebug() << cc.consitst();
      */
-    HierarchicalAnalysis(const QStringList& nodes, const QVector<qreal>& nxnValus);
+    HierarchicalAnalysis(const QStringList &nodes, const QVector<qreal> &nxnValus);
 
-    const QVector<qreal>& getWieghts() const
-    {
-        return m_weights;
-    }
-    const QVector<qreal>& getaverageWeights() const
-    {
-        return m_averageWeights;
-    }
+    const QVector<qreal> &getWeights() const { return m_weights; }
+    const QVector<qreal> &getaverageWeights() const { return m_averageWeights; }
 
-    const QStringList& getNodes() const
-    {
-        return m_nodes;
-    }
+    const QStringList &getNodes() const { return m_nodes; }
 
-    qreal CI() const
-    {
-        return m_CI;
-    }
-    qreal CR() const
-    {
-        return m_CR;
-    }
+    qreal CI() const { return m_CI; }
+    qreal CR() const { return m_CR; }
 
     /**
      * @brief 一致性判断
      */
     bool consitst() const
     {
-        return true; // return m_CR < thd;
+        return true;  // return m_CR < thd;
     }
 
 private:
-    const qreal RI[10] = {0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49};
-    const qreal thd = 0.1;
-    void calc(const QVector<qreal>& nxnValus);
+    const qreal RI[10] = { 0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49 };
+    const qreal thd    = 0.1;
+    void calc(const QVector<qreal> &nxnValus);
 
     QStringList m_nodes;
     QVector<qreal> m_sqartnValues;
@@ -70,4 +55,4 @@ private:
     qreal m_CR;
 };
 
-#endif // CONSISTENCYCHECK_H
+#endif  // CONSISTENCYCHECK_H

+ 1 - 1
QFD/algorithm/test_main.cpp

@@ -102,7 +102,7 @@ void testHA()
                           7, 1,         3,         3,         3,         1.0 / 3.0, 3, 1.0 / 3.0, 1 };
     HierarchicalAnalysis cc(ll, nn);
     qDebug() << cc.consitst();
-    QVector<qreal> m_weights = cc.getWieghts();
+    QVector<qreal> m_weights = cc.getWeights();
     qDebug() << m_weights;
 }
 

+ 1 - 1
QFD/shemeTable/MatrixTableWidget.cpp

@@ -274,7 +274,7 @@ void MatrixTableWidget::pollCellsData()
         } else {
             // 校验成功持久化数据
             QStringList nodeList   = cc.getNodes();
-            QVector<qreal> weights = cc.getWieghts();
+            QVector<qreal> weights = cc.getWeights();
             qDebug() << weights;
             qDebug() << currentPage;
             QList<DemandWeight *> list;