本帖最后由 安然娜124 于 2016-4-26 21:37 编辑

疑惑:(1)该程序点击运行后一直处于忙的状态,好久都没反应,不知道是程序中for语句太多导致的,还是语句存在死循环?

(2)如果程序可以运行,不管出没出结果,是不是都代表所编的程序没有问题?

(3)麻烦大家帮忙解答一下,我是因为毕业论文需要,刚学习的matlab,所以存在很多疑惑,需要大家的帮忙,谢谢大家!

[code]

%%----------------主程序------------------------------------

clc

clear

dbstop if error

load data

params.distance_matrix=distance_matrix;%距离矩阵

params.demand=demand;%需求

params.time_window=time_window;%时间窗

params.load=4;%载荷

params.gwnumber=15;%工位数量

params.trucknumber=5;%车辆数量

%%初始化遗传算法参数

maxgen=150;%进化代数

popsize=50;%种群规模

pcross=0.8;%交叉概率选择

pmutation=0.1;%变异概率选择

individuals=struct('fitness',zeros(popsize,1),'chrom',[]);%将种群信息定义为一个结构体

%%初始化种群计算适应度

%初始化种群

for i=1;popsize

%随机产生一个种群

individuals.chrom(i,:)=Code(params);

%计算适应度

individuals.fitness(i)=fun(individuals,chrom(i,:),params,1);%染色体适应度

end

%找最好的染色体

[bestfitness bestindex]=min(individuals.fitness);

bestchrom=individuals.chrom(bestindex,:);%最好的染色体

avgfitness=sum(individuals.fitness)/popsie;%染色体的平均适应度

%记录每一代进化中最好的适应度与平均适应度

trace=[avgfitness bestfitness];

%%迭代寻优

%进化开始

for i=1:maxgen

%选择

individuals=slect(individuals,popsize);

%交叉

individuals.chrom=cross(pcross,individuals.chrom,params);

%变异

individuals.chrom=mutation(pmutation,individuals.chrom,params);

%计算适应度

for j=1:popsize

x=individuals.chrom;%解码

individuals.fitness(j)=fun(x,params,1);

end

%找到最小和最大适应度的染色体及他们在种群中的位置

[newbestfitness,newbestindex]=min(individuals.fitness);

[worestfitness,worestindex]=max(individuals.fitness);

%代替上一次进化中最好的染色体

if bestfitness>newbestfitness

bestfitness=newbestfitness;

bestchrom=individuals.chrom(newbestindex,:);

end

individuals.chrom(worestindex,:)=bestchrom;

individuals.fitness(worestindex,:)=bestfitness;

avgfitness=sum(individuals.fitness)/popsize;

trace=[trace;avgfitness bestfitness];%记录每一代进化中最好的适应度和平均适应度

end

%进化结束

%结果分析

[r c]=size(trace);

plot(trace(:,2),'r-');

hold on

plot(trace(:,1))

xlim([1 length(trace)])

legend('最优适应度值','平均适应度值')

grid on

title('适应度曲线','fontsize',12);

xlabel('进化代数','fontsize',12);

ylabel('适应度','fontsize',12);

disp('适应度变量');

x=bestchrom;

%窗口显示

disp([bestfitness x]);

%%----------------初始化------------------------------------

function ret = Code( params )

%%%该函数用于初始化个体

flag=0;

gwnumber=params.gwnumber;

trucknumber=params.trucknumber;

while flag==0

gw_range=randperm(gwnumber);

truck=[0 15];

while(length(truck)

temp=unidrnd(gwnumber);

if ~ismenmber(temp,truck);

truck=sort([temp truck]);

end

end

ret=[gw_range truck];

flag=test(params,ret);

end

%%----------------适应度------------------------------------

function [ fitness,time_all,fitness_value ] = fun( ret,params,mode )

%%%函数功能:计算该个体对应适应度值

%x      input 个体

%params input 问题相关函数

% fitness output 个体适应度值

%参数赋值

trucknumber=params.trucknumber;

gw_demand=params.demand;

distance_matrix=params.distance_matrix;

time_window=params.time_window;

%计算每辆车的距离和载荷

gw_range=ret(1:params.gwnumber);

vechile_range=ret(params.gwnumber+1:end);

vechile_dist=cell(trucknumber,1);

vechile_load=cell(trucknumber,1);

vechile_gw=cell(trucknumber,1);

for i=2:length(vechile_range)

if i==2

index=gw_range(1:vechile_range(i));

else

index=gw_range(vechile_range(i-1)+1:vechile_range(i));

end

vechile_gw{i-1}=index;

vechile_load{i-1}=gw_demand(index);

dist_index=[1 index+1];

distance=[];

for j=2:length(dist_index)

distance=[distance distance_matrix(dist_index(j-1),dist_index(j))];

end

vechile_dist{i-1}=distance;

end

%%计算时间

time_all=0;v=80;

for i=1:length( vechile_dist)

dist_temp= vechile_dist{i};

load_temp= vechile_load{i};

time_all=time_all+sum(dist_temp)/v;

end

%%计算适应度

fitness_value=0;

for i=1:length(vechile_dist)

distance=vechile_dist{i};

load= vechile_load{i};

time_gw=cumsum(distance);

gw=vechile_gw{i};

for j=1:length(gw)

time_window_a=time_window(gw(j),:);

time_temp=time_gw(j);

if time_temp

fitness_value=fitness_value*load(j)+1;

end

end

fitness_value=sum(fitness_value*(gw_demand)/sum(gw_demand));

if mode==1

fitness=time_all;

elseif mode==2

fitness=fitness_value;%只输出最适应度值

end

end

end

%%----------------选择------------------------------------

function ret = select( individuals,popsize )

%本函数对每一代种群中的染色体进行选择,以进行后面的交叉与变异

%individuals  input 种群信息

%popsize  input 种群规模

%ret  output 经过选择后的种群

fitness1=1/individuals.fitness;

sumfitness=sum(fitness1);

sumf=fitness1/sumfitness;

index=[];

for i=1:popsize %转popsize次转盘

pick=rand;

while pick==0

pick=rand;

end

for j=1:popsize

pick=pick-sumf(j);

if pick<0

index=[index j];

break; %寻找落入的区间,此次转轮盘选中了染色体i,注意,在转popsize次转盘的过程中,可能会重复选择某些染色体

end

end

end

individuals.chrom=individuals.chrom(index,:);

individuals.fitness=individuals.fitness(index);

ret=individuals;

%%----------------交叉------------------------------------

function ret =cross( pcross,chrom,params )

%本函数完成交叉操作

%pcross  input 交叉概率

%chrom   input 染色体的长度

gwnumber=params.gwnumber;

popsize=size(chrom,1);

for i=1:popsize

if rand

%交叉个体

temp=randperm(popsize);

index=temp(1:2);

chrom1=chrom(index(1),:);

chrom2=chrom(index(2),:);

gwrange1=chrom1(1:gwnumber);

gwrange2=chrom2(1:gwnumber);

vechile1=chrom1(gwnumber+1:end);

vechile2=chrom2(gwnumber+1:end);

end

end

end

ret=chrom;

%%----------------变异------------------------------------

function ret =Mutation( pmutation,chrom,params )

%本函数完成变异操作

%pmutation  input 变异概率

%chrom   input 染色体群

ret=chrom;

gwnumber=params.gwnumber;

popsize=size(chrom,1);

for i=1:popsize

if rand

index=unidrnd(popsize);

chrom1=chrom(index,:);

gwRange1=chrom1(1:gwnumber);

vechile1=chrom1(gwnumber+1:end);

end

end

end

%%----------------个体检验------------------------------------

function flag = test( params,ret )

%判断个体是否满足要求

point_demand=params.demand;

vechile_load=params.load;

point_range=ret(1:params.gwnumber);

vechile_range=ret(params.gwnumber+1:end);

flag=1;

for i=2:length(vechile_range)

if i==2

index=point_range(1:vechile_range(i));

else

index=point_range(vechile_range(i-1)+1:vechile_range(i));

end

if sum(point_demand(index))>vechile_load

flag=0;

break

end

end

if flag==1&&fun(ret,params,2)<=0.8

flag=0;

end

end

[\code]

matlab运行一直正忙,MATLAB运行时一直处于忙的状态,是不是程序存在死循环相关推荐

  1. matlab编程积分正无穷,matlab中,对1/(x+10^-6i)积分,积分区间是负无穷到正无穷,怎么积?...

    满意答案 沁心静暖 2016.05.19 采纳率:50%    等级:12 已帮助:4049人 积分很简单,所以先手算出积分,再正负无穷带进去让matlab算 -------------------- ...

  2. windows 2003 server开始-运行输入IP访问局域网机子时提示“无任何网络提供程序接受指定的网络路径”

    按下面的方法设置了: 1.开始-运行-services.msc- 找到"server"服务,属性启动类型-"自动"-确定,然后在左边点"启动" ...

  3. matlab坐标画正六边形,Matlab任意正六边形随机撒点实现

    任意正六边形随机撒点 是通信仿真里经常用到的,无奈网上资料很少,参照http://www.ilovematlab.cn/thread-136761-1-1.html,我又苦思敏想里一下午,这个问题才得 ...

  4. matlab中绘制正四边形,matlab画任意三维四边形

    用matlab画三维图 mesh函数是用来画三维网格图的,但是要用meshgrid来产生格网矩阵!有时我们要在图上用标点来显示某些数值的重要性,就要用到mesh和plot3两个函数.>>  ...

  5. matlab命令窗口正忙,matlab一直显示正忙怎么解决-解决matlab一直显示busy的方法 - 河东软件园...

    matlab作为一款专业的数学软件,在使用的时候经常会运行大量的数据以及代码,因此难免会出现运行卡死的情况.最近有位朋友在使用这个软件的是运行了一个代码文件,但是由于这段代码中有错误的命令,因此该文件 ...

  6. matlab生成exe-在没有安装matlab的电脑上运行matlab生成的exe

    在没有安装matlab的电脑上运行matlab生成的exe 本文介绍如何将matlab生成exe,并将该exe在没有安装matlab的电脑上运行,与以前的博文相似地,不说废话,直接干货. 1.编写函数 ...

  7. PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序

    PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 [含风电.光伏.微型燃机.储能蓄电池.燃料电池] 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源 ...

  8. matlab保存之前的函数,MATLAB中定义函数并保存后怎么运行啊?

    你这个2113要求有点奇怪.5261tif格式的数据就4102应该是整型的1653,你为什么一专定要把浮点数写到tif文件呢属?一个浮点数占8个字节,而一个uint8只占一个字节,从图像数据来说,rg ...

  9. 无图形启动matlab,MATLAB可以不启动图形界面运行

    仅作记录用途 matlab -nodesktop -nosplash 或者 matlab -nodisplay 或者 matlab -nojvm -nosplash matlab程序也可以在命令行里直 ...

最新文章

  1. Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
  2. 二 DeepinV20版本安装
  3. EWSD常用状态解释
  4. 笔记-中项案例题-2017年上-计算题
  5. ORB-SLAM2源代码中ROS部分ros-mono源代码中subscribe /camera/image_raw topic谁发布publish的
  6. k8s minikube在wsl中通过nodeport来访问
  7. 《大型网站技术架构:核心原理与案例分析》笔记05
  8. plsql(轻量版)-存储函数存储过程
  9. Source Insight 创建工程(linux-2.6.22.6内核源码)
  10. 你不知道的JavaScript-0
  11. 4项探索+4项实践,带你了解华为云视觉预训练研发技术
  12. 函数扩展(函数拦截)
  13. OPNET网络仿真分析-1.1.3、OPNET Modeler
  14. 容器技术学习系列文章总目录
  15. 财务数据分析工作总结汇报PPT模板
  16. jdk环境变量的配置
  17. 《淘宝网店页面设计、布局、配色、装修一本通(第2版)(全彩)》
  18. HMM和DNN语音合成必备基础知识:音素和拼音的基础知识及工具初学
  19. php kb转换成字节,将kB换算为MB (千字节换算为兆字节)
  20. ubuntu 装机必备软件

热门文章

  1. 面向节能的神经网络流量预测探讨
  2. 分类评价指标、目标检测评价指标(AUC,IOU,mAP等)
  3. 计算机在音乐教学中的运用,浅谈电脑音乐技术在音乐教学中的运用
  4. 拍到一些SeXy BaBy
  5. 网传的Spring大漏洞
  6. MPEG-2标准简介
  7. 九、T100销售管理之出货管理
  8. java+redission排行榜实现
  9. 闪游浏览器0.45发布下载:超多细节改进,更稳更强
  10. HF-Net(三)基于NetVLAD及superpoint构建的sfm场景模型的查询图像位姿解算