Академический Документы
Профессиональный Документы
Культура Документы
На правах рукописи
Научный руководитель:
д.т.н., профессор Лисов Олег Иванович
Москва – 2009
Введение
Актуальность проблемы. В настоящее время весьма остро встает
вопрос обеспечения качества производимой продукции вообще и
электронных систем в частности. Если раньше разработка новых
электронных приборов и систем была ориентирована на 10-15-летний срок
эксплуатации и диагностические тесты формировались
специализированными подразделениями разработчиков аппаратуры, то
теперь моральное старение изделий электронной техники происходит
гораздо быстрее, объемы производства стали меньше, поэтому все этапы от
разработки до изготовления часто выполняются непосредственно на
предприятии-изготовителе. Вместе с тем, в условиях жесткой конкуренции
предприятие не может позволить себе снижать качество продукции.
Наилучшим выходом в данном случае является создание
автоматизированной обучающей системы (АОС), предназначенной для
повышения квалификации обслуживающего персонала без отрыва от
производства и представляющей собой систему интеллектуальной
поддержки процессов обучения и переподготовки инженерно-технического
персонала в технологическом процессе производства.
Кроме того, подготовка специалистов по технической диагностике в
рамках программ высшей школы, очевидно, никогда не потеряет своей
актуальности. Поэтому еще одной сферой применения АОС является ее
использование при подготовке специалистов в вузовской и
профессиональной сферах.
Проблемы диагностики электронных приборов решали как российские,
так и зарубежные ученые. Известны работы Пархоменко П.П., Карибского
В.В., Согомоняна Е.С., Каравая М.Ф., Лобанова А.В., Schlichting R., Rennels
D.A., Dolev D. и мн. др.
Вопросами e-learning и создания автоматизированных обучающих
систем занимаются, в частности Савельев А.Я., Тихомиров В.П., Солдаткин
5
В.И., Гусева А.И., Игнатова И.Г., Дэ-Джун Кванг, Мьюнг-Сук Дженни Панг и
др.
Актуальность работы, посвященной повышению квалификации
обслуживающего персонала, как условия обеспечения надежности и
отказоустойчивости, и связанной с ними диагностикой технических
объектов, не вызывает сомнений, если учесть возрастающее число и
масштабы техногенных катастроф, обусловленных ненадежным
функционированием технических объектов, а также увеличение
себестоимости разработок технических объектов с возрастанием их
сложности и повышением степени интеграции.
Актуальность проблемы обусловлена тем, что в условиях увеличения
числа малых предприятий с быстро меняющимся ассортиментом
производимой продукции нет возможности обеспечить длительную
подготовку специалистов нужной квалификации. Поэтому использование
АОС позволяет решить проблему ускорения процесса повышения
квалификации специалистов, в том числе и с использованием методов
электронного образования (e-learning).
Построение АОС, осуществляемое на основе разработки структуры,
алгоритмов генерации заданий, создание интеллектуального модуля
контроля результатов обучения является, следовательно, актуальной задачей.
Объектом исследования является структура АОС.
Предметом исследования являются методы и средства построения
интеллектуальных тренажеров как одного из видов или компонентов АОС для
обучения инженерно-технического персонала, участвующего в
технологическом процессе производства изделий электронной техники
методам технической диагностики.
Техническая диагностика - отрасль научно-технических знаний,
сущность которой составляют [1] теория, методы и средства обнаружения и
поиска дефектов объектов технической природы (в частности, электронных,
6
компьютерных систем), а также на основе синергетического подхода –
биологических, экономических и других типов систем.
Диагностический аспект обеспечения и поддержания надежности
электронных и компьютерных систем состоит в рассмотрении и реализации
совокупности мероприятий по своевременному обнаружению неисправностей
и поиску дефектов с целью их последующего устранения (или исключения
недопустимого влияния) и тем самым восстановления работоспособного
состояния объекта [1]. Специалистов в этой области не так много и от их
квалификации зависит качество выпускаемой продукции, а так же ее
себестоимость, поэтому предметная область интеллектуального тренажера
представляется весьма актуальной.
Целью диссертации является разработка и программная реализация
методов и средств для повышения квалификации обслуживающего персонала
в области диагностики электронных приборов за счет создания
интеллектуальной АОС.
Для достижения поставленной цели необходимо решение следующих
задач.
1. Разработка требований к функционированию АОС и ее структуры.
2. Анализ существующих методов подготовки специалистов в рамках
технологии e-learning.
3. Формализация модели области знаний (диагностирование электронных
приборов).
4. Разработка схемы алгоритма интеллектуального тренажера для
подготовки специалистов в области технической диагностики (на
первом этапе реализации – рассмотрение общих вопросов технической
диагностики, а так же построение диагностических тестов для
комбинационных схем (d-алгоритм Рота)).
5. Разработка подходов к реализации способов построения
диагностических тестов для синхронных последовательностных схем.
7
6. Разработка алгоритма автоматической генерации заданий для
интеллектуального тренажера.
7. Разработка алгоритма автоматического решения сгенерированных
заданий.
8. Программная реализация разработанных методов и алгоритмов для
решения практических задач обучения и повышения квалификации
специалистов в области технической диагностики.
Методы исследования. Теоретическую и методологическую базу
исследования составили элементы общей теории систем, методы
интеллектуальных технологий, методы и алгоритмы технической
диагностики, теория построения обучающих систем, методы генерации
заданий, а также объектно-ориентированная технология программирования.
При решении конкретных задач использовались труды отечественных и
зарубежных ученых в области e-learning и технической диагностики.
Неисправности
Объекты диагноза
Комбинационные С памятью
Рис. 2.1. Классификация объектов диагностирования
Проверка технического состояния предполагает проверку исправности,
проверку работоспособности и проверку правильности функционирования.
Диагностирование технического состояния объекта осуществляется при
помощи тех или иных диагностических средств. Взаимодействующие между
собой объект и средства диагностирования образуют систему
диагностирования. Протекающий в системе диагностирования процесс в
общем случае представляет собой многократную подачу на объект
определенных воздействий (входных сигналов) и многократное измерение и
анализ ответов (выходных сигналов) объекта на эти воздействия. Воздействия
на объект либо поступают от средств диагностирования, либо являются
внешними (по отношению к системе диагностирования) сигналами,
29
определяемыми рабочим алгоритмом функционирования объекта. Измерение
и анализ ответов объекта всегда осуществляются средствами
диагностирования.
Диагностические системы различаются на системы тестового
диагностирования (рис.2.2) и системы функционального диагностирования
(рис.2.3).
Часто тестовое диагностирование выполняют после проверки
исправности объекта в случае, если объект признан неисправным. Оно
заключается в подаче на входы объекта тестовых воздействий, направленных
на поиск возможной неисправности.
При функциональном диагностировании тестовые воздействия на
объект не подаются, объект работает в составе функционального блока с
подачей на него рабочих воздействий. Функциональный блок может быть
реальным или смоделированным.
Блок
управления
Основные
входы
Источник
воздействий
Устройство связи
Объект диагноза
Физическая
Измерительное
модель
устройство
объекта
Основные
выходы
Блок расшифровки
результатов
Система
диагностирования
Результаты
Рис. 2.2. Система тестового диагностирования
диагноза
30
Основные
Блок входы
управления
Устройство
диагноза
Объект
связи
Физическая
Измерительное
модель
устройство
объекта
Основные
выходы
Блок расшифровки
результатов
Система
диагностирования
Результаты
Рис. 2.3. Система функционального
диагноза
диагностирования
Неисправность преобразует устройство A в устройство A' и
поддерживает его в этом состоянии в течение интервала времени ∆t . Если
этот интервал не меньше длительности процесса диагностирования
технического состояния устройства и, кроме того, начинается не позже, чем
процесс диагностирования, то неисправность считается устойчивой. Это
значит, что в течение времени диагностирования техническое состояние
устройства не изменяется, т.е. в частности, в нем не возникают новые и не
исчезают имеющиеся неисправности. Если же за время диагностирования
техническое состояние устройств изменяется за счет появления в нем новых
или исчезновения имевшихся неисправностей, то последние будем называть
неустойчивыми, независимо от абсолютных значений их интервалов ∆t .
Неустойчивая неисправность называется сбоем, если для нее ∆t значительно
меньше длительности процесса диагностирования.
Под одиночной понимается неисправность, принимаемая в качестве
элементарной, т. е. такой, которая не может быть представлена (или не
подлежит представлению) совокупностью нескольких других, более
«мелких», неисправностей. Кратная неисправность является совокупностью
одновременно существующих двух или большего числа одиночных
неисправностей.
31
Под логическими неисправностями понимают неисправности
логических элементов, а также неисправности связей, сводящиеся к
изменению логических функций, реализуемых элементами. Константные
неисправности - это неисправности элементов и связей, которые
эквивалентны такому изменению функций, реализуемых логическими
элементами, которое соответствует подаче на один или несколько входов хотя
бы одного элемента или на его выход постоянного сигнала (константы) 0 и 1.
Объект, состояние которого определяется, называется объектом
диагноза. Диагноз представляет собой процесс исследования объекта
диагностирования. Завершением этого исследования является получение
результата диагностирования, т.е. заключения о состоянии объекта
диагностирования. Характерными примерами результатов диагностирования
состояния технического объекта являются заключения вида: объект исправен,
объект неисправен, в объекте имеется такая-то неисправность.
Классификации основных задач технической диагностики показана на
рис. 2.4.
Техническая диагностика
Экспериментальное
Физические Объекты Алгоритмы Средства опробование и
объекты диагноза диагноза диагноза промышленное
внедрение
k ≡ K ≡ {k 1 , k 2 ,..., k N }, k h = 0,1
x 1 , w 1n
W0
Sn
x 2 , w 2n Σ S yn
x k , w kn
и выходы элемента
y n = S n ( sn ) (n = 1,..., N ) ,
42
где xi - i-й элемент входного вектора, wij - вес связи входа i с выходом j .
Обычно рассматриваются три правила расчета уровня активности,
используемые в нейронных сетях:
1. Линейный закон (рис.2.6,а):
Y = kS , где k - некоторая константа.
y
y
y = kS =0 S
yпри Th <
=1 S
yпри Th≥
S S
а) Линейный закон б) Закон двоичного порога
y
y
1
y=
1 + e− S
= −1S
yпри Th <
=1 S
yпри Th >
Рис.2.6. Законы переключения
S элементов нейронной сети
в) сигмоидный закон
Двухвходовой адаптивный линейный элемент может реализовать
практически все возможные логические функции. Но при возрастании числа
входов количество логических функций резко сокращается. Комбинации
элементов сети могут быть реализованы с помощью нелинейных
(сигмоидных) селекторов, которые предполагают наличие "насыщения" при
получении решения, к тому же они имеют дифференцируемые харак-
теристики входов/выходов, что облегчает процесс адаптации.
В задаче распознавания класса неисправностей обратная связь
нейронной сети реализуется в форме входного сигнала, поступающего от
"учителя", ретроспективно указывающего их правильную классификацию
[49]. В качестве входных данных для такой сети служат признаки
прохождения диагностических тестов.
Результат работы нейронной сети зависит от порога переключения
элементов этой сети.
45
Подозреваемые области неисправностей могут находиться в следующих
отношениях:
▪ пересечение областей недопустимо;
▪ допускается небольшое пересечение областей;
▪ полное включение одной области в другую, не допускающее их
частичного пересечения [50].
Оптимальным вариантом является первый случай, но это соответствует
диагностированию одиночных константных неисправностей. При
диагностировании более сложных ситуаций он, вероятнее всего, окажется
недостижимым. Третий вариант не позволяет идентифицировать часть
неисправностей. В данном случае оптимальным является второй случай,
допускающий частичное пересечение областей с минимизацией этого
пересечения.
Критерием принадлежности неисправности к данной области является
превышение порогового значения переключения элементов нейронной сети,
то есть если значение 1-го выхода после нормирования к сотому значению
равно 1, то это является признаком принадлежности неисправности к области
1.
С целью выбора оптимального значения порога было введено понятие
качества распознавания неисправности Q. Для этого была принята следующая
классификация событий [51].
Событие "1" - неисправность существует и определена в результате
работы нейронной сети, то есть распознавание неисправности прошло
успешно.
Событие "2" - неисправность существует, но не определена в результате
работы нейронной сети - "пропуск цели" [52].
Событие "3" - неисправность существует и определена в результате
работы нейронной сети + неисправность не существует, но определена в
результате работы нейронной сети, то есть, успешное распознавание +
46
"ложная тревога" [53]. Здесь "+" означает, что учены оба результата,
коррелирующие между собой.
Событие "4" - неисправность не существует, но определена в результате
работы нейронной сети + неисправность существует, но не определена в
результате работы нейронной сети: "ложная тревога" + "пропуск цели".
Событие "5" - неисправность не существует, но определена в результате
работы нейронной сети - "ложная тревога".
Целью данной работы не является получение значений переключения
порогового значения нейронной сети для конкретного объекта, поэтому
воспользуемся для примера результатами, полученными в [51]. Для каждого
значения порога было определено количество появлений из перечисленных
событий и построена динамическая картина (рис. 2.7).
а) Порог =0.3 б) Порог =0.4
“2” “2”
“1” “1”
4 3
7 5
2 “3” 1 “3”
“6” “6” 2
2
1 “4” “4”
1 д) Расположение областей ,
полученное непосредственно
в) Порог =0.5 г) Порог =0.6 из базы данных
Таблица 2.3
Событие
"1" "2" "3" "4" "5"
Степень согласия (эксперт 1) 0 0 - 0 -
Степень согласия (эксперт 2) 0 - -1 0 0
Степень согласия (эксперт 3) 0 0 1 -1 -
Степень согласия (эксперт 4) 0 - - 0 0
Степень согласия (эксперт 5) 0 0 -1 0 1
Степень согласия (эксперт 6) 0 -1 0 0 0
где Nevent - количество событий "i" , Wevent - весовое значение i-го события.
Зависимость критерия качества распознавания неисправностей Q в
приведенном примере [51] от величины порога переключения элементов
нейронной сети показана в таблице 2.4.
Таблица 2.4
Th 0.32 0.34 0.36 0.38 0.42 0.44 0.46 0.48 0.52 0.54 0.56 0.58
Q 20 27 22 22 22 13 36 21 22 10 13 14
Если
<Информация об объекте контроля >
то <Выводы о возможном виде неисправности , сделанные
на основании имеющейся информации и
коэффициенты доверия , присвоенные каждому
выводу>
Рис.2.9. Вид сообщения экспертной системы диагностирования
Основой для построения гипотез служат экспертные знания,
содержащиеся в базе знаний и конкретная информация о данном объекте
контроля, сообщаемая оператором в интерактивном режиме работы с
экспертной системой.
Главный источник знаний экспертной системы - это специалист-
эксперт. К сожалению, для приобретения знаний пока не существует никаких
автоматических методов.
Приобретением знаний называется процесс выявления знаний из
различных источников, преобразование их в нужную форму и занесение в
базу знаний.
При приобретении знаний важную роль играют поле знаний, основные
понятия предметной области, и свойства отношений, устанавливающих связи
между понятиями. Эта фаза построения экспертной системы носит название
концептуализации [28, 58].
Следующим этапом является формализация качественных знаний. Для
преобразования качественных знаний в формализованные необходимо
построить функции принадлежности, которые чаще всего строятся на
основании экспертных оценок [28].
Процесс внесения знаний в экспертную систему осуществляется двумя
способами. В первом из них участвует инженер-когнитолог, который вносит
новые знания в базу знаний. Во втором присутствие инженера знаний не
обязательно, так как в экспертной системе предусмотрен модуль накопления
56
знаний. Остановимся на втором способе, так как он более предпочтителен для
работы в условиях эксплуатации системы.
Модуль накопления знаний формирует вспомогательный файл, в
котором хранятся новые знания, требующие проверки, обработки и
систематизации. Основным критерием при включении новых знаний в базу
знаний является их непротиворечивость. Поэтому из вспомогательного файла
в базу знаний информацию может переносить эксперт, инженер знаний или
главный конструктор контролируемого объекта. Вспомогательный файл и
файл базы знаний организованы таким образом, что для работы с ними
достаточно минимальных знаний в области компьютерной техники.
2.7. Выводы.
Описана трехуровневая система диагностических мероприятий, в
технологическом процессе, на применение которой ориентирована разработка
АОС. Приведены основные особенности каждого из уровней – базы данных,
нейронной сети и экспертной системы.
Выполнена формализация модели области знаний.
59
принятия решений
62
Подсистема
верхнего Формирование Уточнение
уровня цели системы целей
Определение
Изменение средств
средств
достижения целей
достижения цели
Д И
и н Формирование
Уточнение
р ф подцелей для
целей
е о подсистемы
к р
т м
и а
в ц
ы и Выдача директив в Анализ возможного
я нижестоящие подсистемы достижения цели
Выполнение директив ,
Подсистема Получение информации о
результатах
Рис. 3.2. Схема информационных потоков при дедуктивном способе
нижнего
уровня
управления
Схемы процесса обучения с использованием АОС, соответствующие
последовательностям шагов при дедуктивном методе, представлены на
рис.3.3.
Последовательности шагов при дедуктивном методе:
M1 = {S8,S7,S6,S5,S4,S3,S2,S1}
M2 = {S8,S7,S6,S5,S2,S1}
M2 = {S7,S6,S5,S2,S1}
M1 = {S7,S6,S5,S4,S3,S2,S1,S8}
M1 = {S1,S7,S6,S5,S4,S3,S2,S8}
6
вход
вход
выход
выход 1 2 3 5 7 8
вход
вход выход
4 выход
Управляющие директивы
Обобщение информации
Информация
принятия решений
Подсистема
Сбор информации нижнего
о состоянии уровня
подсистем
Передача
информации в И
вышестоящие н Р
подсистемы ф е
о ш
Выдача директив р е
на подсистемы м н
а и
Составление ц я
директив в и
подсистемах я
управления
Схемы процесса обучения с использованием АОС, соответствующие
последовательностям шагов при дедуктивном методе, представлены на
рис.3.6.
Последовательности шагов при индуктивном методе:
M1 = {S1,S2,S3,S4,S5,S6,S7,S8}
M2 = {S1,S2,S3,S4,S5,S6,S7}
M3 = {S1, S5,S6,S7,S8}
M4 = {S1,S2,S3, S7, S6, S5}
65
6
выход выход
вход
вход 1 2 3 5 7 8
вход
вход
выход
4
Рис. 3.6. Последовательность прохождения блоков АОС при
индуктивном методе
Блок
Блок генерации Графический
взаимодействия
заданий интерфейс
с обучаемым
Автоматический
решатель
Начало
Изучение теории
ni -число входов
j
Задание числа входов j-го элемента
в i-м слое
Генерация схемы
Вычисление
результата на
выходе схемы
(студентом и
решателем )
Формирование
Нет Результаты Да
данных для более
совпали
простой схемы
Внесение в схему
неисправностей
Нет Попытка Да
3-я
Нет Результаты Да
совпали
Построение теста
Нет Результаты Да
Сообщение оценки совпали
Рис. 3.8. Обобщенная схема алгоритма работы интеллектуального
тренажера
Конец
1
v3
x3
& 1
&2 y
x1
&
&3
reverse
info
reverse reverse
info info
left middle right left middle right left middle right left middle right
Начало
Число входов
Ввод параметров для генерации
схемы n
i=1
Н ет i i Да
n ост>= n j
Элемент считается
сгенерированным
метод генерации
Остались
Да
свободные входы
слоя
1 2 3 Н ет
Добавляются Добавляются
Элемент
входы из входы из своего Да Число выходов
игнорируется
предыдущего слоя слоя слоя=1
Нет
Элемент считается
сгенерированным i=i+1
Конец
Начало
5
1
Усложнение схемы
Изучение теории
2 4
Выход 3
Тренинг Контроль
6
Да Да
Вычисление Вычисление
результата результата
Вычисление
i = i+1 результата
Результат в i-ой КТ
Результат в i-ой КТ Нет правильный Нет
правильный
Протоколиров
Коррекция ошибки Да ание ошибки
Вычисление Да
результата
i = i+1
КТ последняя
Нет
КТ последняя
Да
Да
Да Результат на выходе Нет
правильный
Нет Результат на выходе
правильный Схема Схема
3.8. Выводы
В процессе работы над третьей главой диссертации были предложены
способы представления теоретической части изучаемого курса обучаемым в
соответствии с одной из технологий: индуктивной или дедуктивной.
Разработан алгоритм автоматической генерации контрольных заданий.
Определены достоинства и недостатки автоматической генерации заданий,
найден способ устранения недостатков. Проведен сравнительный анализ
генерации древовидной структуры и послойной генерации схемы, сделан
выбор в пользу послойной генерации.
Разработан способ оценки уровня подготовки персонала, осуществлена
настройка работы АОС на этот уровень.
82
АОС
Подсистема
Подсистема
“диагностика
“Основные определения и
комбинационных схем , d-
понятия технической
алгоритм Рота генерация
диагностики ”
тестов”
Подсистема Подсистема
“Диагностика “Диагностика
последовательностных последовательностных
асинхронных схем ” синхронных схем ”
Подсистема
“Диагностика
Подсистема микропроцессорных
“Диагностика ПЛМ ” устройств. Нейронные
сети. Экспертные системы ”
Рис. 4.1. Общая структура АОС
Теоретический Контрольный Теоретический Контрольный
блок блок блок блок
6
2 1
G6 ≡1
9
7 G9
1 1
11
3 G7 G11
&
10
4 1 8 G10
5 G8
G 6 = G1 • G 2
G7 = G2 + G3
G8 = G 4 + G 5
G9 = G6 + G7
G10 = G 7 • G8
G11 = G 9 + G10
G11 = ((G1 • G 2) + (G 2 + G 3)) + ((G 4 • G 5) + (G 2 + G 3))
1
G6
2
G9
d d
G7 X G11
3 ≡0
G10
4
G8
5
Рис. 4.3. Схема для анализа по d–алгоритму Рота
Вырожденное покрытие представляет собой несколько
видоизмененную таблицу истинности (рис. 4.4), записанную в более
компактной форме (рис. 4.5). Каждая строка вырожденного покрытия
определяет причинную связь между значениями входных и выходных
сигналов рассматриваемого вентиля.
1 2 3 4 5 6 7 8 9 1 11
0
0 0 0
0 1 0
G6
1 0 0
1 1 1
0 0 0
0 1 1
G7
1 0 1
1 1 1
0 0 0
0 1 1
G8
1 0 1
1 1 1
0 0 0
0 1 1
G9
1 0 1
1 1 1
0 0 0
G1 0 1 0
0 1 0 0
1 1 1
0 0 0
G1 0 1 0
1 1 0 0
1 1 1
Рис. 4.4. Таблица истинности схемы
89
1 2 3 4 5 6 7 8 9 1 11
0
G6 1 1 1
x 0 0
0 x 0
G7 1 x 1
x 1 1
0 0 0
G8 1 x 1
x 1 1
0 0 0
G9 1 x 1
x 1 1
0 0 0
G1 1 1 1
0 x 0 0
0 x 0
G1 1 1 1
1 x 0 0
0 x 0
1 2 3 4 5 6 7 8 9 1 11
0
G6 d 1 d
1 d d
G7 d 0 d
0 d d
G8 d 0 d
0 d d
G9 d 0 d
0 d d
G1 d 1 d
0 1 d d
G1 d 1 d
1 1 d d
3 1 1 1 1 1 1 0 0 0 1 1 1
4 1 1 0 1 1 0 1 1 0 1 1 0
5 1 0 1 1 0 1 1 0 1 1 0 0
2. Номер попытки Np = 0.
шагу 7.
5. Np= Np+1.
6. Если Np<3 то переход к шагу 3, иначе – изучение теории.
7. Номер попытки Np = 0.
шагу 11.
10. Np= Np+1.
17.
15. Np= Np+1.
набора
19. Если тестовый набор не содержит ошибок, то переход к шагу 22.
22. Если можно построить еще один тестовый набор, то Nt= Nt+1,
Кол-студентов
1-задание
45 2-задание
3-задание
40
35
30
25
20
15
10
недели
Рис. 14.18.
2 3 4 5
График 6 7
сдачи8 9 10 11 12 13 14 15 16
контрольных заданий 17
До использования АОС
25
45 22 21
40
Кол.студентов
35
30 17
15
25 11
20
9 9
удовл-но
15
6
10 хорошо
5
отлично
0
4 8 12
Недели
Рис. 4.19. Соотношение оценок, полученных при сдаче контрольных
мероприятий до использования АОС
45
40
20 19 18
Кол.студентов
35
30
13 13
25 12
20 14 14
12 хорошо
15
10 удовл-но
5
отлично
0
4 8 12
Недели
Рис. 4.20. Соотношение оценок, полученных при сдаче контрольных
мероприятий с использованием АОС
103
45
40
Кол.студентов
35
30 9
25 3 4
20
15 7 5
хорошо
3
10
5 отлично
0
4 8 12
Недели
Рис. 4.21. Увеличение количества отличников и успевающих на "хорошо" в
результате использования АОС
В результате использования АОС интенсивность сдачи контрольных
мероприятий увеличилась на 15%, успеваемость улучшилась на 12%.
Применяемая технология e-learning предполагает возможность сдачи
контрольных мероприятий без личного присутствия обучаемого путем
отправки выполненного задания на электронный адрес преподавателя.
Еще один эффект использования интеллектуального тренажера –
меньшее количество студентов, приходящих на консультацию с целью
выяснения непонятных моментов, что также обусловлено возможностью в
любое время получить доступ к информации, а также проверить правильность
её восприятия путем включения режима тренинга.
Эффект от использования интеллектуального тренажера с точки зрения
каждой из групп, определяемых их мотивациями, следующий.
Отличники и студенты, успевающие на "хорошо" – это люди, которые
реально хотят получить знания, поэтому стараются выполнить контрольные
мероприятия в максимально короткие сроки. Для них использование
интеллектуального тренажера наиболее актуально, т.к. дает дополнительные
возможности реализации их целей.
Часть студентов, успевающих на "удовлетворительно" (старательные)
также интенсивно использует интеллектуальный тренажер, т.к.
104
психологически им проще лишний раз запустить обучающую систему, чем
неоднократно задавать одни и те же вопросы преподавателю.
Ленивая часть студентов, успевающих на "удовлетворительно" на
использование интеллектуального тренажера не реагирует.
Разработанный интеллектуальный тренажер, в отличие от
существующих АОС, имеет:
1. Блок автоматической генерации заданий, позволяющий
генерировать обучающие и контрольные задания в автоматическом режиме.
2. Возможность графического изображения сгенерированных схем
в динамическом режиме.
3. Автоматический "решатель" сгенерированных заданий.
4. Два подхода к представлению теоретической части по каждой
теме – индуктивный и дедуктивный, ориентированные на индивидуальные
компетентностные особенности обучаемого.
4.5. Выводы
Проведено обоснование выбора в качестве языка программирования
основной части - С#, а в качестве языка программирования интерфейса
пользователя – VBA.
Предложена технология обучения построению тестов для
комбинационных схем.
Разработаны экранные формы и программно реализована первая версия
АОС, включающая общетеоретические сведения по вопросам технической
диагностики, построению таблиц истинности исправных и неисправных схем,
а также по построению тестовых последовательностей для одиночных
константных неисправностей.
Определены подходы к реализации обучения диагностированию
последовательностных схем.
Выявлены различные мотивации при обучении различных категорий
обучаемых.
105
Заключение
В диссертационной работе решена научная проблема создания АОС на
основе разработанных алгоритмов, обеспечивающих повышение уровня
квалификации инженерно-технического персонала в приборостроении, при
этом получены следующие основные научные и практические результаты.
Разработана структура АОС, ориентированная на трехуровневую
систему диагностирования изделий электронной техники.
Разработана структура интеллектуального тренажера,
являющегося основой АОС.
Сформирована структура модели области знаний,
обеспечивающая применение двух технологий изучения дисциплины:
основанных на индуктивном и дедуктивном методах процесса
обучения.
Реализованы подсистемы АОС "Основные определения и
понятия технической диагностики", "Диагностика комбинационных
схем (d-алгоритм Рота)", разработаны подходы для реализации
подсистем "Диагностика синхронных последовательностных схем" и
"Диагностика асинхронных последовательностных схем".
Разработан алгоритм автоматического генератора заданий,
который формирует большое количество однотипных,
неповторяющихся заданий и проверяет их корректность.
Разработан алгоритм автоматического "решателя", который
выполняет сгенерированные в автоматическом режиме задачи,
учитывая особенности каждой из них.
Результаты диссертационной работы внедрены в учебный
процесс кафедры ИПОВС Московского государственного института
электронной техники.
Результаты экспериментальных исследований использования
АОС показали, что интенсивность сдачи контрольных мероприятий
увеличилась на 15%, успеваемость улучшилась на 12%.
106
Список литературы
1. Основы технической диагностики. М., “Энергия”, 1976, 454 с.
2. Диагностическое обеспечение и надежность технических объектов.
Пархоменко П.П. Надежность. №1, 2002, - С. 9 - 14.
3. ДЖ..Джейкокс. Руководство по поиску неисправностей в электронной
аппаратуре. Перевод с английского А.И.Зильбермана. М.Мир, 1989.
4. А.М.Малышенко. Определение матриц состояния, входов и выходов
линейных динамических систем по их структурным схемам. АиТ,
№,1991, М., Наука.
5. Ю.В.Малышенко. Функциональные модели неисправностей
аналоговых элементов. Аит, №2, 1992, М., Наука.
6. Сперанский Д.В. О совмещенных схемах для функционального и
тестового диагностирования дискретных устройств. АиТ, №1 (1985), -
С. 122 - 126.
7. Технические средства диагностирования. Справочник. В.В.Клюев,
П.П.Пархоменко, В.Е.Абрамчук и др. М.,машиностроение , 1989г.
8. Microprocessor Functional Testing: Ch.Robach, G.Saucier./IEEE Test
Conference, Proceedings, p. 433 - 443.
9. Чжо Чжо Кхаин. Принципы разработки обучающей системы по
диагностике. Тез.докл. Научная сессия МИФИ, 23-27 январь, 2006г. – С.
22, секция И-1 «Технологии разработки программных систем».
10.Ш.Граф, М.Гессель. Системы поиска неисправностей. Перевод с
немецкого под ред. Д.А.Поспелова. М.,Энергоатомиздат, 1989.
11.Литиков И.И., Согомонян Е.С. Тестово-функциональное
диагностирование цифровых устройств и систем. АиТ, № 3 (1985), - С.
111 - 121.
12. Ю.В.Малышенко, В.П.Чипулис, С.Г.Шаршунов. Автоматизация
диагностирования электронных устройств. М., Энергоатомиздат, 1988.
107
13. Design of Fully Exercised SFS/SCD Logic Networks. T.Nanya,
S.Hatakanaka, R.Onoo/FTCS. The Twenty Second Annual. International
Sympos. On Fault-Tolerant Computing. July 8-10, 1992, Boston,
Massachusetts, USA.
14. Ашарина.И.В., Чжо Чжо Кхаин. Алгоритмы получения
согласованных значений в двухкомплексной системе. Тез.докл. Научная
сессия МИФИ, 23-27 январь, 2006г. – С. 18, секция И-1 «Технологии
разработки программных систем».
15. Чжо Чжо Кхаин. Интеллектуальная система поддержки процесса
обучения по дисциплине «Диагностика сложных систем». Тез.докл. 13-
й Всерос.межвуз. науч-техн.конф. «Микроэлектроника и информатика-
2006». – М.:МИЭТ, 2006. - С. 223.
16. J. Paul Roth. Diagnosis of Automata failures: A calculus and a method.
IBM journal, July 1966. – C. 278-291.
17. Г.Чжен, Е.Мэннинг, Г.Метц. Диагностика отказов цифровых
вычислительных систем. М., Мир, 1972, 232с.
18. Гагарина.Л.Г., Лисов.О.И., Чжо Чжо Кхаин. Исследование
направлений информационной поддержки деятельности предприятий
социально-культурной сферы и вопросов организации учебного
процесса подготовки и переподготовки кадров на основе E-learning
технологий, Отчет. «Московский институт искусств и информационных
технологий (Филиал Санкт-петербургского гуманитарного
университета профсоюзов)».
19. Р.Лаутербах, К.Фрей. Программное обеспечение процесса обучения.
Перспективы. Вопросы образования. 1988, N 3, - С. 70 - 79.
20. Д.Френд. Интеграция вычислительной техники в школы. Перспективы.
Вопросы образования. 1988, N 3, - С.46 - 59.
21. Игнатова И.Г., Соколова Н.Ю. Информационные и
коммуникционные технологии в образовании. Информатика и
образование, №3 – 2003, - С. 52 - 61.
108
22. Иванов В. Л. Электронный учебник: системы контроля
знаний//Информатика и образование, 2002. № 1.
23. Контроль результатов обучения с использованием системы
автоматического проектирования компьютерного обучения курсов
WebCT/Материалы конференции «Анализ качества образования и
тестирование» (22 марта 2001 года, Москва). М.: Изд-во МЭСИ.
24. Чжо Чжо Кхаин. Создание автоматизированной обучающей системы
для изучения методов технической диагностики. Тез, докл. (Сочи).
Материалы научно-практической конференции ИНФО-2007
«Инновации в условиях развития информационно-коммуникационных
технологий» 1-10 октября 2007г, Россия, г.Сочи, - С. 283 - 286.
25. Чжо Чжо Кхаин. Актуализация знаний при обучении методом
генерации тестов для электронных схем. Тез, докл. Научная сессия
МИФИ, 22-27 января, 2007г. – С. 102, секция И-1 «Технологии
разработки программных систем».
26. В.В. Карибский, П.П. Пархоменко, Е.С. Согомонян, В.Ф. Халчев.
Основы технической диагностики. 1976г. Энергия.
27. Технические средства диагностирования. Справочник. Под общ. ред.
В.В.Клюева. – М.: Машиностроение, 1989. – 672 с.
28. Искусственный интеллект. Справочник. Под ред. Д.А.Поспелова. М.,
Радио и связь, 1990.
29. А. Кафман. Введение в теорию нечетких множеств. Перевод с
французского под ред. С.И.Травкина. М., Радио И связь, 1982.
30. Нечеткие множества и теория возможностей. Под ред. Р.Р.Ягера.
Перевод с английского под ред. С.И. Травкина. М., Радио и связь, 1986.
31. Тиори Т., Фрай Дж. Проектирование структур баз данных. Перевод с
английского. М., Мир, 1985.
32. С.А.Айвазян, И.С.Енюков, Л.Д.Мешалкин. Прикладная статистика.
Основы моделирования и первичная обработка данных. М., Финансы м
статистика, 1983.
109
33. Требования и спецификации в разработке программ. Сборник статей.
Перевод с английского под ред. В.Н.Агафонова. М., Мир, 1984.
34. Дж Ульман. Основы систем баз данных. Перевод с английского под
ред. Р.М.Когаловского. М., Финансы и статистика, 1983.
35. 30 Years of Adaptive Neural Networks: Perceptron, Madaline and
Backpropagation. B.Widrow, M.A.Lehr. Proceedings of the IEEE, vol.78,
№9, September, 1990.
36. Д.Дюбуа, А.Прад. Теория возможностей. Перевод с французского под
ред. С.А.Орловского. М., Радио и связь, 1990.
37. Нечеткие множества в моделях управления искусственного интеллекта.
Под ред. Д.А.Поспелова. М., Наука, 1986.
38. Е.Ю.Кандрашина, Л.В.Литвинцева, Д.А.Поспелов. Представление
знаний о времени и пространстве в интеллектуальных системах. М.,
Наука, 1989.
39. К.Хоггер. Введение в логическое программирование. Перевод с
английского под ред. Ю.И.Янова. М., Мир, 1988.
40. Пархоменко П.П., Согомонян Е.С. Основы технической диагностики.
М., Энергоиздат, 1981.
41. Ю.В.Малышенко, В.П.Чипулис, С.Г.Шаршунов. Автоматизация
диагностирования электронных устройств. М., Энергоатомиздат, 1986.
42. Ашарина И.В. Выбор маршрута диагностирования одноплатных
микро-ЭВМ, Моск. гос. инт- электронной техники. М., 1994. 14 с., Деп.
В ВИНИТИ 16.06.94, № 1491-В94.
43. E.A.Caianiello. A theory of neural networks. Neural Computing
Architectures. The design of brain-like machines, 1989.
44. Caudill M. Using Neural Nets. Pt.6. Hybrid Expert Networks. AI Expert.
1990, v.5, № 11, p. 49 - 54.
45. Нейрокомпьютеры и интеллектуальные роботы под ред. Н.М.Амосова,
Киев, “Наукова думка”, 1991.
110
46. Vemuri V. Artificial Neural Networks: Theoretical Conceptions. IEEE
Publications. Computer Soc. Press Technology. Ser. Neural Networks,
Washington, 1988.
47. Zeidenberg M. Neural Network Models in Artificial Intelligence. 1990,
Madison, USA.
48. В.П.Третьяков., С.Г.Михайлов. Адаптивно-резонансная нейронная
сеть с расширенной областью принятия решения. Автометрия, № 2,
1993, - С. 80-86.
49. L.B.Almeida. Backpropagation in non-feedforward networks. Neural
Computing Architectures. The design of brain-like machines, 1989.
50. Классификация и кластер. Ред. Дж Ван Райзин. Перевод с английского
П.П.Кольцова под ред. Ю.И.Журавлева. М., Мир, 1980.
51. Ашарина И.В. Разработка интеллектуальных систем
диагностирования сложных технических объектов. Диссертация на
соискание ученой степени кандидата технических наук. Москва, 1995 г.
52.И.А.Биргер. Техническая диагностика. М., «Машиностроение», 1978.
53. Экспертные системы. Под ред. Р.Форсайта. Перевод с английского под
ред. В.Л.Стефанюка. М., Радио и связь, 1987.
54.Ф.И.Перегудов, Ф.П.Тарасенко. Введение в системный анализ. М.,
«Высшая школа», 1989.
55. Anderson C. Learning and Problem Solving with Multilayer Connectionist
Systems. Ph.D Thesis, University of Massachusetts, 1986.
56. Выявление экспертных знаний. О.И.Ларичев, А.И.Мечитов,
Е.М.Мошкович, Е.М.Фуремс. М., Наука, 1989.
57. Б.Сойер, Д.Л.Фостер. Программирование экспертных систем на
Паскале. Перевод с английского. М., Финансы и статистика, 1990.
58. Д.Уотермен. Руководство по экспертным системам. Перевод с
английского под ред. В.Л.Стефанюка. М., Мир, 1989.
59. Ашарина И.В. Чжо Чжо Кхаин. Автоматизированная обучающая
система диагностирования электронных схем. Тез, докл. Всерос.межвуз.
111
науч-техн.конф. «Актуальные проблемы информатизации. Развитие
информационной инфраструктуры, технологий систем». – М.:МИЭТ,
29-30 ноября, 2007. - С. 175.
60. Чжо Чжо Кхаин. Способы представления информации в обучающей
системе диагностирования электронных схем Тез, докл. Научная сессия
МИФИ, 21-27 января, 2008г. – С.16 - 17, секция И-1 «Технологии
разработки программных систем».
61. Ашарина И.В. Чжо Чжо Кхаин. Интеллектуальная система
поддержки квалификации персонала в структуре АСУТП. «Оборонный
комплекс».
62. Чжо Чжо Кхаин. Программный комплекс формирования заданий при
изучении методов технической диагностики. Статья . Электроника.
Известия вузов. Электроника.№5, 2007г., - С. 74 - 79.
63.Чжо Чжо Кхаин. Автоматическая генерация тестов обучающей
системы с помощью древовидной структуры. Тез.докл. Научная сессия
МИФИ, 22-27 январь, 2007г. – С. 100, секция И-1 «Технологии
разработки программных систем».
64. Чжо Чжо Кхаин. Послойная генерация тестовых схем в обучающей
системе. Тез.докл. Научная сессия МИФИ, 22-27 январь, 2007г. – С.
102, секция И-1 «Технологии разработки программных систем».
65. Чжо Чжо Кхаин. Автоматическая генерация тестов для
автоматизированной обучающей системы. Статья. Сборник научных
трудов «Системный анализ и информационно-управляющие системы».
– М.:МИЭТ, 2006. - С. 197.
66. Чжо Чжо Кхаин. Способы генерации тестов в обучающей системе при
дистанционном обучении. Тез.Докл. 14-й Всерос.межвуз. науч-
техн.конф. «Микроэлектроника и информатика-2007». – М.:МИЭТ,
2007. - С. 220.
67. Ашарина И.В. Чжо Чжо Кхаин. Учебно-методическое пособие для
проведения практических занятий по курсу (Программирование на
112
языках высокого уровня). Учебно-методическое пособие для
проведения практических занятий, 66с.
68. Ашарина И.В. Чжо Чжо Кхаин. Учебно-методическая разработка для
самостоятельной работы студентов по курсу (Объектно-
ориентированное программирование). Учебно-методическая разработка
для самостоятельной работы студентов, 97с.
69. Слепцова Л. Д. Программирование на VBA в Microsoft Office 2007.
Самоучитель. - М.:Диалектика, 2007. – 432 с. – ISBN 978-5-8459-1268-8.
113
Приложение 1
Приложение 2
Дипломы, полученные на научных конференциях
116
117
118
Приложение 3
Фрагменты теоретического блока АОС
119
120
121
122
123
124
Приложение 4
Фрагменты листинга программной реализации АОС
125
AbstractNode.cs
using System;
using System.Collections.Generic;
using Circuit.Exceptions;
namespace Circuit.Model
{
internal abstract class AbstractNode
{
private int level;
private int position;
private string name;
private int size;
private bool? result;
private IList<Entrance> entries;
private Exit exit;
//added
private bool error;
private bool errorOut;
if (result == null)
{
result = Calculate();
}
return result.Value;
}
set
{
result = new bool?(value);
}
}
return result;
}
//added
public int GetEntriesCountFrom(int needLevel) {
int res = 0;
for (int i = 0; i < this.Entries.Count; i++) {
if (entries[i].Exit.Node.Level == needLevel)
res++;
}
return res;
}
public bool Error
{
get { return error; }
set { error = value; }
}
public bool ErrorOut
{
get { return errorOut; }
set { errorOut = value; }
}
}
}
And2Node.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class And2Node : AbstractNode
{
public And2Node():base(2)
{
Name = "And2";
}
protected override bool Calculate()
{
return Entries[0].Exit.Node.Result && Entries[1].Exit.Node.Result;
}
}
}
129
And3Node.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class And3Node : AbstractNode
{
public And3Node():base(3)
{
Name = "And3";
}
protected override bool Calculate()
{
return Entries[0].Exit.Node.Result
&& Entries[1].Exit.Node.Result
&& Entries[2].Exit.Node.Result;
}
}
}
Or2Node.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class Or2Node : AbstractNode
{
public Or2Node():base(2)
{
Name = "Or2";
}
protected override bool Calculate()
{
return Entries[0].Exit.Node.Result || Entries[1].Exit.Node.Result;
}
}
}
Or3Node.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class Or3Node : AbstractNode
{
130
public Or3Node():base(3)
{
Name = "Or3";
}
protected override bool Calculate()
{
return Entries[0].Exit.Node.Result
|| Entries[1].Exit.Node.Result
|| Entries[2].Exit.Node.Result;
}
}
}
NotNode.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class NotNode : AbstractNode
{
public NotNode():base(1)
{
Name = "Not";
}
protected override bool Calculate()
{
return !Entries[0].Exit.Node.Result;
}
}
}
Constant.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class Constant : AbstractNode
{
public Constant():base(0)
{
Name = "Const";
}
protected override bool Calculate()
{
return Result;
}
}
}
131
Entrance.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class Entrance
{
AbstractNode node;
Exit exit;
set
{
node = value;
}
}
Exit.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Circuit.Model
{
class Exit
{
AbstractNode node;
IList<Entrance> entrances;
set
{
node = value;
}
}
set
133
{
entrances = value;
}
}
RotAlgoritm.cs
using System;
using System.Collections.Generic;
using System.Text;
using Circuit.Model;
using System.IO;
namespace RotAlgoritm
{
class RotAlgoritm
{
private Circuit.Model.Circuit circuit;
private DegeneratedCover[] covers;
private DCube[] cubes;
int cur = 0;
for (int i = 0; i < circuit.LastLevel; i++) {
for (int j = 0; j < circuit[i].Count; j++) {
covers[cur] = new DegeneratedCover(circuit[i][j]);
cur++;
}
}
cur = 0;
for (int i = 0; i < circuit.LastLevel; i++)
{
for (int j = 0; j < circuit[i].Count; j++)
{
cubes[cur] = new DCube(circuit[i][j]);
cur++;
}
134
}
}
public DegeneratedCover GetCover(int level, int pos) {
return covers[circuit.GetNodeNumber(level, pos) - 1];
}
public DCube GetCube(int level, int pos)
{
return cubes[circuit.GetNodeNumber(level, pos) - 1];
}
public void CoversToFile(string fileName)
{
// StreamWriter file = new StreamWriter(fileName,false,Encoding.GetEncoding("ASCII"));
StreamWriter file = new StreamWriter(fileName);
file.Write(CoversToString);
file.Close();
}
public void CubesToFile(string fileName)
{
// StreamWriter file = new StreamWriter(fileName, false, Encoding.GetEncoding("ASCII"));
StreamWriter file = new StreamWriter(fileName);
file.Write(CubesToString);
file.Close();
}
public string CoversToString
{
get
{//возвращаем все в одной строке
String result = String.Empty;
bool drawX = true;
bool endOfLine = false;
bool firstDrawn = false;
for (int i = 1; i < covers.Length + 1; i++)
{
result += i + " ";
}
result += System.Environment.NewLine;
for (int curCover = 0; curCover < covers.Length; curCover++)
{//по всем покрытиям
for (int curString = 0; curString < covers[curCover].LinesCount; curString++)
{//по строкам
if (curCover < circuit[0].Count)
{//по всем покрытиям,кроме нулевого уровня
result += " ";
continue;
}
endOfLine = false;
firstDrawn = false;
for (int curNodeNum = 1; curNodeNum < circuit.TotalNodes + 1; curNodeNum+
+)
135
{//по символьно
drawX = true;
for (int curNodeSymb = 0; curNodeSymb <
covers[curCover].InputNodes.Count + 1; curNodeSymb++)
{
if (circuit.GetNodeNumber(covers[curCover].GetNode(curNodeSymb)) ==
curNodeNum)
{
if (!firstDrawn)
firstDrawn = true;
result += covers[curCover].GetLine(curString)[curNodeSymb];
drawX = false;
if (curNodeSymb == covers[curCover].LinesCount - 1)
{
endOfLine = true;
break;
}
}
}
if (endOfLine)
break;
if (drawX && firstDrawn)
result += "x";
if (!firstDrawn)
result += " ";
endOfLine = false;
firstDrawn = false;
for (int curNodeNum = 1; curNodeNum < circuit.TotalNodes + 1; curNodeNum+
+)
{//по символьно
drawX = true;
for (int curNodeSymb = 0; curNodeSymb < cubes[curCube].InputNodes.Count
+ 1; curNodeSymb++)
{
if (circuit.GetNodeNumber(cubes[curCube].GetNode(curNodeSymb)) ==
curNodeNum)
{
if (!firstDrawn)
firstDrawn = true;
result += cubes[curCube].GetLine(curString)[curNodeSymb];
drawX = false;
if (curNodeSymb == cubes[curCube].LinesCount)
{
endOfLine = true;
break;
}
}
}
if (endOfLine)
break;
if (drawX && firstDrawn)
result += " ";
if (!firstDrawn)
result += " ";
return temp;
}
Sort();
Calculate();
}
private void Fill() {
String type = outputNode.Name.Substring(0, outputNode.Name.Length - 1);
}
private void Calculate()
{
value = new List<List<String>>();
switch (outputNode.Name.Substring(0, outputNode.Name.Length - 1))
{
case "And":
case "Or":
Fill();
break;
default :
#warning
//если это не "и" и не "или",то вырожденное покрытие не строится!
break;
}
}
Sort();
Calculate();
}
private void Fill()
{
String type = outputNode.Name.Substring(0, outputNode.Name.Length - 1);
}
private void Calculate()
{
value = new List<List<String>>();
switch (outputNode.Name.Substring(0, outputNode.Name.Length - 1))
140
{
case "And":
case "Or":
Fill();
break;
default:
#warning
//если это не "и" и не "или",то вырожденное покрытие не строится!
break;
}
}
namespace Circuit.Model
{
class Circuit
{
private IList<IList<AbstractNode>> circuit = null;
private Random generator;
//added
private AbstractNode curErrorNode;
private int[][] nodeNumber;
private int totalNodes;
//modified
public Circuit()
{
generator = new Random(DateTime.Now.Second);
}
public int LastLevel
{
get
{
return circuit.Count;
}
}
public void Generate()
{
circuit = new List<IList<AbstractNode>>(3);
IList<Exit> temp;
CalculateNodeNumber();
}
public void Generate(int size)
{
int levelSize = 0;
circuit = new List<IList<AbstractNode>>(size);
for (int i = 0; i < size; i++)
{
circuit.Add(new List<AbstractNode>());
}
circuit[size - 1].Add(GetRandomNode());
circuit[size - 1][0].setPlace(size - 1, 0);
int entranceNumber;
IList<Entrance> notConnectedEntries;
for (int i = size - 2; i > 0; i--)
{
levelSize = generator.Next(1, GetNotConnectedEntries(i + 1).Count);
for (int j = 0; j < levelSize; j++)
{
circuit[i].Add(GetRandomNode());
circuit[i][j].setPlace(i, j);
notConnectedEntries = GetNotConnectedEntries(i + 1);
do
{
entranceNumber = generator.Next(0, notConnectedEntries.Count);
}
while (!notConnectedEntries[entranceNumber].ConnectExit(circuit[i]
[circuit[i].Count - 1].Exit));
}
}
CalculateNodeNumber();
}
public bool Calculate()
{
return circuit[LastLevel - 1][0].Result;
}
public void InitFirstLevel(bool[] level)
{
if (circuit[0].Count != level.Length)
{
throw new InvalidSizeException();
}
foreach (IList<AbstractNode> list in circuit)
{
foreach (AbstractNode node in list)
{
node.Reset();
}
}
for (int i = 0; i < level.Length; i++)
{
circuit[0][i].Result = level[i];
}
}
public int EntiresSize
{
get
{
if (circuit.Count > 0)
{
return circuit[0].Count;
}
throw new InvalidSizeException();
}
}
private AbstractNode GetRandomNode()
{
144
int nodeType = generator.Next(5);
switch (nodeType)
{
case 0: return new NotNode();
case 1: return new Or2Node();
case 2: return new Or3Node();
case 3: return new And2Node();
case 4: return new And3Node();
default: throw new InvalidNodeTypeException();
};
}
private IList<Entrance> GetNotConnectedEntries(int sinceLevel)
{
List<Entrance> result = new List<Entrance>();
for (int i = sinceLevel; i < circuit.Count; i++)
{
IList<AbstractNode> level = circuit[i];
result.AddRange(GetNotConnectedEntries(level));
}
return result;
}
private IList<Entrance> GetNotConnectedEntries(IList<AbstractNode> level)
{
List<Entrance> result = new List<Entrance>();
foreach (AbstractNode node in level)
{
if (node.NotConectedEntries() != null)
{
result.AddRange(node.NotConectedEntries());
}
}
return result;
}
private int GetMaxEntries(IList<AbstractNode> level)
{
//added
public IList<AbstractNode> this[int index] {
get {
return circuit[index];
}
}
public int MaxBlocksNum {
get {
int max = 0;
for (int i = 0; i < circuit.Count; i++) {
if (max < circuit[i].Count) {
max = circuit[i].Count;
}
}
return max;
}
}
public void GetNextErrorNode() {
if (curErrorNode == null)
{//first
curErrorNode = circuit[1][0];
curErrorNode.Error = true;
curErrorNode.ErrorOut = false;
return;
146
}
if (curErrorNode == circuit[circuit.Count - 1][circuit[circuit.Count - 1].Count - 1])
{//last
if (curErrorNode.ErrorOut)
{
curErrorNode.Error = false;
curErrorNode = null;
}
else
{
curErrorNode.ErrorOut = true;
}
return;
}
else
{
if (!curErrorNode.ErrorOut)
curErrorNode.ErrorOut = true;
else {
curErrorNode.Error = false;
curErrorNode = GetNextNode(curErrorNode);
curErrorNode.Error = true;
curErrorNode.ErrorOut = false;
}
}
}
private AbstractNode GetNextNode(AbstractNode current)
{
if (current == circuit[circuit.Count - 1][circuit[circuit.Count - 1].Count - 1])
return null;
if (current.Position == circuit[current.Level].Count - 1) {
return circuit[current.Level + 1][0];
}
return circuit[current.Level][current.Position + 1];
}
private void CalculateNodeNumber()
{
int cur = 1;
Приложение 5
Страница электронной почты отчетов по выполнению
контрольных мероприятий
149