Диссертация (1149691), страница 23
Текст из файла (страница 23)
Используются в комплексе для хранения свидетельств и удобства их обработки;– BasePropagator — базовый класс, содержащий общую функциональность для алгоритмов локального апостериорного вывода;– BinaryPropagator, ScalarPropagator, IntervalPropagator—классынаследникиBasePropagator,реализующиечастныеслучаиалгоритмов локального апостериорного вывода в соответствии стипом вероятностных оценок фрагмента знаний, в который поступают свидетельства;131–MatrixHelper — вспомогательный класс, хранящий экземпляры матриц, используемых в алгоритмах априорного и апостериорноговывода, а также реализующий такие операции как возведение в степень Кронекера для матриц I и J .4.2.3Реализация фрагмента знанийВ этом параграфе мы рассмотрим основные аспекты и особенностиреализации фрагмента знаний в АБС над идеалом конъюнктов и фрагмента знаний над пропозициями-квантами.
Говоря, о фрагментах знанийв теории мы подразумеваем объект, ключевыми характеристиками которого являются оценки вероятностей. Для хранения оценок вероятностейиспользованы матрицы probabilities размерности 2 × (в случае фрагмента знаний с интервальными оценками) или 1 × (в случае фрагментазнаний с бинарными или скалярными оценками вероятностей). В обоихслучаях использованы матрицы, так как библиотека Math.NET дает возможность использовать произведение Кронекера только для матриц. Такжеиспользованы переменные size и vectorSize, хранящие размерность фрагмента знаний (количество атомов, входящих в ФЗ) и размер вектора оценоквероятностей соответственно.
Очевидно, что зная одно из двух значенийвышеуказанных переменных, всегда можно вычислить второе, так какони связаны соотношением vectorSize= 2 , но для улучшения читаемости кода и сокращения числа вычислений, хранятся оба значения. Дляидентификации фрагмента знаний среди прочих используется список atoms,содержащий множество атомов, над которыми построен данный фрагментзнаний. Декларация всех указанных полей приведена на листинге.Листинг 4.1 — Базовый класс Фрагмент знанийclass BaseKnowledgePattern{protected int size ;protected int vectorSize ;5protected ArrayList atoms ;protected Matrix < double > probabilities ;}132Наследующем листинге приведены конструкторыBaseKnowledgePattern и его наследника ScalarKnowledgePatternклассаЛистинг 4.2 — Конструкторы BaseKnowledgePattern и ScalarKnowledgePatternabstract class BaseKnowledgePattern <T >{protected BaseKnowledgePattern () { }protected BaseKnowledgePattern ( int size ) {}5 }class ScalarKnowledgePattern : BaseKnowledgePattern < double >{protected ScalarKnowledgePattern ()10protected ScalarKnowledgePattern ( int size ) : base ( size )protected ScalarKnowledgePattern ( double [] probabilities ,string [] atoms )protected ScalarKnowledgePattern ( ScalarKnowledgePatternnewPattern )}Опишем функциональность каждого из вышеуказанных конструкторов.
BaseKnowledgePattern:– стандартный конструктор по умолчанию;– конструктор, создающий фрагмент знаний заданной размерности спустым вектором оценок.ScalarKnowledgePattern:– стандартный конструктор по умолчанию;– конструктор, создающий фрагмент знаний заданной размерности свектором вероятностей, заполненным 0, данный конструктор расширяет функциональность базового конструктора;– конструктор, создающий фрагмент знаний заданной размерности суказанным вектором оценок вероятностей и множеством атомов;– конструктор копирования, создающий копию указанного фрагментазнаний.На следующем листинге перечислены сигнатуры методов чтения изаписи полей классаЛистинг 4.3 — Методы класса ScalarKnowledgePatternclass ScalarKnowledgePattern{133publicpublicpublicpublicpublicpublicpublic5ArrayList getAtoms ()int getSize ()int getVectorSize ()Matrix < double > getProbabilities ()void setProbabilities ( Matrix < double > newProbabilities )double getProbability ( int index )void setProbability ( int index , double probability )10 }Используемый здесь тип Matrix<double> является составляющей пакета Math.NET.
За счет использования матриц, без явного указания ихразмерности, удалось избежать использования раздельных векторов дляверхних и нижних границ оценок вероятностей в случае фрагментов знаний с интервальными оценками, а также избыточности использования двухвекторов с эквивалентными оценками в случае фрагментов знаний со скалярными и бинарными оценками вероятностей.
Отметим, что в комплексепрограмм для каждого типа фрагментов знаний реализован свой класс,являющийся наследником одного из базовых классов (BinaryKnowledgePattern, ScalarKnowledgePattern, IntervalKnowledgePattern), что дает возможность однозначно определить над какой структурой построен рассматриваемыйфрагмент знаний и однозначно определяет алгоритм обработки свидетельств, априорного вывода и поддержания непротиворечивости. Наконец,рассмотрим последний листинг, относящийся к структуре фрагментов знаний, на котором описаны сигнатуры методов, реализующих локальныйлогико-вероятностный вывод во фрагменте знаний.Листинг 4.4 — Методы класса ScalarKnowledgePattern, реализующиелокальный логико-вероятностный вывод.class BaseKnowledgePattern <T >{public bool isConsistent () ;public T concluseFormula ( Vector < double > X_f );5public Matrix < double > propagate ( BinaryEvidence evidence ) ;public Matrix < double > propagate ( ScalarEvidence evidence ) ;public Matrix < double > propagate ( IntervalEvidence evidence ) ;10public T evidenceProbability ( BinaryEvidence evidence ) ;public T evidenceProbability ( ScalarEvidence evidence ) ;134public Vector < double > evidenceProbability ( IntervalEvidenceevidence ) ;}В указанном порядке на листинге объявлены методы, реализующиеследующую функциональность:– проверка и поддержание непротиворечивости фрагмента знаний, атакже уточнение оценок в случае согласуемого фрагмента знаний синтервальными оценками;– локальный априорный вывод, то есть вычисление вероятностныхоценок указанной пропозициональной формулы при заданных оценках вероятностей во фрагменте знаний;– следующие три метода служат для пропагации детерминированного, стохастического и неточного свидетельства соответственно вофрагмент знаний и дальнейшего вычисления непротиворечивыхапостериорных оценок вероятностей;– последние три метода позволяют вычислить вероятность поступления свидетельства (бинарного, стохастического, неточного) вофрагмент знаний.4.2.4Реализация алгоритмов логико-вероятностного выводаВ предыдущем разделе была описана структура для хранения данных с неопределенностью во фрагментах знаний и их обработка.
Теперьрассмотрим подробнее реализацию алгоритмов локального логико-вероятностного вывода.Поддержание непротиворечивостиНачнем с рассмотрения задачи поддержания непротиворечивостивероятностных оценок фрагмента знаний. Отметим, что в классах, содержащих реализацию алгоритмов поддержания непротиворечивости135и априорного вывода, использован порождающий паттерн «одиночка»(singleton), гарантирующий, что в приложении в любой момент временибудет единственный объект данного класса.
Данный паттерн оправдываетсвое применение, так как в любой момент времени мы активно взаимодействуем с одним фрагментом знаний и, в случае апостериорного вывода,с одним свидетельством.Листинг 4.5 — Методы класса BinaryInferrer, реализующие априорныйвывод.class BinaryInferrer : BaseInferrer < double >{private BinaryInferrer ( BinaryKnowledgePattern pattern ){5this . pattern = pattern ;}private static BinaryInferrer inferrer ;public static BinaryInferrer Instance ( BinaryKnowledgePatternpattern ){if ( inferrer == null ){inferrer = new BinaryInferrer ( pattern ) ;}return inferrer ;}1015}Теперь рассмотрим сам алгоритм поддержания непротиворечивостифрагмента знаний с интервальными оценками, реализованный в классе IntervalInferrer, как наиболее объемлющий.















