目前做网站的好处,智慧团建官网手机版,广州最新防疫动态,天猫建设网站的意义AHP权重计算#xff1a; 需求#xff1a;前端记录矩阵维度、上三角值#xff0c;后端构建比较矩阵、计算权重值并将结果返回给前端 比较矩阵构建 如果你想要根据上三角#xff08;不包括对角线#xff09;的值来构建对称矩阵#xff0c;那么你可以稍作修改上述的generate…AHP权重计算 需求前端记录矩阵维度、上三角值后端构建比较矩阵、计算权重值并将结果返回给前端 比较矩阵构建 如果你想要根据上三角不包括对角线的值来构建对称矩阵那么你可以稍作修改上述的generate_symmetric_matrix函数。在这个情况下你将从矩阵的左上角开始填充上三角的值然后利用对称性填充下三角的值。 def generate_symmetric_matrix_from_upper(i, upper_triangle_values): 根据上三角不包括对角线的值和矩阵维度生成对称矩阵 :param i: 矩阵的维度i x i :param upper_triangle_values: 上三角不包括对角线的值列表 :return: 生成的对称矩阵 if len(upper_triangle_values) i * (i - 1) // 2: raise ValueError(提供的上三角值数量超过了上三角不包括对角线的元素总数。) # 初始化矩阵 matrix [[1] * i for _ in range(i)] # 对角线初始化为1 # 填充上三角不包括对角线的值 index 0 for row in range(i): for col in range(row 1, i): # 从当前行的下一个元素开始跳过对角线 matrix[row][col] upper_triangle_values[index] index 1 # 填充下三角的值利用对称性 for row in range(i): for col in range(row): # 只遍历到当前行的前一个元素不包括对角线 matrix[row][col] 1/matrix[col][row] # 下三角的值等于上三角的值 return matrix # 示例使用
i 3 # 矩阵维度
upper_triangle_values [0.6, 3, 5] # 上三角不包括对角线的值
matrix generate_symmetric_matrix_from_upper(i, upper_triangle_values) # 打印矩阵
for row in matrix: print(row) 在这个函数中我们首先检查提供的上三角值的数量是否超过了实际需要的数量。然后我们初始化一个所有对角线元素都为1的矩阵。接着我们遍历上三角不包括对角线并填充提供的值。最后我们利用对称性来填充下三角的值。当你运行这个示例时它将输出一个3x3的对称矩阵其中上三角的值由upper_triangle_values列表提供而下三角的值则通过对称性从上三角复制而来。对角线上的值保持为1。 AHP权重计算 层次分析法Analytic Hierarchy Process, AHP是一种常用的多属性决策方法它允许决策者将复杂的决策问题分解为多个子问题或属性并通过两两比较的方式来确定这些子问题或属性的相对重要性。以下是一个简化的Python示例展示了如何使用层次分析法求解权重值 构造判断矩阵通过专家打分等方式一致性检验求解权重值 import numpy as np def calculate_consistency_ratio(ci, n): # 一致性指标RI的值与n判断矩阵的阶数有关 ri_values { 1: 0.0, 2: 0.0, 3: 0.58, 4: 0.9, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49 } ri ri_values[n] cr ci / ri return cr def calculate_ci(matrix): # 计算一致性指标CI n matrix.shape[0] eigenvalues, _ np.linalg.eig(matrix) max_eigenvalue np.max(eigenvalues) ci (max_eigenvalue - n) / (n - 1) return ci def calculate_weights(matrix): # 计算权重值 eigenvalues, eigenvectors np.linalg.eig(matrix) max_eigenvalue np.max(eigenvalues) max_eigenvector eigenvectors[:, eigenvalues max_eigenvalue] weights max_eigenvector.flatten().real / np.sum(max_eigenvector.flatten().real) return weights def ahp_analysis(matrix): # AHP分析主函数 n matrix.shape[0] ci calculate_ci(matrix) cr calculate_consistency_ratio(ci, n) if cr 0.1: # 一般情况下当CR0.1时认为判断矩阵的一致性是可以接受的 weights calculate_weights(matrix) print(一致性检验通过权重值为, weights) else: print(一致性检验未通过需要重新调整判断矩阵) # 示例判断矩阵假设
# 注意这里的判断矩阵应该是通过专家打分或其他方式构造的并且应该满足互反性
A np.array([ [1, 3, 5], [1/3, 1, 3], [1/5, 1/3, 1]
]) ahp_analysis(A) 注意 上述代码中的判断矩阵A是假设的实际应用中需要根据实际情况构造。一致性检验的阈值通常是0.1但也可以根据具体需求进行调整。判断矩阵的构造应该遵循AHP方法的规则即对角线元素为1且满足互反性即A[i][j] 1 / A[j][i]。权重值是通过求解判断矩阵的最大特征值对应的特征向量得到的并且需要对该特征向量进行归一化处理。 前后端设计
在前后端通信中当前端需要传递两个参数给后端其中一个参数是数组另一个是int类型时你需要在前端正确地构造请求并在后端Flask应用中设计相应的路由和请求处理函数来接收这些参数。
前端JavaScript 使用 fetch API
假设你正在使用JavaScript的fetch API来发送POST请求你可以将数组和int值作为JSON对象的一部分发送。这里是一个例子
// 假设你的后端API的URL是http://example.com/api/data
const arrayParam [1, 2, 3]; // 数组参数
const intParam 42; // int类型参数 // 将参数包装在一个对象中
const dataToSend { arrayParam: arrayParam, intParam: intParam
}; // 将对象转换为JSON字符串
const jsonData JSON.stringify(dataToSend); fetch(http://example.com/api/data, { method: POST, headers: { Content-Type: application/json }, body: jsonData
})
.then(response response.json())
.then(data console.log(data))
.catch((error) { console.error(Error:, error);
});
后端Flask
在后端你需要在Flask应用中创建一个路由并使用request.json来获取前端发送的JSON数据。这里是一个例子
from flask import Flask, request, jsonify app Flask(__name__) app.route(/api/data, methods[POST])
def receive_data(): if request.method POST: # 从JSON中解析参数 array_param request.json.get(arrayParam, []) # 默认值为空数组 int_param request.json.get(intParam, None) # 默认值为None你可以根据需要设置默认值 # 检查int_param是否为int类型 if int_param is not None and not isinstance(int_param, int): return jsonify({error: intParam must be an integer}), 400 # 在这里处理你的数据... # 例如你可以返回接收到的参数作为确认 return jsonify({message: Data received!, arrayParam: array_param, intParam: int_param}), 200 else: return jsonify({error: Invalid request method}), 405 if __name__ __main__: app.run(debugTrue) 在这个例子中receive_data函数首先检查请求方法是否为POST。然后它从request.json中获取arrayParam和intParam。注意我使用了get方法来安全地获取这些值并为它们提供了默认值对于arrayParam是一个空数组对于intParam是None。然后它检查intParam是否是一个整数如果不是则返回一个错误响应。最后它返回一个包含接收到的参数的JSON响应。 postman测试 后端模块与接口
AHP.py
import jsonimport numpy as npdef calculate_consistency_ratio(ci, n):# 一致性指标RI的值与n判断矩阵的阶数有关ri_values {1: 0.0, 2: 0.0, 3: 0.58, 4: 0.9, 5: 1.12,6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49}ri ri_values[n]cr ci / rireturn crdef calculate_ci(matrix):# 计算一致性指标CIn matrix.shape[0]eigenvalues, _ np.linalg.eig(matrix)max_eigenvalue np.max(eigenvalues)ci (max_eigenvalue - n) / (n - 1)return cidef calculate_weights(matrix):# 计算权重值eigenvalues, eigenvectors np.linalg.eig(matrix)max_eigenvalue np.max(eigenvalues)max_eigenvector eigenvectors[:, eigenvalues max_eigenvalue]weights max_eigenvector.flatten().real / np.sum(max_eigenvector.flatten().real)return weightsdef ahp_analysis(matrix):# AHP分析主函数n matrix.shape[0]ci calculate_ci(matrix)cr calculate_consistency_ratio(ci, n)if cr 0.1: # 一般情况下当CR0.1时认为判断矩阵的一致性是可以接受的weights calculate_weights(matrix)print(一致性检验通过权重值为, weights)else:print(一致性检验未通过需要重新调整判断矩阵)return weightsdef generate_symmetric_matrix_from_upper(i, upper_triangle_values):根据上三角不包括对角线的值和矩阵维度生成对称矩阵:param i: 矩阵的维度i x i:param upper_triangle_values: 上三角不包括对角线的值列表:return: 生成的对称矩阵if len(upper_triangle_values) ! i * (i - 1) / 2:raise ValueError(提供的上三角值数量不匹配。)# 初始化矩阵matrix [[1] * i for _ in range(i)] # 对角线初始化为1# 填充上三角不包括对角线的值index 0for row in range(i):for col in range(row 1, i): # 从当前行的下一个元素开始跳过对角线matrix[row][col] upper_triangle_values[index]index 1# 填充下三角的值利用对称性for row in range(i):for col in range(row): # 只遍历到当前行的前一个元素不包括对角线matrix[row][col] 1/matrix[col][row] # 下三角的值等于上三角的值return matrix# 方法前端传来矩阵维数上三角值【row1Value1,row1Value2,row2Value2】数组自动生成矩阵并返回AHP分析结果值
def cal_AHP_res(matrixDimension,upper_triangle_values):matrix generate_symmetric_matrix_from_upper(matrixDimension,upper_triangle_values)A np.array(matrix)matrix_resjson.dumps(matrix)arr ahp_analysis(A)# 将其转换为 Python 列表list_arr arr.tolist()# 将列表转换为 JSON 字符串res json.dumps(list_arr)return matrix_res,resif __name__ __main__:# 生成矩阵示例i 3 # 矩阵维度upper_triangle_values [3, 0.75, 0.5] # 上三角不包括对角线的值matrix_res, rescal_AHP_res(i,upper_triangle_values)//flask接口
app.route(/ahp, methods[POST])
def getAHPRes():matrix_dimensionrequest.json.get(matrix_dimension)value request.json.get(upper_values,[]) # 获取数值型值 valuesprint(len(value))matrix,weight cal_AHP_res(matrix_dimension,value)return jsonify({matrix: matrix,weight:weight})