Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПРАКТИКА

.docx
Скачиваний:
16
Добавлен:
23.02.2015
Размер:
402.59 Кб
Скачать

Задание 1. КЛАСТЕРИЗАЦИЯ С ИСПОЛЬЗОВАНИЕМ СЕТЕЙ КОХОНЕНА

Оценивая рынок недвижимости, мной было выделено два основных параметра: цена квартиры и ее площадь. Поэтому НС будет иметь два входа. В зависимости от параметров квартиры разделятся на два класса, следовательно, размерность выходного слоя равняется двум.

Исходные данные обучающей выборки имеют вид:

Стоимость

Площадь

Стоимость

Площадь

37000

33

65000

60

32500

33

14800

23

44200

40

31500

30

32000

32

25800

30

31500

30

45200

33

38000

36

27000

28

26800

33

45000

39

69400

66

33000

31

39500

35

26000

33

37000

40

40500

40

42800

41

40000

45

15800

28

32000

32

37000

33

34500

34

31500

33

19700

36

33800

32

35000

34

Нормализуем входные векторы следующим образом: . Получим:

Норм стоим.

Норм площ.

Норм стоим.

Норм площ.

0,1814

0,1638

0,3186

0,2979

0,1593

0,1638

0,0725

0,1142

0,2167

0,1986

0,1544

0,1490

0,1569

0,1589

0,1265

0,1490

0,1544

0,1490

0,2216

0,1638

0,1863

0,1787

0,1323

0,1390

0,1314

0,1638

0,2206

0,1936

0,3402

0,3277

0,1618

0,1539

0,1936

0,1738

0,1274

0,1638

0,1814

0,1986

0,1985

0,1986

0,2098

0,2036

0,1961

0,2234

0,0774

0,1390

0,1569

0,1589

0,1814

0,1638

0,1691

0,1688

0,1544

0,1638

0,0966

0,1787

0,1657

0,1589

0,1716

0,1688

Алгоритм формирования, обучения и использования НС в среде MatLab.

% Kohonen

%Задаем входной вектор. Его размерность равна двум, так как при

%исследовании рынка недвижимости мной были выделены два параметры для

%кластеризации квартир - цена и площадь.

p=[0.1813 0.1593 0.2166 0.1568 0.1544 0.1862 0.1313 0.3401 0.1936 0.1813 0.2097 0.0774 0.1813 0.1544 0.1656 0.318613211088768 0.072545777294058 0.154404863835326 0.126464936093696 0.22155872524942 0.132347026144565 0.220578376907609 0.161757476398913 0.127445284435507 0.198520539216848 0.196069668362319 0.156855734689855 0.1691100889625 0.0965643116684421 0.171560959817029;

0.163846888991432 0.163846888991432 0.198602289686584 0.158881831749267 0.148951717264938 0.178742060717926 0.163846888991432 0.327693777982864 0.173777003475761 0.198602289686584 0.203567346928749 0.139021602780609 0.163846888991432 0.163846888991432 0.158881831749267 0.297903434529876 0.114196316569786 0.148951717264938 0.148951717264938 0.163846888991432 0.139021602780609 0.193637232444419 0.153916774507103 0.163846888991432 0.198602289686584 0.223427575897407 0.158881831749267 0.168811946233596 0.178742060717926 0.168811946233596];

%Задаем слой Кохонена

n=newc(minmax(p), 2);

%Обучаем сеть

n=train(n,p);

%и имитируем ее работу

L=vec2ind(sim(n,p))

k=sim(n,p);

%Строим график

plotpv(p,k);

hold on

%Тестируем сеть на 10 произвольных точках

A=[0.25; 0.33];

t=sim(n,A);

K=vec2ind(sim(n,A))

B=[0.10; 0.023];

t2=sim(n,B);

W=vec2ind(sim(n,B))

C=[0.112; 0.172];

t3=sim(n,C);

M=vec2ind(sim(n,C))

D=[0.04; 0.579];

t4=sim(n,D);

N=vec2ind(sim(n,D))

E=[0.20; 0.123];

t5=sim(n,E);

O=vec2ind(sim(n,E))

F=[0.298; 0.192];

t6=sim(n,F);

P=vec2ind(sim(n,F))

G=[0.289; 0.100];

t7=sim(n,G);

Q=vec2ind(sim(n,G))

H=[0.189; 0.112];

t8=sim(n,O8);

R=vec2ind(sim(n,O8))

I=[0.201; 0.107];

t9=sim(n,I);

S=vec2ind(sim(n,I))

J=[0.133; 0.167];

t10=sim(n,J);

U=vec2ind(sim(n,J))

%Выписываем веса(ядра классов) и смещения между слоями

n.iw{1}

n.b{1}

%Сеть построена, обучена, протестирована и готова к использованию

Изобразим графически НС с ее параметрами.

5,4162

Х1

Х2

С1

С2

0,1358 У1

0,2109 0,1533

У2

0,2028

5,4571

Ядра классов являются весовыми коэффициентами нейронов. Каждый нейрон Кохонена запоминает одно ядро класса, и отвечает за определение объектов в своем классе, т.е. величина выхода нейрона тем больше, чем ближе объект к данному ядру класса. В данном случае величина весов составляют 5,4162 и 5,4571 соответственно, что говорит о достаточной близости объектов к ядру.

Задание 2. МОДЕЛИРОВАНИЕ СМО В ПАКЕТЕ ARENA

Построенная по условию задачи модель в пакете Arena имеет следующий вид.

Описание модели

Create задаем:

Batch size = 1 (поступление заявок)

First creation=0 (стартовое время)

Interval=EXPO(10) (интервал между заявками)

Branch вероятностные требования к модели:

With 0.4,– заявки 1-го типа;

With 0.6,– заявки 2-го типа.

Макс. Количество ветвей= 2.

Assign атрибуты:

Obsl_timе=UNIF(2,6), Control_time = TRIA(2,4,6) (1типа); Obsl_timе= UNIF(1.5,4.5), Control_time = UNIF(1.5,4.5) (2 тип), Obsl_timе – время обслуживания заявки, Control_timeвремя технического контроля.

detali, Value=1 – заявки 1 типа, detali,Value =2 – заявки 2 типа.

Branch условие чистки сверлильного станка (If MOD(kol_brak,20).EQ.0 – после накопления 20 плохих деталей станок подвергается чистке). Else станок продолжает работу, детали идут в очередь - Queue с параметром Lathe_Q.

If во 2-м блоке Branch - чистка, которая осуществляется - Alter-Delay-Alter.

Alter - остановка stanok, мощность=нулю.

Delay – чистка, 20 минут.

2-м блок Alter станок запускается, мощн=един., отправляем станок на обслуживание поступающих заявок в Queue с параметром Lathe_Q.

Queue задана очередь Lathe_Q, где накапливается очередь, пока станок не станет доступным. Площадка перед станком вмещает не более 5-ти деталей. Если детали вмещаются на площадке, то они - в Seize для их дальнейшего обслуживания. В противном случае – отказ, и в блок Count с идентификатором счетчика kol_otkaz, равный единице, Dispose (уход заявок, получивших отказ).

Seize (захват ресурса) параметра - stanok и его допустимое количество равно 1 станку.

Delay - обслуживание заявки с помощью атрибута Proc_time.

Release освободили один ресурс stanok.

Queue задаем очередь Lathe_control, накапливаются детали, ожидающие контроля.

Технический контроль

Seize параметр модуля - rabotnik, который проводит контроль один.

Delay описываем время контроля станка, атрибут time_control.

Release - освободили один ресурс rabotnik.

Tally - подсчет статистики по среднему времени контроля в системе time_in_system_control, Value: INTERVAL(time_control_tally), time_control_tally – атрибут, описанный в элементе Attributes, и указываем в блоке Seize, параметр - rabotnik, в поле - time_control_tally.

Branch - смоделировано вероятностное условие работы станка:

With 0.1 - 10% деталей дефектны;

With 0.9 - 90% деталей качественные.

Count, счетчик - kol_brak

Dispose, выводит брак из системы.

Branch условие:

If detali.EQ.1, деталь 1 типа, подсчет в Count, где задан счетчик detali1, равный единице.

If detali.EQ.2, деталь 2 типа, подсчет в Count, где задан detali2.

Max Number of Branches = 2.

Dispose смоделирован уход требований из системы.

Элементы

Attributes – задание атрибута модели detali, Obsl_timе, Control_time, time_control_tally.

Resources – ресурсы stanok, rabochij. Stanok используется по своей мощности (Capacity = 1, так как станок один), rabochij существует определенное расписание в элементе Schedules.

Counters – счетчики detalil, detali2, kol_brak, kol_otkaz.

Replicate – условие прогона – 1440 минут (24 часа).

Queues – инициализация очередей Lathe_Q, Lathe_control.

Tallies – идентификатор для счетного блока в системе time_in_system_control.

Dstats – использование системных переменных для подсчета статистики NQ(Lathe_Q), NQ(Lathe_control) и NR(stanok), NR(rabochij).

Schedules – элемент, используемый для изменения мощности ресурса.

Задание 3. ИСПОЛЬЗОВАНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ ДЛЯ РЕШЕНИЯ ЗАДАЧИ КОММИВОЯЖЕРА

Решение задачи о коммивояжере сводится к нахождению такого пути, который приведет к минимальным денежным затратам или имеет минимальную длину. Решение задачи было найдено в программе MatLab с использованием генетических алгоритмов.

%Задаем количество городов

cities = 10;

%Выписываем их координаты

locations =[ 44.56 34.06;

44.40 34.23;

44.45 33.51;

45.42 34.23;

45.12 33.21;

45.20 36.28;

44.36 33.32;

45.02 35.22;

44.29 34.09;

44.51 34.58];

%Строим график по исходным координатам

plot(locations(:,1),locations(:,2),'bo');

%Подписываем точки

text(44.56,34.06,'Simf')

text(44.40,34.23,'Alush')

text( 44.45, 33.51,'Bakh')

text(45.42, 34.23,'Dzhan')

text(45.12, 33.21,'Evpat')

text(45.20, 36.28,'Kerch')

text(44.36, 33.32,'Sevast')

text(45.02, 35.22,'Feodosia')

text(44.29, 34.09,'Jal')

text(44.51, 34.58,'Sud');

%Задаем формулу расчета расстояния между двумя городами

distances = zeros(cities);

for count1=1:cities,

for count2=1:count1,

x1 = locations(count1,1);

y1 = locations(count1,2);

x2 = locations(count2,1);

y2 = locations(count2,2);

distances(count1,count2)=sqrt((x1-x2)^2+(y1-y2)^2);

distances(count2,count1)=distances(count1,count2);

end;

end;

%Вводим генетические алгоритмы: создаем новое поколение, применив кроссовер и мутацию

type create_permutations.m

type crossover_permutation.m

type mutate_permutation.m

%Вводим дополнительную функцию коммивояжера, которая рассчитает оптимальную длину пути

type traveling_salesman_fitness.m

%Вводим новую функцию, которая поможет захватить информацию о расстояниях между городами

%distances defined earlier

FitnessFcn = @(x) traveling_salesman_fitness(x,distances);

%Новый график будет визуализировать решение задачи

type traveling_salesman_plot.m

%Oбъединим графики в один

%locations defined earlier

my_plot = @(options) traveling_salesman_plot(options);

options = gaoptimset('PopulationType', 'custom','PopInitRange', ...

[1;cities]);

options = gaoptimset(options,'CreationFcn',@create_permutations, ...

'CrossoverFcn',@crossover_permutation, ...

'MutationFcn',@mutate_permutation, ...

'Generations',500,'PopulationSize',60, ...

'StallGenLimit',200,'Vectorized','on');

%Выводим необходимую для нас информацию

numberOfVariables = cities;

[x,fval,reason,output] = ga(FitnessFcn,numberOfVariables,options)

x = [1x10 double]

fval = 7.3741

reason = 1

output =

problemtype: 'unconstrained'

rngstate: [1x1 struct]

generations: 201

funccount: 12120

message: [1x86 char]

График