查看: 133|回复: 6|关注: 0
打印 上一主题 下一主题

快乐扑克稳赚: [已解决] 粒子群分类器最优适应度不变化

[复制链接]

新手

7 麦片

财富积分


快乐扑克3如何跟对子 www.vqxik.tw 050


7

主题

18

帖子

0

最佳答案
跳转到指定楼层
1#
clc;
clear all;
format long;
tic
data=[1720.8 1639.79 2068.74
       1877.93 1860.96 1975.3
       867.81 2334.68 2535.1
       460.69 3274.77 2172.99
       2374.98 3346.98 975.31
       2271.89 3482.97 946.7
       1783.64 1597.99 2261.31
       198.83 3250.45 2445.08
       1494.63 2072.59 2550.51
       1597.03 1921.52 2126.76
       1598.93 1921.08 1623.33
       1243.13 1814.07 3441.07
       2336.31 2640.26 1599.63
       354 3300.12 2373.61
       2144.47 2501.62 591.51
       426.31 3105.29 2057.8
       1507.13 1556.89 1954.51
       343.07 3271.72 2036.94
       2201.94 3196.22 935.53
       2232.43 3077.87 1298.87
       1580.1 1752.07 2463.04
       1962.4 1594.97 1835.95
       1495.18 1957.44 3498.02
       1125.17 1594.39 2937.73
       24.22 3447.31 2145.01
       1269.07 1910.72 2701.97
       1802.07 1725.81 1966.35
       1817.36 1926.4 2328.79
       1860.45 1782.88 1875.13];
%% 参数设定
N=70;
c1=1.6;c2=1.6;
wmax=0.9;wmin=0.4;
M=1600;
K=4;
[S D]=size(data);
%% 初始化
for i=1:N
    clmat(i,:)=randperm(S);
end
clmat(clmat>K)=fix(rand*K+1);
fitt=inf*ones(1,N);
fg=inf;
fljg=clmat(1,:);
v=rand(N,K*D);
x=zeros(N,K*D);
y=x;
pg=x(1,:);
cen=zeros(K,D);
fitt2=fitt;
%% 循环优化开始
for t=1:M
for i=1:N
       ww=zeros(S,K);
        for ii=1:S
            ww(ii.clmat(i,ii))=1;
        end
        ccc=[];tmp=0;
        for j=1:K
            sumcs=sum(ww(:,j)*ones(1,D).*data);
            countcs=sum(ww(:,j));
            if countcs==0
                cen(j,:)=zeros(1,D);
            else
                cen(j,:)=sumcs/countcs;
            end
            ccc=[ccc,cen(j,:)];
            aa=find(ww(:,j)==1);
            if length(aa)~=0
                for k=1:length(aa)
                    tmp=tmp+(sum((data(aa(k),:)-cen(j,:)).^2));
                end
            end
        end
        x(i,:)=ccc;
        fitt2(i)=tmp;
end
for i=1:N
    if fitt2(i)<fitt(i)
        fitt(i)=fitt2(i);
        y(i,:)=x(i,:);
        if fitt2(i)<fg
        pg=x(i,:);
        fg=fitt2(i);
        fljg=clmat(i,:);
        end
    end
end
bfit(t)=fg;
w=wmax-t*(wmax-wmin)/M
for i=1:N
     v(i,:)=w* v(i,:)+c1*rand(1,K*D).*(y(i,:)-x(i,:))+c2*rand(1,K*D).*(pg-x(i,:));
     x(i,:)=x(i,:)+v(i,:);
       for k=1:k
            cen(k,:)=x((k-1)*D+1:K*D);
            for j=1:S
                tmp1=zeros(1,K);
                for k=1:K
                    tmp1(k)=sum((data(j,:)-cen(k,:)).^2);
                end
                [tmp2 clmat(i,j)]=min(tmp1);
            end
      end
end
%% 循环结束
    M
    fljg
    fg
    figure(1)
    plot(bfit);
    xlabel('种群迭代次数');
    ylabel('适应度');
    title('适应度曲线');
    cen
    toc
按照书上程序做的,不知道为什么fg的结果一直没变,而且matlab提示for t=1:M 没有结束

MATLAB 基础讨论
版块优秀回答者

中级

620 麦片

财富积分


5001500


0

主题

278

帖子

47

最佳答案
  • 关注者: 7
2#
发表于 2019-11-22 08:59:30 | 只看该作者 |此回复为最佳答案
matlab提示for t=1:M 没有结束是没有与for对应的end结束语

新手

7 麦片

财富积分


050


7

主题

18

帖子

0

最佳答案
3#
 楼主| 发表于 2019-11-22 09:11:46 | 只看该作者
20141303 发表于 2019-11-22 08:59
matlab提示for t=1:M 没有结束是没有与for对应的end结束语

是的,但是这个end要加在哪里呢?加了几个后面程序运行出现:结构体内容引用自非结构体数组对象。

MATLAB 基础讨论
版块优秀回答者

中级

620 麦片

财富积分


5001500


0

主题

278

帖子

47

最佳答案
  • 关注者: 7
4#
发表于 2019-11-22 09:14:05 | 只看该作者
敞篷师兄 发表于 2019-11-22 09:11
是的,但是这个end要加在哪里呢?加了几个后面程序运行出现:结构体内容引用自非结构体数组对象。 ...

在你后面的程序中似乎没有用到变量t,不知这个循环意义是什么

新手

7 麦片

财富积分


050


7

主题

18

帖子

0

最佳答案
5#
 楼主| 发表于 2019-11-22 09:22:47 | 只看该作者
20141303 发表于 2019-11-22 09:14
在你后面的程序中似乎没有用到变量t,不知这个循环意义是什么

删了这句后面又提示:结构体内容引用自非结构体数组对象。

MATLAB 基础讨论
版块优秀回答者

中级

620 麦片

财富积分


5001500


0

主题

278

帖子

47

最佳答案
  • 关注者: 7
6#
发表于 2019-11-22 09:24:25 | 只看该作者
ww(ii.clmat(i,ii))=1;不符合MATLAB语言规则

新手

7 麦片

财富积分


050


7

主题

18

帖子

0

最佳答案
7#
 楼主| 发表于 2019-11-22 10:57:11 | 只看该作者
20141303 发表于 2019-11-22 09:24
ww(ii.clmat(i,ii))=1;不符合MATLAB语言规则

谢谢,问题已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 快乐扑克3如何跟对子 返回列表