首页 > Python资料 博客日记
2024年第五届“华数杯”全国大学生数学建模竞赛C题-老外游中国(代码+成品论文+讲解)
2024-09-09 09:00:07Python资料围观100次
本篇文章分享2024年第五届“华数杯”全国大学生数学建模竞赛C题-老外游中国(代码+成品论文+讲解),对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识
目录
💕一、问题重述💕
最近,
“city
不
city”
这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在 华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了一个真实而生动的中国,一举多得。假设外国游客入境后能在中国境内逗留 144
小时,且能从任一城市附近的机场出境。由于每个城市景点较多,为了便于外国游客能够游览到更多的城市,现假定“
每个城市只选择一个评分最高的景点游玩
”
,称之为
“
城市最佳景点游览原则”
。现有一个包含中国(不含港澳台)352
个城市的旅游景点的数据集,每个城市的 csv
文件中有
100
个景点,每个景点的信息包含有景点名称、网址、地址、景点介绍、开放时间、图片网址、景点评分、建议游玩时长、建议游玩季节、门票信息、小贴士等。请建立数学模型,回答下列问题:
🐸问题 1🐸
请问
352
个城市中所有
35200
个景点评分的最高分(
Best Score
,简称 BS
)是多少?全国有多少个景点获评了这个最高评分(
BS
)?获评了这个最高评分(BS
)景点最多的城市有哪些?依据拥有最高评分(
BS
)景点数量的多少排序,列出前 10
个城市。
🐸问题 2🐸
假如外国游客遵循
“
城市最佳景点游览原则
”
,结合城市规模、环境环保、人文底蕴、交通便利,以及气候、美食等因素,请你对 352
个城市进行综合评价,选出“
最令外国游客向往的
50
个城市
”
。
🐸问题 3🐸
现有一名外国游客从广州入境,他想在
144
小时以内游玩尽可能多的城市,同时要求综合游玩体验最好,请你规划他的游玩路线。需要结合游客的要求给出具体的游玩路线,包括总花费时间,门票和交通的总费用以及可以游玩的景点数量。他的要求有:
① 遵循城市最佳景点游览原则;
② 城市之间的交通方式只选择高铁;
③ 只在“
最令外国游客向往的
50
个城市
”
中选择要游玩的城市。
🐸问题 4🐸
如果将问题
3
的游览目标改为:既要尽可能的游览更多的城市,又需要使门票和交通的总费用尽可能的少。请重新规划游玩路线,并给出门票和交通的总费用,总花费时间以及可以游玩的城市数量。
🐸问题 5🐸
现有一名外国游客只想游览中国的山景,他乘飞机入境中国的城市不限。请你为他选择入境的机场和城市,并个性化定制他的 144
小时旅游路线,既要尽可能的游览更多的山,又需要使门票和交通的总费用尽可能的少。需要结合游客的要求给出具体的游玩路线,包括总花费时间,门票和交通的总费用以及可以游玩的景点数量。他的要求有:
①每个城市只游玩一座评分最高的山;
②城市之间的交通方式只选择高铁;
③旅游城市不局限于“
最令外国游客向往的
50
个城市
”
,游览范围拓展到352 个城市。
💕二、解题思路💕
🤡问题 1
- 目标:找出352个城市中35200个景点的最高评分(BS)、获得此评分的景点数量以及具有最多这种评分景点的城市。
- 方法:首先,你需要从每个城市的CSV文件中提取所有景点的评分,并找出最高评分(BS)。之后,计算达到最高评分的景点数量,并统计每个城市获得该评分的景点数量。最后,按照这种评分的景点数量对城市进行排序,列出前10个城市。
🤡问题 2 使用模糊综合评价法
- 目标:使用模糊综合评价法(Fuzzy Comprehensive Evaluation, FCE)对352个城市进行综合评价,选择最吸引外国游客的50个城市。
- 方法:
- 确定评价因素和等级:选择影响城市吸引力的因素,如城市规模、环境保护、人文底蕴、交通便利、气候、美食等。
- 构建模糊关系矩阵:基于专家评分或数据统计,为每个城市的每个因素分配一个隶属度值。
- 定义权重向量:确定各因素的权重,可以使用专家评分、问卷调查等方法确定。
- 模糊综合评价:通过权重向量与模糊关系矩阵的模糊合成,计算每个城市的总体评价值。
- 选择和排序:根据总体评价值选择得分最高的50个城市。
🤡问题 3 使用模拟退火算法
- 目标:为一名从广州入境的外国游客规划144小时内的最佳旅游路线,访问“最令外国游客向往的50个城市”中尽可能多的城市。
- 方法:
- 定义状态空间:每个状态表示一个可能的旅行路线。
- 目标函数:定义目标函数来评估每条路线的质量,包括访问的城市数量和综合体验评分。
- 邻域结构:定义如何从一个状态转移到另一个状态,例如更换一个城市的访问顺序。
- 模拟退火过程:从初始解开始,通过随机扰动生成新状态,根据目标函数和温度参数接受或拒绝新状态,逐渐降低温度直到收敛。
🤡问题 4 在问题 3 基础上进行优化
- 目标:在尽可能多地游览城市的同时,尽量减少门票和交通的总费用。
- 方法:在模拟退火算法的基础上,调整目标函数来同时考虑游览城市数量和总成本(门票+交通)。通过调整成本和数量的权重,找到最佳的权衡方案。
🤡问题 5 按照我的方法进行优化
- 目标:为主要想游览中国山景的外国游客定制144小时内的旅游路线。
- 方法:
- 数据准备:识别每个城市中评分最高的山。
- 路径优化算法:使用模拟退火算法,定义状态为游览的城市和山,目标函数为最大化游览的山数量和最小化总成本。
- 邻域结构:可以通过更改访问城市的顺序或替换城市来生成新状态。
- 实施细节:需要结合高铁时刻表和城市间距离来优化路线,考虑山景开放时间和门票费用。
💕三、解题代码和结果💕
🙌问题 1🙌
import matplotlib
# 设置Matplotlib支持中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#%%
import pandas as pd
import glob
import matplotlib.pyplot as plt
# 指定包含所有CSV文件的文件夹路径
folder_path = '附件/'
def read_data(folder_path):
# 使用glob模块找到文件夹中的所有csv文件
file_paths = glob.glob(folder_path + '*.csv')
print(f"Found {len(file_paths)} files.") # 打印找到的文件数量
data_frames = []
for path in file_paths:
print(f"Reading {path}") # 打印正在读取的文件名
df = pd.read_csv(path, usecols=[6]) # 只读取评分所在的第G列,索引为6
df.columns = ['评分'] # 重命名列为"评分"
df['City'] = path.split('/')[-1].split('.')[0] # 提取城市名
data_frames.append(df)
if data_frames: # 检查是否有数据框存在
all_data = pd.concat(data_frames)
return all_data
else:
return pd.DataFrame() # 如果没有数据框,则返回空的数据框
def analyze_data(data):
if data.empty:
print("No data to analyze.")
return None, None
# 数据清洗:确保评分列为数值类型
data['评分'] = pd.to_numeric(data['评分'], errors='coerce') # 将无法转换为数值的转换为NaN
data.dropna(subset=['评分'], inplace=True) # 删除包含NaN的行
# 找到最高评分
best_score = data['评分'].max()
print(f"最高评分(Best Score, BS): {best_score}")
# 计算获得最高评分的景点数量
best_score_count = data[data['评分'] == best_score].shape[0]
print(f"获得最高评分的景点数量: {best_score_count}")
# 找到获得最高评分的景点最多的城市
best_score_cities = data[data['评分'] == best_score].groupby('City').size().sort_values(ascending=False)
print("获得最高评分的景点最多的城市:")
print(best_score_cities.head(10))
return best_score_cities.head(10), best_score
def plot_top_cities(best_score_cities, best_score):
if best_score_cities is not None:
plt.figure(figsize=(10, 6))
best_score_cities.plot(kind='bar', color='skyblue')
plt.title(f'评分{best_score}的旅游景点最多的城市')
plt.xlabel('城市')
plt.ylabel('旅游景点数量')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 执行分析
data = read_data(folder_path)
top_cities, best_score = analyze_data(data)
plot_top_cities(top_cities, best_score)
🙌问题 2🙌
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为SimHei
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 选择前10个城市进行展示
top_10_cities = evaluation_results.head(10)
# 绘制前10个城市的情感得分条形图
evaluation_results.index = evaluation_results.index.str.replace('附件\\', '')
# 选择前10个城市进行展示
top_10_cities = evaluation_results.head(10)
# 绘制前10个城市的情感得分条形图
plt.figure(figsize=(10, 6))
plt.barh(top_10_cities.index, top_10_cities['Sentiment'], align='center')
# 保持y轴的刻度标签,但去掉 '附件\' 前缀
plt.xlabel('平均情感得分')
plt.title('前10个城市的情感得分')
plt.gca().invert_yaxis()
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()
# 绘制情感得分的直方图
plt.figure(figsize=(10, 6))
plt.hist(evaluation_results['Sentiment'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('情感得分')
plt.ylabel('频率')
plt.title('各城市情感得分分布')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
# 绘制情感得分的箱型图
plt.figure(figsize=(10, 6))
plt.boxplot(evaluation_results['Sentiment'], vert=False)
plt.xlabel('情感得分')
plt.title('情感得分箱型图')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.show()
🙌问题 3🙌
🙌问题 4🙌
🙌问题 5🙌
💕解题代码和成品论文获取💕
🐹解题代码详细讲解(Bil:white学长努力中)🐹
🐹解题代码(面包多)
🐹成品论文(面包多)🐹
🐹联系方式(Q)🐹
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj