人工智能练习-一字棋问题

说明

本设计由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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值