matlab运行一直正忙,MATLAB运行时一直处于忙的状态,是不是程序存在死循环
本帖最后由 安然娜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运行时一直处于忙的状态,是不是程序存在死循环相关推荐
- matlab编程积分正无穷,matlab中,对1/(x+10^-6i)积分,积分区间是负无穷到正无穷,怎么积?...
满意答案 沁心静暖 2016.05.19 采纳率:50% 等级:12 已帮助:4049人 积分很简单,所以先手算出积分,再正负无穷带进去让matlab算 -------------------- ...
- windows 2003 server开始-运行输入IP访问局域网机子时提示“无任何网络提供程序接受指定的网络路径”
按下面的方法设置了: 1.开始-运行-services.msc- 找到"server"服务,属性启动类型-"自动"-确定,然后在左边点"启动" ...
- matlab坐标画正六边形,Matlab任意正六边形随机撒点实现
任意正六边形随机撒点 是通信仿真里经常用到的,无奈网上资料很少,参照http://www.ilovematlab.cn/thread-136761-1-1.html,我又苦思敏想里一下午,这个问题才得 ...
- matlab中绘制正四边形,matlab画任意三维四边形
用matlab画三维图 mesh函数是用来画三维网格图的,但是要用meshgrid来产生格网矩阵!有时我们要在图上用标点来显示某些数值的重要性,就要用到mesh和plot3两个函数.>> ...
- matlab命令窗口正忙,matlab一直显示正忙怎么解决-解决matlab一直显示busy的方法 - 河东软件园...
matlab作为一款专业的数学软件,在使用的时候经常会运行大量的数据以及代码,因此难免会出现运行卡死的情况.最近有位朋友在使用这个软件的是运行了一个代码文件,但是由于这段代码中有错误的命令,因此该文件 ...
- matlab生成exe-在没有安装matlab的电脑上运行matlab生成的exe
在没有安装matlab的电脑上运行matlab生成的exe 本文介绍如何将matlab生成exe,并将该exe在没有安装matlab的电脑上运行,与以前的博文相似地,不说废话,直接干货. 1.编写函数 ...
- PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序
PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 [含风电.光伏.微型燃机.储能蓄电池.燃料电池] 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源 ...
- matlab保存之前的函数,MATLAB中定义函数并保存后怎么运行啊?
你这个2113要求有点奇怪.5261tif格式的数据就4102应该是整型的1653,你为什么一专定要把浮点数写到tif文件呢属?一个浮点数占8个字节,而一个uint8只占一个字节,从图像数据来说,rg ...
- 无图形启动matlab,MATLAB可以不启动图形界面运行
仅作记录用途 matlab -nodesktop -nosplash 或者 matlab -nodisplay 或者 matlab -nojvm -nosplash matlab程序也可以在命令行里直 ...
最新文章
- Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
- 二 DeepinV20版本安装
- EWSD常用状态解释
- 笔记-中项案例题-2017年上-计算题
- ORB-SLAM2源代码中ROS部分ros-mono源代码中subscribe /camera/image_raw topic谁发布publish的
- k8s minikube在wsl中通过nodeport来访问
- 《大型网站技术架构:核心原理与案例分析》笔记05
- plsql(轻量版)-存储函数存储过程
- Source Insight 创建工程(linux-2.6.22.6内核源码)
- 你不知道的JavaScript-0
- 4项探索+4项实践,带你了解华为云视觉预训练研发技术
- 函数扩展(函数拦截)
- OPNET网络仿真分析-1.1.3、OPNET Modeler
- 容器技术学习系列文章总目录
- 财务数据分析工作总结汇报PPT模板
- jdk环境变量的配置
- 《淘宝网店页面设计、布局、配色、装修一本通(第2版)(全彩)》
- HMM和DNN语音合成必备基础知识:音素和拼音的基础知识及工具初学
- php kb转换成字节,将kB换算为MB (千字节换算为兆字节)
- ubuntu 装机必备软件