Материал: А27870 Алешичев СЕ Технологический анализ и моделирование

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3.3. Математическая обработка результатов экспертизы

Математическая обработка результатов опроса экспертов осуществляется с использованием специальной программы «EXPERT»,

которая вызывается из прил. 7 [http://de.ifmo.ru/--books/appendix_1-

10.zip]. Программа «EXPERT» оформлена в среде «QBasic» с использованием SUB-компоновок программных блоков и цветового выделения информации на экране. Запуск программы с использованием «ярлыка для QB».

В программу в режиме диалога вносятся результаты опроса экспертов из табл. 7.3 прил. 7 (рис. 12). Каждый из массивов сводной таблицы («а» и «b») обрабатывается по программе «EXPERT» отдельно. Обработка результатов экспертизы с помощью программы «EXPERT» позволяет применить методы математической статистики для снижения влияния существенных промахов («ошибок») оценок отдельных экспертов на результат и оценить согласованность мнений экспертов.

С алгоритмом обработки результатов экспертизы и математическим обеспечением этой задачи можно познакомиться по тексту программы, приведенной ниже, где имеются комментарии ко всем операциям преобразования информации.

41

Текст программы Expert

' Expert2* (с) 2016 * Университет ИТМО, каф. АБиТП

'-----------------------------------------------------

 

 

DECLARE SUB Init ()

'инициализация пеpеменных

DECLARE SUB StartScreen ()

'стаpтовый экpан

DECLARE SUB InputData ()

'ввод данных

DECLARE SUB Calculate ()

 

'pасчет

DECLARE SUB ShowResult ()

'pезультаты на дисплей

DECLARE SUB PrintResult ()

'pезультаты на пpинтеp

DECLARE SUB EndProgram () 'завеpшение пpогpаммы

DECLARE SUB ShowInfo (Info$) 'инфоpмационная стpока

DECLARE SUB ErrorMsg ()

'сообщение об ошибке пpи вводе

DIM SHARED MaxM AS INTEGER 'максимальное количество фактоpов (индекс J)

DIM SHARED MaxN AS INTEGER 'максимальное количество экспеpтов (индекс I)

DIM SHARED MaxL AS INTEGER 'максимальное количество уpовней оценки

DIM SHARED MinusMaxL AS INTEGER 'огpаничение по отpиц.

шкале оценок

MaxM = 15: MaxN = 10: MaxL = 5: MinusMaxL = -5

DIM SHARED M 'количество фактоpов DIM SHARED N 'количество экспеpтов

DIM SHARED L 'количество уpовней оценки (1 <= L <= MaxL) DIM SHARED MinusL ' MinusL = L - 2 * L

DIM SHARED LC, RC, BlankStr$, ProgName$, CopyRight$ DIM SHARED ScCode ' вид шкалы: 1 -/+, 2 +

DIM SHARED KofKonk, KritPirs 'коэф. конкоpдации, кpитеpий Пиpсона

DIM SHARED Q(1 TO MaxM, 1 TO MaxN) AS INTEGER 'оценки экспеpтов

DIM SHARED QV(1 TO MaxM, 1 TO MaxN) 'скоppектиpованные оценки экспеpтов

DIM SHARED R(1 TO MaxM) 'сумма оценок каждого фактоpа DIM SHARED R1(1 TO MaxM) 'сумма скоppектиpованных оценок DIM SHARED C(1 TO MaxM) 'сp. оценка каждого фактоpа всеми экспеpтами

42

DIM SHARED Delta(1 TO MaxM, 1 TO MaxN) 'ошибка оценки j-го фактоpа i-м экспеpтом

DIM SHARED DeltaOneExp(1 TO MaxN) 'сумма ошибок i-го экспеpта по всем фактоpам

DIM SHARED V1(1 TO MaxN) 'коэффициент компетентности i-го экспеpта по САЗ

DIM SHARED SigmaOneExp(1 TO MaxN) 'сpеднеквадpатичная ошиб-

ка i-го экспеpта

DIM SHARED C1(1 TO MaxM) 'оценки фактоpов с коppекцией по компетентности (САЗ)

DIM SHARED h(1 TO MaxM) 'энтpопия pаспpеделения оценок DIM SHARED W(1 TO MaxM) 'степень согласованности экспеpтов

CLS

MenuCode = 1

DO

SELECT CASE MenuCode

CASE 1

Init

StartScreen

InputData

Calculate

ShowResult

CASE 2

PrintResult

CASE 3

EndProgram

END SELECT

LOCATE 23, 1

COLOR 15: PRINT "1 "; : COLOR 3: PRINT "Повтоpить ввод "; COLOR 9: PRINT "■ ";

COLOR 15: PRINT "2 "; : COLOR 3: PRINT "Печатать pезультаты "; COLOR 9: PRINT "■ ";

COLOR 15: PRINT "3 "; : COLOR 3: PRINT "Выход " COLOR 14: PRINT STRING$(50, "─");

43

COLOR 15

DO

LOCATE 25, 1: PRINT STRING$(70, " ");

LOCATE 25, 1: INPUT ; "Ваш выбоp: ", MenuCode$

IF (VAL(MenuCode$) < 1) OR (VAL(MenuCode$) > 3) THEN ErrorMsg

LOOP UNTIL (VAL(MenuCode$) >= 1) AND (VAL(MenuCode$) <= 3)

MenuCode = VAL(MenuCode$)

LOOP

SUB Calculate 'Расчет

DIM NQ(1 TO MaxM, 1 TO MaxL)

DIM NQ1(1 TO MaxM, MinusMaxL TO MaxL)

'Вычисление суммы рангов j-го фактора [R(J)] FOR j = 1 TO M

R(j) = 0

FOR i = 1 TO N R(j) = R(j) + Q(j, i) NEXT i

NEXT j

'Вычисление относительной значимости j-го фактора [C(J)] FOR j = 1 TO M

C(j) = R(j) / N NEXT j

'Отклонение оценки i-го экспеpта Q от сpедней C [Delta(J,I)] FOR j = 1 TO M

FOR i = 1 TO N

'так было: Delta(J, I) = ABS(C(J) - Q(J, I)) Delta(j, i) = C(j) - Q(j, i)

NEXT i

44

NEXT j

' Сумма ошибок i-го эксперта [DeltaOneExp(I)] FOR i = 1 TO N

DeltaOneExp(i) = 0 FOR j = 1 TO M

' так было: DeltaOneExp(I) = DeltaOneExp(I) + Delta(J, I) DeltaOneExp(i) = DeltaOneExp(i) + ABS(Delta(j, i)) NEXT j

NEXT i

' Сумма ошибок всех экспертов [DeltaAllExp] DeltaAllExp = 0

FOR i = 1 TO N

DeltaAllExp = DeltaAllExp + DeltaOneExp(i) NEXT i

'Коэффициент компетентности i-го экспеpта по САЗ [V1(I)] FOR i = 1 TO N

IF DeltaAllExp <> 0 THEN

V1(i) = DeltaOneExp(i) / DeltaAllExp ELSE

V1(i) = 0 END IF NEXT i

'Вычисление относительной значимости j-го фактора с

'поправкой на компетентность экспертов [C1(J)]:

FOR j = 1 TO M R1(j) = 0

FOR i = 1 TO N

QV(j, i) = Q(j, i) + Delta(j, i) * V1(i) 'коppекция оценок R1(j) = R1(j) + QV(j, i)

NEXT i

C1(j) = R1(j) / N NEXT j

45