Академический Документы
Профессиональный Документы
Культура Документы
КАФЕДРА № 43
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Профессор Ю.А. Скобцов
должность, уч. степень, звание подпись, дата инициалы, фамилия
РАБОТУ ВЫПОЛНИЛА
Санкт-Петербург 2019
1. Индивидуальное задание по варианту
%Матрица растояний
for i = 1:CitySize
for t = 1:CitySize
Rast(i,t) = sqrt((City(i,2)-City(t,2))^2+(City(i,3)-City(t,3))^2);
end
end
%Начальная популяция
for i=1:N
pop(i,:)=randperm(CitySize);
end
%% Цикл
for w=1:n
%Сортировка популяции по целевой функции
[cost, pop] = Cost(pop, Rast);
%Кроссинговер
for i=1:2:(N-1)
if rand<=Pc
[child1,child2]=Cross(pr(i,:),pr(i+1,:)); % создаем пару потомков
pop = [pop; child1; child2];% рассширяем популяцию добавлением потомков
end
end
%Мутация
pop=Mutation(pop,Pm);
end
%Выделим лучшего
WIN=pop(1,:);
R_WIN=cost(1); % Длина маршрута у лучшего
for i=1:(size(ANS,1)-1)
f(i)=Rast(ANS(i),ANS(i+1)); % расстояния между соседними городами в маршруте
end
R_ANS=sum(f)+Rast(ANS(1),ANS(end)); % длина маршрута у ответа
figure (3)
hold on
plot(City([ANS;ANS(1)], 2),City([ANS;ANS(1)], 3),'-o','LineWidth',3,'Color',[0 0 1])
plot(City([WIN,WIN(1)], 2),City([WIN,WIN(1)], 3),'--o','LineWidth',2,'Color',[1 0 0])
%% Функции
end
%Функция кроссинговера
function [child1,child2]=Cross(pr1, pr2)
child1=zeros(1,size(pr1,2));
child2=zeros(1,size(pr1,2));
r=randi([2,size(pr1,2)-1],1,2); % две точки кроссинговера
lo=min(r); % левая точка
up=max(r); % правая точка
% lo=2;
% up=7;
%обмен серединками
child1(lo:up)= pr2(lo:up);
child2(lo:up)= pr1(lo:up);
end
%Функиця мутации
function pop=Mutation(pop,Pm)
for i=1:size(pop,1)
if rand<=Pm % проверка вероятности мутации
end
end
end
end