Во-первых, вам не нужен цикл для генерации случайной строки из 0 и 1.Попробуйте вместо этого:
individual = randi([0 1],[attrCount,1]);
Во-вторых, опять же, вам не нужен цикл для создания вашей population
ячейки.Попробуйте вместо этого:
population=arrayfun(@(x)randi([0 1],[attrCount,1]),1:individualsCount,'UniformOutput',false)
Возможно, вам придется изменить порядок строк и столбцов в зависимости от того, как вы хотите его настроить.
Теперь перейдем к вашему вопросу,Вы должны понимать, что эти распределения являются стохастическими и приближаются к действительно равномерному распределению 50% 1 и 50% 0 только тогда, когда размер выборки приближается к бесконечности.Если ваш attrCount
достаточно мал, не удивляйтесь, если вы не найдете чисел, близких к 50% для каждого.Это не значит, что это неправильно.Это то, что есть.
Вот как выглядит распределение 1 для случайного двоичного вектора различных размеров выборки.Вы можете видеть, что для малых размеров выборки существует высокая изменчивость (и это ни в коем случае не является точной ... она будет отличаться каждый раз), тогда как, когда вы начнете приближаться к большим размерам выборки от 1000 и выше, ваше распределение 1 с получаетвсе ближе и ближе к 50%, в конечном итоге равным 50% на бесконечности.
![enter image description here](https://i.stack.imgur.com/eoGw8.png)