- •Факультет эа кафедра сау
- •Тема: Разработка программного комплекса, реализующего генетический алгоритм определения параметров регулятора электрогидравлического привода
- •Содержание:
- •2.1 Работа генетического алгоритма……………………………………………..5
- •3.1 Структура автономного электрогидравлического привода………………12
- •1. Описание инструментария Genetic Algorithm Toolbox
- •1.2 Оптимизация функций
- •2.Перечень параметров генетического алгоритма и их влияние на качество работы
- •2.1 Работа генетического алгоритма:
- •2.2 Исходное семейство
- •2.3 Создание следующего поколения
- •2.4 Кроссоверные дочерние значения
- •2.5 Мутационные дочерние значения
- •2.6 Условия останова алгоритма
- •3.Описание модели электрогидравлического привода
- •3.1 Структура автономного электрогидравлического привода
- •4. Алгоритм программы для определения параметров адаптивного регулятора
- •5.Выводы:
- •6.Список литературы:
5.Выводы:
В качестве результата работы, написанной программы мы получаем два коэффициента, полученные с помощью генетического алгоритма, которые обеспечивают корректную работу электрогидравлического привода. Генетический алгоритм довольно долго подбирает значения, поэтому мы с помощью функций MatLab распараллеливаем весь процесс на два компьютера. В результате генетический алгоритм справляется с задачей намного быстрее и удобнее. При обычной работе генетического алгоритма необходимо было выставлять все настройки для корректной работы, что было неудобно. В настоящей программе все настройки уже прописаны и необходимо только запустить ее.
6.Список литературы:
1.Д.Рутковская, М. Пилиньский, Л. Рутковский. Нейронные сети, генетические алгоритмы и нечеткие системы.// Пер. с польского. И.Д. Рудинского. - М.: Горячая линия-Телеком,2004.-452с.
2.Гладков Л.А., В.В.Курейчик и др. Методы генетического поиска. // Под ред. В.М. Курейчика. Таганрог: Изд-во ТРТУ,2002. – 122 с.
3. 4.Батищев Д.И. Генетические алгоритмы решения экстремальных задач, Учебное пособие, Воронеж, 1995.
4. http://matlab.exponenta.ru/genalg/index.php
Приложение 1
Программа в которой непосредственно происходит выполнение параллельной задачи
function y = fcnvectorizer(pop,fun,numObj,SerialUserFcn)
%FCNVECTORIZER is a utility function used for scalar fitness functions.
% Copyright 2003-2008 The MathWorks, Inc.
% $Revision: 1.6.4.6 $ $Date: 2008/10/31 06:10:28 $
jm=findResource('scheduler','type','jobmanager','Name','JM');
pjob=jm.createParallelJob;
set(pjob,'MinimumNumberOfWorkers',2);
set(pjob,'MaximumNumberOfWorkers',2);
set(pjob,'FileDependencies',{'par_xromos.m'});
try
popSize = size(pop,1);
% Use for if SerialUserFcn is 'true'; the if-and-else part should
% be exactly same other than parfor-for syntax difference.
if SerialUserFcn
obj=createTask(pjob,'par_xromos',1,{popSize,pop,fun,numObj});
submit(pjob);
waitForState(pjob);
results=getAllOutputArguments(pjob)
y=[results{1,1}; results{2,1}]
% y = par_xromos(popSize,pop,fun,numObj);
% disp('!');
else
parfor (i = 1:popSize)
y(i,:) = feval(fun,(pop(i,:)));
end
end
catch userFcn_ME
if iscell(pop) % if it is a custom PopulationType
y = fun(pop);
else
gads_ME = MException('gads:fcnvectorizer:fitnessEvalution', ...
'Failure in user-supplied fitness function evaluation. GA cannot continue.');
userFcn_ME = addCause(userFcn_ME,gads_ME);
rethrow(userFcn_ME)
end
end
Приложение 2
Параллельная программа для параллельного моделирования параметров регулятора
function y = par_xromos(popSize,pop,fun,numObj)
y = zeros((popSize)/2,numObj);
switch labindex
case 1
for i=1:(popSize/2)
y(i,:) = feval(@ga1,(pop(i,:)));
end
% y=feval(fun,2,3);
case 2
for i=1:(popSize/2)
y(i,:) = feval(@ga1,(pop((popSize/2)+i,:)));
end
% y=feval(fun,1,3);
end
function e=ga1(K)
Wp=0.078;
Bp=3.98e-4;
Cfrtp=1.1;
KxS=650;
KxL=1200;
Xg=0.001;
S=14.95;
Ymax=6;
Vc=15.6;
G=0.1;
T_1=1e-2;
str1=['[' num2str((K(1))) ']'];
str2=['[' num2str((K(2))) ']'];
open('C:\Program Files\MATLAB\R2009b\alis\EGSP_23_01_11.mdl');
set_param('EGSP_23_01_11/Subsystem2/R2','Gain', str1),
set_param('EGSP_23_01_11/Subsystem2/k','Gain', str2),
set_param('EGSP_23_01_11/Step3','After', num2str(G)),
set_param('EGSP_23_01_11/Subsystem/Cilindr/Constant','Value',num2str(Ymax));
set_param('EGSP_23_01_11/Subsystem/Cilindr/Constant3','Value',num2str(Vc));
set_param('EGSP_23_01_11/Subsystem/Cilindr/Gain1','Gain', num2str(S));
set_param('EGSP_23_01_11/Subsystem/Cilindr/Gain2','Gain', num2str(S));
set_param('EGSP_23_01_11/Subsystem/Cilindr/Gain3','Gain', num2str(S));
set_param('EGSP_23_01_11/Subsystem/Cilindr/Gain6','Gain', num2str(S));
set_param('EGSP_23_01_11/Subsystem/Klapan reversa/G1/Constant','Value',num2str(Xg));
set_param('EGSP_23_01_11/Subsystem/Klapan reversa/G1/Gain','Gain',num2str(KxL));
set_param('EGSP_23_01_11/Subsystem/Klapan reversa/G1/Gain1','Gain',num2str(KxS))
set_param('EGSP_23_01_11/Subsystem/Nasos/Constant2','Value',num2str(Cfrtp));
set_param('EGSP_23_01_11/Subsystem/Nasos/Gain2','Gain', num2str(Wp));
set_param('EGSP_23_01_11/Subsystem/Nasos/Gain3','Gain', num2str(Wp));
set_param('EGSP_23_01_11/Subsystem/Nasos/Gain4','Gain', num2str(Bp));
str3=['[' num2str(T_1^2) ' ' num2str(2*T_1*0.5) ' ' '1' ']'];
set_param('EGSP_23_01_11/Subsystem/UG - 133/Transfer Fcn','Denominator',str3)
sim('EGSP_23_01_11');
e=max(abs(Um(1:2000)-Y(1: 2000)));
% function y=summ(a,b)
% y=a+b;