软件工程经济学-日常作业+大作业
目录
一、作业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