2024年华数杯全国大学生数学建模竞赛B题思路代码与可视化结果分析

针对VLSI电路单元的自动布局问题的研究

1 问题一模型建立与求解

1.1 数据预处理

        由于本次题目给的是txt格式文件,不是很方便读取和处理,所以首先将txt文件转化为excel文件,转化结果导出为附件1.xlsx和附件2.xlsx,转化代码如下:

import pandas as pd
import re
# 读取txt文件内容
file_path = '附件1.txt'
data = []
with open(file_path, 'r', encoding='utf-8') as file:
    lines = file.readlines()
    for line in lines:
        data.append(line.strip())
# 使用正则表达式定义数据行的模式
pattern = r'([^,]+),\(([^)]+)\),\(\((.*?)\)\),(\d+),(\d+)'
# 提取数据到DataFrame
rows = []
for line in data[1:]:
    match = re.match(pattern, line)
    if match:
        group_name = match.group(1).strip()
        circuit_units = match.group(2).strip()
        coordinates = match.group(3).strip()
        hpwl = int(match.group(4))
        rsmt = int(match.group(5))
        rows.append([group_name, circuit_units, coordinates, hpwl, rsmt])
# 构建DataFrame
df = pd.DataFrame(rows, columns=['组名称', '(电路单元名称:连线接口名称)', '(对应连线接口坐标)', 'HPWL', 'RSMT'])
# 保存为Excel文件
excel_file = 'output.xlsx'
df.to_excel(excel_file, index=False)
print(f"转换完成,结果保存在 {excel_file}")

1.2 问题一模型建立

        在电路设计中,可以将各个接口或设备视为图中的节点。连接这些节点的电路线或导线可以看作是图中的边,每条边都有一个权重,通常是这条线的长度或者成本。

        最小生成树是一个包含图中所有节点并且边的权重之和最小的树形连接。在电路设计中,如果将各个节点(接口或设备)用边连接起来,那么通过最小生成树算法可以得到一棵树,这棵树的所有边的权重之和是最小的。这个权重之和可以被视为布线的最短长度或者最低成本的估计。 

        布线优化:在电路板设计中,各个电子元件之间需要通过导线或电路板的布线连接。通过计算最小生成树,可以找到一种连接方式,使得总的导线长度最短,从而减少信号延迟、减小成本。

        成本估算:每条电路线的布线成本可能与其长度成正比。通过最小生成树计算出的总长度可以估算整体的布线成本。

        可靠性考虑:最小生成树也可以用于优化电路的可靠性,例如最小化单点故障对整体电路的影响。本次采用Prim算法来计算每组坐标点形成的最小生成树,坐标点间的长度采用欧几里得公式计算:

        Prim算法是一种用于计算加权无向图的最小生成树的贪婪算法。它从一个单点出发,逐步扩展,每次选择与当前生成树相邻且权重最小的边,直到生成树覆盖了图中所有的节点。

选择任意一个节点作为起始点加入生成树(可以是任意节点,因为最终都会生成同一颗最小生成树)。

        首先初始化一个空的生成树和一个集合,用于记录已经在生成树中的节点。算法步骤包括:

1. 选择最小边:从当前生成树连接到生成树外的节点中,选择一条权重最小的边加入生成树。

2. 更新集合:将这个新加入的节点加入到已经在生成树中的节点集合中。

3. 重复步骤:重复以上步骤,直到所有的节点都被加入到生成树中为止。

        其实Prim算法就是一个典型的贪心算法。最小生成树的权重:设图 G=(V, E),其中 V 是节点集合,E 是边集合。生成的最小生成树的权重可以用以下公式表示:

         其中,weight(u, v) 是边 (u, v) 的权重。

1.3 模型结果及分析

        读取每行的坐标数据并计算最小生成树的边长之和,满足题目中的两个要求::(1)每组 估计线长与对应RSMT的差值尽可能小;(2)能应用于评估附件1中的总连接线长。

        绘制出最小生成树结果与RSMT的误差曲线如下:

        计算其中与RMST误差小于300的值视为合理误差,得到其中小于300值的比例为81.22,精度较高,所以可以利用最小生成树方法来估算总线长。选取两组数据分别绘制出HPWL与最小生成树方法示意图:

Group1:

 Group75:

问题一部分代码:

import pandas as pd
import ast
import networkx as nx

# 读取Excel文件
file_path = '附件1.xlsx'
sheet_name = 'Sheet1'  # 根据实际情况修改sheet名称

# 读取数据
df = pd.read_excel(file_path, sheet_name=sheet_name)


# 定义函数计算两点间的欧氏距离
def euclidean_distance(p1, p2):
    return ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** 0.5
# 处理接口坐标列
def process_coordinates(coord_str):
    coords = ast.literal_eval(coord_str)  # 将字符串转换为元组列表
    return coords


# 计算每行数据的最小生成树边长之和
def calculate_mst_edge_sum(coords_list):
    G = nx.Graph()
    # 添加节点
    for i, coord in enumerate(coords_list):
        G.add_node(i, coord=coord)
    # 添加边
    for i in range(len(coords_list)):
        for j in range(i + 1, len(coords_list)):
            distance = euclidean_distance(coords_list[i], coords_list[j])
            G.add_edge(i, j, weight=distance)

    # 计算最小生成树
    mst = nx.minimum_spanning_tree(G)
    edge_sum = sum(mst[i][j]['weight'] for i, j in mst.edges())
    return edge_sum


# 计算并存储最小生成树边长之和到新列
edge_sums = []
for index, row in df.iterrows():
    coord_str = row['接口坐标']
    coords_list = process_coordinates(coord_str)
    mst_edge_sum = calculate_mst_edge_sum(coords_list)
    edge_sums.append(mst_edge_sum)


2024华数杯ABC题思路、代码、成品论文持续更新中。。。。。。

以下传送门,首日优惠,咨询学习从速!!!!!!

以下传送门,首日优惠,咨询学习从速!!!!!!

以下传送门,首日优惠,咨询学习从速!!!!!!

2024年华数杯ABC题思路代码论文持续更新中......

2024年华数杯ABC题思路代码论文持续更新中......

2024年华数杯ABC题思路代码论文传送门

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023华数杯全国大学生数学建模竞赛是由中国未来研究会大数据与数学模型专业委员会、天津市未来与预测科学研究会大数据分会举办的国家级比赛。该比赛旨在培养大学生的创新意识和运用数学方法解决实际问的能力,并为创新性人才的培养奠定基础,为各行各业培养和选拔优秀人才。参赛作品将获得组委会详细的书面评价,并进行赛后数学建模技术辅导,以提高学生的数学建模水平。 比赛将在20238月4日(周四)18:00开始,持续到8月7日(周日)20:00。比赛结果将预计在20238月中下旬公布。参赛对象包括研究生组、本科生组和专科生组三个组别,每个队伍由1-3名大学生和最多1名指导教师组成。目一般来源于各行业实际问,经过简化形成,分为A、B、C三个目,难度和国赛数模类似。比赛费用为每队200元,用于大赛组织、命、评审、专家指导等工作。 在比赛中,获得全国一等奖、二等奖、三等奖以及优秀奖的队伍将获得荣誉证书。此外,比赛还提供微信公众号“爱数模的小驴需要助攻”的思路助攻服务,帮助参赛者更好地进行数学建模。 总之,2023华数杯全国大学生数学建模竞赛是一个具有较高含金量和规模的国家级比赛,旨在培养大学生的科学精神和数学解决问的能力。参与这个比赛可以作为国赛前的模拟比赛,对参赛队伍提供了全面的支持和指导。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [2023华数杯数学建模](https://blog.csdn.net/m0_58496908/article/details/132069559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [2023华数杯全国大学生数学建模竞赛思路模型代码](https://blog.csdn.net/weixin_45499067/article/details/131838529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [2021华数杯全国大学生数学建模竞赛C1](https://download.csdn.net/download/weixin_35784267/86357964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值