// // Created by lenovo on 2023/10/18. // #include "SetPairAnalysis.h" /******************************************************************** *@Demo1归一化均值 * QVector rMat; * rMat << SetPairAnalysis::EvaluateIndex { 70, 20, 10 }; * rMat << SetPairAnalysis::EvaluateIndex { 70, 18, 12 }; * QVector wMat, eMat; * wMat << 1.0 << 0.5 << 1.0; * eMat << 1.0 << 1.0 << -1.0; * SetPairAnalysis spa(rMat, wMat, eMat); * SetPairAnalysis::Relations r = spa.getRelations(); * qDebug() << r; * *@Demo2总体平衡均值 * QVector rMat; * QVector wMat, eMat; * rMat << SetPairAnalysis::EvaluateIndex { 2.5, 66, 80, 800 }; * rMat << SetPairAnalysis::EvaluateIndex { 3.0, 79, 77, 810 }; * rMat << SetPairAnalysis::EvaluateIndex { 3.5, 85, 90, 900 }; * rMat << SetPairAnalysis::EvaluateIndex { 4.0, 98, 92, 920 }; * rMat << SetPairAnalysis::EvaluateIndex { 3.5, 83, 88, 780 }; * wMat << 0.3 << 0.5 << 0.15 << 0.05; * eMat << 1.0 << 1.0 << 1.0 << 1.0; * QVector dir; * dir << false << true << false << false; * SetPairAnalysis spa(rMat, wMat, eMat, dir); * SetPairAnalysis::Relations r = spa.getRelations(); * qDebug() << r; * * ********************************************************************/ SetPairAnalysis::SetPairAnalysis(const QVector &rMat, const QVector &wMat, const QVector &eMat, const QVector &optiDir) : m_rMat(rMat), m_wMat(wMat), m_eMat(eMat) { Q_ASSERT(rMat.count() != 0); Q_ASSERT(rMat.at(0).count() != 0); // Q_ASSERT(rMat.at(0).count() == wMat.count()); if (optiDir.isEmpty()) { for (auto &r: m_rMat) { qreal sum = 0; for (int i = 0; i < r.count(); ++i) { sum += r.at(i); } for (int i = 0; i < r.count(); ++i) { r[i] = r[i] / sum; } } } else { EvaluateIndex optiIndex = EvaluateIndex(m_rMat.at(0).count()); for (int r = 0; r < m_rMat.count(); ++r) { for (int i = 0; i < m_rMat.at(r).count(); ++i) { if (r == 0) { optiIndex[i] = m_rMat.at(r).at(i); } else { if (optiDir.at(i)) { //最大值 if (optiIndex.at(i) < m_rMat.at(r).at(i)) { optiIndex[i] = m_rMat.at(r).at(i); } } else { if (optiIndex.at(i) > m_rMat.at(r).at(i)) { optiIndex[i] = m_rMat.at(r).at(i); } } } } } // qDebug() << optiIndex; for (auto &r: m_rMat) { for (int i = 0; i < r.count(); ++i) { if (optiDir.at(i)) { //最大值 // qDebug() << r[i] << "/" << optiIndex.at(i); r[i] = r[i] / optiIndex.at(i); } else { // qDebug() << optiIndex.at(i) << "/" << r[i]; r[i] = optiIndex.at(i) / r[i]; } } // qDebug() << "next"; } } // qDebug() << m_rMat; if (m_eMat.isEmpty()) { m_eMat = QVector(m_wMat.count(), 1.0); } } Relations SetPairAnalysis::getRelations() const { Relations uMat; for (auto r: m_rMat) { qreal ui = 0; for (int i = 0; i < r.count(); ++i) { ui += r.at(i) * m_wMat.at(i) * m_eMat.at(i); } uMat << ui; } return uMat; }