目录
一、作业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) # 归一化,使其和为1
return eigvec.real, max_eigval.real
# 一致性检验
def consistency_check(matrix, max_eigval):
n = matrix.shape[0] # 矩阵的维度
CI = (max_eigval - n) / (n - 1) # 一致性指标 CI
RI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45] # 随机一致性指标 RI(根据矩阵维度n)
CR = CI / RI[n - 1] # 一致性比率 CR
return 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) # 归一化,使其和为1
return eigvec.real, max_eigval.real
# 一致性检验
def consistency_check(matrix, max_eigval):
n = matrix.shape[0] # 矩阵的维度
CI = (max_eigval - n) / (n - 1) # 一致性指标 CI
RI = [0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45] # 随机一致性指标 RI(根据矩阵维度n)
CR = CI / RI[n - 1] # 一致性比率 CR
return 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