前言
未经允许,不得擅自使用转载和复制。
如果需要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));