|
@@ -16,9 +16,7 @@ GreyClusterEvaluation::GreyClusterEvaluation(const GCEMat &mat, const GCERangeMa
|
|
|
|
|
|
for (int i = 0; i < sample_num_; ++i) {
|
|
|
GCEMat cvtMat;
|
|
|
- for (int j = 0; j < level_num_; ++j) {
|
|
|
- cvtMat.append(QVector<GCEmat>(level_num_, { 0.0, 0.0 }));
|
|
|
- }
|
|
|
+ cvtMat.append(QVector<GCEmat>(level_num_, { 0.0, 0.0 }));
|
|
|
ranges_cv_.append(cvtMat);
|
|
|
}
|
|
|
QVector<GCEmat> cvrang_weights(level_num_, { 0.0, 0.0 });
|
|
@@ -38,41 +36,30 @@ void GreyClusterEvaluation::evaluate(const QVector<double> &weights)
|
|
|
|
|
|
void GreyClusterEvaluation::triangularwhiteningweight(int sam, double front_val, double back_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);
|
|
|
- };
|
|
|
-
|
|
|
for (int i = 0; i < level_num_; ++i) {
|
|
|
Q_ASSERT(ranges_.at(sam).at(i).level == i);
|
|
|
- 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)) {
|
|
|
- ranges_cv_[sam][i].front_val = r2;
|
|
|
- } else if ((front_val >= r1) && (front_val <= ranges_.at(sam).at(i).right_right)) {
|
|
|
- ranges_cv_[sam][i].front_val = r3;
|
|
|
- } else {
|
|
|
+ // 计算前
|
|
|
+ double a1, a2, a3, a4;
|
|
|
+ a1 = ranges_.at(sam).at(i).left_left;
|
|
|
+ a2 = ranges_.at(sam).at(i).left_val;
|
|
|
+ a3 = ranges_.at(sam).at(i).right_val;
|
|
|
+ a4 = ranges_.at(sam).at(i).right_right;
|
|
|
+ double lambda_k = (a2 + a3) / 2;
|
|
|
+
|
|
|
+ if (front_val > a4 || front_val < a1) {
|
|
|
ranges_cv_[sam][i].front_val = 0;
|
|
|
+ } else if ((front_val >= a1) && (front_val < lambda_k)) {
|
|
|
+ ranges_cv_[sam][i].front_val = (front_val - a1) / (lambda_k - a1);
|
|
|
+ } else if ((front_val > lambda_k) && (front_val <= a4)) {
|
|
|
+ ranges_cv_[sam][i].front_val = (a4 - front_val) / (a4 - lambda_k);
|
|
|
}
|
|
|
|
|
|
- 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)) {
|
|
|
- ranges_cv_[sam][i].back_val = r2;
|
|
|
- } else if ((back_val >= r1) && (back_val <= ranges_.at(sam).at(i).right_right)) {
|
|
|
- ranges_cv_[sam][i].back_val = r3;
|
|
|
- } else {
|
|
|
+ if (back_val > a4 || back_val < a1) {
|
|
|
ranges_cv_[sam][i].back_val = 0;
|
|
|
+ } else if ((back_val >= a1) && (back_val < lambda_k)) {
|
|
|
+ ranges_cv_[sam][i].back_val = (back_val - a1) / (lambda_k - a1);
|
|
|
+ } else if ((back_val > lambda_k) && (back_val <= a4)) {
|
|
|
+ ranges_cv_[sam][i].back_val = (a4 - back_val) / (a4 - lambda_k);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -115,12 +102,12 @@ BestIndex GreyClusterEvaluation::getBestIndex() const
|
|
|
// }
|
|
|
|
|
|
for (int i = 0; i < ranges_cv_.size(); i++) {
|
|
|
- qDebug() << "指标" << i;
|
|
|
+ qDebug() << "指标" << i << " 深度" << ranges_cv_.at(i).count();
|
|
|
int n = 0;
|
|
|
for (auto &item : ranges_cv_.at(i)) {
|
|
|
qDebug() << QString(" 前 %1 : 后 %2").arg(item.front_val).arg(item.back_val);
|
|
|
n++;
|
|
|
- if (n >= 4)
|
|
|
+ if (n >= level_num_)
|
|
|
break;
|
|
|
}
|
|
|
}
|