📄 hopfield_net.m
字号:
% =========== define input pattern ============
m=12;
n=10;
num1= [-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 1 1 1 -1 -1 -1 -1;
-1 -1 1 1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 1 1 1 1 1 1 -1 -1];
num2= [-1 -1 -1 -1 1 1 1 -1 -1 -1;
-1 -1 1 1 1 1 1 1 -1 -1;
-1 1 1 -1 -1 -1 -1 1 1 -1;
-1 1 -1 -1 -1 -1 -1 -1 1 1;
1 -1 -1 -1 -1 -1 -1 1 1 -1;
-1 -1 -1 -1 -1 -1 1 1 -1 -1;
-1 -1 -1 -1 -1 1 1 -1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 -1 1 1 -1 -1 -1 -1 -1;
-1 -1 1 1 -1 -1 -1 -1 -1 -1;
-1 1 1 -1 -1 -1 -1 -1 -1 -1;
1 1 1 1 1 1 1 1 1 1];
num3= [-1 1 1 1 1 1 1 1 1 -1;
-1 -1 -1 -1 -1 -1 -1 -1 1 -1;
-1 -1 -1 -1 -1 -1 1 1 -1 -1;
-1 -1 -1 -1 1 1 -1 -1 -1 -1;
-1 -1 1 1 -1 -1 -1 -1 -1 -1;
1 1 1 1 1 1 1 1 -1 -1;
-1 -1 -1 -1 -1 -1 -1 -1 1 -1;
-1 -1 -1 -1 -1 -1 -1 -1 -1 1;
-1 -1 -1 -1 -1 -1 -1 -1 1 -1;
1 -1 -1 -1 -1 -1 -1 -1 1 -1;
-1 1 -1 -1 -1 -1 -1 1 -1 -1;
-1 -1 1 1 1 1 1 -1 -1 -1];
num4= [-1 -1 -1 -1 -1 1 1 1 -1 -1;
-1 -1 -1 -1 1 1 1 1 -1 -1;
-1 -1 -1 1 1 -1 1 1 -1 -1;
-1 -1 -1 1 1 -1 1 1 -1 -1;
-1 -1 1 1 -1 -1 1 1 -1 -1;
-1 -1 1 1 -1 -1 1 1 -1 -1;
-1 1 1 -1 -1 -1 1 1 -1 -1;
1 1 -1 -1 -1 -1 1 1 -1 -1;
1 1 1 1 1 1 1 1 1 1;
1 1 1 1 1 1 1 1 1 1;
-1 -1 -1 -1 -1 -1 1 1 -1 -1;
-1 -1 -1 -1 -1 -1 1 1 -1 -1];
num_tab = cat(3,num1,num2,num3,num4);
vector_tab=[];
for i=1:size(num_tab,3)
% pattern_plot(num_tab(:,:,i),m,n,i);
vector_tab=cat(1,vector_tab,matrix2vector(num_tab(:,:,i)));
end
% ============= design hopfield net ================
net_unit=m*n; % number of unit in net must be more than 4*7 = 28
w=zeros(m*n,m*n);
for i=1:size(vector_tab,1)
vector=vector_tab(i,:);
w=w+vector'*vector;
end
for i=1:m*n
w(i,i)=0;
end
%============== noisy ==========================
noise=input('please input noise volumn(between 0 and 1):\n');
if ~(noise<1 & noise>0)
error('noise exceeds the limitation! ');
end
noise=round(noise*m*n);
vector_tab = noisy(vector_tab,noise);
% ============= association process ================
for i=1:size(vector_tab,1)
vector=vector_tab(i,:);
flag=1;
sum=0;
while (flag==1 & sum<5000)
sum=sum+1;
flag=0;
for j=1:size(vector,2)
a=sign(w(j,:)*vector');
if a~=vector(j)
flag=1;
vector(j)=a;
end
end
end
result=(reshape(vector,n,m))';
pattern_plot(result,m,n,i+size(vector_tab,1));
end
% ==================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -