电力系统负荷与电价预测优化模型(Matlab代码实现)

 

1 数学模型

用于模拟电价的模型是一个简化形式的混合模型,如下图1所示。其根本驱动因素是天然气价格和气温。该模型在内部捕获了驱动因素与电价的关系之间的关系,以及与一天中的时间、一周中的哪一天和节假日的关系。天然气价格模型是一种简化的均值回归随机微分方程模型。温度模型是参数函数和时间序列模型的组合。
模拟的天然气和电价路径被送入调度算法,该算法计算工厂的最优调度,以产生一系列现金流,可用于计算风险现金流。

                       

                                                                      图1

部分代码:

%% 每小时温度建模和模拟
% 这个例子演示了每小时干球温度拟合一个非线性温度模型。
% 温度序列被建模为两个分量的总和,一个确定性的非线性函数,
% 用来解释给定年份某一时刻的季节或预期温度,另一个随机分量,用来解释实际温度与平均值的偏差。
%% 导入数据
%数据集从先前创建的MAT-file中加载。它由一系列日期的向量和相应的历史记录温度组成。
clear
load Data\TempSeries
whos

%% 季节性成分(确定性)
% 确定性或期望的温度分量用正弦和模型建模,激励的是数据中观察到的温度和周期性的物理本质。
% 利用曲线拟合工具箱对模型参数进行估计。统计工具箱函数NLINFIT也可以用来估计模型参数。
% 计算平均值(年平均值)并将其从系列中剔除
m = mean(drybulb)
drybulb0 = drybulb - m;

% Fit double-sine model
model = fit(dates, drybulb0, 'sin2')

%% 可视化模型精度
% 用自定义图对拟合结果进行可视化分析。图中的两个轴是相连的,这极大地使数据的视觉探索。
% 还要注意,X轴上的日期tick相对于缩放和平移是动态的。
pred = model(dates) + m;
res = drybulb - pred;
fitPlot(dates, [drybulb pred], res);
disp(['平均绝对误差: ' num2str(mean(abs(res))) ' 华氏度']);

%% 分析残差中的序列相关性
% 上述图中明显的特征之一是残差不具有序列相关性。预计这是因为高于平均气温很可能跟随高于平均气温。
% 这种序列相关性可以被明确地度量。这里用AUTOCORR和PARCORR函数来显示序列的自相关和部分自相关。
figure;
subplot(2,1,1);
autocorr(res,50);
title('随机序列的序列相关性');
subplot(2,1,2);
parcorr(res(1:1000),50);


%% 利用季节AR模型对随机成分进行建模
% 可以选择对随机分量建模一个均值回复漂移SDE。
% 但是,由于季节性,我们将使用带有季节性滞后的自回归模型。
% 这里可以使用MATLAB反斜杠算子代替REGRESS函数,但这不会返回置信区间。
lags = [1 2 3 4 23 24 25 47 48 49];
Xres = lagmatrix(res, lags);
[beta, betaci, res2] = regress(res, Xres);
disp('滞后系数和置信区间');
disp([lags' beta betaci])

%% 对回归残差进行序列相关分析
%来自回归的残差现在应该大多是序列不相关的。

figure;
subplot(2,1,1);
plot(dates, res2); datetick
title('回归残差及其序列相关性');
subplot(2,1,2);
autocorr(res2(lags(end)+1:end),50);

%% 对残差拟合一个分布
% 由于残差大多是不相关的,因此可以将它们建模为独立的从适当的分布中提取的。
% 一个t位置尺度分布可以显示出很好的拟合性。
PD = fitdist(res2, 'tlocationscale');

%% 模型总结
% 温度模型现在可以定义为,
% 
%  *平均气温' m '
%  *正弦模型'模型'
%  *回归参数'β '
%  *自相关滞后'滞后'
%  *剩馀概率分布PD
%  *可选样本前数据( 回归温度的最后一次观测值 )

tempModel = struct('m', m, 'sinmodel', model, 'reglags', lags, 'regbeta', beta, 'dist', PD, 'presample', res(end-lags(end)+1:end));
save SavedModels\TemperatureModel.mat -struct tempModel
clearvars -except tempModel dates drybulb

%% 仿真模型
% 我们现在可以对这个模型进行2009年的模拟,并将模拟值与2009年的观测数据进行比较。
% 注意我们已经捕获了我们模型中的相关特征。
newDates = dates(end-365*24+1:end);
simTemp = simulateTemperature(tempModel, newDates, 1);

%% 可视化仿真结果
ax1 = subplot(2,1,1);
plot(newDates, drybulb(end-365*24+1:end))
title('实际温度');
ax2 = subplot(2,1,2);
plot(newDates, simTemp);
title('模拟温度');
linkaxes([ax1 ax2], 'x');
dynamicDateTicks([ax1 ax2], 'linked');

%% 每小时温度建模和模拟
% 这个例子演示了每小时干球温度拟合一个非线性温度模型。
% 温度序列被建模为两个分量的总和,一个确定性的非线性函数,
% 用来解释给定年份某一时刻的季节或预期温度,另一个随机分量,用来解释实际温度与平均值的偏差。
%% 导入数据
%数据集从先前创建的MAT-file中加载。它由一系列日期的向量和相应的历史记录温度组成。
clear
load Data\TempSeries
whos

%% 季节性成分(确定性)
% 确定性或期望的温度分量用正弦和模型建模,激励的是数据中观察到的温度和周期性的物理本质。
% 利用曲线拟合工具箱对模型参数进行估计。统计工具箱函数NLINFIT也可以用来估计模型参数。
% 计算平均值(年平均值)并将其从系列中剔除
m = mean(drybulb)
drybulb0 = drybulb - m;

% Fit double-sine model
model = fit(dates, drybulb0, 'sin2')

%% 可视化模型精度
% 用自定义图对拟合结果进行可视化分析。图中的两个轴是相连的,这极大地使数据的视觉探索。
% 还要注意,X轴上的日期tick相对于缩放和平移是动态的。
pred = model(dates) + m;
res = drybulb - pred;
fitPlot(dates, [drybulb pred], res);
disp(['平均绝对误差: ' num2str(mean(abs(res))) ' 华氏度']);

%% 分析残差中的序列相关性
% 上述图中明显的特征之一是残差不具有序列相关性。预计这是因为高于平均气温很可能跟随高于平均气温。
% 这种序列相关性可以被明确地度量。这里用AUTOCORR和PARCORR函数来显示序列的自相关和部分自相关。
figure;
subplot(2,1,1);
autocorr(res,50);
title('随机序列的序列相关性');
subplot(2,1,2);
parcorr(res(1:1000),50);


%% 利用季节AR模型对随机成分进行建模
% 可以选择对随机分量建模一个均值回复漂移SDE。
% 但是,由于季节性,我们将使用带有季节性滞后的自回归模型。
% 这里可以使用MATLAB反斜杠算子代替REGRESS函数,但这不会返回置信区间。
lags = [1 2 3 4 23 24 25 47 48 49];
Xres = lagmatrix(res, lags);
[beta, betaci, res2] = regress(res, Xres);
disp('滞后系数和置信区间');
disp([lags' beta betaci])

%% 对回归残差进行序列相关分析
%来自回归的残差现在应该大多是序列不相关的。

figure;
subplot(2,1,1);
plot(dates, res2); datetick
title('回归残差及其序列相关性');
subplot(2,1,2);
autocorr(res2(lags(end)+1:end),50);

%% 对残差拟合一个分布
% 由于残差大多是不相关的,因此可以将它们建模为独立的从适当的分布中提取的。
% 一个t位置尺度分布可以显示出很好的拟合性。
PD = fitdist(res2, 'tlocationscale');

%% 模型总结
% 温度模型现在可以定义为,

%  *平均气温' m '
%  *正弦模型'模型'
%  *回归参数'β '
%  *自相关滞后'滞后'
%  *剩馀概率分布PD
%  *可选样本前数据( 回归温度的最后一次观测值 )

tempModel = struct('m', m, 'sinmodel', model, 'reglags', lags, 'regbeta', beta, 'dist', PD, 'presample', res(end-lags(end)+1:end));
save SavedModels\TemperatureModel.mat -struct tempModel
clearvars -except tempModel dates drybulb

%% 仿真模型
% 我们现在可以对这个模型进行2009年的模拟,并将模拟值与2009年的观测数据进行比较。
% 注意我们已经捕获了我们模型中的相关特征。
newDates = dates(end-365*24+1:end);
simTemp = simulateTemperature(tempModel, newDates, 1);

%% 可视化仿真结果
ax1 = subplot(2,1,1);
plot(newDates, drybulb(end-365*24+1:end))
title('实际温度');
ax2 = subplot(2,1,2);
plot(newDates, simTemp);
title('模拟温度');
linkaxes([ax1 ax2], 'x');
dynamicDateTicks([ax1 ax2], 'linked');

2 运行结果

            

                

                    

                     

     

应用程序中包含三个 Excel 电子表格。 PlantRiskDeployed.xlsm 是与已部署应用程序一起使用的接口。它包括调用使用 MATLAB Builder Ex 创建的 COM DLL 的已部署方法的 VBA 代码。部署项目 PlantRisk.prj 包括构建已部署应用程序所需的相关文件。这可以在 MATLAB 中打开并构建以创建 Excel 应用程序所需的 DLL。 vbamodule.bas 中的 VBA 代码包含已成为 PlantRiskDeployed 一部分的 VBA 代码,用于从 Excel 自动调用 DLL 函数。 PlantRiskSpLink.xlsm 是与 Spreadsheet Link EX 一起使用的接口,用于在 MATLAB 的运行会话中调用 MATLAB 函数。如果您不需要与不是 MATLAB 用户的其他人共享应用程序,或者在创建已部署的应用程序之前对界面进行原型设计,则此版本非常有用。 PlantRiskTemplate.xlsx 是没有集成到 MATLAB 的简单接口。 vbamodule.bas 中的 VBA 代码以及 MATLAB Builder EX 生成的 VBA 代码可以导入此文件,使其成为与 PlantRiskDeployed.xlsm 相同的功能齐全的部署应用程序.

使用界面:单击 Run Backtest 按钮调用 backtestPlantPortfolio 函数(在 MATLAB 中或在 MATLAB 生成的 DLL 中)。此函数加载工作表上指定日期范围内的历史电力和天然气价格,并计算每个发电机的每日最佳调度,从而在尊重最小运行时间限制的同时最大化每日发电利润。回测的结果是每个工厂的一组运营统计数据,例如已实现利润、运营天数、工厂运行时间百分比以及每个运营日的平均小时数。该函数还计算投资组合的总预期利润和日期范围内每个日期的现金流(利润)图。回测结果的屏幕截图如下所示。单击 Run Simulation 按钮会调用 simulationPlantPortfolio 函数(在 MATLAB 中或在 MATLAB 生成的 DLL 中)。该函数加载预训练的天然气价格、温度和电价模型,并联合模拟指定日期范围内天然气和电价的多条路径。可以在工作表上指定模拟次数。然后针对每个模拟价格路径为每个工厂执行最佳调度,以计算每个工厂以及整个投资组合的利润和运营统计数据。然后将这些平均并显示在工作表上。此外,还计算了每个资产和投资组合的风险现金流量度。该函数还创建了现金流(收益)分布的直方图,其中突出显示了风险指标

3 Matlab代码实现

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Matlab是一个功能强大的数学软件,它具备建立和训练神经网络的能力,可以用于预测各种数据集,包括天气数据。 在使用Matlab进行神经网络预测天气数据集之前,首先需要准备好相关的数据。天气数据集可能包含各种气象指标,如温度、湿度、降水量等。这些数据应该经过收集和整理,可以采用历史数据或者从气象台获取。 使用Matlab的神经网络工具箱,可以构建一个合适的神经网络模型。根据天气数据集的特点和预测目标,选择适当的神经网络结构,如前馈神经网络、循环神经网络等。然后可以通过将数据集分成训练集和测试集来进行神经网络的训练和验证。 训练神经网络时,可以采用各种优化算法和参数设置来提高预测模型的准确性。常见的优化算法包括反向传播算法、Levenberg-Marquardt算法等。在训练过程中,可以利用训练集的数据对神经网络进行参数调整和优化,直到模型的准确度达到预期。 训练完成后,可以使用测试集对神经网络进行验证和评估。通过比较实际观测值和神经网络的预测结果,可以计算出模型的准确度和误差,并进行调整和改进。 最后,利用训练好的神经网络模型,可以对未来的天气数据进行预测。只需将待预测的数据输入到神经网络中,即可得到相应的预测结果。这种预测方法可以帮助人们了解即将到来的天气情况,以便做好相应的准备和决策。 总之,利用Matlab可以构建和训练神经网络模型,用于预测天气数据集。通过合适的数据准备、神经网络模型的选择和优化,以及验证和预测过程的相关操作,可以得到准确度较高的天气预测结果。这种方法可以在气象领域和其他相关领域提供有价值的预测应用。 ### 回答2: Matlab的神经网络工具箱提供了建立和训练神经网络模型的实用功能,可以应用于各种预测任务,其中包括预测天气数据集。 首先,我们需要收集相关的天气数据,例如气温、湿度、风速等,以及与这些气象变量相关联的目标变量,比如降水量。这些数据将作为神经网络的输入和输出。 然后,我们使用Matlab的神经网络工具箱,选择适当的神经网络架构。根据天气数据的特点,可以选择不同类型的神经网络,如前馈神经网络(Feedforward Neural Network)、时间序列网络(Time Series Network)或长短期记忆网络(Long Short-Term Memory Network)。这些网络可以通过Matlab的图形用户界面或编程接口进行设置。 接下来,我们将数据集分为训练集、验证集和测试集。训练集用于训练神经网络模型,验证集用于调整网络的超参数和结构,并检验模型的泛化能力,而测试集则用于评估模型的性能。 在训练过程中,我们可以选择适当的训练算法和优化方式。Matlab提供了多种训练算法,如反向传播(Backpropagation)和Levenberg-Marquardt等。我们可以通过比较不同算法在验证集上的性能来选择最佳的算法和优化策略。 当神经网络模型训练完成后,我们可以使用该模型对未来的天气数据进行预测。通过将新的气象变量输入到经过训练的神经网络模型中,我们可以获得相应的预测结果,如未来某个时间点的降水量。 最后,我们可以通过对预测结果进行评估,比较预测值与实际值之间的差异。Matlab提供了各种性能评估指标,如均方误差、相关系数等,帮助我们评估模型的准确性和可靠性。 综上所述,利用Matlab的神经网络工具箱可以有效地预测天气数据集,通过合理的数据准备、网络设置和训练优化,可以获得准确的天气预测结果。 ### 回答3: MATLAB是一种强大的数据分析和处理工具,可以用于构建和训练神经网络来预测天气数据集。 首先,我们需要准备天气数据集。这包括一系列与天气相关的参数,如温度、湿度、气压等。可以通过收集历史天气数据或使用现有的公开数据集来获取这些数据。 然后,我们使用MATLAB的神经网络工具箱来构建神经网络模型。这个工具箱提供了各种类型的神经网络,如前馈神经网络、循环神经网络等。选择适当类型的神经网络取决于数据的特点和预测任务的要求。 接下来,我们需要将数据集分为训练集和测试集。训练集用于训练神经网络模型,而测试集用于评估模型预测性能。可以使用MATLAB的数据分割函数将数据集分成两部分。 然后,我们使用训练集来训练神经网络模型。这涉及到选择适当的训练算法和调整神经网络的参数,如学习率、隐藏层数等。在MATLAB中,可以使用神经网络工具箱提供的函数来完成这些任务。 训练完成后,我们用测试集来评估模型的性能。可以通过计算预测结果与实际观测值之间的差异来衡量模型的准确性。在MATLAB中,可以使用均方根误差(RMSE)等指标来评估模型的性能。 最后,我们可以使用已经训练好的神经网络模型预测新的天气数据。将新的数据输入到模型中,它会给出相应的预测结果。通过反复调整和优化模型,我们可以不断改进预测的准确性。 总而言之,MATLAB提供了强大的神经网络工具箱和数据分析功能,使我们能够构建和训练神经网络模型预测天气数据集。这样的预测模型可以帮助我们更好地理解和应对不同的天气情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值