123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "SetPairAnalysis.h"
- #include <QDebug>
- SetPairAnalysis::SetPairAnalysis(const QVector<SetPairAnalysis::EvaluateIndex> &rMat, const QVector<qreal> &wMat,
- const QVector<qreal> &eMat, const QVector<bool> &optiDir)
- : m_rMat(rMat), m_wMat(wMat), m_eMat(eMat)
- {
- Q_ASSERT(rMat.count() != 0);
- Q_ASSERT(rMat.at(0).count() != 0);
-
- 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);
- }
- }
- }
- }
- }
-
- for (auto &r : m_rMat) {
- for (int i = 0; i < r.count(); ++i) {
- if (optiDir.at(i)) {
-
- r[i] = r[i] / optiIndex.at(i);
- } else {
-
- r[i] = optiIndex.at(i) / r[i];
- }
- }
-
- }
- }
-
- if (m_eMat.isEmpty()) {
- m_eMat = QVector<qreal>(m_wMat.count(), 1.0);
- }
- }
- SetPairAnalysis::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;
- }
|