24小时热门版块排行榜    

查看: 1429  |  回复: 6

aiaipuyu

新虫 (初入文坛)

[求助] 程序有误,各位看官驻足相助 已有1人参与

CODE:
% clc;
% clear all
data=load('burma14.txt');%eil51 Att48  burma14 st70 Oliver30 bayg29 ch150 ch130 pr226
cityCoor=[data(:,2) data(:,3)];%城市坐标矩阵*
nMax=500;                     %进化次数
indiNumber=20;                 %个体数目
Nc=10;                        %次数
n=size(cityCoor,1);            %城市数目*
cityDist=zeros(n,n);           %城市距离矩阵*
Gbest=zeros(1,nMax);      %各代的最优值*
for i=1:n
    for j=1:n
        if i~=j
            cityDist(i,j)=((cityCoor(i,1)-cityCoor(j,1))^2+...
                (cityCoor(i,2)-cityCoor(j,2))^2)^0.5;
        end
        cityDist(j,i)=cityDist(i,j);
    end
end
individual=zeros(indiNumber,n);
for i=1:indiNumber
    individual(i,:)=randperm(n); %初始化种群  
end
individual;d
indiFit=fitness(individual,cityCoor,cityDist);%计算种群适应度
[value,index]=min(indiFit);
Gbest=value;
deta=zeros(indiNumber,n);
tourGbest=individual(index,:);         %当前群体最优
%%
for K=1:nMax
          for i=1:indiNumber
           indiFit(i)=fitness(individual(i,:),cityCoor,cityDist);%计算种群适应度
           [value,index]=min(indiFit) ;
           Gbest(K)=value;
           tourGbest=individual(index,:);
          end  
%% 步长迭代
   for N=1:Nc
%         deta=randint(indiNumber,n);
        for i=1:indiNumber      
                r=sqrt(sum((individual(i,1)-individual(i,2)).^2));
                if (fitness(individual(i,1))>fitness(individual(i,2)))%计算种群适应度
                          gamma=1;betamin=0.2;beta0=1; beta=(beta0-betamin)*exp(-gamma*r.^2)+betamin;
                         tmpf=0.5*(rand(1,d)-0.5).*n;
                      individual1(i,1)=individual(i,1).*(1-beta)+individual(i,2).*beta+tmpf
                end         
             individual1=DupCK(individual1,i,n);  %调用查重函数     
        end
   end
   %%

end
   %% 结果作图
   [Bm,Bma]=min(Gbest)
plot(1:nMax,Gbest,'--c')
title('寻优过程')
xlabel('迭代次数')
ylabel('适应度值')
hold on



function indiFit=fitness(individual,cityCoor,cityDist)
%% 该函数用于计算个体适应度值
%x           input     个体
%cityCoor    input     城市坐标
%cityDist    input     城市距离
%indiFit     output    个体适应度值

m=size(individual,1);
n=size(cityCoor,1);
indiFit=zeros(m,1);
for i=1:m
    for j=1:n-1
    indiFit(i)=indiFit(i)+cityDist(individual(i,j),individual(i,j+1));
    end
    indiFit(i)=indiFit(i)+cityDist(individual(i,1),individual(i,n));
end

%%  查看重复的和遗漏的
function individual=DupCK(individual,i,n)

ww=tabulate(individual(i,:));
%统计数值型数组中各元素出现的频率,频数
[w,t,m]=unique(individual(i,:));
%t体现w中元素在原向量中的位置,m体现原向量在w中的位置
            ll=sort(t);
            x=tabulate(ll);

            l1=length(ww(:,2));
              if l1<n
                  for k=l1+1:n
                      ww(k,1)=k;
                      ww(k,2)=0;
                   end
              end

            l=length(x(:,2));
              if l<n
                  for k=l+1:n
                      x(k,1)=k;
                      x(k,2)=0;
                   end
              end
    r=0;r1=0;

        for s=1:n
                if x(s,2)==0
                    r=r+1;
                   y(r)=x(s,1) ;      %在这些位置上重复的
                end
                if ww(s,2)==0
                    r1=r1+1;
                    w1(r1)=ww(s,1);   %没有出现的城市,即漏掉的城市编号
                end
        end
       for r2=1:r1
           individual(i,y(r2))=w1(r2);  
       end

输入:14个城市
输出:14个城市的最短距离
程序运行中 (fitness(individual(i,1))>fitness(individual(i,2)))有误,不知道如何改,求助各位

[ Last edited by jjdg on 2017-7-3 at 18:20 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)


jjdg: 金币+1, 感谢参与 2017-07-03 18:21:02
没有输入数据,没法运行程序的
可以提供一个简单的样本
2楼2017-07-03 06:18:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

aiaipuyu

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by somomo91 at 2017-07-03 06:18:57
没有输入数据,没法运行程序的
可以提供一个简单的样本

1 16.47 96.10
2 16.47 94.44  
3 20.09 92.54  
4 22.39 93.37  
5 25.23 97.24  
6 22.00 96.05  
7 20.47 97.02  
8 17.20 96.29  
9 16.30 97.38
10 14.05 98.12  
11 16.53 97.38  
12 21.52 95.59  
13 19.41 97.13  
14 20.09 94.55
先谢过
3楼2017-07-03 08:14:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

aiaipuyu

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by somomo91 at 2017-07-03 06:18:57
没有输入数据,没法运行程序的
可以提供一个简单的样本

CODE:
for N=1:Nc
         deta=randint(indiNumber,n,[-a,a]);
        for i=1:indiNumber  
            for j=1:indiNumber
                r=sqrt(sum((individual(i,:)-individual(j,:)).^2));
                if (indiFit(individual(i,:))<indiFit(individual(j,:)))%计算种群适应度
                          gamma=1;betamin=0.2;beta0=1; beta=(beta0-betamin)*exp(-gamma*r.^2)+betamin;
                         tmpf=0.5*(rand(1,d)-0.5).*n;
                      individual(i,:)=individual(i,:).*(1-beta)+individual(j,:).*beta+deta;
                      while individual(i,:)>n
                          individual(i,:)=individual(i,:)-n;
                   end
                    while individual(i,:)<1
                          individual(i,:)=individual1(i,:)+n;
                    end  
                end         
               individual=DupCK(individual,i,n);  %调用查重函数
            end
        end
%    end

我把迭代步长那块修改了一下,可是程序只进行了一次迭代,我想问问这是为什么呀?
4楼2017-07-03 10:06:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

TX灌水员

木虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2017-07-06 16:19:15
fitness函数的声明有三个参数,但是调用只传入了一个
5楼2017-07-04 14:46:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
6楼2017-07-06 06:41:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

miaomiao83

至尊木虫 (知名作家)

总裁办公室


jjdg: 金币+1, 感谢参与 2017-07-06 22:52:03
这个得上机器跑,断点加调试技巧,绝对轻松搞定

发自小木虫IOS客户端
战略应该定位到一成不变的东西上。
7楼2017-07-06 22:50:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 aiaipuyu 的主题更新
信息提示
请填处理意见