智能系统作业(三)

本文介绍了如何使用MATLAB设计一个反馈网络,针对目标平衡点T=[1-1;-11]进行训练,并通过随机初始向量测试收敛情况。重点讨论了垂直平分线上的特殊点收敛行为。代码展示了网络构建、训练过程及关键结果分析。
摘要由CSDN通过智能技术生成

前言

未经允许,不得擅自使用转载和复制。
如果需要matlab生成的数据文件可以联系博主,这些数据文件都可以通过以下的代码自动生成。
感谢老铁们对今样的支持,2021一路有你,2022我们继续加油!你的肯定是我最大的动力

1.作业题目

试设计一个反馈网络存储下列目标平衡点:T = [ 1 -1; -1 1];
并用6组任意随机初始列矢量,包括一组在目标平衡点连线的垂直平分线上的一点作为输入矢量对所设计的网络的平衡点进行测试,观察3次循环的每一次的输出结果。给出最后收敛到各自平衡点(或不稳定的平衡点)结果的次数。

2.答案

已知目标平衡点为T = [ 1 -1; -1 1];如下图所示为程序代码。通过matlab画出一个二维坐标系,使用newhop()函数创建一个霍普菲尔德网络通过循环来对两行一列的坐标x,y进行赋值并通过sim函数来进行训练,当record数组中的某一个列向量=[1;-1]或是[-1;1]时就输出对应训练的次数,最后再设置一组在垂直平分线上的点进行测试。最后通过plot函数将record数列画在坐标轴上。

以下是对应的hopfield网络状态空间图,如图所示几乎所有的点都收敛于目标平衡点,但是目标平衡点连线的垂直平分线上的一点[1;1]只收敛到[0;0]点就停止移动了。但是理论上在进行多次训练后该点可能产生振荡从而收敛到任意一个平衡点。
在这里插入图片描述
观察每一组对应的收敛情况,其中每一组收敛到目标平衡点的次数为[4 36 7 9 11]
初始随机生成的输入矢量为

P=[ 0.3925  0.0508  0.7223  -0.2131  0.4825  1.0000-0.8124   0.0607 -0.0303   0.3429  0.0401  1.0000]

循环一次后输出的状态为

A=[ 0.6531  0.0067  0.5144  -0.3085  0.3153   0.2231-0.7468   0.0182  -0.3600  0.3374  -0.1987  0.2231]

循环两次后输出的状态为

A2=[ 0.8028  -0.0039  0.5252  -0.3720  0.3116   0.0498-0.8237  0.0094  -0.4907   0.3785  -0.2856  0.0498]

循环三次后输出的状态为

A3=[ 0.9425  -0.0071  0.5940  -0.4352  0.3498   0.0111-0.9472  0.0084  -0.5863   0.4367  -0.3440  0.0111]

3.代码

clear;
T = [1 -1;-1 1];                                            %存储目标平衡点
plot(T(1,:),T(2,:),'rp');
axis([-1.1 1.1 -1.1 1.1]);
title('Hopfield网络状态空间');
xlabel('a(1)');ylabel('a(2)');

net = newhop(T);                                       	 %建立霍普菲尔德网络
W = net.lw{1,1};                                   %读取网络返回的权值与偏差
b = net.b{1};
color='rgbmy';

for i=1:5
    num = 0;
    a={rands(2,1)};
    [y,Pf,Af]=sim(net,{1 50},{},a);
    record = [cell2mat(a) cell2mat(y)]
    for i =1:50
        if record(:,i) == [1;-1] 
            num=i;
            break;
        elseif record(:,i) == [-1;1]
            num=i;
            break;
        end
    end
    num = num - 1
    start=cell2mat(a);
    hold on;
    plot(start(1,1),start(2,1),'kx',record(1,:),record(2,:),color(rem(i,5)+1));
end
num = 0;
    a={[1;1]};
    [y,Pf,Af]=sim(net,{1 50},{},a);
    record = [cell2mat(a) cell2mat(y)]
    for i =1:50
        if record(:,i) == [1;-1] 
            num=i;
            break;
        elseif record(:,i) == [-1;1]
            num=i;
            break;
        end
    end
    num = num - 1
    start=cell2mat(a);
    hold on;
    plot(start(1,1),start(2,1),'kx',record(1,:),record(2,:),color(rem(i,5)+1));


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值