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

总体而言,具有较好的效果。可以根据用户的输入反馈出最优的娱乐活动。

代码还可以简化。如有更好的方法,或者有错误的地方,欢迎留言批评指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤鸟的歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值