【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)
目錄
1 概述
2 基于神經網絡的負荷預測(Matlab實現)
2.1 代碼
2.2 結果?
2.3?回歸樹模型的進一步改進?
3 基于神經網絡的價格預測(Matlab代碼實現)?
4 閱讀全文(Matlab代碼)
1 概述
這個例子演示了用MATLAB建立一個短期電力負荷(或價格)預測系統。兩個非線性回歸模型(神經網絡和袋式回歸樹)被校準,以預測給定溫度預測、假日信息和歷史負荷的每小時前日負荷。這些模型在數據上進行訓練,并在2008年的樣本外數據上進行測試。這些模型被證明能夠產生高度準確的日前預測,平均誤差在1-2%左右。能夠通過MATLAB部署的DLL調用訓練好的負荷預測模型。
準確的負荷預測對于公用事業的短期運營和長期規劃至關重要。負荷預測會影響許多決策,包括在給定時期內承諾哪些發電機,并廣泛影響批發電力市場價格。負荷和價格預測算法通常在簡化形式的電價混合模型中也很突出,這是用于模擬市場和模擬能源衍生品的一些最準確的模型。市場參與者在許多交易和風險管理應用程序中也廣泛使用電價預測。負荷預測會影響許多決策,包括在給定時期內承諾哪些發電機,并廣泛影響批發電力市場價格。負荷預測算法通常在電價混合模型中也很突出,這是電力市場建模最準確的一類方法。市場參與者在許多交易和風險管理應用程序中廣泛使用電價預測。傳統上,公用事業和營銷人員使用商業軟件包來執行負荷預測。這些方法的主要缺點是它們是一個黑匣子,不提供如何計算負載預測的透明度。它們通常也只提供實用程序所需功能的 80-90%。在許多情況下,不可能通過現成的產品滿足所有要求,例如考慮到區域負載、不同的天氣模式等。
2 基于神經網絡的負荷預測(Matlab實現)
2.1 部分代碼
%% 利用神經網絡進行電力負荷預測 % 這個例子展示了用MATLAB建立和驗證一個短期的 % 本例演示了用MATLAB建立和驗證短期電力負荷預測模型。這些模型考慮到了 % 考慮到多種信息來源,包括溫度和 % 假期等多種信息,以構建一個日前負荷預測器。這個腳本使用 % 神經網絡。%% 導入天氣和負荷數據 % 所使用的數據集是一個地區2004 - 2008年的歷史小時負荷和溫度觀測表。 % 天氣信息包括干球溫度和露點。 load Data\DBLoadData.mat addpath ..\Util%% 從Excel電子表格中導入假期列表[num, text] = xlsread('..\Data\Holidays.xls'); holidays = text(2:end,1);%% 生成預測矩陣 % 函數*genPredictors*生成了作為模型輸入的預測變量。 % 的輸入。對于短期預測,這些變量包括 % * 干球溫度 % * 露點 % *一天中的小時 % * 一周中的一天 % *表明是否為假日/周末的標志 % * 前一天的平均負荷 % * 前一天同一小時的負荷 % * 前一周同一小時和同一天的負荷 % 如果目標是中期或長期的負荷預測,只需輸入 % 如果目標是中期或長期的負荷預測,只有一天中的小時,一周中的一天,一年中的時間和節假日可以被使用 % 確定性地使用。天氣/負荷信息將需要被指定為 % 指定為一個平均數或一個分布 %% 選擇預測范圍 term = 'short';[X, dates, labels] = genPredictors(data, term, holidays);%% 講數據集分為訓練和測試集 % 該數據集被分為兩組,一個是包括2004年至2007年數據的_訓練_組, % 另一個是包括2008年數據的_測試_組。 % 訓練集包括2004至2007年的數據,測試集包括2008年的數據。 % 訓練集用于建立模型(估計其參數)。測試集僅用于預測,以測試模型在樣本外數據上的表現。 %++++++ 建立訓練集++++++++++ trainInd = data.NumDate < datenum('2008-01-01'); trainX = X(trainInd,:); trainY = data.SYSLoad(trainInd);%++++++創建測試集并保存以備不時之需++++++ testInd = data.NumDate >= datenum('2008-01-01'); testX = X(testInd,:); testY = data.SYSLoad(testInd); testDates = dates(testInd);save Data\testSet testDates testX testY clear X data trainInd testInd term holidays dates ans num text%% 構建負荷預測模型 % 接下來的幾個單元建立了一個神經網絡回歸模型, % 用于給定訓練數據的日前負荷預測。 % 然后,該模型被用于測試數據以驗證其準確性。 %% 初始化和訓練網絡 % 初始化一個包含 20 個神經元的兩層默認網絡。使用“平均 % 絕對誤差”(MAE)性能指標。然后,用 % 默認的 Levenburg-Marquardt 算法。為了提高效率,預先訓練 % 除非特別強制執行重新訓練,否則網絡會被加載。 reTrain = false; if reTrain || ~exist('Models\NNModel.mat', 'file')net = newfit(trainX', trainY', 20);net.performFcn = 'mae';net = train(net, trainX', trainY');save Models\NNModel.mat net elseload Models\NNModel.mat end%% 采用神經網絡模型進行預測 % 一旦建立了模型,對獨立的測試集進行預測. load Data\testSet forecastLoad = sim(net, testX')';%% 比較預測負荷和實際負荷 % 創建一個圖表來比較實際負荷和預測負荷以及 % 并計算出預測誤差。除了可視化之外,還可以使用平均絕對值等指標來量化 % 預測器的性能,如平均絕對誤差(MAE)、平均絕對百分比誤差(MAPE)和每日峰值誤差(MAPE)等指標。 % 誤差(MAE),平均絕對誤差(MAPE)和每日峰值預測 % 誤差。 err = testY-forecastLoad; fitPlot(testDates, [testY forecastLoad], err);errpct = abs(err)./testY*100;fL = reshape(forecastLoad, 24, length(forecastLoad)/24)'; tY = reshape(testY, 24, length(testY)/24)'; peakerrpct = abs(max(tY,[],2) - max(fL,[],2))./max(tY,[],2) * 100;MAE = mean(abs(err)); MAPE = mean(errpct(~isinf(errpct)));fprintf('平均絕對百分比誤差 (MAPE): %0.2f%% \n平均絕對誤差 (MAE): %0.2f MWh\n每日峰值 MAPE: %0.2f%%\n',...MAPE, MAE, mean(peakerrpct))%% 檢查誤差的分布情況 % 除了報告標量誤差指標(如MAE和MAPE)外,誤差分布圖和絕對誤差也有助于建立 % 誤差和絕對誤差的分布圖可以幫助建立 % 圍繞預測者的表現建立直覺 %% 可視化圖像 figure; subplot(3,1,1); hist(err,100); title('誤差分布'); subplot(3,1,2); hist(abs(err),100); title('絕對誤差分布'); line([MAE MAE], ylim); legend('誤差', 'MAE'); subplot(3,1,3); hist(errpct,100); title('絕對百分比誤差分布'); line([MAPE MAPE], ylim); legend('誤差', 'MAPE');%% 誤差的集體分析 % 為了進一步了解預報器的性能,我們可以 % 為了進一步了解預報員的表現,我們可以按一天中的每一小時、 % 一周中的每一天和一年中的每一個月來直觀地顯示預報誤差百分比。 % 年的月份 [yr, mo, da, hr] = datevec(testDates);%% 按小時計算 clf; boxplot(errpct, hr+1); xlabel('小時'); ylabel('誤差百分比的統計'); title('按小時劃分的預測誤差統計數據');% 按工作日 figure boxplot(errpct, weekday(floor(testDates)), 'labels', {'Sun','Mon','Tue','Wed','Thu','Fri','Sat'}); ylabel('誤差百分比統計'); title('按工作日劃分的預測誤差統計明細表');% 按月份 figure boxplot(errpct, datestr(testDates,'mmm')); ylabel('誤差百分比統計'); title('按月份劃分的預測誤差統計細目表');%% 制作每周圖表 %在測試集上每周建立預測負荷與實際負荷的對比。 generateCharts = true; if generateChartsstep = 168*2;for i = 0:step:length(testDates)-stepclf;fitPlot(testDates(i+1:i+step), [testY(i+1:i+step) forecastLoad(i+1:i+step)], err(i+1:i+step));title(sprintf('MAPE: %0.2f%%', mean(errpct(i+1:i+step))));snapnowend end2.2 結果?
??
?
?
2.3?回歸樹模型的進一步改進?
?
3 基于神經網絡的價格預測(Matlab代碼實現)?
?
?
?
4 完整Matlab代碼實現
總結
以上是生活随笔為你收集整理的【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery按钮和回车键绑定
- 下一篇: PHP实现24节气的计算方法