Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мдп печать сддать.docx
Скачиваний:
2
Добавлен:
07.09.2019
Размер:
349.89 Кб
Скачать

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;