请问In an assignment A(I) = B,
小弟是初学者刚开始使用MATLAB
不知该问题要怎样解决呢
"In an assignmentA(I) = B, the number of elements in B and I must be the same."clear all;close all;clc
job_num = 20;% 工件数目
p_max = 100;% p的最大值
w_max = 20; % w的最大值
a = -0.45; % 学习效应
v_AccTemp=0;% v使用电脑新的累增器数值
w_AccTemp=0;% w使用电脑新的累增器数值
for y =1:3
series = randperm(p_max); % 产生一组序列介于1~p_max
p = series(1:job_num) % p =序列(第1笔到最末笔)
cnt = job_num;% cnt计数器
for k =1:ceil(job_num/w_max)%ceil:计算大于指定数的最小整数
series = randperm(w_max)%产生一组序列介于1~w_max
if(cnt>w_max)%工件数目大于w_max
w(1+(k-1)*w_max:k*w_max) = series;
else
w(1+(k-1)*w_max:job_num) = series(1:cnt);
end
cnt = cnt-w_max;
end
end
p
w
%p = p';
%w = w';
%p = ;
%w = ;
%p = ;
%w = ;
%----------------------------------WSPT------------------------------------
wspt = p./w;
= sort(wspt);
sum = 0;
for i =1:job_num
for j = 1:i
tmp = 1;
for k = j+1:i
tmp = tmp*(1+(job_num-1)*k^a);
end
z(j)=j^a*tmp;
sum = sum +w(sort_ind(i))*p(sort_ind(j))*z(j);
end
end
wspt_result = sum
%-----------------------------Optimal--------------------------------------
n_1 = prod(1:job_num);
row = n_1;
col = job_num;
allorder_K = zeros(1,job_num-1);
period = n_1/1000;
min_result = 100000000;
total =0;
cnt = 0;
tic;
for allorder_i=1:n_1;
allorder_flag=zeros(1,job_num);
allorder_P=zeros(1,job_num);
for allorder_j=1:job_num-1
position=job_num-allorder_K(allorder_i);
allorder_j=job_num;
while(allorder_j>=position)
if (allorder_flag(allorder_j)==1)
position=position-1;
end
allorder_j=allorder_j-1;
end
allorder_P(position)=job_num+1-allorder_i;
allorder_flag(position)=1;
end
for allorder_i=1:job_num
if(allorder_flag(allorder_i)==0)
allorder_P(allorder_i);
break;
end
end
%--------以下更新K---------------
for allorder_i=1:job_num-1
allorder_K(job_num-allorder_i)=mod(allorder_K(job_num-allorder_i)+1,allorder_i+1);
if (allorder_K(job_num-allorder_i)~=0)
break;
end
end
%---------------------------------------------------------------------
for m=1:row
sort_ind = allorder_P;
sum = 0;
for j =1:job_num
tmp = tmp*(1+(job_num-1)*k^a);
end
z(j) = j^a * tmp;
sum = sum+w(sort_ind(i))*p(sort_ind(j))*z(j);
end
result(cnt,1)=sum;%记录每一次结果存成行向量
min_result = min(result)
if (sum > max_result)
max_result = sum;
end
if (sum < min_result)
min_result = sum;
end
total = total + sum;
end
if mod (cnt,period)==0
fprintf('第%09d迭代,花费:%f秒,进度:%f%% \n',cnt,toc,100*cnt/n_1);
drawnow;
tic;
end
%min_result = min(result)
v_min = v_result / min_result
v_total(y,1) = v_min
for i = 1:length (v_min)
v_SumTemp=v_min(i);
v_Acctemp=v_AccTemp+v_SumTemp;
end
wspt_min = wspt_result/min_result
for i =1:length(wspt_min)
w_SumTemp = wspt_min(i);
w_AccTemp = w_AccTemp+w_SumTemp;
end
w_total(y,1) = wspt_min
%------------------------final_result-------------------------------------
special_mean = v_AccTemp / 20
special_min = min(v_total)
special_max = max(v_total)
special_op = 1/job_num^a
general_mean = w_AccTemp / 20
general_min = min(w_total)
general__max = max(w_total)
general_op = ((1+job_num-1)^job_num)/job_num^a
[ 本帖最后由 ChaChing 于 2010-5-7 14:12 编辑 ] 养成好习惯, 请动手搜一下!
常见的程序出错问题整理 (eight), 13F
http://forum.vibunion.com/forum/thread-46001-1-1.html
页:
[1]