说明
本设计由matlab实现,模拟极大极小搜索过程,实现一字棋的第三步走法。
代码
主程序:
clear
clc
MAX=cell(1);
tail=0;
A=[0 0 -1;0 1 0;0 0 0];
%A=[0 0 0;0 0 0;0 0 0];
%A=[0 -1 0;0 1 0;0 0 0];
[MAX,tail]=expand(MAX,tail,A);
MIN=cell(1);
tail2=0;
for i=1:tail
[MIN,tail2]=expand2(MIN,tail2,MAX{1,i}.S,i);
tail2=0;
end
for i=1:tail
MAX{1,i}.f=getMin(MIN,i);
end
max=MAX{1,1}.f;
result=1;
for i=2:tail
if MAX{1,i}.f>max
result=i;
max=MAX{1,i}.f;
end
end
MAX{1,result}.S
expend.m
function [MAX,tail] = expand(MAX,tail,A)
n=tail;
for i=1:3
for j=1:3
if A(i,j)==0
T=A;
T(i,j)=1;
tail=tail+1;
MAX{1,tail}.S=T;
end
end
end
expend2.m
function [MIN,tail2]=expand2(MIN,tail2,A,l)
for i=1:3
for j=1:3
if A(i,j)==0
T=A;
T(i,j)=-1;
tail2=tail2+1;
MIN{l,tail2}.S=T;
MIN{l,tail2}.f=f(T);
end
end
end
f.m
function n=f(A)
n=0;
for i=1:3
if A(i,1)~=-1&&A(i,2)~=-1&&A(i,3)~=-1
n=n+1;
end
if A(1,i)~=-1&&A(2,i)~=-1&&A(3,i)~=-1
n=n+1;
end
if A(i,1)~=1&&A(i,2)~=1&&A(i,3)~=1
n=n-1;
end
if A(1,i)~=1&&A(2,i)~=1&&A(3,i)~=1
n=n-1;
end
end
if A(1,1)~=-1&&A(2,2)~=-1&&A(3,3)~=-1
n=n+1;
end
if A(1,3)~=-1&&A(2,2)~=-1&&A(3,1)~=-1
n=n+1;
end
if A(1,1)~=1&&A(2,2)~=1&&A(3,3)~=1
n=n-1;
end
if A(1,3)~=1&&A(2,2)~=1&&A(3,1)~=1
n=n-1;
end
getMin.m
function min=getMin(MIN,i)
min=MIN{i,1}.f;
for j=2:6
if MIN{i,j}.f<min
min=MIN{i,j}.f;
end
end