人工智能课实践-一字棋问题

来源:互联网 发布:淘宝助手是什么 编辑:程序博客网 时间:2024/06/05 08:25

说明

本设计由matlab实现,模拟极大极小搜索过程,实现一字棋的第三步走法。

代码

主程序:

clearclcMAX=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;endfor i=1:tail    MAX{1,i}.f=getMin(MIN,i);endmax=MAX{1,1}.f;result=1;for i=2:tail    if MAX{1,i}.f>max        result=i;        max=MAX{1,i}.f;    endendMAX{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    endend

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;    endendif A(1,1)~=-1&&A(2,2)~=-1&&A(3,3)~=-1    n=n+1;endif A(1,3)~=-1&&A(2,2)~=-1&&A(3,1)~=-1    n=n+1;endif A(1,1)~=1&&A(2,2)~=1&&A(3,3)~=1    n=n-1;endif 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;    endend
原创粉丝点击