error in running loop : the resultant is giving an empty array

1 view (last 30 days)
summyia qamar
summyia qamar on 20 Jan 2017
Edited: summyia qamar on 20 Jan 2017
here is complete code.can anybody please check this
tic;
no_of_machines=7;
no_of_cells=3;
No_of_Parts = 6;
no_of_workers=4;
demand=[600 550 500 520 620 500];
M1=[1 0 0 0;0 0 1 0];% AVAILABLE workers FOR Machine 1
M2=[0 0 1 0;0 0 0 1];% AVAILABLE workers FOR Machine 2
M3=[0 1 0 0;0 0 0 1];% //
M4=[1 0 0 0;0 0 1 0];%//
M5=[0 1 0 0;0 0 0 1];%//
M6=[0 0 1 0;0 0 0 1];%//
M7=[0 1 0 0;0 0 0 1];
%operation times of parts
OP1=[10 0 0 10 0 20 15;10 13 0 0 12 0 15];
OP2=[0 10 10 15 0 0 20;11 0 13 0 17 10 0];
OP3=[10 0 0 12 11 0 0;0 11 18 0 0 0 17];
OP4=[10 0 0 0 19 0 14;0 14 0 17 0 10 0];
OP5=[18 13 0 0 0 15 0;10 12 0 0 10 0 11];
OP6=[0 10 0 0 0 10 15;12 11 0 13 0 15 0];
labor_cost=[2.5; 2.7; 3.5; 4];%salary of each labor
% GENERATING ALL POSSIBLE COMBINATIONS OF 12 ROUTES
OP = [OP1;OP2;OP3;OP4;OP5;OP6];
z = [size(OP1,1) size(OP2,1) size(OP3,1) size(OP4,1) size(OP5,1) size(OP6,1)];
c = [0 cumsum(z(1:end-1))];
a = allcomb(1:z(1),1:z(2),1:z(3),1:z(4),1:z(5),1:z(6));
n = size(a,1);
all_comb_of_OProutes = cell(1,n);
for i=1:n
all_comb_of_OProutes{i} = OP(c+a(i,:),:);
end
celltimes=@(all_comb_of_OProutes) sum(bsxfun(@times,all_comb_of_OProutes,demand'),1);
total_timereq_for_all_machines=cellfun(celltimes,all_comb_of_OProutes,'UniformOutput',false);
%//STEP 2:GENERATING ALL CELLS COMBINATIONS FOR MACHINES
CELL = zeros(no_of_cells^no_of_machines,no_of_machines);
t = 0;
for l = 0:(no_of_cells^no_of_machines)-1 %k=(2187-1=2186)
s = dec2base(l,no_of_cells,no_of_machines);
if length(unique(s))==no_of_cells
t = t+1;
CELL(t,:) = s-'0'+1;
end
end
CELL = CELL(1:t,:);
combination_array=num2cell(CELL,2);% all possible combinations
%//GENERATING MACHINE CELL MATRICES FROM ABOVE 1806 COMBINATIONS
[r1,c1]=size(combination_array);
for m=1:r1
R=1:numel(combination_array{m});
Z = zeros(R(end),max(combination_array{m}));
Z(sub2ind(size(Z),R,combination_array{m})) = 1;
allCells_array{m}=Z; % machine cell matrix array of all combinations
end
count=0;
for n=1:numel(allCells_array)
for i=1:numel(all_comb_of_OProutes)
Time_of_machine_inCells{n,i} = bsxfun(@times, allCells_array{n}, total_timereq_for_all_machines{i}');
end
end
% GENERATING ALL POSSIBLE COMBINATIONS workers and machines
M= [M1;M2;M3;M4;M5;M6;M7];
zz = [size(M1,1) size(M2,1) size(M3,1) size(M4,1) size(M5,1) size(M6,1) size(M7,1)];
cc = [0 cumsum(zz(1:end-1))];
aa = allcomb(1:zz(1),1:zz(2),1:zz(3),1:zz(4),1:zz(5),1:zz(6),1:zz(7));
nn = size(aa,1);
all_comb_of_workers = cell(1,nn);
for j=1:nn
all_comb_of_workers{j} = M(cc+aa(j,:),:);
end
count=0;
for k=numel(Time_of_machine_inCells)
for j=1:numel(all_comb_of_workers)
cell_worker= Time_of_machine_inCells{k}'*all_comb_of_workers{j};
count=count+1
total{k,j}=cell_worker;
end
end
toc;
problem is in the last loop of total{k,j}.when I run the code the counts should be 14794752 since k=115584 and j=128 but after running code the counts are only 128 and resultant is all 0x0 double in <115584x128>cell.. please some body copy paste this n check if their systems are also giving this ? a file used in this code is also given here

Accepted Answer

Geoff Hayes
Geoff Hayes on 20 Jan 2017
summyia - I think that the problem is with the line
for k=numel(Time_of_machine_inCells)
k is being initialized to a single value and so you are not iterating over anything. You probably want to use
for k=1:numel(Time_of_machine_inCells)
instead. Note that this will take a lot (!) longer to run. :)
  1 Comment
summyia qamar
summyia qamar on 20 Jan 2017
yes or sure..but I have no other way to shorten this code and thanks you were right.what if it says not enough memory?what should I do?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!