2024年美国大学生数学建模竞赛(E题)财产保险建模|MCDA/随机森林建模解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮500+人完成了建模与思路的构建的处理了~
本文运用利用时间序列和强化学习结合DQN算法,解决保险业可持续性问题;采用MCDA和随机森林,应对地产业保险挑战;运用电子表格法处理历史建筑保护决策;结合敏感性分析和可视化图表,深度解读数据。
创新思路、卓越手法,鹿鹿学长构建前瞻性建模,成就你的美赛夺奖之路!
完整内容可以在文章末尾领取!
在这里插入图片描述

问题重述及要点

问题1: 财产保险行业的挑战与可持续性

  1. 现状描述:

    • 描述当前财产保险行业面临的挑战,包括极端天气事件频发导致的损失增加和保险理赔的上升趋势。
  2. 气候变化对行业的影响:

    • 分析气候变化对财产保险行业的影响,包括预期未来天气事件的频率和严重程度。
  3. 可持续性考虑:

    • 探讨保险公司如何应对这些挑战,以确保其业务的可持续性,包括调整保费、承保政策和提供更多风险管理服务等方面。
  4. 保险模型的建立:

    • 讨论建立一个模型的必要性,以帮助保险公司评估承保决策的风险和潜在收益,以及如何确保保险行业的长期健康。

问题2: 保险模型的应用

  1. 模型要素和条件:

    • 确定建立模型时需要考虑的关键因素和条件,例如地理位置、历史天气事件数据、保险保障缺口等。
  2. 决策建议:

    • 提出在何种条件下保险公司应该承保政策,以及何时应该避免或限制承保。
  3. 两个地区的应用案例:

    • 使用模型对两个不同大陆上经历极端天气事件的地区进行评估,并比较模型在不同情境下的应用结果。

问题3: 社区领导者面临的挑战与建议

  1. 文化或社区重要性建筑物保护的挑战:

    • 讨论社区领导者在保护文化或社区重要性建筑物时面临的挑战,包括如何平衡保护和发展的需求。
  2. 保护模型的建立:

    • 探讨建立一个保护模型的重要性,以帮助社区领导者确定哪些建筑物应该受到保护,以及如何保护。
  3. 建议与计划:

    • 提出建议和计划,包括保护措施的范围、时间表和成本估算,以及如何平衡保护和发展的利益。

问题4: 历史地标的保护与发展

  1. 历史地标的价值评估:

    • 选择一座历史地标,分析其在极端天气事件频发地区的价值,以及保护和发展的必要性。
  2. 社区建议信:

    • 撰写一封给社区的建议信,提出关于历史地标的保护和发展的计划,包括保护措施、时间表和成本预算。

问题一

综合建模思路:使用时间序列和深度 Q 网络(DQN)解决财产保险行业可持续性问题:

一、数据收集与预处理:

  1. 时间序列数据:

    • 收集财产保险行业的历史数据,包括极端天气事件、保险理赔、保费收入、市场指标等。
  2. 天气事件数据:

    • 获取详细的天气事件数据,包括类型、频率、地理分布等,以便将其纳入模型。
  3. 市场经济数据:

    • 收集相关的市场经济数据,例如通货膨胀率、利率、GDP等,以更全面地了解外部因素的影响。

二、时间序列分析:

  1. 趋势和季节性分析:

    • 对时间序列数据进行趋势和季节性分析,以理解极端天气事件对理赔和保费的长期和短期影响。
  2. 相关性分析:

    • 确定不同因素之间的相关性,特别是天气事件与理赔之间的关联。

三、强化学习模型建立:

  1. 状态表示:

    • 将状态空间中的各个因素编码成可供神经网络处理的状态表示。
  2. DQN 网络结构:

    • 构建深度 Q 网络,包括输入层、隐藏层和输出层,确保网络结构能够处理复杂的状态信息。
  3. 动作空间定义:

    • 将承保政策的选择映射到模型的输出,确保动作空间能够覆盖保险公司可能的策略。
  4. 经验回放:

    • 使用经验回放机制,从过去的决策和奖励中学习,以减少样本相关性,提高训练效果。
  5. 目标网络:

    • 实施目标网络来稳定训练过程,将目标 Q 值的计算与当前网络的参数分离。

四、训练与优化:

  1. 奖励函数调整:

    • 不断调整奖励函数,以确保模型能够在保险公司的整体利益和可持续性之间找到平衡。
  2. 训练过程:

    • 在历史数据上进行训练,逐步优化网络参数,以最大化长期奖励。
  3. 性能评估:

    • 使用交叉验证或保持一部分数据用于测试,评估模型在未见过的数据上的性能。

五、结果解释与决策支持:

  1. 策略输出:

    • 解释 DQN 模型的输出,包括每个状态下选择的承保政策以及相应的 Q 值。
  2. 决策支持系统整合:

    • 将训练好的 DQN 模型整合到决策支持系统中,为保险公司提供实时决策支持。
  3. 反馈循环:

    • 建立一个反馈循环机制,以定期监控模型性能并进行调整,确保模型能够适应不断变化的环境。
import numpy as np
import tensorflow as tf
from collections import deque# 定义深度 Q 网络
class DQNNetwork(tf.keras.Model):def __init__(self, state_size, action_size):super(DQNNetwork, self).__init__()self.fc1 = tf.keras.layers.Dense(64, activation='relu')self.fc2 = tf.keras.layers.Dense(64, activation='relu')self.output_layer = tf.keras.layers.Dense(action_size, activation='linear')def call(self, state):x = self.fc1(state)x = self.fc2(x)return self.output_layer(x)# 定义经验回放缓存
#见完整版# 定义DQN Agent
class DQNAgent:def __init__(self, state_size, action_size):self.state_size = state_sizeself.action_size = action_sizeself.gamma = 0.99  # 折扣因子self.epsilon = 1.0  # 探索-利用权衡的初始值self.epsilon_decay = 0.995  # 探索-利用权衡的衰减率self.epsilon_min = 0.01  # 探索-利用权衡的最小值self.learning_rate = 0.001  # 学习率self.batch_size = 64  # 批处理大小self.memory = ReplayBuffer(capacity=10000)self.model = DQNNetwork(state_size, action_size)self.target_model = DQNNetwork(state_size, action_size)self.optimizer = tf.keras.optimizers.Adam(learning_rate=self.learning_rate)def select_action(self, state):if np.random.rand() <= self.epsilon:return np.random.choice(self.action_size)q_values = self.model.predict(state)return np.argmax(q_values[0])def remember(self, state, action, reward, next_state, done):self.memory.add((state, action, reward, next_state, done))def replay(self):if len(self.memory.buffer) < self.batch_size:returnminibatch = self.memory.sample(self.batch_size)states, targets = [], []for state, action, reward, next_state, done in minibatch:target = rewardif not done:target = reward + self.gamma * np.amax(self.target_model.predict(next_state)[0])target_f = self.model.predict(state)target_f[0][action] = targetstates.append(state[0])targets.append(target_f[0])self.model.fit(np.array(states), np.array(targets), epochs=1, verbose=0)def target_train(self):self.target_model.set_weights(self.model.get_weights())def decay_epsilon(self):if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decay

在解决问题一的过程中,可以创建多种图表来帮助可视化和理解财产保险行业的可持续性问题。以下是一些图表类型:

  1. 时间序列图:

    • 显示时间序列数据,包括极端天气事件的频率、保险理赔金额和保费收入。这有助于识别趋势和季节性模式。
  2. 相关性矩阵:

    • 通过绘制相关性矩阵,展示不同因素之间的关联程度。特别是天气事件与理赔之间的相关性,以及其他市场经济因素的影响。
  3. 深度 Q 网络结构图:

    • 如果需要,你可以绘制深度 Q 网络的结构图,显示输入层、隐藏层和输出层的连接关系。这有助于理解模型的复杂性。
  4. 保险承保策略图:

    • 可以绘制图表来展示模型在不同状态下推荐的承保策略,以及相应的 Q 值。这有助于解释模型输出。
  5. 奖励函数调整图:

    • 如果你不断调整奖励函数,可以通过图表来展示奖励函数的变化对模型性能的影响。这有助于找到平衡点。
  6. 训练过程图:

    • 可以绘制训练过程中模型性能的变化曲线,以及模型在测试数据上的表现。这有助于评估模型的泛化能力。
  7. 决策支持系统界面:

    • 如果将模型整合到决策支持系统中,可以创建界面截图或流程图,显示模型输出是如何为决策者提供支持的。

在这里插入图片描述

问题二(MCDA+随机森林)

将多标准决策分析(MCDA)结合随机森林进行问题二的建模需要一系列步骤。以下是详细的思路:
好的,让我们对每个步骤进行更详细的说明,并结合公式:

一、问题定义和准备工作:

  1. 明确定义决策目标:

    • 假设我们有四个目标:文化重要性(C),历史重要性(H),经济贡献(E),社区关联(S)。
  2. 数据准备:

    • 收集建筑物的相关数据,并将其转化为可量化的形式。设建筑物 i 的数据为 X i = [ X i C , X i H , X i E , X i S ] X_i = [X_{iC}, X_{iH}, X_{iE}, X_{iS}] Xi=[XiC,XiH,XiE,XiS]

二、MCDA模型建立:

  1. 指标权重确定:

    • 使用 AHP 或专家意见确定指标的权重 W = [ W C , W H , W E , W S ] W = [W_C, W_H, W_E, W_S] W=[WC,WH,WE,WS],满足 ∑ i = 1 4 W i = 1 \sum_{i=1}^{4} W_i = 1 i=14Wi=1
  2. 评价矩阵建立:

    • 建立评价矩阵 M M M,其中 M i j M_{ij} Mij 表示建筑物 i 在目标 j 上的得分。

    M = [ M 11 M 12 M 13 M 14 M 21 M 22 M 23 M 24 ⋮ ⋮ ⋮ ⋮ M n 1 M n 2 M n 3 M n 4 ] M = \begin{bmatrix} M_{11} & M_{12} & M_{13} & M_{14} \\ M_{21} & M_{22} & M_{23} & M_{24} \\ \vdots & \vdots & \vdots & \vdots \\ M_{n1} & M_{n2} & M_{n3} & M_{n4} \end{bmatrix} M= M11M21Mn1M12M22Mn2M13M23Mn3M14M24Mn4

  3. 综合评分计算:

    • 计算每个建筑物的综合评分 S i S_i Si

    S i = ∑ j = 1 4 W j ⋅ M i j S_i = \sum_{j=1}^{4} W_j \cdot M_{ij} Si=j=14WjMij

三、随机森林模型建立:

  1. 准备训练数据集:

    • 创建一个训练数据集,包括建筑物的特征 X i X_i Xi 作为输入,而MCDA模型中计算得到的综合评分作为输出。 D = { ( X 1 , S 1 ) , ( X 2 , S 2 ) , . . . , ( X n , S n ) } D = \{(X_1, S_1), (X_2, S_2), ..., (X_n, S_n)\} D={(X1,S1),(X2,S2),...,(Xn,Sn)}
  2. 随机森林模型训练:

    • 训练一个随机森林模型,其中 R F ( X i ) RF(X_i) RF(Xi) 预测建筑物的综合评分。
  3. 模型评估:

    • 使用测试数据集评估模型性能。

四、整合MCDA和随机森林:

  1. MCDA输出与随机森林预测的整合:

    • 将MCDA计算得到的综合评分 S i S_i Si 与随机森林模型的预测结果 R F ( X i ) RF(X_i) RF(Xi) 整合。

    F i n a l S c o r e i = α ⋅ S i + ( 1 − α ) ⋅ R F ( X i ) FinalScore_i = \alpha \cdot S_i + (1 - \alpha) \cdot RF(X_i) FinalScorei=αSi+(1α)RF(Xi)

    其中, α \alpha α 是整合权重,表示MCDA模型的相对重要性。

  2. 结果解释:

    • 解释最终的保护建议,包括建筑物的文化、历史、经济和社区重要性,以及随机森林模型对建筑物保护程度的预测。
  3. 调整和优化:

    • 根据实际需求和反馈,调整MCDA权重、随机森林参数等,以优化模型性能。

五、结果可视化和报告:

  1. 生成图表和报告:
    • 使用适当的图表和报告,将整个模型的结果清晰地呈现,以便决策者理解和接受建筑物的保护建议。

在整个过程中,确保对权重、参数和整合方式进行适当的敏感性分析,以确保模型的鲁棒性和实用性。

import numpy as np
from sklearn.ensemble import RandomForestRegressor# 生成模拟数据
np.random.seed(42)
num_buildings = 100
num_features = 4# 模拟建筑物特征
X = np.random.rand(num_buildings, num_features)# 模拟MCDA得分(0到1之间的随机数)
MCDA_scores = np.random.rand(num_buildings)# 模拟每个建筑物的真实保护程度标签(0到1之间的随机数)
true_protection_labels = np.random.rand(num_buildings)# 随机森林模型训练
def train_random_forest(X_train, y_train):rf_model = RandomForestRegressor(n_estimators=100, random_state=42)rf_model.fit(X_train, y_train)return rf_model# 随机森林模型预测
def predict_with_random_forest(rf_model, X_test):return rf_model.predict(X_test)# MCDA模型建立
#见完整版# 模型训练
rf_model = train_random_forest(X, true_protection_labels)# 新建筑物特征(用于演示)
new_building_feature = np.random.rand(1, num_features)# MCDA模型得分计算
mcda_score = calculate_mcda_scores(new_building_feature)# 随机森林模型预测
rf_prediction = predict_with_random_forest(rf_model, new_building_feature)# 整合MCDA和随机森林得分
integration_alpha = 0.7
final_score = integrate_scores(integration_alpha, mcda_score, rf_prediction)# 打印结果
print("MCDA Score:", mcda_score[0])
print("RF Prediction:", rf_prediction[0])
print("Integrated Score:", final_score[0])

在解决问题二的情境中,你可以使用多种图形来可视化不同方面的数据和模型结果。以下是一些可能有用的图表示例:

  1. 条形图/饼图:

    • 用于展示建筑物的不同方面的权重和重要性。可以用于显示文化、历史、经济和社区因素的相对权重。
  2. 散点图:

    • 用于展示建筑物的特征与MCDA得分之间的关系。每个点表示一个建筑物,横轴表示某个特征,纵轴表示MCDA得分。
  3. 随机森林模型的特征重要性图:

    • 随机森林模型提供了每个特征对于模型预测的相对重要性。这可以通过绘制一个条形图来展示。
  4. 整合得分图:

    • 使用整合MCDA和随机森林得分的柱状图或折线图。可以将每个建筑物的MCDA得分、随机森林预测以及整合得分进行比较。
  5. 热力图:

    • 如果有地理信息数据,可以使用热力图来展示建筑物的分布以及其在地理空间上的整合得分。
  6. 决策树可视化(针对单颗树):

    • 随机森林是多个决策树的集合,你可以选择其中一颗树进行可视化,以更好地理解模型的决策过程。
  7. ROC曲线或PR曲线:

    • 用于评估随机森林模型的性能,特别是在不同阈值下的召回率和准确率。
  8. MCDA模型输出图:

    • 用于展示MCDA模型输出的建筑物得分分布。
import matplotlib.pyplot as plt
import seaborn as sns# 设置Seaborn风格
sns.set(style="whitegrid")# 1. 条形图/饼图
weights = [0.25, 0.25, 0.25, 0.25]  # 替换为你的实际权重
labels = ['Culture', 'History', 'Economy', 'Community']
plt.figure(figsize=(8, 6))
plt.bar(labels, weights, color='skyblue')
plt.title('Weights of Different Aspects')
plt.xlabel('Aspects')
plt.ylabel('Weights')
plt.show()# 2. 散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X[:, 0], y=MCDA_scores)
plt.title('Scatter Plot between Feature 1 and MCDA Scores')
plt.xlabel('Feature 1')
plt.ylabel('MCDA Scores')
plt.show()# 3. 随机森林模型的特征重要性图
feature_importances = rf_model.feature_importances_
plt.figure(figsize=(8, 6))
sns.barplot(x=feature_importances, y=['Feature 1', 'Feature 2', 'Feature 3', 'Feature 4'], color='lightgreen')
plt.title('Random Forest Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Features')
plt.show()# 4. 整合得分图
building_names = ['Building 1', 'Building 2', 'Building 3', 'Building 4']  # 替换为实际建筑物名
integrated_scores = [0.8, 0.6, 0.7, 0.9]  # 替换为实际整合得分
plt.figure(figsize=(8, 6))
plt.bar(building_names, integrated_scores, color='salmon')
plt.title('Integrated Scores of Buildings')
plt.xlabel('Buildings')
plt.ylabel('Integrated Scores')
plt.show()# 5. 热力图(示例,需要地理信息数据)
plt.figure(figsize=(10, 8))
sns.heatmap(data=building_data, annot=True, cmap='YlGnBu')
plt.title('Integrated Scores Heatmap')
plt.show()# 其他图表略,根据需要选择性绘制

在这里插入图片描述

问题三

问题三涉及建立一个保险公司的模型,以确定何时承保房地产保险,尤其是在极端天气事件频发的地区。为了解决这个问题,可以考虑使用强化学习算法,尤其是基于时间序列数据的方法。以下是一种可能的方法:

使用时间序列结合强化学习算法解决问题三的详细思路:

1. 问题建模:

将问题转化为马尔可夫决策过程(MDP),定义MDP元素: S S S(状态空间)、 A A A(动作空间)、 P P P(状态转移概率)、 R R R(奖励函数)、 γ γ γ(折扣因子)。

2. 定义状态(State):

定义状态空间 S S S,包括房地产市场指标和极端天气事件历史。例如:
S t = [ M t , W t ] S_t = [M_t, W_t] St=[Mt,Wt]
其中, M t M_t Mt 表示在时刻 t t t 的房地产市场指标, W t W_t Wt 表示在时刻 t t t 的天气事件历史。

3. 定义动作(Action):

定义动作空间 A A A,包括保险公司可以采取的各种决策动作。例如:
A t = [ I t , P t ] A_t = [I_t, P_t] At=[It,Pt]
其中, I t I_t It 表示在时刻 t t t 是否承保, P t P_t Pt 表示在时刻 t t t 的保费水平调整。

4. 定义奖励(Reward):

定义奖励函数 R ( s , a , s ′ ) R(s, a, s') R(s,a,s),表示在状态 s s s 下采取动作 a a a 后转移到状态 s ′ s' s 所获得的奖励。可以考虑多个因素,例如:
R ( s , a , s ′ ) = MarketPerformance ( s , s ′ ) + Profit ( s , a ) − RiskPenalty ( s ′ ) R(s, a, s') = \text{{MarketPerformance}}(s, s') + \text{{Profit}}(s, a) - \text{{RiskPenalty}}(s') R(s,a,s)=MarketPerformance(s,s)+Profit(s,a)RiskPenalty(s)
其中, MarketPerformance \text{{MarketPerformance}} MarketPerformance 表示市场表现的奖励, Profit \text{{Profit}} Profit 表示保险公司的利润, RiskPenalty \text{{RiskPenalty}} RiskPenalty 表示面临的风险。

5. 建立强化学习模型:

选择一个强化学习算法,例如深度Q网络(DQN)。DQN 的 Q 值函数可以表示为:
Q ( s , a ) = E [ R t + γ max ⁡ a ′ Q ( s ′ , a ′ ) ∣ s , a ] Q(s, a) = \mathbb{E} \left[ R_t + \gamma \max_{a'} Q(s', a') \mid s, a \right] Q(s,a)=E[Rt+γamaxQ(s,a)s,a]
这里, R t R_t Rt 是时刻 t t t 的奖励, γ \gamma γ 是折扣因子, a ′ a' a 是在下一状态 s ′ s' s 下的动作。

6. 模型训练:

使用历史数据进行强化学习模型的训练。通过最小化 Q 值的均方误差来更新模型参数:
Loss = E [ ( Q ( s , a ) − ( R t + γ max ⁡ a ′ Q ( s ′ , a ′ ) ) ) 2 ] \text{{Loss}} = \mathbb{E} \left[ \left( Q(s, a) - (R_t + \gamma \max_{a'} Q(s', a')) \right)^2 \right] Loss=E[(Q(s,a)(Rt+γamaxQ(s,a)))2]

7. 模型评估:

通过验证集或历史数据评估模型的性能。可以使用累积奖励、平均奖励等指标来评估模型的效果。

8. 决策制定:

使用训练好的强化学习模型进行决策制定。在每个时刻根据当前状态选择最优的动作:
a ∗ = arg ⁡ max ⁡ a Q ( s , a ) a^* = \arg\max_{a} Q(s, a) a=argamaxQ(s,a)

9. 实时决策:

将模型部署到实时环境中,使用实时数据进行决策。在每个时刻更新模型的状态,选择最优动作。

10. 调整和优化:

根据实际情况对模型进行调整和优化。可以采用在线学习的方式,不断更新模型以适应新的市场变化。

import numpy as np
import tensorflow as tf
from collections import deque
import random# 定义强化学习模型
class DQNAgent:def __init__(self, state_size, action_size):self.state_size = state_sizeself.action_size = action_sizeself.memory = deque(maxlen=2000)self.gamma = 0.95  # 折扣因子self.epsilon = 1.0  # 探索率self.epsilon_decay = 0.995self.epsilon_min = 0.01self.learning_rate = 0.001self.model = self.build_model()#见完整版def remember(self, state, action, reward, next_state, done):self.memory.append((state, action, reward, next_state, done))def act(self, state):if np.random.rand() <= self.epsilon:return np.random.choice(self.action_size)act_values = self.model.predict(state)return np.argmax(act_values[0])def replay(self, batch_size):minibatch = random.sample(self.memory, batch_size)for state, action, reward, next_state, done in minibatch:target = rewardif not done:target = (reward + self.gamma * np.amax(self.model.predict(next_state)[0]))target_f = self.model.predict(state)target_f[0][action] = targetself.model.fit(state, target_f, epochs=1, verbose=0)if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decay# 模拟环境
class Environment:def __init__(self):self.state_size = 8  # 替换为实际状态空间大小self.action_size = 2  # 替换为实际动作空间大小self.episodes = 1000def reset(self):return np.random.random(self.state_size)def step(self, action):# 模拟环境的状态转移和奖励计算next_state = np.random.random(self.state_size)reward = np.random.random()done = False  # 根据实际情况判断是否结束return next_state, reward, done, {}# 主程序
env = Environment()
state_size = env.state_size
action_size = env.action_size
agent = DQNAgent(state_size, action_size)
batch_size = 32for episode in range(env.episodes):state = env.reset()state = np.reshape(state, [1, state_size])for time in range(500):  # 最大时间步长action = agent.act(state)next_state, reward, done, _ = env.step(action)next_state = np.reshape(next_state, [1, state_size])agent.remember(state, action, reward, next_state, done)state = next_stateif done:breakif len(agent.memory) > batch_size:agent.replay(batch_size)

在强化学习中,可视化是一种重要的工具,可以帮助你理解代理的学习过程和结果。以下是一些可视化的方法,你可以根据实际需要选择适合你问题的方式:

  1. 奖励曲线:
    • 画出每个时刻或每个回合的奖励曲线,以观察代理学习的效果。
    • 使用matplotlib等库进行绘图。
import matplotlib.pyplot as pltdef plot_rewards(rewards):plt.plot(rewards)plt.xlabel('Episode')plt.ylabel('Total Reward')plt.title('Reward Curve')plt.show()
  1. 探索率曲线:
    • 如果你在训练中使用了探索率(epsilon-greedy策略),可以绘制探索率的变化曲线。
def plot_epsilon(epsilon_values):plt.plot(epsilon_values)plt.xlabel('Episode')plt.ylabel('Exploration Rate (Epsilon)')plt.title('Exploration Rate Curve')plt.show()
  1. Q值分布:
    • 绘制代理在状态空间中学到的Q值分布,以观察其对状态-动作对的估计。
def plot_q_distribution(q_values):plt.hist(q_values, bins=30)plt.xlabel('Q-Values')plt.ylabel('Frequency')plt.title('Q-Value Distribution')plt.show()
  1. 动作分布:
    • 对于每个状态,绘制代理选择的动作分布。
def plot_action_distribution(action_distribution):plt.bar(range(len(action_distribution)), action_distribution)plt.xlabel('Actions')plt.ylabel('Probability')plt.title('Action Distribution')plt.show()
  1. 状态空间映射:
    • 如果状态空间是低维的,可以通过散点图等方式将状态映射到二维平面,观察状态空间中的聚类情况。
def plot_state_space(states):plt.scatter(states[:, 0], states[:, 1], c='blue', marker='o')plt.xlabel('State Dimension 1')plt.ylabel('State Dimension 2')plt.title('State Space Mapping')plt.show()

在这里插入图片描述

问题四(电子表格法)

电子表格法(Electre Method)是一种多准则决策方法,具体步骤如下:

1. 准备准则和建筑的数据矩阵:

对于每个建筑 i i i 和每个准则 j j j,构建一个矩阵 C C C,其中 C i j C_{ij} Cij 表示建筑 i i i 在准则 j j j 上的性能值。

2. 为每个准则定义权重:

为每个准则 j j j 分配权重 w j w_j wj,表示其相对重要性。确保 ∑ j w j = 1 \sum_{j} w_j = 1 jwj=1

3. 定义准则之间的“优势关系”:

构建一个矩阵 P P P,其中 P i j P_{ij} Pij 表示建筑 i i i 在准则 j j j 上是否优于建筑 i ′ i' i。可以使用以下规则定义优势关系:

  • P i j = 1 P_{ij} = 1 Pij=1,如果 C i j − C i ′ j ≥ threshold C_{ij} - C_{i'j} \geq \text{threshold} CijCijthreshold(建筑 i i i 在准则 j j j 上优于建筑 i ′ i' i)。
  • P i j = 0 P_{ij} = 0 Pij=0,如果 ∣ C i j − C i ′ j ∣ < threshold |C_{ij} - C_{i'j}| < \text{threshold} CijCij<threshold(建筑 i i i 和建筑 i ′ i' i 在准则 j j j 上差距较小)。
  • P i j = − 1 P_{ij} = -1 Pij=1,如果 C i j − C i ′ j ≤ − threshold C_{ij} - C_{i'j} \leq -\text{threshold} CijCijthreshold(建筑 i ′ i' i 在准则 j j j 上优于建筑 i i i)。

Threshold 是一个预先定义的阈值,用于控制何时认为一个建筑在某个准则上优于另一个建筑。

4. 定义优势关系的重要性:

构建一个矩阵 Q Q Q,其中 Q i j Q_{ij} Qij 表示对于建筑 i i i 在准则 j j j 上的优势关系的重要性。通常使用三个级别的重要性:

  • Q i j = 2 Q_{ij} = 2 Qij=2 表示“强优势关系”。
  • Q i j = 1 Q_{ij} = 1 Qij=1 表示“中等优势关系”。
  • Q i j = 0 Q_{ij} = 0 Qij=0 表示“弱优势关系”。

5. 计算优势矩阵:

构建一个优势矩阵 S S S,其中 S i i ′ S_{ii'} Sii 表示建筑 i i i 相对于建筑 i ′ i' i 的综合优势。计算方法为:
S i i ′ = ∑ j w j ⋅ Q i j ⋅ P i j S_{ii'} = \sum_{j} w_j \cdot Q_{ij} \cdot P_{ij} Sii=jwjQijPij

6. 聚合得分:

计算每个建筑的得分,可使用加权和或其他聚合方法:
Score i = ∑ i ′ ≠ i S i i ′ \text{Score}_i = \sum_{i' \neq i} S_{ii'} Scorei=i=iSii

7. 排序:

对建筑根据得分进行排序,得到最终的排名。

8. 结果解释:

解释最终的建筑排名,考虑各个准则的贡献和权重。

9. 敏感性分析:

进行敏感性分析,评估不同权重下的建筑排名和决策的稳定性。

10. 决策报告:

生成详细的决策报告,包括排名、权重、敏感性分析等信息。

import numpy as npdef electre_method(data_matrix, weights, threshold, importance_matrix):num_buildings, num_criteria = data_matrix.shape# Step 3: Define outranking relations
#见完整版# Step 5: Calculate outranking matrix considering importanceweighted_outranking_matrix = outranking_matrix * importance_matrix# Step 6: Aggregate scoresscores = np.sum(weighted_outranking_matrix, axis=1)# Step 7: Rankingranking = np.argsort(scores)[::-1]return ranking + 1  # Adding 1 to make rankings start from 1def calculate_outranking_relation(building_i, building_j, threshold):# Helper function to calculate outranking relation between two buildingsrelation = 0  # Default relation (no outranking)for k in range(len(building_i)):diff = building_i[k] - building_j[k]if diff >= threshold:relation = 1  # Building i outranks building jbreakelif -threshold < diff < threshold:relation = 0  # No outranking relationbreakelif diff <= -threshold:relation = -1  # Building j outranks building ibreakreturn relation# Example usage:
data_matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
weights = np.array([0.3, 0.4, 0.3])
threshold = 1
importance_matrix = np.array([[2, 1, 0], [2, 1, 0], [2, 1, 0]])ranking = electre_method(data_matrix, weights, threshold, importance_matrix)
print("Building Ranking:", ranking)

在解决问题时,可以绘制多种图表来帮助可视化数据和结果。以下是一些可能有用的图表类型:

  1. 柱状图(Bar Chart)

    • 用于比较不同建筑在各个准则上的性能。
    • 用于显示不同准则的权重。
  2. 雷达图(Radar Chart)

    • 用于比较不同建筑在多个准则上的综合表现。
    • 每个轴代表一个准则,雷达图上的线条表示建筑在各个准则上的得分。
  3. 散点图(Scatter Plot)

    • 如果数据允许,可以用来展示两个准则之间的关系。每个点代表一个建筑,其 x 轴和 y 轴分别表示两个准则的性能值。
  4. 热力图(Heatmap)

    • 用于显示建筑之间的优势关系矩阵或权重矩阵。
    • 可以清晰地展示建筑之间的相对优势。
  5. 排名图(Ranking Plot)

    • 用于可视化建筑的排名结果。
    • 可以以柱状图或其他形式展示建筑的排名顺序。
  6. 敏感性分析图(Sensitivity Analysis Plot)

    • 如果进行了敏感性分析,可以绘制敏感性分析图,显示不同权重或阈值下的建筑排名变化情况。

在这里插入图片描述
更多内容可以点击下方名片详细了解,让小鹿学长带你冲刺美赛夺奖之路!
敬请期待我们的努力所做出的工作!记得关注 鹿鹿学长呀!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑怎么录屏?打造专业级视频内容!

随着科技的进步&#xff0c;电脑已经深入到我们的日常生活和工作中。而在这个数字时代&#xff0c;录制屏幕内容变得日益重要。无论是制作教程、分享游戏技巧&#xff0c;还是记录重要的演示&#xff0c;录屏都是一个不可或缺的功能。可是电脑怎么录屏呢&#xff1f;本文将深入…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…

国自然结题报告为什么不能下载?如何解决

一直以来&#xff0c;国自然的结题报告都不是只能在线查看&#xff0c;这给很多科研人员带来一些不方便&#xff0c;因为在线查看的话&#xff0c;受限于网络&#xff0c;必须有网的时候才能看&#xff0c;并且官方网站的响应比较慢&#xff0c;想快速翻页&#xff0c;基本不可…

【Java程序设计】【C00240】基于Springboot的班级综合测评管理系统(有论文)

基于Springboot的班级综合测评管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的班级综合测评管理系统 本系统分为学生功能模块、管理员功能模块以及教师功能模块。 管理员功能模块&#xff1a;管理员功能…

MySQL学习记录——일 MySQL 安装、配置

文章目录 1、卸载内置环境2、安装MySQL3、启动4、登录5、配置my.cnf 当前环境是1核2G云服务器&#xff0c;CentOS7.6。要在root用户下进行操作 1、卸载内置环境 云服务器中有可能会自带mysql还有mariadb这样的数据库服务&#xff0c;在安装我们mysql前&#xff0c;得先查找一下…

迪文串口屏数据的隐藏功能

一、概述 由于项目中在使用迪文屏显示数据的时候&#xff0c;需要在数据为0的时候不显示0&#xff0c;而迪文屏默认的数据变量在无值的时候显示为0&#xff0c;此时可以使用数据的隐藏功能指令 二、具体实现方法 1、可以使用描述指针地址来实现数据的隐藏&#xff0c;查看应用…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

Ubuntu 添加字体

Ubuntu 添加字体 Ubuntu如何添加新的字体&#xff1f;似乎远远没有Windows方便呀&#xff0c;查询了一些资料&#xff0c;与大家分享。 方法1 根据字体名称直接安装 oyroy-FMVU08001:~$ sudo apt-get install fonts-wqy-zenhei [sudo] roy 的密码&#xff1a; 正在读取软件…

2024美赛D题完整四小问代码+数据集+22页成品参考论文

D题&#xff08;文末获取完整版的&#xff09; 题目三&#xff1a;新控制方法是否会让各利益相关者满意或优于当年实际记录的 水位? 解题思路 问题 3 要求我们理解控制算法对两座控制大坝流出量的敏感性&#xff0c;并利用 2017 年 的数据来验证新控制措施是否能为各方利益相关…

第二代视频换脸工具facefusion

GitHub - facefusion/facefusion: Next generation face swapper and enhancer官方地址 1.环境安装 Windows - FaceFusion Windows Python winget install -e --id Python.Python.3.10 PIP python -m ensurepip --upgrade GIT winget install -e --id Git.Git

【奶奶看了都会】《幻兽帕鲁》云服务器部署教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。 《幻兽帕鲁》官…

halcon中的坐标系相关

一、定义 世界坐标系&#xff1a;真实世界中物体实际位置&#xff08;三维&#xff09; 相机坐标系&#xff1a;以镜头光心为原点&#xff0c;光轴为Z轴&#xff08;三维&#xff09; 图像物理坐标系&#xff1a;以成像图像中心维原点&#xff08;二维&#xff09; 像素坐标系…

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路&#xff0c; 创建三个表&#xff0c; 第一个数是从四个数遍历&#xff0c; 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

记录关于node接收上传文件formData踩的坑

1.vue2使用插件formidable实现接收文件&#xff0c;首先接口不可以使用任何中间件&#xff0c;否则form.parse()方法不执行。 const express require(express) const multipart require(connect-multiparty); const testController require(../controller/testController)/…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能&#xff0c;这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前&#xff08;约2021年末&#xff09;貌似可以通过WordPress自带的函数发信&#xff0c;并且收信方提示由xxx代…

Request Response 基础篇

Request & Response 在之前的博客中&#xff0c;初最初见到Request和Response对象&#xff0c;是在Servlet的Service方法的参数中&#xff0c;之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理&#xff0c;然后通过对Response来进行数…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-01-31T10:18:10.141465 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-…

c语言---访问越界之后死循环的原因

目录 死循环的概念环境题目代码运行结果对代码发生情况进行解释对i的地址和arr[12]地址一样的解释注意总结 死循环的概念 简单来说&#xff0c;死循环就是指无法靠自身的控制终止循环&#xff0c;在编程中&#xff0c;则是靠自身控制无法终止的程序。即在某一时刻&#xff0c;…

uniapp基于Android平台的校园生活服务交流论坛系统(二手,失物招领 -跑腿) 小程序hbuiderx

作为一款APP的校园论坛系统&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多功能&#x…