How can I create a random matrix without repeating any value between column

I get two columns with the same value when I generate the matrix. For example,
1 1 3 2 4
4 4 1 4 3
2 2 2 3 1
3 3 4 1 2
I want to get something like the 10 combinations from the 24 combinations(4 factorial).
1 1 3 2 4 1 2 4 3 2
2 4 1 4 3 3 3 1 2 1
3 2 2 3 1 4 1 3 4 3
4 3 4 1 2 2 4 2 1 4
I need the matrix to form the chromosomes for GA.

댓글 수: 3

It is not at all clear to me how you obtained the second of those matrices from the first. Some of the columns (like columns 2, 3, 4, and 5) are copies of columns from the first matrix, but some (like columns 1 and 6) are not. What rules specifically do you need to follow in generating that second matrix from the first?
As Steven mentions, it's not clear what is the pattern you are following to obtain the output.
From a cursory glance, it can be observed from the output that the 1st column is sorted and the 6th column corresponds to the indices of the sorted values of the 1st column. But the it's not clear what's the logic behind the columns 7-10.
Sorry for not making my question clear. There are no special rules to follow. So long as the matrix generates non-repeated combinations from the 24 combinations, then it is good enough. It does not need to be exactly like the second matrix. The second matrix is just an example.

댓글을 달려면 로그인하십시오.

 채택된 답변

David Goodmanson
David Goodmanson 2023년 5월 24일
편집: David Goodmanson 2023년 5월 24일
Hello Wan,
all columns contain 1 through 4, and all columns are different
a = perms(1:4) % all 24 permutations of 1:4
ind = randperm(24);
ind = ind(1:10) % an index of 10 random integers from 1 to 24, no repeats
b = a(ind,:)' % 10 random choices from the rows of a,
% then transpose to get 4x10 matrix

댓글 수: 1

Wow, it works very well. Thanks a lot, David. I really appreciate it and there are explanations.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

You can use reshape(), randperm(), numel(), size() fcns to create ramdom swaps of the already existing matrix elements:
A1 = [1 1 3 2 4;
4 4 1 4 3;
2 2 2 3 1;
3 3 4 1 2];
A_new = [reshape(A1(randperm(numel(A1))), size(A1)), reshape(A1(randperm(numel(A1))), size(A1))]
A_new = 4×10
3 4 4 3 2 2 2 3 4 2 1 3 4 2 1 1 1 2 1 4 3 4 4 1 2 1 4 4 3 3 1 3 2 1 2 3 3 4 1 2

댓글 수: 2

@Sulaymon Eshkabilov, every column must contain all the numbers [1 2 3 4]. The output from your code does not.
Ya, I need every column to contain 1,2,3,4 like what @Dyuman Joshi mentions.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기

제품

질문:

Wan
2023년 5월 23일

댓글:

Wan
2023년 5월 28일

Community Treasure Hunt

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

Start Hunting!

Translated by