我们首先将赛题翻译了一下:
螺纹钢是我国产量最大的钢铁产品之一。钢筋广泛应用于房屋、桥梁、道路等土木工程建设中。它是基础设施建设不可缺少的结构材料。合理、有效地把握市场钢筋的需求动态具有重要的意义。从国家宏观调控的角度来看,对螺纹钢需求进行预测,有利于深化钢铁行业供给侧结构性改革,改善供需状况,缓解钢铁行业产能过剩状况。从商品交易的角度来看,钢筋期货的投资策略可以根据对钢筋需求的预测结果进行调整。
影响钢筋市场需求的因素很多,且相关因素与钢筋需求的影响机制存在差异。为了准确预测钢筋的需求量,有必要对相关变量进行合理的建模和分析。
钢筋的表观需求数据见附件1。附件2提供了与螺纹钢需求密切相关的影响因素的相关数据,如螺纹钢价格数据、房地产行业相关数据、基础设施建设相关数据等。附录3是对附录1和2中部分数据的基本总结,如数据单元、数据频率、数据发布时间等基本信息。参考附录中提供的数据,以附录1中的钢筋需求为预测目标,尝试建立中国钢筋需求预测模型。在建立模型的过程中,尝试分析和解决以下问题:
上市公司股价的变化可以直接反映上市公司的经营状况和市场的认可度。股票价格的建模和预测一直是一个难题。最重要的因素是股票价格既有趋势因素又有随机因素。因此,股票市场是一个非常典型的非线性复杂系统。在解决非线性复杂系统建模方面,实践证明混沌理论是一种有效的理论,并在电力、通信等领域取得了一定的理论和应用效果。由于股票市场也是一个非线性的复杂系统,我们能否利用混沌理论的思想和理论来建立股票价格模型?请利用所提供的三只股票的交易数据,使用数学建模方法解决以下问题:
①分析每日、每周和每月的趋势三个股票,和定性或定量分析股票的趋势(包括混沌特征的测试),并给出相关的分析结果(注意:每周和月度数据可以由股票价格的日常数据)。
②根据不同股票价格的趋势,我们尝试建立股票价格趋势和随机性的数学模型,并使用过去的20天的数据来评估模型的预测结果。
③有一个反向现象在股票价格的趋势,也就是说,如果它上升太多,它会下降,如果它下降太多,它将上升,显示一定的周期性变化。请利用问题2的研究结果建立股票价格反转判断模型,并用数据进行检验。
提交的文件应包括:
页表
目录
1——2页的文章
您的解决方案不超过20页,最多24页的摘要,目录,文章
注意:参考列表和任何附录不计入页面限制,应该出现在您的完整解决方案之后。您不应该使用未经授权的图像和材料,其使用受到版权法的限制。确保你在报告中引用了你的想法和材料的来源。
近日,中国北方出现大规模强降雪。在一些地区,降雪量超过了20厘米。世界极端天气的频繁发生,预示着未来发生大雪的可能性在急剧增加。这场大规模的大雪给我国城市化水平较高的地区带来了诸多不便。由于除雪工作的延误,造成道路堵塞,严重影响了居民的日常生活。在许多地方,例如长春市,已经暂停工作和学校由于大雪。图1显示了某城市大雪后的道路状况。
为确保市民通行顺畅,环卫人员变身“清雪部队”,争分夺秒地与冰雪“战斗”,努力清理和运走积雪,努力做到停雪清路。为了达到停雪后道路畅通的目的,需要制定科学合理的道路除雪计划。除雪的方法因雪的深度而异。当积雪深度较小时,可以简单地把路中间的积雪扫到路边的绿化带或休闲区。然而,当积雪深度增加,很难临时存储的绿带,需要使用一个雪犁收集雪倒进一辆大卡车运输到一个大型开放空间内部或外部的城市。
附件1提供了某城市的道路信息,包括交叉口的经纬度,交叉口的连接,交叉口的宽度,潜在积雪的位置。请尝试通过数学建模解决以下四个问题:
(1)请结合附件1的数据,提供一个合理的清扫方案,假设雪可以清扫到附近的绿化带或休闲区,并且清扫车辆的数量是固定的。
(2)请提供最优的扫雪机、运输车辆和环卫工人分配方案,以便在雪量较大且市政卫生对扫雪机、运输车辆和环卫工人配置较为固定的情况下,尽快完成扫雪机任务。
(3)在实际的道路清洁过程中,我们经常会遇到道路两侧停放车辆的情况(图2),这无疑会增加道路清洁的难度,而且城市的停车位数量非常有限。能否提供一个合理的除雪计划,以便提前清理停在道路两旁的车辆,同时尽快恢复停车位的使用?
(4)城市立交桥较多,坡道明显,不同道路清洁优先级不同。附件2给出了不同路段的优先等级(1级表示最不重要,6级表示最重要)。你能提供一个最佳的除雪计划,考虑到路段的优先等级吗?
提交的文件应包括:
页表
目录
1——2页的文章
您的解决方案不超过20页,最多24页的摘要,目录,文章
注意:参考列表和任何附录不计入页面限制,应该出现在您的完整解决方案之后。您不应该使用未经授权的图像和材料,其使用受到版权法的限制。确保你在报告中引用了你的想法和材料的来源。
新冠肺炎疫情在全球蔓延,严重影响了许多国家的经济发展。中国也不例外。虽然有效控制了疫情的大规模蔓延,但许多行业仍受到不同程度的影响。疫情给一些企业带来了萧条,但也给其他企业带来了活力。典型案例包括一些医药企业的迅速崛起和一些大型连锁酒店的倒闭。
近期,全球多地出现疫情反弹,中国多城市又出现新确诊病例。造成疫情进一步蔓延的原因有很多,其中最常见的是恢复工作、参加聚会和购物。因此,我们需要制定合理的COVID-19预防策略,尽快摆脱疫情。请通过建立数学模型来解决以下四个问题:
(1)在疫情形势严峻的情况下,为某城市居民提供基本生活用品保障计划。
(2)请提供不同疫情水平下某类企业复工复产计划,充分考虑疫情蔓延和产品需求动态变化。
(3)从政府管理的角度看,能否制定出一套权衡各方利益的疫情下的长期国家发展战略?
(4)能否为不同疫情水平下的公共交通和餐饮业提供管控策略,以保证经济稳定发展,最大限度地控制疫情的蔓延?
提交的文件应包括:
页表
目录
1——2页的文章
您的解决方案不超过20页,最多24页的摘要,目录,文章
注意:参考列表和任何附录不计入页面限制,应该出现在您的完整解决方案之后。您不应该使用未经授权的图像和材料,其使用受到版权法的限制。确保你在报告中引用了你的想法和材料的来源。
对于问题A:
1)PCA、灰色关联等降维方法
2)先对第一问所求因素进行预测,而后拟合第一问因素与螺纹钢需求之间的关系(BP神经网络)。预测方法多样:灰色预测、移动平均’、指数平滑等。拟合类:多元线性回归、多项式回归、神经网络。
3)加上时间延迟,这一问暂且不太清楚。
总体而言,问题A还可以,第三问可能做不出来。除了第三问,问题很基础,网上代码很多。
对于问题B:
1)三个时间段三个股票混沌预测,网上代码很少,理解也很少,但是我们专业有学过混沌,可以尝试。
2)趋势和随机性。趋势对应的是第一问的计算,随机性是其他的算法,周期性,季节性波动之类的。这类大概可以用ARIMA做。
3)价格反转模型,网上也有一些解释。
链接: [价格反转模型](基于BP神经网络的股票价格反转点预测 - 百度文库 (baidu.com)).
对于问题C:
1)可以简化为sheet3里面,默认有积雪的位置需要机器清扫,所以就需要将表格中点进行聚类,而后给每个聚类分配相应数量的扫雪车。
2)默认扫雪车扫积雪位置,人工扫其他位置,虽然没有积雪,但是可能会有雪。第一问已经分配过扫雪机,因此第二问只需将所有的街道减掉第一问的积雪位置,这些位置进行聚类,根据人工能力,分配那个地区多少人。不考虑一个聚类内部人员调度。
3)扫雪模型,优化类问题,接触不是很多
4)同上,优化类问题,接触不多
对于问题D:
直接放弃,太虚了,太大了,我们专业不合适。
所以综上,AB问题都可以尝试。
按照上面的思路可以进行
对于任务1,本文首先在155个特征中选择了19个代表性特征,其次对这些表格中的数据进行数据预处理,其中包括将按周记录、日记录、月记录的数据变为按月记录数据,对缺失数据进行插值处理。而后对这19个特征进行降维处理,通过组成分分析法(PCA)实现从19个特征中选出特征值大于1的5个重要主成分:全国建筑钢材成交量、房地产开发资金总计、贷款利率、水泥开工率、 螺纹钢价格。
对于任务2,首先分析五个主成分序列随时间的变化,发现螺纹钢价格和贷款利率随时间呈渐进无跳跃变化趋势,所以选择二次指数平滑法预测其未来4个月数值;全国建筑钢材成交量、房地产开发资金总计、水泥开工率这三个主成分序列随时间变化呈周期性波动,所以选择ARIMA预测其未来4个月数值。根据预测所得五个主成分未来4个月的值,我们采用BP神经网络对数据进行拟合,预测螺纹钢需求量。将五个主成分序列作为输入神经元,螺纹钢需求量作为输出神经元,而后对未来4个月螺纹钢需求量进行预测。
对于任务3,首先观察五个主成分与螺纹钢需求量的时间滞后情况,可以看到分为三类。一种情况是:房地产开发资金总计、贷款利率的数据表现为滞后半个月,对应表格中最小粒度数据为月,我们对该类主成分直接进行移动平均处理,用两个月的平均值代表前一个月的数据。另一种情况是:全国建筑钢材成交量、水泥开工率和螺纹钢需求量的数据滞后10天,表格数据最小粒度为日,因此可以按滞后时间直接进行统计处理。最后一种情况是:螺纹钢价格的数据是实时更新的,没有滞后,与实际情况较为吻合,对于这种情况,我们直接使用原始数据进行处理。最后将时滞处理后的数据代入BP神经网络模型预测螺纹钢需求量。
我们论文的关键词:
ARIMA、BP神经网络、PCA、二次指数平滑、时滞处理
按照上面的思路可以进行
在第一问首先要对数据进行预处理,一些数据缺失,一些数据是以日、周、月记录的都要改成月记录。
因为要改成英文,不想翻译,所以删掉了所有中文注释:
clc,clear
hz=[1:1:56];
sp1=[2235.6,1340.97,1537.07,2082.45,2305.8,1665.27,1755.29,1994.16,1956.12,2172.99,2979.52,2373.74,1408.3,1745.55,2052.46,2760.48,2069.07,1819.65,2503.85,2314.72,3110.43,3350.06,2344.56,1457.51,1609.5,2330.2,3343.35,2732.5,2633.68,2914.89,2596.39,3363.06,3815.94,1545.18,998.14,1038.95,1587.5,2865.5,1725.88,2474.89,3217.94,2929,3337,4102,1092,877,1182,1601,3213,1694,2288]
X=1:1:56;
yi_linear=interp1(hz,sp1,X);
yi_nearest=interp1(hz,sp1,X,'nearest');
yi_spline=interp1(hz,sp1,X,'spline');
yi_cubic=interp1(hz,sp1,X,'PCHIP');
subplot(2,2,1)
semilogx(hz,sp1,'ko');
hold on
semilogx(X,yi_nearest,'b','linewidth',1.5);
xlim([10,10000]);
hold off
title('figure1:nearst');
subplot(2,2,2)
semilogx(hz,sp1,'ko');
hold on
semilogx(X,yi_spline,'b','linewidth',1.5);
xlim([0,56]);
hold off
title('figure2:spline');
subplot(2,2,3)
semilogx(hz,sp1,'ko');
hold on
semilogx(X,yi_cubic,'b','linewidth',1.5);
xlim([0,56]);
hold off
title('figure3:cubic');
subplot(2,2,4)
semilogx(hz,sp1,'ko');
hold on
semilogx(X,yi_linear,'b','linewidth',1.5);
xlim([0,56]);
hold off
title('figure4:linear');
第一问的降维处理:
clc,clear
p_threshold=0.75;
data = xlsread('PCA.xlsx')
[m,n] = size(data);
normal_data = (data-repmat(mean(data),m,1))./repmat(std(data),m,1);
sigama=cov(normal_data);
[V,lamadas]=eig(sigama);
lamada=sum(lamadas);
[order_lamada,index]=sort(-lamada);
order_lamada=-order_lamada;
for i=1:length(lamada)
P=sum(order_lamada(1:i))/sum(order_lamada);
if P>p_threshold
break
end
end
num_pca=i;
V_main=V(:,index(1:i));
new_score=normal_data*V_main;
disp('特征值、累计贡献率:')
order_lamada
P
disp('主成分个数与特征向量:')
num_pca
V_main
plot3(normal_data(:,1),normal_data(:,2),normal_data(:,3),'b*')
hold on
new_data=(V_main*V_main'*normal_data')';
plot3(new_data(:,1),new_data(:,2),new_data(:,3),'r--o')
title('原始数据和主成分得分对比')
legend('原始数据','主成分')
hold on
h=quiver3(0,0,0,V_main(1,1),V_main(2,1),V_main(3,1),'k','linewidth',1.5);
set(h,'maxheadsize',7);
hold on
h=quiver3(0,0,0,V_main(1,2),V_main(2,2),V_main(3,2),'k','linewidth',1.5);
set(h,'maxheadsize',4);
hold off
view(-27,10)
第二问对波动因素的预测,用ARIMA
from __future__ import print_function
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.graphics.api import qqplot
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.arima_model import ARMA
dta=pd.Series(dta)
dta.index = pd.Index(sm.tsa.datetools.dates_from_range('1964','2019'))
dta.plot(figsize=(12,8))
# plt.show()
fig = plt.figure(figsize=(12,8))
ax1= fig.add_subplot(111)
diff1 = dta.diff(1)
diff1.plot(ax=ax1)
plt.show()
fig = plt.figure(figsize=(12,8))
ax2= fig.add_subplot(111)
diff2 = dta.diff(2)
diff2.plot(ax=ax2)
plt.show()
# #三次差分
# fig = plt.figure(figsize=(12,8))
# ax3= fig.add_subplot(111)
# diff3 = dta.diff(3)
# diff3.plot(ax=ax3)
# plt.show()
dta= dta.diff(2)
dta.dropna(inplace=True)
fig = plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
dta = dta.dropna()
fig = sm.graphics.tsa.plot_acf(dta,lags=40,ax=ax1)
plt.show()
ax2 = fig.add_subplot(212)
dta = dta.dropna()
fig = sm.graphics.tsa.plot_pacf(dta,lags=40,ax=ax2)
plt.show()
# arma_mod20 = sm.tsa.ARMA(dta,(3,2)).fit()
# print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic)
# print("1.----------------------------------------------")
arma_mod30 = sm.tsa.ARMA(dta,(5,2)).fit()
print(arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic)
# print("2.----------------------------------------------")
# arma_mod40 = sm.tsa.ARMA(dta,(7,2)).fit()
# print(arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic)
# print("3.----------------------------------------------")
# arma_mod50 = sm.tsa.ARMA(dta,(8,2)).fit()
# print(arma_mod50.aic,arma_mod50.bic,arma_mod50.hqic)
print(sm.stats.durbin_watson(arma_mod30.resid.values))
resid = arma_mod30.resid
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
fig = qqplot(resid, line='q', ax=ax, fit=True)
plt.show()
r,q,p = sm.tsa.acf(resid.values.squeeze(), qstat=True)
data = np.c_[range(1,41), r[1:], q, p]
table = pd.DataFrame(data, columns=['lag', "AC", "Q", "Prob(>Q)"])
print(table.set_index('lag'))
predict_sunspots = arma_mod30.predict('2019', '2023', dynamic=True)
print(predict_sunspots)
fig, ax = plt.subplots(figsize=(12, 8))
ax = dta.loc['1964':].plot(ax=ax)
predict_sunspots.plot(ax=ax)
plt.show()
ts_restored = pd.Series([dta[0]], index=[dta.index[0]]) .append(dta).cumsum()
model = ARIMA(ts_restored,order=(5,2,0))
result = model.fit(disp=-1)
#print(result.summary())
result.conf_int()
fig, ax = plt.subplots(figsize=(12, 10))
ax = ts_restored.loc['1964':].plot(ax=ax)
fig = result.plot_predict(4, 60)
plt.show()
print(predict_sunspots)
第二问的神经网络:
clc,clear
p_threshold=0.75;
data = xlsread('PCA.xlsx')
[m,n] = size(data);
normal_data = (data-repmat(mean(data),m,1))./repmat(std(data),m,1);
sigama=cov(normal_data);
[V,lamadas]=eig(sigama);
lamada=sum(lamadas);
[order_lamada,index]=sort(-lamada);
order_lamada=-order_lamada;
for i=1:length(lamada)
P=sum(order_lamada(1:i))/sum(order_lamada);
if P>p_threshold
break
end
end
num_pca=i;
V_main=V(:,index(1:i));
new_score=normal_data*V_main;
disp('特征值、累计贡献率:')
order_lamada
P
disp('主成分个数与特征向量:')
num_pca
V_main
plot3(normal_data(:,1),normal_data(:,2),normal_data(:,3),'b*')
hold on
new_data=(V_main*V_main'*normal_data')';
plot3(new_data(:,1),new_data(:,2),new_data(:,3),'r--o')
title('原始数据和主成分得分对比')
legend('原始数据','主成分')
hold on
h=quiver3(0,0,0,V_main(1,1),V_main(2,1),V_main(3,1),'k','linewidth',1.5);
set(h,'maxheadsize',7);
hold on
h=quiver3(0,0,0,V_main(1,2),V_main(2,2),V_main(3,2),'k','linewidth',1.5);
set(h,'maxheadsize',4);
hold off
view(-27,10)
这两种方法都很简单,二次指数平滑用在增长时间序列预测,第二问中的两个因素(阻尼系数等于0.8)。移动平均用在第三问里面的时间延迟半个月,可以用移动平均来处理。我们都用EXCEL做的。
灰色预测(预测出来的数据拟合非常差)
多元线性回归(预测出来的数据拟合非常差)
SPSS做PCA,不知道怎么回事儿,一直都是排在前面的就是主成分,可能是设置问题或者软件问题,后来MATLAB做就一个结果,5个主成分。
神经网络第二问第三问都有用到,第二问效果还算正常(如果是预测值无穷大,需要调整学习率),第三问输出预测未来四个月值都一样,最后也没解决,我们自己手动编了几个数据。还有就是这个代码神经网络可以跑出来现在拟合的图,效果很好,不能显示出未来四个月的趋势。
ARIMA问题:我们预测了8次,其中好几次pacf图都是不对的,acf图的灰色区域是对的,pacf图很多都不对。但是因为论文篇幅限制,我们只把预测好的放上去了。
大概就这样,所有代码都是网上现场找的,改改就能用了,第一次做数模,感觉有一些收货。
四天的数模时间感觉还是挺充裕的,我们第一天只定下来了题目,本来准备选混沌那个B题,做了一下午放弃了,晚上做了第一题数据预处理。
第二天:上午:PCA,下午:灰色预测(弯路)、多元线性回归(弯路);
晚上:神经网络成功,二次指数平滑做完了
第三天:上午:ARIMA、下午:ARIMA,晚上:第三问一下子解决了
第四天:大家一起写文档,改格式。(二三天文档一直在进行)
数模分工:1.建模2.编程3.写文章