我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合,专为本次赛题设计,旨在帮助您深入理解数学建模的每一个环节。
让我们来分析C题!
华数杯大学生数学建模竞赛(ABC三题)完整内容均可以在文章末尾领取!
因此,游客的游玩路线可以表示为: n = arg max (S1, S2, ..., S50) T = Σ (Si * Di) / 250 C = Σ Si + Σ (Di * 0.5)
其中,n为最大游玩城市数量,T为总花费时间,C为总门票和交通费用。
#导入所需要的库
import pandas as pd
import numpy as np
from itertools import combinations
from collections import defaultdict
#读取数据集
city_data = pd.read_csv("city_data.csv")
#将城市数据按照城市和景点评分进行分组
city_group = city_data.groupby(['City','Score'])
#创建一个字典,用于存储每个城市最佳景点的信息
city_best = defaultdict(list)
#遍历每个城市的数据
for city, group in city_group:
#获取当前城市的所有景点信息
city_info = group.iloc[0]
#将当前城市的最佳景点信息存储到字典中
city_best[city].append(city_info)
#计算352个城市中所有景点评分的最高分(Best Score,简称BS)
best_score = max(city_data['Score'])
#统计获评了最高评分(BS)的景点数量
count = 0
#存储获评了最高评分(BS)的景点所在的城市
cities = []
#遍历每个城市
省略
#打印结果
print("352个城市中所有景点评分的最高分为:", best_score)
print("获评了最高评分(BS)的景点数量为:", count)
print("获评了最高评分(BS)景点最多的城市有:", cities)
#计算每个城市拥有最高评分(BS)的景点数量
city_count = defaultdict(int)
#遍历每个城市
for city in cities:
#遍历当前城市的最佳景点信息
for info in city_best[city]:
#统计当前城市拥有最高评分(BS)的景点数量
city_count[city] += 1
#按照拥有最高评分(BS)景点数量的多少进行排序
city_count = sorted(city_count.items(), key = lambda x:x[1], reverse = True)
#打印前10个城市
print("前10个拥有最高评分(BS)景点数量的城市为:")
for i in range(10):
print(i+1, "、", city_count[i][0], "(拥有", city_count[i][1], "个最高评分(BS)的景点)")
#第三个问题:规划游玩路线
#设置游客要求的最大游玩城市数量
max_city = 50
#设置游客的出发城市
start_city = "广州"
#设置游客的游玩时长(小时)
time = 144
#设置游客的最大总费用(元)
max_cost = 10000
#创建一个字典,用于存储城市之间的距离信息
city_distance = {}
#遍历每个城市
for city in cities:
#计算当前城市与出发城市的距离
distance = city_data.loc[city_data['City'] == start_city]['Distance'].values[0]
#将距离信息存储到字典中
city_distance[city] = distance
#按照距离进行排序
city_distance = sorted(city_distance.items(), key = lambda x:x[1])
#创建一个列表,用于存储游客要游玩的城市
tour_cities = []
#遍历排序后的距离信息
for city in city_distance:
#如果当前城市还没有被选为游客要游玩的城市
if city[0] not in tour_cities:
#将当前城市添加到列表中
tour_cities.append(city[0])
#如果游客要游玩的城市数量已经达到最大值
if len(tour_cities) == max_city:
#结束遍历
break
#创建一个列表,用于存储游客的游玩路线
tour_route = []
#设置游客当前所在城市为出发城市
current_city = start_city
#设置游客已经游玩的总花费(元)
total_cost = 0
#设置游客已经游玩的总时间(小时)
total_time = 0
#遍历游客要游玩的城市
for city in tour_cities:
#计算当前城市与上一个城市之间的距离
distance = city_data.loc[city_data['City'] == current_city]['Distance'].values[0]
#计算当前城市游玩的时间(小时)
city_time = city_data.loc[city_data['City'] == city]['Duration'].values[0]
#计算当前城市游玩的花费(元)
city_cost = city_data.loc[city_data['City'] == city]['Cost'].values[0]
#如果游客已经游玩的总时间加上当前城市游玩的时间超过了最大游玩时长
if total_time + city_time > time:
#结束遍历
break
#如果游客已经游玩的总费用加上当前城市游玩的花费超过了最大总费用
if total_cost + city_cost > max_cost:
#结束遍历
break
#将当前城市添加到游客的游玩路线中
tour_route.append(city)
#更新游客已经游玩的总时间
total_time += city_time
#更新游客已经游玩的总费用
total_cost += city_cost
#更新游客当前所在城市
current_city = city
#打印游客的游玩路线
print("游客的游玩路线为:")
for i in range(len(tour_route)):
print(i+1, "、", tour_route[i])
#打印游客的游玩路线的总花费(元)
print("游客的游玩路线的总花费为:", total_cost)
#打印游客的游玩路线的总时间(小时)
print("游客的游玩路线的总时间为:", total_time)
#打印游客可以游玩的景点数量
print("游客可以游玩的景点数量为:", len(tour_route))
通过使用遗传算法等优化方法,我们可以得到最优解,即游客在144小时内最多可以游览的山景数量,以及对应的游玩路线和总费用。
由于篇幅过长
更多内容具体可以看看我的下方名片!
里面包含有本次竞赛一手资料与分析!
另外在赛中,我们也会陪大家一起解析建模比赛
记得关注Tina表姐哦~