当前位置:   article > 正文

2024年“华数杯”全国大学生数学建模竞赛C题解析(含数据与代码)

2024年“华数杯”全国大学生数学建模竞赛C题解析(含数据与代码)

该题目主要考察数据收集、综合评价及多目标规划的能力。

数据

在这里插入图片描述

在这里插入图片描述

为大家分享2024年华数杯数学建模竞赛C题的完整数据与第一问代码,关注公众号 云顶数模 领取相关资料
详细的问题分析、实现代码及参考论文,完整代码与2w字的参考论文持续更新中~

解题思路

问题一

在第一问,题目要求找到35200个景点中评分的最高分,并对最高分的景点数按照城市进行统计。最后得出拥有最高评分景点数量的前十个城市。在这一问中,主要选手的考察数据查询能力,按照题目的要求遍历各个表格进行查询即可。

问题二

在第二问中,要求遵循城市最佳景点游览原则,结合多个因素对352个城市进行综合评价,选出50个城市。在这道题中,需要建立一个综合评价模型对多个因素进行综合评价。在这里可以考虑建立AHP-TOPSIS模型或者熵权法-TOPSIS模型。在构建各个城市的评分指标表格后,可以基于因子分析法或者主成分分析法进行降维,然后利用所构建的综合评价模型计算各个城市的评分。

问题三

在第三问中,假设一名游客从广州入境,要求建立一个优化模型,优化目标是在144小时内游玩尽可能多的城市,同时要求综合游玩体验最好。在这里需要建立一个游玩体验的评价模型,以计算第二个目标值。模型的约束条件包括:需要遵循城市最佳景点游览原则,且交通方式只能选择高铁,同时解空间被限制在50个最令外国游客向往的城市内。对于这一问,可以建立一个双目标优化模型,并通过NSGA-Ⅱ等多目标优化算法进行求解。

问题四

在第四问中,要求将优化目标改为既要尽可能的游览更多的城市,又需要使门票和交通的总费用尽可能的少。对于这个问题,可以直接对问题三中的双目标优化模型进行修改,然后同样基于一样的方法进行求解。

问题五

在第五问中,要求将游览的目的地改为山景。在这一问中,可选的旅游城市不再局限于50个城市,故需要先对有山景的城市进行筛选,然后划定解空间的范围。这一问的优化目标为:尽可能浏览更多的山以及总费用更小。约束条件包括每个城市只能游玩一座评分最高的山,而且不同城市之间的交通方式只能选择高铁,所以在这一问中只能选择高铁可以到达的城市。在明确解空间后,可以建立双目标优化模型并基于多目标优化算法进行求解。

代码

问题一

(1)使用python遍历每一个.csv文件并将其合并为一个文件
(2)对缺失值和异常值进行处理
(3)基于DSA(Data Structure Analysis)得出最大值,画出数据分布直方图 (解决 BS是多少?全国有多少个景点获评了BS)
在这里插入图片描述
(4)基于DT(decision tree)-Spearman得出 获评BS景点最多的城市,相关性越高获评越多。(DT对数据进行分类,分类因素有两个:城市和得分;然后将分类结果作spearman相关性分析。)
在这里插入图片描述
Score 三沙 五家渠 玉溪 益阳 天门 阿拉尔 大兴安岭 潍坊 烟台 邢台
5 36 28 21 20 19 18 18 18 18 17

# 导入软件包
import pandas as pd
import numpy as np

from sklearn.tree import DecisionTreeClassifier
import seaborn as sns
import matplotlib.pyplot as plt

# 热力图可视化

# 1. 过滤掉警告的意思
import warnings
warnings.filterwarnings("ignore")

# 2. 导入数据

data=pd.read_excel('hsc.xlsx')

# 3. 用来查看数据框的列名
data.head()

# 图片显示中文
plt.rcParams['font.sans-serif']=['SimHei']
# 减号unicode编码
plt.rcParams['axes.unicode_minus'] =False
# 删除无关的列
data.drop([], axis=1, inplace=True)

# 4. 计算各变量之间的相关系数
corr = data.corr(method='spearman')


# 5. 调整画布大小
ax = plt.subplots(figsize=(9, 9))

# 6. 画热力图   annot=True 表示显示系数
ax = sns.heatmap(corr, vmax=.9, square=True, annot=False, cmap="YlGnBu")

# 7. 设置刻度字体大小
plt.xticks(fontsize=8)
plt.yticks(fontsize=8)
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/938687
推荐阅读
相关标签
  

闽ICP备14008679号