技术标签: 数学建模 python LSTM 机器学习 Python
目录
本论文研究了某市接待国内游客人数的情况,利用该市近四年旅游人数的数据,运用一种特殊的RNN模型——LSTM模型,建立旅游人数预测模型,预测本月数据时考虑前24个月的数据,利用往年数据对模型进行训练,迭代训练2000次,模型的损失函数降低到0.0001水平。分别对2019年和2020年旅游人数进行预测,测试值与真实值总人数相差不到1万人,并利用2019年的测试数据和真实数据的标准差评估了模型的预测效果,标准差为53.86,所以模型预测效果非常好。通过比对2020年真实值与预测值,分析出新冠病毒的全球蔓延对该市旅游人数影响巨大,使该市旅游人数减少了约74.67%,大约7012万人。
关键词:旅游人数,SLTM,新冠疫情.
2019年末的COV-19疫情的出现,在2020年产生了重大影响,全国多行业的发展有所减缓,Q市的旅游业也严重受到波及。近4年来 (2016年~2019年) Q市接待国内游客如下表1所示。根据表中历史数据,试建立数学模型,回答以下问题:
(1)根据2016-1018前三年的数据,建立旅游人数预测模型,预测2019年Q市各月的旅游人数,并和2019年实际人数进行比较,说明此模型的预测效果;
(2)根据2016-2019年四年的数据,以上述模型预测并评价此次新冠病毒的全球蔓延对2020年Q市旅游人数造成的影响(表2为2020年实际旅游人数)。
表1. Q市往年接待国内游客人数(单位:万人)
月年 |
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
7月 |
8月 |
9月 |
10月 |
11月 |
12月 |
合计 |
2016年 |
47 |
32 |
134 |
153 |
506 |
412 |
876 |
1226 |
237 |
589 |
142 |
64 |
4418 |
2017年 |
48 |
35 |
146 |
183 |
713 |
425 |
1087 |
1347 |
261 |
754 |
173 |
82 |
5254 |
2018年 |
53 |
31 |
158 |
224 |
861 |
537 |
1246 |
1562 |
326 |
924 |
215 |
87 |
6224 |
2019年 |
57 |
34 |
164 |
238 |
976 |
612 |
1429 |
1916 |
357 |
1163 |
206 |
75 |
7227 |
表2. Q市2020年接待国内游客人数(单位:万人)
月年 |
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
7月 |
8月 |
9月 |
10月 |
11月 |
12月 |
合计 |
2020年 |
32 |
14 |
12 |
17 |
68 |
174 |
657 |
765 |
127 |
342 |
107 |
63 |
2378 |
表格中单位为万人,模型预测结果可以采用四舍五入的方法保留四位小数。
1. 旅游需求发展没有跳跃式发展,即需求的发展是渐进的,旅游业发展平稳。
2. 景点本身不发生大的变化。
3. 检索得到的数据可靠性高。
4. 旅游需求主要受资源,环境,交通,季节,费用和服务质量等因素的影响。
X:代表月份(1,2,…,12),输入数据
y:代表每月对应的旅游人数
tanh:激活函数
C_t
:LSTM细胞状态
长短期记忆神经网络(long short-term memory,LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说就是比普通RNN在更长的序列中有更好的表现。主要的改变是增加了三个门,分别是输入门、输出门和忘记门。
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
图1. LSTM 中的重复模块包含四个交互的层
图中使用的各种元素的图标解释如下:
图2. LSTM 中的图标
LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
图3. SLTM核心思想
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。
图4. SLTM的门结构
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!
LSTM 拥有三个门,来保护和控制细胞状态。
LSTM 中的第一步是决定从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取h_{t-1}和x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态C_{t-1}中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
图5. 决定丢弃信息
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值将要更新。然后,一个 tanh 层创建一个新的候选值向量,\tilde{C}_t,会被加入到状态中。
图6. 确定更新信息
更新旧细胞状态,C_{t-1}
更新为C_t
,
把旧状态与f_t
相乘,丢弃掉确定需要丢弃的信息。接着加上i_t * \tilde{C}_t
。这就是新的候选值,根据决定更新每个状态的程度进行变化。
图7. 更新细胞状态
最终,需要确定输出什么值。这个输出将会基于细胞状态,但是也是一个过滤后的版本。首先,运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终仅仅会输出确定输出的那部分。
图8. 输出信息
构建一个具有单个神经元的输入层、具有4个LSTM存储单元的隐藏层,以及具有单个值预测的输出层的神经网络。LSTM存储单元采用的是默认的sigmoid激活函数。对网络训练2000个epochs,并将batch_size设置为1。
模型预测过程中会将新预测到的数据值添加列表,用于预测接下来的数据。采用的方式是逐个月份进行预测,利用前24个月的数据,预测本次数据,所以需进行12次预测。
LSTM的输入数据具有以下形式的特定阵列结构:[样本,时间步长,特征]。在create_dataset()函数中生成的数据集采用的是如下的形式:[样本,特征]。然后需要使用numpy.reshape()函数对数据集进行结构转换,转换时将每个样本作为一个时间步长。
3.2.2 具体过程
1. 导入历年旅游人数的数据,共60条,表示2016-2020近60个月旅游人。
2. 标准化数据,使用Scikit-Learn中的MinMaxScaler预处理类对数据集进行归一化处理,将数据缩放到0——1。
3. 将数据分为训练集和测试集,解决问题一训练集为1-36条数据,测试集为37-48条数据,解决问题二训练集为1-48条数据,测试集为49-60条数据。
4. 创建训练数据集X_train, y_train分别代表模型输入数据集和结果数据集,每一维X_train[i]包含12个数据,及预测月份y_train[i]的前12个月的数据。
5. 模型设置隐含层设置4个LSTM存储单元,神经元设置单个输入输出层,采用默认的sigmoid激活函数,loss函数采用标准差。对X_train, y_train数据集进行训练,训练周期为epochs=2000,batch_size=1,得到数据模型。
6. 重复12轮预测,利用前24个月的数据,每一轮预测一个月份的旅游人数,并将新预测的数据添加到列表中,用于预测下一个月份的旅游人数。
7. 预测数据与真实数据计算标准差,评估模型预测效果。
8. 反标准化预测数据,并打印数据折线图和旅游人数预测结果。
1. 建立模型
def build_model():
model = Sequential()
model.add(LSTM(units=4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
2. 创建数据集
def create_dataset(dataset):
dataX, dataY = [], []
# for i in range(len(dataset) - look_back - 1):
for i in range(len(dataset) - look_back):
x = dataset[i:i + look_back, 0]
dataX.append(x)
y = dataset[i + look_back, 0]
dataY.append(y)
# print('X: %s, Y: %s' % (x, y))
return np.array(dataX), np.array(dataY)
3. 训练模型
model = build_model()
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=2)
4. 模型预测
predict_xlist = dataset[train_size - look_back:train_size + validation_size, :] # 添加预测x列表
predict_y = [] # 添加预测y列表
predict_validation = [] #添加预测y列表
while len(predict_y) < 12:
i = 0
validation = predict_xlist[-timesteps:, :]
X_validation, y_validation = create_dataset(validation)
X_validation = np.reshape(X_validation, (X_validation.shape[0], 1, X_validation.shape[1])) # 变换格式,适应LSTM模型
# 模型预测数据
predict_validation = model.predict(X_validation)
pre = predict_validation.astype('float32')# 12维
predict_xlist = np.concatenate((predict_xlist, pre), axis=0)
# 反标准化数据,目的是为了保证MSE的准确性
predict_validation = scaler.inverse_transform(predict_validation) # 预测的 19年游客的数据值
y_validation = scaler.inverse_transform([y_validation])
predict_y.extend(predict_validation[0]) # 预测的结果y,每次预测的1个数据,添加进去
3.2.4 预测结果及分析:
实验数据如下:
表3.1. Q市2019、2020年接待国内游客人数真实值及预测值(单位:万人)
2019真实值 |
2019预测值 |
2020真实值 |
2020预测值 |
|
1月 |
57 |
67.4242 |
32 |
77.3402 |
2月 |
34 |
12.0256 |
14 |
26.9391 |
3月 |
164 |
193.7576 |
12 |
177.5304 |
4月 |
238 |
227.8908 |
17 |
162.9022 |
5月 |
976 |
977.4772 |
68 |
1143.6656 |
6月 |
612 |
702.357 |
174 |
692.6789 |
7月 |
1429 |
1361.6063 |
657 |
1855.8857 |
8月 |
1916 |
1841.384 |
765 |
2766.4673 |
9月 |
357 |
383.0164 |
127 |
477.9497 |
10月 |
1163 |
1088.7664 |
342 |
1764.9553 |
11月 |
206 |
299.5706 |
107 |
197.2131 |
12月 |
75 |
71.0087 |
63 |
46.2876 |
合计 |
7227 |
7226.2848 |
2378 |
9389.8151 |
问题一:
通过对2016、2017、2018年36个月份的数据进行训练得到的模型,模型损失函数loss: 5.3235e-7。
图3.1 2019年数据比对结果(红色为预测值,黑色为真实值)
预测结果如表3.1,2019年预测总人数为7226.2848万人,与真实值相差0.7152万人,真实值与测试值之间的标准差:Validation Score : 53.86 RMSE
测试值与真实值总人数相差不到1万人,各月人数差距不大,标准差较小,数据变化趋势与真实值变化趋势相符,预测效果非常好。
问题二:
通过对2016、2017、2018、2019年48个月份的数据进行训练得到的模型,模型损失函数loss: 1.3921e-4。
图3.2 2020年数据比对结果(红色为预测值,黑色为真实值)
预测结果如表3.1,2020年预测总人数为9389.8151万人,与真实值相差7011.8151万人,2020年实际旅游人数占预测人数的25.33%,即新冠疫情造成该市旅游人数减少了约74.67%。
1. 帮助城市制定旅游发展计划,由历年统计数据可以看出旅游业发展迅速,在没有特殊情况的干扰下,每年游客数目逐年上升,政府应制定中长期旅游发展规划,合理引导促进旅游业的发展,为了适应旅游需求的不断增长,提高服务质量,旅游部门应相应加大在交通,环境改善等方面的投资力度及相互协作能力,同时,要加大对旅游资源的保护力度,防止旅游饱和和超载对环境设施的消极影响。
2. 由疫情的影响可以看出,突发事件对该城市旅游业影响巨大,政府在制定旅游发展规划过程中也应做好防护突发事件的措施和准备,将损失降到最小。有必要进一步完善各种重大突发事件的应急机制,使得旅游业在出现重大突发事件的年份中不至于出现滑坡
由于数据预测过程中迭代次数足够高,损失函数值通常不大于0.0001,所以模型预测效果通常十分接近真实值,可以很好捕捉到历史数据中的数据变化趋势。因此模型对数据十分敏感。
由于训练数据不够丰富,模型只适合近期数据预测,对于后一年的数据可以良好预测,如果对后几年的数据进行预测的话,仅靠近三四年的数据不能保证预测效果,单数如果能够提供更多的历年数据,可以预测更远。因此稳健性良好。
优势:训练时间短,精度高,准确度高,易操作。
不足:由于预测过程中用到了之前预测的值而不是真实值,在预测月份过多的情况下容易出现偏差。但是在数据足够多的情况下可以避免这种状况。
通过对2016、2017、2018年36个月份的数据进行训练得到的模型,模型损失函数loss: 5.3235e-7。预测结果如表3.1,2019年预测总人数为7226.2848万人,与真实值相差0.7152万人,真实值与测试值之间的标准差:Validation Score : 53.86 RMSE。测试值与真实值总人数相差不到1万人,各月人数差距不大,标准差较小,数据变化趋势与真实值变化趋势相符,预测效果非常好。
通过对2016、2017、2018、2019年48个月份的数据进行训练得到的模型,模型损失函数loss: 1.3921e-4。预测结果如表3.1,2020年预测总人数为9389.8151万人,与真实值相差7011.8151万人,2020年实际旅游人数占预测人数的25.33%,即新冠疫情造成该市旅游人数减少了约74.67%。
[1] 关于香港旅游需求的数学建模预测模型数学建模https://wenku.baidu.com/view/efbfb1acbdd126fff705cc1755270722192e59ef.html
[2] 杭州市未来旅游需求的预测(数学建模) https://wenku.baidu.com/view/9f57310d76c66137ee0619a3.html
[3] 国际旅行人数预测——使用LSTM https://blog.csdn.net/sun___m/article/details/83898522
[4] 【Keras】学习笔记18:LSTM时间序列问题预测:国际旅行人数预测
https://blog.csdn.net/qq_49189614/article/details/107767563
[5] 基于LSTM的时间序列数据(多步)预测https://www.jianshu.com/p/3b60cefa3109
[6] keras中使用LSTM实现一对多和多对多https://blog.csdn.net/chaofeili/article/details/89319410
[7] numpy的ndarray取数操作
https://blog.csdn.net/weixin_43251493/article/details/106157460
https://github.com/YTIANYE/SMTL_ForecastNumberOfTourists
注意:两个分支代码不同,分别解决一个问题
Month,Passengers
2016-01,47
2016-02,32
2016-03,134
2016-04,153
2016-05,506
2016-06,412
2016-07,876
2016-08,1226
2016-09,237
2016-10,589
2016-11,142
2016-12,64
2017-01,48
2017-02,35
2017-03,146
2017-04,183
2017-05,713
2017-06,425
2017-07,1087
2017-08,1347
2017-09,261
2017-10,754
2017-11,173
2017-12,82
2018-01,53
2018-02,31
2018-03,158
2018-04,224
2018-05,861
2018-06,537
2018-07,1246
2018-08,1562
2018-09,326
2018-10,924
2018-11,215
2018-12,87
2019-01,57
2019-02,34
2019-03,164
2019-04,238
2019-05,976
2019-06,612
2019-07,1429
2019-08,1916
2019-09,357
2019-10,1163
2019-11,206
2019-12,75
2020-01,32
2020-02,14
2020-03,12
2020-04,17
2020-05,68
2020-06,174
2020-07,657
2020-08,765
2020-09,127
2020-10,342
2020-11,107
2020-12,63
"""
LSTM时间序列问题预测:旅行人数预测
"""
import numpy as np
# import mxnet as mx
from matplotlib import pyplot as plt
from pandas import read_csv
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
seed = 7
batch_size = 1
epochs = 500
# filename = 'international-airline-passengers.csv'
filename = 'data_visitors.csv'
footer = 0
look_back = 12
predict_steps = 12
timesteps = 24 # 构造x,为72个数据,表示每次用前72个数据作为一段
def create_dataset(dataset):
# 创建数据集
dataX, dataY = [], []
# for i in range(len(dataset) - look_back - 1):
for i in range(len(dataset) - look_back):
x = dataset[i:i + look_back, 0]
dataX.append(x)
y = dataset[i + look_back, 0]
dataY.append(y)
# print('X: %s, Y: %s' % (x, y))
return np.array(dataX), np.array(dataY)
def build_model():
model = Sequential()
model.add(LSTM(units=4, input_shape=(1, look_back)))
# model.add(LSTM(units=4, input_shape=(look_back, 1)))
# model.add(Dense(units=12))
model.add(Dense(1))
# 均方误差,也称标准差,缩写为MSE,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率.
model.compile(loss='mean_squared_error', optimizer='adam')
return model
def train(trainsize,year):
# 设置随机种子
np.random.seed(seed)
# 导入数据
data = read_csv(filename, usecols=[1], engine='python', skipfooter=footer) # skipfooter=10 则最后10行不读取
dataset = data.values.astype('float32')
# 标准化数据
scaler = MinMaxScaler()
dataset = scaler.fit_transform(dataset)
train_size = int(len(dataset) * trainsize) # 训练集和验证集长度
validation_size = int(len(dataset) * 0.2)
train = dataset[0:train_size, :]
# validation = dataset[train_size - look_back:train_size + validation_size, :]
#### 循环测试
# 创建dataset,使数据产生相关性
X_train, y_train = create_dataset(train)
# 添加到循环
# X_validation, y_validation = create_dataset(validation)
# 将数据转换成[样本,时间步长,特征]的形式
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
# 添加到循环
# X_validation = np.reshape(X_validation, (X_validation.shape[0], 1, X_validation.shape[1]))
# 训练模型
model = build_model()
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=2) # 通过设置详细0,1或2,您只需说明您希望如何“看到”每个时期的训练进度. verbose = 0会显示任何内容(无声) verbose = 1会显示一个动画进度条,如下所示: progres_bar verbose = 2只会提到这样的纪元数:
predict_xlist = dataset[train_size - look_back:train_size + validation_size, :] # 添加预测x列表
# predict_xlist = []
predict_y = [] # 添加预测y列表
predict_validation = [] #添加预测y列表
# predict_xlist.extend(train.tolist()) # 已经存在的最后timesteps个数据添加进列表,预测新值
while len(predict_y) < 12:
i = 0
# validation = np.array(predict_xlist[-timesteps:])
validation = predict_xlist[-timesteps:, :]
# 从最新的predict_xlist取出timesteps个数据,预测新的predict_steps个数据(因为每次预测的y会添加到predict_xlist列表中,为了预测将来的值,所以每次构造的x要取这个列表中最后的timesteps个数据词啊性)
# validation = dataset[train_size - look_back:train_size + validation_size, :]
X_validation, y_validation = create_dataset(validation)
X_validation = np.reshape(X_validation, (X_validation.shape[0], 1, X_validation.shape[1])) # 变换格式,适应LSTM模型
# 模型预测数据
predict_validation = model.predict(X_validation)
# predict_xlist.extend(predict_validation[0]) # 将新预测出来的predict_steps个数据,加入predict_xlist列表,用于下次预测
pre = predict_validation.astype('float32')# 12维
predict_xlist = np.concatenate((predict_xlist, pre), axis=0)
# np.concatenate((predict_xlist, pre))
# 反标准化数据,目的是为了保证MSE的准确性
predict_validation = scaler.inverse_transform(predict_validation) # 预测的 19年游客的数据值
y_validation = scaler.inverse_transform([y_validation])
predict_y.extend(predict_validation[0]) # 预测的结果y,每次预测的1个数据,添加进去,
#打印预测游客数量
# print(year + '年预测游客数量:')
# # print(predict_validation)
# print(predict_y)
####循环测试
# 评估模型
validation_score = math.sqrt(mean_squared_error(y_validation[0], predict_validation[:, 0]))
print('Validation Score : %.2f RMSE' % validation_score)
# 构建通过评估数据集进行预测的图表数据
predict_validation_plot = np.empty_like(dataset)
predict_validation_plot[:, :] = np.nan
predict_validation_plot[train_size + validation_size - len(predict_validation): train_size + validation_size, :] = predict_validation
# 图表显示
dataset = scaler.inverse_transform(dataset)
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.plot(dataset, color='black')
plt.plot(predict_validation_plot, color='red')
plt.show()
return predict_validation
if __name__ == '__main__':
# train(0.6,'2019')
i = 0
while i < 6:
predict_validation = train(0.8,'2020')
print('########## 2020年预测游客数量:', i)
print(predict_validation)
i += 1
文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别
文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具
文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量
文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置
文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖
文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...
文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序
文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码
文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型
文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件
文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令
文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线