目录
一、作业1
作业内容
解答
二、作业2
作业内容
解答
三、作业3
作业内容
解答
四、大作业
作业内容
解答
1.建立层次结构模型
(1)目标层
(2)准则层
(3)方案层
2.构造判断矩阵
(1)准则层判断矩阵
(2)方案层判断矩阵
3.层次单排序及其一致性检验
代码
运行结果
4.层次总排序及其一致性检验
代码
运行结果
决策
一、作业1
作业内容
练习题1:请根据下表绘制相应的网络计划图

解答

二、作业2
作业内容
练习题2:请根据下表绘制相应的网络计划图

解答

三、作业3
作业内容
作业3:某软件工程项目经工作分解后,给出了活动明细表,如下表所示:
1、求解每个活动的te值,并填入表中;
2、绘制对应计划网络图;
3、求解该计划网络图的关键活动、关键节点和关键路线。

解答
1、求解每个活动的te值,并填入表中
|   编号  |   活动代号  |   t0  |   tm  |   tp  |   te  |   紧前活动  | 
|   1  |   A  |   6  |   7.5  |   12  |   8  |   -  | 
|   2  |   B  |   4.5  |   4.8  |   6.3  |   5  |   A  | 
|   3  |   C  |   1.2  |   2  |   2.8  |   2  |   A  | 
|   4  |   D  |   5  |   6.7  |   10.2  |   7  |   A  | 
|   5  |   E  |   4.6  |   5.7  |   8.6  |   6  |   B  | 
|   6  |   F  |   5.5  |   6  |   6.5  |   6  |   C  | 
|   7  |   G  |   0  |   0  |   0  |   0  |   B  | 
|   8  |   H  |   5.5  |   7  |   8.5  |   7  |   F、G  | 
|   9  |   I  |   3.5  |   5.2  |   5.7  |   5  |   H  | 
|   10  |   J  |   4.7  |   5.9  |   7.7  |   6  |   D、E、I  | 
2、绘制对应计划网络图

3、求解该计划网络图的关键活动、关键节点和关键路线
关键活动:A、C、F、H、I、J
关键节点:1、2、3、5、6、7、8
关键路线:A->C->F->H->I->J
四、大作业
作业内容
要求:某企业计划采购一批生产设备,现有四家供应商提供的设备备选。请运用层次分析法,从设备的功能性、价格、外观、售后服务等多个方面(可添加考虑因素,自由发挥)进行综合评价,选出最优的供应商。
解答
1.建立层次结构模型
(1)目标层
选择最优的生产设备供应商
(2)准则层
功能性(B1)
价格(B2)
外观(B3)
售后服务(B4)
(3)方案层
供应商C1
供应商C2
供应商C3
供应商C4
2.构造判断矩阵
(1)准则层判断矩阵
为了建立准则层的判断矩阵,我们对各个准则进行成对比较,判断它们在选择供应商时的重要性。我们使用1-9标度法进行比较(1表示两者同等重要,9表示一个因素比另一个重要9倍,反之使用倒数)。
|   功能性 (B1)  |   价格 (B2)  |   外观 (B3)  |   售后服务 (B4)  | |
|   功能性 (B1)  |   1  |   5  |   3  |   7  | 
|   价格 (B2)  |   1/5  |   1  |   1/3  |   2  | 
|   外观 (B3)  |   1/3  |   3  |   1  |   4  | 
|   售后服务 (B4)  |   1/7  |   1/2  |   1/4  |   1  | 
(2)方案层判断矩阵
接下来,我们对每个准则下的供应商进行成对比较。以下为供应商在功能性(B1)、价格(B2)、外观(B3)和售后服务(B4)方面的判断矩阵。我们同样采用1-9标度法进行比较。
供应商在功能性(B1)方面的判断矩阵:
|   C1  |   C2  |   C3  |   C4  | |
|   C1  |   1  |   3  |   1/5  |   2  | 
|   C2  |   1/3  |   1  |   1/7  |   1/3  | 
|   C3  |   5  |   7  |   1  |   9  | 
|   C4  |   1/2  |   3  |   1/9  |   1  | 
供应商在价格(B2)方面的判断矩阵:
|   C1  |   C2  |   C3  |   C4  | |
|   C1  |   1  |   1/3  |   5  |   1/7  | 
|   C2  |   3  |   1  |   7  |   1/3  | 
|   C3  |   1/5  |   1/7  |   1  |   1/9  | 
|   C4  |   7  |   3  |   9  |   1  | 
供应商在外观(B3)方面的判断矩阵:
|   C1  |   C2  |   C3  |   C4  | |
|   C1  |   1  |   1/2  |   3  |   1/5  | 
|   C2  |   2  |   1  |   5  |   1/3  | 
|   C3  |   1/3  |   1/5  |   1  |   1/7  | 
|   C4  |   5  |   3  |   7  |   1  | 
供应商在售后服务(B4)方面的判断矩阵:
|   C1  |   C2  |   C3  |   C4  | |
|   C1  |   1  |   5  |   1/3  |   2  | 
|   C2  |   1/5  |   1  |   1/7  |   1/3  | 
|   C3  |   3  |   7  |   1  |   5  | 
|   C4  |   1/2  |   3  |   1/5  |   1  | 
3.层次单排序及其一致性检验
代码
import numpy as np# 计算特征向量和最大特征值def calculate_eigenvector(matrix):# 计算矩阵的特征值和特征向量eigvals, eigvecs = np.linalg.eig(matrix)# 选择最大特征值的索引max_eigval_index = np.argmax(eigvals)max_eigval = eigvals[max_eigval_index]# 归一化特征向量eigvec = eigvecs[:, max_eigval_index]eigvec = eigvec / np.sum(eigvec)  # 归一化,使其和为1return eigvec.real, max_eigval.real# 一致性检验def consistency_check(matrix, max_eigval):n = matrix.shape[0]  # 矩阵的维度CI = (max_eigval - n) / (n - 1)  # 一致性指标 CIRI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45]  # 随机一致性指标 RI(根据矩阵维度n)CR = CI / RI[n - 1]  # 一致性比率 CRreturn CI, CR# 示例:准则层判断矩阵B1_matrix = np.array([[1, 5, 3, 7],[1 / 5, 1, 1 / 3, 2],[1 / 3, 3, 1, 4],[1 / 7, 1 / 2, 1 / 4, 1]])# 计算特征向量和最大特征值eigvec_B1, max_eigval_B1 = calculate_eigenvector(B1_matrix)# 输出特征向量和最大特征值print("准则层特征向量:", eigvec_B1)print("准则层最大特征值:", max_eigval_B1)# 一致性检验CI_B1, CR_B1 = consistency_check(B1_matrix, max_eigval_B1)# 输出一致性检验结果print("准则层一致性指标 CI:", CI_B1)print("准则层一致性比率 CR:", CR_B1)# 判断一致性if CR_B1 < 0.1:print("准则层判断矩阵一致性通过")else:print("准则层判断矩阵一致性不通过,需要重新构造判断矩阵") 
运行结果

4.层次总排序及其一致性检验
代码
import numpy as np# 计算特征向量和最大特征值def calculate_eigenvector(matrix):eigvals, eigvecs = np.linalg.eig(matrix)max_eigval_index = np.argmax(eigvals)max_eigval = eigvals[max_eigval_index]eigvec = eigvecs[:, max_eigval_index]eigvec = eigvec / np.sum(eigvec)  # 归一化,使其和为1return eigvec.real, max_eigval.real# 一致性检验def consistency_check(matrix, max_eigval):n = matrix.shape[0]  # 矩阵的维度CI = (max_eigval - n) / (n - 1)  # 一致性指标 CIRI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45]  # 随机一致性指标 RI(根据矩阵维度n)CR = CI / RI[n - 1]  # 一致性比率 CRreturn CI, CR# 计算层次总排序def calculate_total_ranking(criteria_weights, matrix_list):# matrix_list 是方案层的判断矩阵列表rankings = []for i, matrix in enumerate(matrix_list):eigvec, max_eigval = calculate_eigenvector(matrix)CI, CR = consistency_check(matrix, max_eigval)# 计算每个方案在该准则下的权重weight = np.dot(eigvec, criteria_weights[i])rankings.append(weight)# 综合排序,得到每个方案的总权重total_weights = np.sum(rankings, axis=0)return total_weights# 示例:准则层判断矩阵B1_matrix = np.array([[1, 5, 3, 7],[1 / 5, 1, 1 / 3, 2],[1 / 3, 3, 1, 4],[1 / 7, 1 / 2, 1 / 4, 1]])# 示例:方案层判断矩阵C1_matrix = np.array([[1, 3, 1 / 5, 2],[1 / 3, 1, 1 / 7, 1 / 3],[5, 7, 1, 9],[1 / 2, 3, 1 / 9, 1]])C2_matrix = np.array([[1, 1 / 3, 5, 1 / 7],[3, 1, 7, 1 / 3],[1 / 5, 1 / 7, 1, 1 / 9],[7, 3, 9, 1]])C3_matrix = np.array([[1, 2, 1 / 3, 1 / 5],[1 / 2, 1, 1 / 9, 1 / 7],[3, 9, 1, 7],[5, 7, 1 / 7, 1]])C4_matrix = np.array([[1, 1 / 2, 3, 1 / 4],[2, 1, 5, 1 / 3],[1 / 3, 1 / 5, 1, 1 / 7],[4, 3, 7, 1]])# 计算准则层的权重(特征向量)criteria_matrix = B1_matrix  # 假设准则层只有一个判断矩阵criteria_weights, max_eigval_B1 = calculate_eigenvector(criteria_matrix)# 计算方案层的综合权重matrix_list = [C1_matrix, C2_matrix, C3_matrix, C4_matrix]  # 方案层判断矩阵列表total_weights = calculate_total_ranking(criteria_weights, matrix_list)# 输出层次总排序print("各方案的综合权重:", total_weights)# 判断是否一致CI_B1, CR_B1 = consistency_check(criteria_matrix, max_eigval_B1)print("准则层一致性指标 CI:", CI_B1)print("准则层一致性比率 CR:", CR_B1)# 根据综合权重选择最优方案best_supplier_index = np.argmax(total_weights)print(f"最优供应商是供应商 C{best_supplier_index + 1}") 
运行结果

决策
最优供应商为C3