MATLAB Answers

how to solve this error ? Error using horzcat Dimensions of matrices being concatenated are not consistent.

59 views (last 30 days)
I found a code about implementation of genetic algorithm in TSP. it's running but suddenly this error appears :
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in elitism (line 15)
chrom = [fitness oldchrom;fitness2 newchrom];
i look for information about horzcat, it means that the array that i wanna combine dont have the same length?
can someone show me how to handle and solve this error. thank you so much!
this is code in elitism.m
% -------------------------------------------------------------------------
% Procedure of Elitism
% -------------------------------------------------------------------------
function chrom = elitism (fitness, newchrom, oldchrom, matrix_cost, nind, endNode, link_matrix)
% function name : elitism
% function input : 1. The fitness of old chromosomes
% 2. The new chromosomes
% 3. The previous / old chromosomes
% 4. The costs
% 5. The number of population
% 6. The destination node
% 7. The adjacency matrix of relationship between nodes
% function output : The chromosomes for the new generation
fitness2 = fitnessV(totalCost(newchrom,matrix_cost,nind,endNode,link_matrix));
chrom = [fitness oldchrom;fitness2 newchrom];
temp = sortrows(chrom);
chrom = temp((size(temp,1)-nind+1):size(temp,1),2:size(temp,2));
end
  2 Comments
Khoirunnisya Zawawi
Khoirunnisya Zawawi on 21 Oct 2016
in the first generation, the chromosome size is 10, so the fitness should be 10 too. for fitness2 i think it's combiination from oldchrom and newchrom.
can you show me how to check the size of those matrices? i tried size('matrix name') but it didnt work. thank you

Sign in to comment.

Accepted Answer

KSSV
KSSV on 20 Oct 2016
You are trying to merge matrices of different order in
chrom = [fitness oldchrom;fitness2 newchrom];
You have to check the dimensions of those matrices.
  5 Comments

Sign in to comment.

More Answers (2)

Chaya N
Chaya N on 23 Oct 2016
Edited: Chaya N on 23 Oct 2016
Hello Khoirunnisya, could you please run the following code exactly as it is here and paste the output from your command window?
% -------------------------------------------------------------------------
% Procedure of Elitism
% -------------------------------------------------------------------------
function chrom = elitism (fitness, newchrom, oldchrom, matrix_cost, nind, endNode, link_matrix)
% function name : elitism
% function input : 1. The fitness of old chromosomes
% 2. The new chromosomes
% 3. The previous / old chromosomes
% 4. The costs
% 5. The number of population
% 6. The destination node
% 7. The adjacency matrix of relationship between nodes
% function output : The chromosomes for the new generation
fitness
newchrom
oldchrom
fitness2 = fitnessV(totalCost(newchrom,matrix_cost,nind,endNode,link_matrix))
% chrom = [fitness oldchrom;fitness2 newchrom];
% temp = sortrows(chrom);
% chrom = temp((size(temp,1)-nind+1):size(temp,1),2:size(temp,2));
chrom = 2;
end
Your command window should display the values of the variables fitness, newchrom, oldchrom and fitness2. Do not worry about the outputs from this function yet, I just want an idea about some of your inputs.
  4 Comments
Chaya N
Chaya N on 26 Oct 2016
That error doesn't make sense. There are no structures being passed as input into totalCost.
The input 'routes' seems to be your array newchrom, which according to your previously provided information, is a 20x10 array.
Please clear out your workspace, re-load all necessary variables and run elitism.m again.

Sign in to comment.


Walter Roberson
Walter Roberson on 24 Oct 2016
Change
chrom = [fitness oldchrom;fitness2 newchrom];
to
chrom = [repmat(fitness, size(oldchrom,1), 1), oldchrom; repmat(fitness2, size(newchrom,1), 1), newchrom];
  4 Comments
Walter Roberson
Walter Roberson on 25 Jun 2018
That code does not appear anywhere in this Question, so we have to guess about the sizes.
We can guess that your poss_reg is a row vector when the code expects it to be a column vector.
Chances are there are better was of doing whatever test you are implementing.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by