2019年MathorCup高校数学建模挑战赛D题钢水“脱氧合金化“配料方案的优化建模思路与示例代码

一 题目

       炼钢过程中的脱氧合金化是钢铁冶炼中的重要工艺环节。对于不同的钢种在熔炼结束时,需加入不同量、不同种类的合金,以使其所含合金元素达标,最终使得成品钢在某些物理性能上达到特定要求。随着钢铁行业中高附加值钢种产量的不断提高,如何通过历史数据对脱氧合金化环节建立数学模型,在线预测并优化投入合金的种类及数量,在保证钢水质量的同时最大限度地降低合金钢的生产成本,是各大钢铁企业提高竞争力所要解决的重要问题。国外从上世纪九十年代开始研究计算机自动配料,到目前为止,已经形成了具备以合金收得率预测及成本优化算法为主体的自动配料模型,该模型可以实现自动脱氧合金化的功能。国内钢铁企业除部分车间具有引进的脱氧合金化模型外,其他炼钢车间尚未采用这一技术,而是按照不同元素的固定收得率或经验值计算各种合金的加入量,难以实现当前炉次合金配料的自动优化和成本控制。

       合金收得率指脱氧合金化时被钢水吸收的合金元素的重量与加入该元素总重量之比。在钢水脱氧合金化过程中,合金收得率受多种因素影响,难以采用显式表达式确定。通过对低合金钢种前期冶炼数据的采集,得到历史真实数据附件1,以及常用合金成分说明附件2,所需其它数据请自行查找。

       建立合适的数学模型,分析并解答以下问题:

       问题1:钢水脱氧合金化主要关注C、Mn、S、P、Si五种元素的含量,请根据附件1计算C、Mn两种元素历史收得率,并分析影响其收得率的主要因素。

       问题2:在问题1的基础上,构建数学模型,对C、Mn两种元素收得率进行预测,并进一步改进模型及算法,尽可能提高这两种元素收得率的预测准确率。

        问题3:不同合金料的价格不同,其选择直接影响钢水脱氧合金化的成本。请根据问题2中合金收得率的预测结果及附件2,建立数学模型,实现钢水脱氧合金化成本优化计算,并给出合金配料方案。

        问题4:请根据你们的研究结果,给炼钢厂领导写一封建议信(一页以内)。

二 思路与示例代码

问题一

步骤1:数据预处理

1.1 数据清洗:处理附件1中的残缺数据。使用多元线性回归、简单线性回归和均值补齐等方法,填充缺失的数据。

1.2 异常数据处理:识别和剔除不符合生产要求或波动较大的异常数据。

步骤2:多元线性回归建模

2.1 因变量选择:选取连铸正样碳当量(Ceq)作为因变量。

2.2 自变量选择:使用相关性分析工具(如SPSS)来确定与Ceq相关性较高的自变量,这些自变量可能包括转炉终点温度、钢水净重等。

2.3 模型建立:使用多元线性回归模型来建立Ceq与自变量之间的数学关系。模型应包括回归系数和截距项。

2.4 模型评估:使用统计指标(如R-squared)来评估模型的拟合度和准确性。

步骤3:简单线性回归和均值补齐

3.1 针对其他元素的收得率:对于其他元素的收得率,使用简单线性回归建立预测模型。

3.2 均值补齐:对于个别缺失数据,使用均值补齐。

步骤4:因素分析

4.1 灰色关联分析:使用Python等工具,计算不同因素与收得率的灰色关联度,以确定哪些因素对Ceq的影响最大。

4.2 相关性系数:使用SPSS等工具,计算Pearson和Kendall相关性系数,以进一步验证因素与Ceq的相关性。

步骤5:总结和报告

5.1 总结结果:总结Ceq和其他元素的历史收得率,以及主要影响因素的发现。

5.2 建议和结论:根据分析结果,提供关于影响收得率的主要因素的建议,并讨论可能的改进方案。

5.3 可视化:使用图表和可视化工具,将结果可视化,以便更好地传达分析结果。

问题一示例代码

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
# 加载数据
data = pd.read_csv("附件1.csv")

# 数据预处理
# 处理残缺数据,使用均值进行填充
data = data.fillna(data.mean())

# 剔除异常数据,例如超出特定范围的数据点
data = data[(data['Ceq'] >= min_value) & (data['Ceq'] <= max_value)]

# 分离因变量和自变量
y = data['Ceq']
X = data[['转炉终点温度', '钢水净重', ...]]  # 添加其他自变量

# 多元线性回归模型建立
model = LinearRegression()
model.fit(X, y)

# 模型评估
y_pred = model.predict(X)
r_squared = r2_score(y, y_pred)

print("多元线性回归模型的R-squared值:", r_squared)

问题二

步骤1:数据分割和SVR建模

1.1 数据分割:将原始数据集分成训练集和测试集。通常,80%的数据用于训练模型,而20%用于评估模型性能。

1.2 SVR建模:使用支持向量回归(SVR)模型来建立对所需元素(如Ceq)的回归模型。在这一步骤中,使用训练集的数据来训练SVR模型,以使其能够根据输入特征来预测元素收得率。

1.3 模型评估:使用测试集的数据来评估模型的性能。您可以使用不同的评估指标,如均方误差(MSE)、均方根误差(RMSE)、决定系数R-squared等,来确定模型的准确性和可行性。

步骤2:数据和模型优化

2.1 数据优化:根据问题一的分析结果,您可以考虑增加影响因素或对数据进行重新排列组合。重新运行模型以获取新的收得率数据。比较新数据与先前数据的性能,以确定是否有所优化。

2.2 模型优化:选择贝叶斯岭回归模型等其他适当的回归模型,重新描述数据。使用新的数据训练和测试这一新模型。比较测试集的准确度、误差和其他评估参数,以评估模型的性能和改进情况。

步骤3:模型比较和讨论

3.1 模型比较:比较SVR模型和贝叶斯岭回归模型的性能。这包括评估预测准确性、误差和其他性能指标。

3.2 讨论模型优化:讨论模型的优化方向和成功率。如果贝叶斯岭回归模型在预测性能上优于SVR模型,可以考虑在实际应用中使用这一模型。

步骤4:总结和报告

4.1 总结结果:总结SVR和贝叶斯岭回归模型的性能,以及数据和模型的优化。

4.2 建议和结论:提供关于模型选择和优化方向的建议,以提高元素收得率的预测准确性。根据比较结果提出建议,以确定最佳模型的使用和优化方向。

问题二示例代码

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.linear_model import BayesianRidge
from sklearn.metrics import mean_squared_error, r2_score
# 加载数据
data = pd.read_csv("your_data.csv")

# 数据预处理:填充缺失值、剔除异常值等

# 分离因变量和自变量
X = data[['特征1', '特征2', ...]]  # 选择相关特征
y = data['目标元素的收得率']

# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SVR模型建立
svr_model = SVR()
svr_model.fit(X_train, y_train)

# 模型预测
y_pred_svr = svr_model.predict(X_test)

# 模型评估
mse_svr = mean_squared_error(y_test, y_pred_svr)
r2_svr = r2_score(y_test, y_pred_svr)

print("SVR模型的均方误差 (MSE):", mse_svr)
print("SVR模型的决定系数 (R-squared):", r2_svr)

# 贝叶斯岭回归模型建立
bayesian_ridge_model = BayesianRidge()
bayesian_ridge_model.fit(X_train, y_train)

# 模型预测
y_pred_bayesian = bayesian_ridge_model.predict(X_test)

# 模型评估
mse_bayesian = mean_squared_error(y_test, y_pred_bayesian)
r2_bayesian = r2_score(y_test, y_pred_bayesian)

print("贝叶斯岭回归模型的均方误差 (MSE):", mse_bayesian)
print("贝叶斯岭回归模型的决定系数 (R-squared):", r2_bayesian)

问题三

步骤1:定义问题

1.1 目标函数:定义总成本作为目标函数。总成本是合金的价格和用量的总和。目标是最小化总成本。

1.2 约束条件:定义一系列约束条件,以确保最优合金配料方案满足生产要求。这些约束条件可以包括:

  • 元素质量约束:每个元素的质量必须在一定范围内。
  • 元素总量约束:所有合金的总质量必须满足要求。
  • 钢号的内控区间:合金的成分必须在特定的内控区间内。

步骤2:PSO算法的设置

2.1 粒子群初始化:随机生成一组粒子,每个粒子表示一个合金配料方案。确保这些粒子符合约束条件。

2.2 适应度函数:定义一个适应度函数,该函数评估每个粒子的成本,也就是目标函数的值。成本越低,适应度越高。

2.3 迭代过程:使用PSO算法进行迭代,每个粒子根据其个体和社会最优值(根据适应度函数)来更新自身的位置和速度。迭代次数和其他PSO参数需要合理设置。

步骤3:求解最优合金配料方案

3.1 PSO迭代:运行PSO算法,直到达到收敛条件或固定的迭代次数。在每次迭代中,优化算法将寻找最优的合金配料方案,以最小化总成本。

3.2 最优方案:在PSO算法完成后,获得的最优合金配料方案即是问题的答案。这个方案应该最小化了总成本,并满足了所有约束条件。

步骤4:总结和报告

4.1 结果汇总:总结最优的合金配料方案,包括合金的种类和数量,以及最小化的总成本。

4.2 建议和结论:提供有关合金选择和配料方案的建议,以降低成本并满足生产要求。同时,讨论PSO算法的效率和结果。

问题三示例代码

import numpy as np
import random

# 定义目标函数,这里是总成本
def total_cost(alloy):
    # 计算每种合金的成本
    alloy_cost = np.dot(alloy, alloy_prices)
    return np.sum(alloy_cost)

# 定义PSO算法
def PSO(num_particles, num_iterations):
    # 初始化粒子群
    particles = np.random.rand(num_particles, num_alloys)
    
    # 设置初始最佳位置和全局最佳位置
    best_positions = particles.copy()
    global_best_position = particles[0].copy()
    
    # 初始化最佳成本和全局最佳成本
    best_costs = np.array([total_cost(p) for p in particles])
    global_best_cost = best_costs[0]
    
    # 设置惯性权重和加速系数
    w = 0.7
    c1 = 1.5
    c2 = 1.5
    
    # 开始迭代
    for iteration in range(num_iterations):
        for i in range(num_particles):
            # 计算速度和位置更新
            r1 = random.random()
            r2 = random.random()
            velocity = w * particles[i] + c1 * r1 * (best_positions[i] - particles[i]) + c2 * r2 * (global_best_position - particles[i])
            particles[i] = particles[i] + velocity
            
            # 计算成本
            cost = total_cost(particles[i])
            
            # 更新个体最佳位置和成本
            if cost < best_costs[i]:
                best_positions[i] = particles[i].copy()
                best_costs[i] = cost
                
            # 更新全局最佳位置和成本
            if cost < global_best_cost:
                global_best_position = particles[i].copy()
                global_best_cost = cost

    return global_best_position, global_best_cost

# 示例数据:合金的种类、价格和其他约束条件
num_alloys = 5
alloy_prices = np.array([10, 20, 30, 40, 50])
element_mass_constraints = np.array([100, 200, 300, 400, 500])

# 运行PSO算法
best_alloy, best_cost = PSO(num_particles=100, num_iterations=100)

print("最优合金配料方案:", best_alloy)
print("最小总成本:", best_cost)

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
2019MathorCup高校数学建模挑战赛D 2019第九届MathorCup高校数学建模挑战赛 竞赛信息 竞赛简介 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问的能力,中国优选法统筹法与经济数学研究会决定主办2019第九届MathorCup高校数学建模挑战赛,欢迎各高等院校按照竞赛章程及有关规定组织同学报名参赛。 组织机构 主办单位:中国优选法统筹法与经济数学研究会 【中国优选法统筹法与经济数学研究会是在中国科学技术协会直接领导下的学术性社会团体,是国家一级学会。学会由华罗庚教授于1981发起成立,至今成立了评价方法与应用、项目管理、计算机模拟、统筹、管理决策与信息系统、工业工程、高等教育管理、数学教育、经济数学与管理数学、应急管理、灰色系统研究,复杂系统研究等十余个专业分会】 竞赛时间 报名时间:即日起至2019 4 月 10日 12:00 竞赛时间:20194 月 11 日08:00至2019 4 月 15 日08:00 参赛对象 普通高校全日制在校生(研究生、本科生、专科生)以队为单位参赛,每队不超过3人,不允许跨校组队参赛。 参赛费用 每支队伍需缴纳200元的报名费用。 奖项设置 参赛队伍:全国一等奖(约5%)、全国二等奖(约15%)、全国三等奖(约30%),从一等奖队伍中经过决赛答辩决出4支队伍获得“MathorCup”荣誉奖杯; 组织单位:优秀组织单位、优秀组织社团、优秀组织个人; 其它奖励政策:参见《 MathorCup高校数学建模挑战赛奖励细则》( 可从官方主页下载)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毅力多爱数模

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值