2023 年河北工程大学数学建模竞赛题目 - 基建狂魔的“模”力
2023 年河北工程大学数学建模竞赛题目 - 基建狂魔的‘模’力
(请先阅读‘河北工程大学数学建模竞赛论文格式规范’)
移山填海,基建 call‘模’ 随着科学技术的不断发展,我国基建水平与能力不断提高,赢得‘基建狂魔’的称号。基建工程技术的发展离不开多种学科的支持,例如测绘、机械、管理科学、工程数学、地理信息学等。我省某地拟规划建设一条高速公路(附图),需要在 A-B 和 C-D 段开挖宽度为 30 米的沟槽。请仔细阅读以下要求,完成相应的题目。
(1) 仔细提取附图中信息,绘制 A-B 和 C-D 段的地形剖面线。 (2) 附图中地形图的等高距为 10 米,根据图中信息测算 A-B 段和 C-D 段的土石方量。 (3) 为使工程尽快完工,施工方同时请三家运输公司(A 公司、B 公司、C 公司)联合施工。其中各公司的基本信息如附表所示,包括车辆类型、车辆数量和运输成本。由于岩性条件差异,导致 A-B 段和 C-D 段的开采成本不同,其中 A-B 段开采成本 3.5 元/m3,C-D 段开采成本 5.0 元/ m3。现施工方请你队设计最优的运输方案,使得工期最短且运输成本最小。同时,给出最优运输方案下的最短工期和最小成本。
附表 运输公司车辆及运输成本信息
| 公司 | 车辆数量(辆) | 运输成本(元/ m3/次) | 每天运输次数 | |---|---|---|---| | | 重型 | 中型 | 重型 | 中型 | | A | 25 | 40 | 9.0 | 4.5 | 8 | | B | 35 | 20 | 7.5 | 5.2 | 6 | | C | 40 | 60 | 8.0 | 4.0 | 9 |
注:重型和中型卡车载重分别为 30 m3和 10 m3;
附图 项目施工现场信息
A B C D
内容:
题目分析:
本题要求绘制地形剖面线,计算土石方量,并设计最优的运输方案,使得工期最短且运输成本最小。需要运用到测量、数学建模、运筹学等知识。
解题思路:
- 绘制地形剖面线
根据附图中的地形图,可以得到 A-B 段和 C-D 段的地形剖面线。绘制地形剖面线时,需要按照比例尺绘制,同时按照等高距将地形线连接起来。连接起来的地形线即为地形剖面线。
- 计算土石方量
根据地形剖面线,可以计算出 A-B 段和 C-D 段的土石方量。计算方法为:将地形剖面线分为若干个小区间,计算每个小区间的面积和高度差,然后将每个小区间的土石方量相加即可得到总土石方量。
- 设计最优运输方案
本题需要设计最优的运输方案,使得工期最短且运输成本最小。设计最优运输方案需要考虑以下因素:
- (1) 车辆数量和类型:不同公司拥有不同数量和类型的车辆,需要合理安排使用。
- (2) 运输成本:不同公司的运输成本不同,需要选择成本最小的运输公司。
- (3) 运输次数:需要控制每个运输公司的每天运输次数,以充分利用资源同时不影响工期。
- (4) 运输距离:不同公司运输的距离不同,需要选择距离最短的运输公司。
综合考虑以上因素,可以得到最优的运输方案,使得工期最短且运输成本最小。
- 给出最优运输方案下的最短工期和最小成本
最优运输方案下的最短工期和最小成本可以根据设计的方案进行计算得出。
参考代码:
由于本题需要计算土石方量和设计最优运输方案,需要运用到较多的数学知识。下面给出参考代码供参考。
代码中使用了 Python 中的 numpy 和 pandas 库,需要先安装这两个库。
import numpy as np
import pandas as pd
# 绘制地形剖面线
def draw_profile_line(x, y):
# 计算高度差
diff = np.diff(y)
# 将高度差填充到数组中
diff = np.insert(diff, 0, diff[0])
# 绘制地形剖面线
plt.plot(x, y)
plt.fill_between(x, y, where=(y>=0), color='lightblue')
plt.fill_between(x, y, where=(y<0), color='lightcoral')
plt.plot(x, diff, linestyle='--', color='gray')
plt.xlabel('Distance (m)')
plt.ylabel('Elevation (m)')
plt.title('Profile Line')
plt.grid()
plt.show()
# 计算土石方量
def calculate_volume(x, y, width, height):
# 将地形剖面线分为若干个小区间
x_interval = np.arange(x[0], x[-1]+1, width)
y_interval = np.interp(x_interval, x, y)
# 计算每个小区间的面积和高度差
area = np.abs(y_interval) * width
diff = np.diff(y_interval)
# 计算每个小区间的土石方量
volume = np.where(diff>=0, diff*area[:-1], -diff*area[:-1])
# 计算总土石方量
total_volume = np.sum(volume) * height
return total_volume
# 计算运输成本
def calculate_cost(volume, cost):
return volume * cost
# 设计最优运输方案
def design_transport_plan(volume, cost, max_count):
# 计算运输次数
count = np.ceil(volume / max_count).astype(int)
# 计算运输成本
total_cost = calculate_cost(volume, cost) * count
# 选择成本最小的运输公司
company = np.argmin(total_cost)
# 计算最短工期
time = count[company] * 2
return company, time, total_cost[company]
# 主函数
if __name__ == '__main__':
# 绘制地形剖面线
x = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500]
y = [0, -8, -14, -15, -12, -8, -2, 5, 10, 12, 10]
draw_profile_line(x, y)
# 计算土石方量
width = 30
height = 10
volume_AB = calculate_volume(x[:6], y[:6], width, height)
volume_CD = calculate_volume(x[5:], y[5:], width, height)
print('Volume of A-B section:', volume_AB)
print('Volume of C-D section:', volume_CD)
# 设计最优运输方案
max_count = 30
cost = np.array([[9.0, 4.5], [7.5, 5.2], [8.0, 4.0]])
volume = np.array([volume_AB, volume_CD])
company, time, total_cost = design_transport_plan(volume, cost, max_count)
print('The optimal transport plan is to use company', chr(ord('A')+company),
'with a total cost of', total_cost, 'yuan and a shortest time of', time, 'days.')
原文地址: https://www.cveoy.top/t/topic/m1Fl 著作权归作者所有。请勿转载和采集!