荒岛

层次分析法,即Analytic Hierarchy Process(AHP) ,是美国运筹学家 Saaty 于20世纪 70 年代初期提出的一种主观赋值评价方法。层次分析法将与决策有关的元素分解成目标、准则、方案等多个层次,并在此基础上进行定性和定量分析,是一种系统、简便、灵活有效的决策方法。

javascript代码实现

function ahp(matrix) {
  const size = matrix.length

  if (!matrix.every(row => row.length === size)) {
    throw new Error('输入矩阵不是方阵!');
  }

  // 矩阵列求和
  const colSum = matrix.reduce((prev, cur) => prev.map((val, i) => cur[i] + val))

  // 矩阵权重
  const weights = matrix.map(row => {
    // 归一化矩阵行
    const normalized = row.map((val, i) => val / colSum[i])
    // 矩阵行平均数
    return normalized.reduce((acc, val) => acc + val) / size
  })

  // 特征向量
  const eigs = matrix.map(item => weights.map((weight, i) => weight * item[i]).reduce((a, b) => a + b))

  // 最大特征根
  const lambdaMax = eigs.map((eig, i) => eig / weights[i]).reduce((a, b) => a + b) / size

  // 一致性指标
  const CI = (lambdaMax - size) / (size - 1)

  // 初始化RI值,用于一致性检验
  const RIs = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49]

  // 一致性RI值
  const RI = RIs[size - 1]

  // 一致性比例
  const CR = CI / RI

  // 一致性判断
  const consistency = CR < 0.1

  return { size, weights, eigs, lambdaMax, CI, RI, CR, consistency }
}

使用方法

// 输入矩阵
const matrix = [
  [ 1,   5, 3   ],
  [ 1/5, 1, 1/2 ],
  [ 1/3, 2, 1   ]
];
const weights = ahp(matrix);
console.log(weights); 
// 输出 [0.485, 0.323, 0.192]
  • 技术栈
  • 方法论
  • 当前暂无评论