利用MATLAB設計一款系統,要求如下:
一、對於這樣一款諮詢系統,最主要的就是將文字數據變爲數字數據。採用BP神經網絡實現,首先要得到訓練樣本:
(1)輸入分析:
% (1)最近進行休閒活動的情況 1爲有 0爲無
% (2)天氣情況 1爲好 0爲不好
% (3)空閒時間長短 1爲長 0爲短
% (4)冰箱裏是否還有食物 1爲有 0爲無
% (5) 冰箱食物多少 1爲多 0爲少
% (6)個人活動還是集體活動 1爲個人 0爲集體
% (7)最近是否有很好的演出 1爲有 0爲無
% (8)是否需要補充睡眠 1爲是 0爲否
(2)特徵分析:
% 活動1 集體活動(訪友、聚餐、郊遊)
% 活動2 鍛鍊身體
% 活動3 購物(超市、商場,書店)
% 活動4 文化活動(電影、話劇、讀書)
% 活動5 居家活動
% 活動6 在家休息
通過對輸入的8種情況組合,使用W1 = (ff2n(8))';
命令構成256種組合,即爲輸入樣本。
二、通過“人”的思維模式進行編程,得到每一種選擇特徵值:
部分代碼如下:
for i = 1:1:256
if B(i) == 1
if W1(4,i) == 0 %如果冰箱無食物
if W1(5,i) == 0 %如果冰箱食物少(爲避免用戶選擇了“無食物”、“食物少”、“食物多”的前後矛盾現象,這種現象均推薦購物)
C(3,i) = 1;%則推薦購物
if W1(8,i) == 1 %如果需要補充睡眠
C(6,i) = 1;%則推薦在家休息
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
end
end
else%如果不需要補充睡眠
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
C(2,i) = 1;%則推薦鍛鍊身體
end
end
end
else %如果冰箱食物多
C(3,i) = 1;%則推薦購物
if W1(8,i) == 1 %如果需要補充睡眠
C(6,i) = 1;%則推薦在家休息
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
end
end
else%如果不需要補充睡眠
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
C(2,i) = 1;%則推薦鍛鍊身體
end
end
end
end
else %如果冰箱有食物
if W1(5,i) == 0 %如果冰箱食物少
C(3,i) = 1;%則推薦購物
if W1(8,i) == 1 %如果需要補充睡眠
C(6,i) = 1;%則推薦在家休息
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
end
end
else%如果不需要補充睡眠
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
C(2,i) = 1;%則推薦鍛鍊身體
end
end
end
else %如果冰箱食物多
if W1(8,i) == 1 %如果需要補充睡眠
C(6,i) = 1;%則推薦在家休息
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
end
end
else%如果不需要補充睡眠
if W1(3,i) == 1 %如果空閒時間長
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(1,i) = 1;%再推薦集體活動
C(2,i) = 1;%則推薦鍛鍊身體
C(4,i) = 1;%則推薦文化活動
end
else % 如果空閒時間短
if W1(6,i) == 1 %如果更願意參加個人活動
C(5,i) = 1;%則推荐居家活動
else %如果更願意參加集體活動
C(4,i) = 1;%則推薦文化活動
C(2,i) = 1;%則推薦鍛鍊身體
end
end
end
end
end
end
end
每一種選擇的特徵值如下:
三、再將樣本數據通過BP神經網絡工具箱進行訓練:
% BP神經網路
P = W1;
T = C;
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);%對P、T歸一化處理
s = [12,12,6];%影藏層、輸出層數目
net=newff(minmax(P),s,{'tansig','tansig','purelin'},'trainlm');
net.trainParam.epochs = 40000;%訓練次數
net.trainParam.goal = 0.0000001;%訓練精度
net.trainParam.lr=0.3;
net=train(net,p1,t1);%神經網絡訓練
a1 = [0
1
1
1
0
0
0
0];
a2 = [1
1
1
0
1
1
1
1];
a1=premnmx(a1);%將a1進行歸一化處理
a2=premnmx(a2);%將a1進行歸一化處理
A1 = sim(net,a1);%得到預測(檢驗)數據輸出值
A2 = sim(net,a2);%得到預測(檢驗)數據輸出值
A3 = postmnmx(A1,mint,maxt)
A4 = postmnmx(A2,mint,maxt)
其中a1、a2爲檢驗數據,通過BP神經網絡。結果如下:
a1的輸出爲:
1
1
1
0.99999
-2.0317e-06
2.9628e-06
a2的輸出爲:
-5.0165e-06
2.0241e-05
1
-6.6915e-06
0.99998
0.99998
總體而言,具有較好的效果。可以根據用戶的輸入反饋出最優的娛樂活動。
代碼還可以簡化。如有更好的方法,或者有錯誤的地方,歡迎留言批評指正!