MATLAB設計一款休閒活動諮詢系統

利用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

總體而言,具有較好的效果。可以根據用戶的輸入反饋出最優的娛樂活動。

代碼還可以簡化。如有更好的方法,或者有錯誤的地方,歡迎留言批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章