Cerebrum V1.0 - beta 1 (2006.07.20) СЕТЕВАЯ ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ СИСТЕМА УПРАВЛЕНИЯ БАЗОЙ ЗНАНИЙ

 

Запуск системы

Elex представляет собой продукционную экспертную систему, реализованную на основе семантической нейронной сети (http://www.shuklin.com/ai/ht/ru/ai00004f.aspx). После запуска ЭС возможно выполнить компиляцию текстовой базы знаний в нейронную сеть, либо запустить скомпилированную нейронную сеть в режиме консультации.

Для компиляции базы знаний из исходного текста необходимо:

1. открыть текстовый файл (расширение .exp);
2. провести его компиляцию
нажать на кнопку “Compile” (Компиляция) и сохранить результат.

Основное окно программы разделено на три главные области: ввод текста базы знаний, вывод результатов и ввод начальных значений нейронов. Для проведения консультации необходимо:

1. открыть базу знаний;
2. установить входные уровни возбуждения нейронов. Минимальное значение – 0 соответствует НЕТ, максимальное значение – 240 соответствует ДА;
3. запустить базу знаний на выполнение, нажав кнопку “
Calculate” (Расчет).

После расчета пользователь видит результаты работы в правой панели. После запуска сети на выполнение результаты возбуждения нейронов выходного слоя отобразятся в виде списка. далее вводит необходимые значения Разрешено вводить числа от 0 до 240. Значения результатов на выходах нейронной сети также находятся в этом диапазоне.

 Пример

  1.  Нажать

  2. Открыть файл Samples\intltest.exp

  3. Нажать

  4. Нажать Ok

  5. Сохранить скомпилированную базу знаний

  6. Заполнить все текстовые поля значением 222

  7. Нажать

Введение

На сегодняшний день существует значительное число разнообразных моделей искусственных нейронных сетей. Все они отличаются разнообразными алгоритмами поведения отдельных нейронов и принципами построения топологии связей. Несмотря на относительно благополучное состояние в области разработки различных математических моделей нейронных сетей, имеет место дефицит в области реализаций этих моделей, как на параллельных, так и на последовательных вычислительных системах. Большинство моделей нейронных сетей обладают значительным сходством. Нейрон представляет собой некоторый объект, связанный с другими объектами. По связям между нейронами передаются некоторые данные. Нейроны обрабатывают эти данные и передают другим нейронам. С этой точки зрения нейронную сеть можно рассматривать как распределенную вычислительную систему, в которой нейроны соответствуют отдельным процессорам, а связи между нейронами соответствуют каналам передачи данных между этими процессорами. В связи с широким распространением архитектуры Intel автор считает целесообразным разработать универсальную виртуальную машину, позволяющую моделировать различные нейронные сети в среде последовательной вычислительной системы. На данный момент широкое распространение получили объектно-ориентированные методы разработки программного обеспечения. В связи с этим представляется рациональным реализовать уровень нейронной сети в виде объектно-ориентированной базы данных (ООБД). Нейроны будут реализованы объектами, а связи между нейронами будут реализованы как ссылки между объектами. Необходимо изолировать от виртуальной машины детали реализации поведения отдельных нейронов в различных моделях нейронных сетей.  Это позволит применять разработанную виртуальную машину независимо от применяемой модели нейронной сети. Для обеспечения максимальной гибкости перенастройки системы виртуальную машину следует реализовать  в виде нескольких уровней связанных друг с другом через четко определенные интерфейсы.

 

Уровень экспертной системы и базы знаний

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

Так как в реальном мире редко можно утверждать что либо с полной уверенностью, то в процессе рассуждений экспертная система использует нечеткую логику. Для определения степени определенности утверждения в нечеткой логике используется фактор уверенности - число, обычно находящееся в интервале от 0 до 1 (похоже на теорию вероятностей). Но, в отличие от теории вероятности, фактор уверенности выражает не вероятность  возникновения события, а субъективную уверенность в этом. Отказ от применения классической теории вероятностей обусловлен многими причинами. Вот некоторые из них:

- Человек практически никогда не оперирует с точными значениями вероятностей и ему трудно, а иногда и невозможно точно определить вероятность возникновения события;

- Экспертные системы практически никогда не получают оптимального решения, а довольствуются лишь минимально допустимым уровнем решения. Поэтому отпадает необходимость проведения точных расчетов. Становится возможным только приблизительно определять фактор уверенности. В результате разработчики экспертных систем  нередко используют свои собственные алгоритмы обработки факторов уверенности;

- При необходимости вычислять вероятности в сложных логических выводах расчеты, выполненные по классическим алгоритмам, резко усложняются. Эффективность работы экспертных систем резко падает;

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

Продукционные экспертные системы содержат две основные части: базу знаний и механизм логического вывода. В процессе проектирования экспертной системы группа экспертов в начале тщательно анализирует ситуацию, для которой строится экспертная система. Затем эти люди разрабатывают правила, которыми экспертная система должна руководствоваться при решении возникшей проблемы. Полученные правила помещаются в базу знаний экспертной системы. Одновременно идет проектирование механизма логического вывода. Механизм логического вывода определяет, какие правила и в каком порядке будут применяться экспертной системой для решения поставленной задачи. Механизм логического вывода также решает вопрос о необходимости запроса у пользователя дополнительной информации. Порядок применения правил и порядок генерации запросов на получение дополнительных данных можно отнести к задаче управления вниманием. Механизм логического вывода также обеспечивает объяснение полученных результатов.

Разработанная экспертная система в состоянии работать как с четкими входными данными, представленными в виде логических значений ДА/НЕТ, так и с нечеткими входными данными, представленными в виде числового интервала в диапазоне от 0 до +240. При этом значению 0 соответствует полное отрицание - невозможность данного события, а значению +240 - полное подтверждение данного события. Значение +120 интерпретируется как отсутствие информации о возможности некоторого события. Для расчета фактора уверенности какого-либо утверждения используется семантическая нейронная сеть, нейроны которой выполняют операции нечеткой логики, при этом для определения пересечения факторов уверенности применяется функция минимума, а для объединения - максимума. В экспертной системе консультация проходит в интерактивном режиме.

База знаний предоставляется экспертом в текстовом виде. Синтаксис базы знаний (файлы с расширением *.exp) аналогичен синтаксису языка Prolog. Текст состоит из правил. Каждое предложение заканчивается точкой. Правило состоит из двух частей: следствия и условия. В начале правила идет наименование следствия. Затем после следствия через знак минус идет перечисление условий, которые должны быть выполнены для срабатывания этого правила. Условия разделяются друг от друга запятой. Заканчивается перечисление условий точкой. Это говорит о том, что далее после точки идет следствие следующего правила.

Например:

<следсвие 1> - <условие 1>, <условие 2>.

<следсвие 2> - <условие 3>, <условие 4>.

Если в начале наименования следствия имеется ключевое слово out это означает, что данное следствие будет расположено в слое эффекторных нейронов. Если условие начинается с ключевого слова not, это означает отрицание данного условия. Все условия в одном правиле объединены нечеткой операцией конъюнкции. Чтобы следствие одного правила было истинно должны быть истинны все входящие в него условия. Условия и следствия сопоставляются друг с другом путем сравнения их наименований. Если существует два одинаковых следствия с разными условиями, то это означает, что следствие правила можно получить различными путями. В этом случае следствия этих правил объединяются нечеткой операцией дизъюнкции. Если наименование условия совпадает с наименованием следствия, это значит, что результат данного следствия станет значением данного условия. Таким образом, из отдельных правил формируется сеть принятия решения. Все условия, которым не сопоставлены следствие хотя бы одного правила помещаются в слой рецепторных нейронов.

Правила компилируются в структуру нейронной сети, которая далее представляет собой базу знаний. При преобразовании правил экспертной системы в нейронную сеть первым этапом является разбиение каждого правила на операции дизъюнкции, конъюнкции и инверсии. Каждой операции назначается группа из нескольких нейронов. Каждая такая группа нейронов является отдельной операцией, выполняемой правилом экспертной системы. Группы нейронов связаны с другими группами посредством дендритов и аксонов. В каждой группе существует один главный нейрон, значение, на выходе которого является значением операции, выполняемой группой. Дендрит главного нейрона группы связан с главными нейронами групп, являющихся элементами, от значения которых зависит значение текущей группы. Аксон главного нейрона связан с дендритами нейронов групп, значения которых зависят от значения текущей группы. Текущее значение, передаваемое по аксону главного нейрона, является текущим значением элемента в базе знаний.

Также в базу знаний, в виде фактов, помещаются входные данные, и результаты срабатывания правил. Если ситуация, анализируемая экспертной системой, удовлетворяет условиям срабатывания правила, то его следствия считаются верными для данной ситуации. Условия правила содержат операции конъюнкции, дизъюнкции и инверсии. Если условия у двух или более правил выполняются одновременно, все следствия у допустимых правил выбираются одновременно. Для обеспечения обработки многозначных лексем текста будем считать истинными все следствия у всех правил, у которых выполняются условия. При этом одинаковые элементы, являющиеся следствиями разных правил, объединяются операцией дизъюнкции.

Например для базы знаний:

out A1 -
    B1,
    B2.
B1 -
    C1,
    C2.
B1 -
    C3,
    C4.

где A1, B1, B2, C1, C2, C3, C4 – логические высказывания, будет сформирована структура нейронной сети изображенная на рисунке. При этом высказывания B2, C1, C2, C3, C4 – будут помещены в слой рецепторов, а высказывание A1 C4 – в слой эффекторов.

 

 

 

Рисунок – Преобразование базы знаний в нейронную сеть

 

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

На основе семантической нейронной сети реализована экспертная система. Группа нейронов семантической нейронной сети, эмулирующая механизм прямого вывода продукций, представляет собой три слоя нейронов. Слой рецепторов собирает информацию для обработки в нейронной сети. Нечеткий уровень возбуждения нейрона - рецептора представляет собой нечеткий фактор уверенности в присутствии элемента, соответствующего этому нейрону. Слой эффекторов выдает результаты работы экспертной системы в виде совокупности нечетких данных нейронов-эффекторов. Как и в слое рецепторов, нечеткий уровень возбуждения эффектора представляет собой нечеткий фактор уверенности в наличии элемента, соответствующего эффектору. Третий слой - слой обработки расположен между слоем рецепторов и слоем эффекторов, в нем расположены нейроны, реализующие базу знаний экспертной системы. В случае работы такой экспертной системы в высокораспараллеленом режиме каждый нейрон обрабатывает нечеткие данные со своего дендрита и передает результат выполненной операции следующим нейронам по аксону. Время принятия решения такой экспертной системы зависит не от объема базы знаний, а только от ее сложности.

 

Уровень семантической нейронной сети

Нейронная сеть реализована на основе ядра VNPI. Каждый нейрон представляет собой совокупность объектов более простых объектов. Нейроны могут быть различных типов. Наиболее интересными являются нейроны рецепторы, эффекторы и внутренние нейроны. Внутренний нейрон, выполняющий логические операции, состоит из ядра (VNKernel) и связей с другими нейронами (VFStream). Нейронная сеть позволяет моделировать параллельное выполнение различных нейронов и параллельное выполнение функций, соответствующих нейронам.

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

Выполнение нейронов в нейронной сети производится тактами. Такты выполняются до момента, когда в сети не останется ни одного нейрона, требующего обработки. После завершения всех тактов на эффекторах выставляется текущее решение, принятое данным участком сети. При изменении информации на рецепторах запускаются новые такты, и по их окончании на эффекторах выставляется уточненное решение. Работа экспертной системы проходит либо в один такт, по выставлению всех входных нечетких данных на слое рецепторов, либо итерационно, по мере накопления этих данных.

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

Для обеспечения оптимизированной обработки проходов каждый нейрон будет иметь следующие флаги состояний: активен/пассивен; изменен/не изменен; зарегистрирован/не зарегистрирован. Так же каждый нейрон будет иметь свое нечеткое значение, являющееся результатом работы функции, выполняемой нейроном, над входными нечеткими данными. Флаги состояния нейрона и его нечеткое значение назовем словом состояния нейрона. Каждый нейрон будет иметь два таких слова состояния: актуальное (commited) и текущее (proposed). Оба слова состояния нейрона сохраняются в файловом хранилище в процессе сериализации нейрона. Актуальное слово состояния - это слово состояния нейрона, которое считается актуальным для данного кванта времени для этого нейрона. Именно актуальные нечеткие данные получает нейрон по своему дендриту для обработки, и именно они передаются остальным нейронам для дальнейшей обработки. Однако, результат обработки входных нечетких данных, поступающих из дендрита, помещается в текущее слово состояния нейрона. В текущем слове состояния накапливаются результаты обработки входных нечетких данных, поступивших из других нейронов. Активным считается нейрон, требующий обработки входных нечетких данных. Пассивным считается нейрон, не требующий обработки входных нечетких данных. Измененным считается нейрон, у которого нечеткое значение текущего слова состояния отличается от нечеткого значения актуального слова состояния. Не измененным считается нейрон, у которого после обработки входных нечетких данных текущее значение не изменилось по сравнению с актуальным нечетким значением. Зарегистрированным считается нейрон, зарегистрированный для обработки в последующем проходе. Не зарегистрированным считается нейрон, не требующий обработки в последующем проходе. Свойство зарегистрированный/не зарегистрированный нейрон фактически совпадает со свойством активный/пассивный нейрон и введено для оптимизации обработки больших (более 1000 нейронов) баз знаний.

Для каждого нейрона определены четыре обработчика сообщений: два основных 1, 2 и два вспомогательных 3, 4. Основные функции сообщений последовательно вызываются в такте обработки. Вспомогательные обработчики сообщений вызываются основными функциями для передачи или получения данных от других нейронов:

 

Сообщение-1: расчет нечеткого значения

1- если нейрон актуально-активен, то по дендриту рассылается сообщение Сообщение-3: запрос об актуальных входных нечетких данных, при этом полученные актуальные нечеткие данные обрабатываются, и результат функции, выполняемой нейроном, помещается в текущее нечеткое значение;

2- сравнивается текущее нечеткое значение и актуальное нечеткое значение, в случае их неравенства устанавливается текущий флаг изменен;

3- если текущий флаг изменен установлен, то по аксону передается сообщение Сообщение-4, вынуждающее все нейроны-приемники перейти в активное зарегистрированное состояние.

 

Сообщение-2 сброс, установка и регистрация

1- если нейрон текуще-не-активен и текуще-зарегистрирован, то он дерегистрируется, текущий флаг зарегистрирован сбрасывается;

2- текущее слово состояния нейрона присваивается актуальному слову состояния нейрона, при этом нечеткое значение присваивается актуальному значению, флаги текущего слова состояния присваивается флагам актуального слова состояния

3- после этого флаги состояния активен и изменен, текущего слова состояния, сбрасываются в неактивное состояние.

 

Сообщение-3 запрос об актуальных входных нечетких данных

1- нейрон возвращает свое актуальное слово состояния, включая актуальное нечеткое значение.

 

Сообщение-4 перейти в активное зарегистрированное состояние

1- устанавливается флаг текущего активного состояния;

2- если нейрон текуще-активен и текуще-незарегистрирован, то он регистрируется, флаг текущее-зарегистрирован устанавливается.

Регистрация нейронов проходит в соответствующей секции нейрона управления слоем экспертной системы. Этим обеспечивается возможность нахождения в одной нейронной сети нескольких экспертных систем, при этом один и тот же нейрон может одновременно входить в разные зоны регистрации. Нейрон управления слоем содержит два списка активных нейронов. В то время как происходит обработка нейронов из одного списка они регистрируются в другом списке. Это позволяет избежать конфликтов доступа к этим спискам. Это обеспечивает правильный процесс регистрации - дерегистрации нейронов базы знаний в нейроне управления.

Работа нейрона управления слоем экспертной системы заключается в рассылке сообщений зарегистрированным нейронам о выполнении проходов. Нейрон управления может работать в двух режимах - однотактовом и многотактовом. В одно тактовом режиме нейрон управления один раз рассылает сообщение Сообщение-1 и затем один раз сообщение Сообщение-2. Во многотактовом режиме нейрон управления последовательно рассылает сообщения Сообщение-1 и Сообщение-2, пока существует хотя бы один зарегистрированный нейрон. В случае наличия в нейронной сети циклических ссылок многотактовый режим может привести к зависанию системы выполнения.

 

Уровень ядра VNPI – хранение и управление временем жизни объектов

Ядро системы включает в себя уровень взаимодействия с операционной системой и уровень хранения и управления объектами. Уровень взаимодействия с операционной системой должен обеспечить адаптацию функций операционной системы к нуждам виртуальной машины, реализующей нейронную сеть. Уровень хранения объектов должен обеспечить хранение и быстрый доступ к объектам и их связям, а также управление временем жизни объектов. Совокупность API всех уровней виртуальной машины, для определенности, названа Virtual Neural Programming Interface, далее VNPI .

К эффективности языка реализации ядра виртуальной машины, эмулирующей нейронную сеть со многими миллионами эмулируемых нейронов, предъявляются повышенные требования. В результате, единственным кандидатом в качестве языка программирования для такой системы становится generic C (но уже не C++). Ядро необходимо разработать учитывая современные компонентные технологии. В противном случае будет невозможно реализовать полиморфное взаимодействие различных модулей ядра и динамическое изменение связей между ними. Существующие промышленные реализации компонентной идеологии, например Microsoft COM, слишком громоздки для применения в виртуальной машине, эмулирующей нейронную сеть требуемых размеров. Неэффективность COM в первую очередь связанна с необходимостью выполнять множество команд сравнения GUID при  каждом вызове QueryInterface. В качестве компонентной архитектуры для реализации виртуальной машины семантической нейронной сети предлагается применить оригинальную разработку. Основное отличие предлагаемой архитектуры – отсутствие необходимости вызова QueryInterface и поиска нужного интерфейса по значению GUID. В условиях ядра виртуальной машины можно определить время жизни любого внутреннего объекта на этапе разработки. Поэтому в предлагаемой архитектуре отсутствует подсчет ссылок на объекты. Благодаря отсутствию подсчета ссылок увеличивается производительность ядра. Указатель на объект представляет собой указатель на структуру с данными объекта, а не на интерфейс. Этим обеспечивается отсутствие необходимости приведения указателя на объект к различным типам при множественном наследовании интерфейсов. Для описателя классов применяется специализированный диалект языка XML – IDL. На его основе генерируется прототипы объектов и прототипы методов. Среда разработки виртуальной машины должна обеспечивать максимальный комфорт программисту. Поэтому разбор IDL реализуется на языке C# для платформы Microsoft .NET. В процессе синтаксического разбора анализируется содержимое DOM-XML и на его основе формируется объектная модель IDL путем создания и инициализации объектов. После построения объектной модели IDL на ее основе формируются исходные тексты прототипов функций на языке C . Ядро VNPI предоставляет компоненты базового уровня для реализации объектно-сетевой базы. Оно включает в себя компоненты взаимодействия с операционной системой, управления памятью с подсистемой сборки мусора, управления структурированным хранилищем объектов,  подсистему кэширования объектами и управления их временем жизни в оперативной памяти.

 

 

Уровень моста .NET-VNPI

 Уровень реализации пользовательских объектов должен быть удобным для использования прикладными программистами. На данный момент этому требованию наиболее полно соответствует Microsoft .NET Framework. Для обеспечения интеграции .NET Framework и ядра VNPI необходим мост VNPI - .NET. Мост VNPI - .NET обеспечивает доступ к VNPI из среды .NET Framework. Он так же позволяет реализовывать объекты в среде .NET управляемые подсистемами ядра VNPI.

Учитывая различные цели и требования стоящие перед .NET Framework и VNPI идеология системы сборки мусора кардинально отличается. Так в .NET уничтожение объекта возможно только после того как не останется возможности его использования в текущем процессе. В отличие от этого в ядре VNPI сборка мусора осуществляется, когда исчерпана память допустимая для размещения объектов. В этом случае ненужные объекты вытесняются на устройство долговременного хранения. Уничтожение объектов является частью модели предметной области и поэтому выполняется только в ручную. Мост осуществляет подсчет ссылок на объекты ядра VNPI используемые .NET и препятствует вытеснению объектов, которые могут быть доступны через обращения из контекста .NET

Основной единицей моста является узел. Узел представляет собой совокупность нескольких экземпляров объектов. Основными объектами, входящими в узел являются: объект ядра VNPI Kernel Object, объект Connector, объект Containter и объект Component.

Kernel Object представляет собой Native VNPI Object реализованный на языке C. У прикладного разработчика доступ к этому объекту полностью отсутствует. Kernel Object реализован согласно требований, описанных в http://www.shuklin.com/ai/ht/ru/ke01050f.aspx

Connector - managed object представляет собой корень узла. Он связывает в единое целое объекты входящие в узел, благодаря тому, что имеет ссылки на пользовательский объект, на Kernel Object, на родительский Connetctor. С помощью Connector можно получить ссылку на объект-оболочку (Container), который обеспечивает прикладному программисту доступ к функциональности, предоставляемой Kernel Object. Экземпляр этого объекта создается и предоставляется системой моста. Большинство служебных функций системы возвращают экземпляры оболочек для объекта Connector.

Container - Managed Object который представляет собой оболочку для Kernel Object. Может отличаться в разных узлах в зависимости от типа Kernel Object. Предоставляет интерфейсы по управлению внутренним состоянием Kernel Object.

Component - представляет экземпляр пользовательского объекта. В минимальном сценарии ограничения не накладываются. Может быть экземпляром любого класса среды .NET Framework унаследованного от System.Object. Однако во многих сценариях будет рационально реализовать интерфейсы IComponent и при необходимости ISerializable. Рекомендуется наследовать пользовательские объекты от Cerebrum.Integrator.GenericComponent

В системе реализована собственная версия Garbage Collector с альтернативным алгоритмом выполнения. Когда память исчерпывается, самые старые объекты вытесняются на диск, освобождая место более нужным в данный момент. Таким образом, объекты, которые находятся в использовании, нужно защищать от принудительной выгрузки из оперативной памяти. Если не выполнить блокировку, то объект может быть разрушен в памяти еще до момента окончания его модификации. Для реализации подсчета ссылок на объекты Kernel Object в место экземпляров объектов Connector и Containter пользователю возвращаются их объекты-оболочки. Каждый вызов функции, возвращающий эти объекты, приводит к созданию нового объекта оболочки. В конструкторе объекта-оболочки производится увеличение значения счетчика ссылок, а в деструкторе – уменьшение его значения. Важной особенностью данной системы является необходимость вызова метода  Dispose у всех объектов-оболочек для предотвращения чрезмерного расхода памяти. В случае, если программист забудет вызвать Dispose, этот вызов будет осуществлен автоматически при сборке мусора в среде .NET Framework.

Система сама следит за временем жизни пользовательских объектов в памяти. Инициировать сохранение объектов в ручную не нужно. Наименее часто используемые объекты автоматически вытесняются на систему долговременного хранения, освобождая оперативную память. Поэтому в любой момент возможно что системе придется произвести вытеснение и разрушение какого то пользовательского объекта. Каждый раз, когда вызывается метод ядра требующий блокировки Kernel Object, создается новый объект-оболочка. В конструкторе оболочки производится увеличение счетчика ссылок. В Dispose - уменьшение счетчика ссылок. Пока хоть одна оболочка находится в памяти, счетчик ссылок не равен 0 и соответствующий этой оболочке объект заблокирован от разрушения. Если программист забудет вызвать Dispose - это произойдет автоматически в момент сбора мусора .NET Garbage collector. Директивы языка C# using нужны, чтобы гарантировать удержание объекта в памяти во время вызова его методов, а затем гарантировать вызов Dispose после окончания работы с объектом. По выходу из using автоматически вызывается Dispose объекта оболочки и уменьшается счетчик ссылок Kernel Object.

  

Уровень сетевой объектно-ориентированной базы

 Уровень сетевой объектно-ориентированной базы отвечает за создание экземпляров пользовательских объектов, а так же за работу с атрибутами объектов. Каждый объект сетевой  объектно-ориентированной базы может иметь несколько атрибутов. В качестве значений атрибутов могут выступать другие объекты или простейшие (скалярные) типы данных. Для создания объектов необходимо иметь информацию об их типах. Средствами сетевой объектно-ориентированной базы можно реализовать табличную структуру, близкую к структуре реляционной базы данных. Поэтому, для унификации информации о типах объектов, используемая этим уровнем, организованна в виде связанных друг с другом таблиц.

Информация об объектах зарегистрированных в системе организована в виде нескольких таблиц Types, Attributes, Tables. Это позволяет определять в БД типы объектов .NET в унифицированном виде. Однако, свойства таблиц, строк и колонок в ОО базе отличаются от свойств, принятых в реляционных базах данных. Объектно-ориентированная база позволяет хранить не строки таблиц, как это принято в табличных базах данных, а экземпляры объектов. Так колонка таблицы представляет собой сущность, отдельную и независимую от таблицы. Одна и та же колонка может принадлежать разным таблицам. Колонка представляет некоторый атрибут объекта. Таблица Attributes содержит информацию об атрибутах объектов, находящихся в сетевой объектно-ориентированной базе. Если в базе находится несколько объектов, которые имеют атрибут имя, то значениями для этого атрибута (колонки) являются имена этих объектов. Атрибуты (колонки) так же являются объектами ОО базы. Например, объект-атрибут "Имя Объекта" так же имеет имя, как объект, имеющий имя. Очевидно что, значением атрибута "Имя объекта" для "атрибута имя объекта" является строка "Имя объекта". Таким образом, применение тавтологий может оказаться более чем оправданным и полезным.

Таблица Types содержит описание типов данных (включая пользовательские), которые известны системе и на основе которых система создает экземпляры объектов, помещаемые в сетевую базу. Атрибут Qualified Type Name этой таблицы содержит имя .NET класса на основе которого создаются пользовательские объекты.

Таблица Tables содержит описание всех таблиц, содержащихся в объектной базе данных. Таблицы это тоже объекты. Имя таблицы - значение атрибута "имя объекта" у объекта таблицы. Каждая таблица имеет две коллекции объектов. Коллекцию атрибутов (колонок) и коллекцию компонентов (строк). Каждая строка любой таблицы это тоже объект. А значениями для колонок таблицы являются значения атрибутов объектов находящихся в строках таблицы. Таблица Tables содержит сама себя в качестве строки. А значением ее колонки "Коллекция колонок" является коллекция колонок этой же таблицы. Хотя желательно держать в одной и той же таблице объекты одного и того же типа - это вовсе не обязательно. Главное чтоб у этих объектов были атрибуты, хотя бы частично совпадающие с колонками данной таблицы. Я рекомендую держать в одной таблице объекты, классы которых унаследованы от некоторого, базового класса, который содержит все колонки данной таблицы в качестве собственных атрибутов. Например колонка "Имя объекта" имеет смыл практически в любой таблице. Объекты могут входить одновременно в разные таблицы как их строки. Дескрипторы атрибутов объектов сами являются объектами и зарегистрированы в таблице атрибутов.

Таким образом, каждая таблица содержит не некоторые абстрактные строки с данными, а конкретные экземпляры .NET объектов. Колонки таблиц представляют собой атрибуты (custom properties), поддерживаемые этими объектами. Сами типы, атрибуты и таблицы так же являются объектами и представлены строками в соответствующих таблицах.

Каждая строка некоторой таблицы представляет собой экземпляр объекта, содержащийся в базе данных. Каждая колонка некоторой таблицы представляет собой атрибут, описанный в таблице Atributes. Экземпляр класса (объект) не зависит от таблицы. Не обязательно создав объект помещать его строкой в какую то таблицу. Будучи созданным, объект будет продолжать существовать либо в оперативной памяти системы либо в качестве потока в файловом хранилище до тех пор, пока не будет удален принудительно. Созданный экземпляр будет сохранять свою идентичность и значения атрибутов через различные циклы запуска и останова системы.

Пользователь имеет возможность создавать новые таблицы путем добавления новых записей в таблицу Tables. Созданные экземпляры таблиц, атрибутов и других объектов так же не обязательно регистрировать в соответствующих таблицах. Однако практика регистрации таких объектов в соответствующих таблицах является рекомендуемой, так как позволяет изменять их атрибуты через унифицированный интерфейс пользователя. Обязательным требованием является регистрация пользовательского типа в таблице Types. В этом случае Integrator.Acivator при необходимости автоматически произведет создание нового экземпляра. В противном случае программист будет обязан реализовать собственную версию интерфейса IActivator.

В ОО БД поддерживаются полноценные C# объекты, у объектов поддерживаются методы, свойства, поля и события. В данной разработке статические методы классов - просто обычные статические методы в .NET а экземплярные методы - обычные методы объектов. Рекомендуется создавать свойства для поддерживаемых классом атрибутов. Механизм делегатов и событий не будет поддерживаться, в случае если связь реализуется между объектами, хранящимися в БД. Это связанно с ограничениями по времени жизни экземпляров. Во время, когда БД остановлена, все объекты хранятся в сериализированном виде. Если время жизни у приемников или источников сообщений может быть изолированно от времени жизни объектов БД, то механизмы делегатов - сообщений работают в пределах подсети объектов развернутых в памяти .NET Framework. Система разрабатывается в первую очередь для поддержки нейронных сетей со свободной топологией и числом нейронов до 2 млрд в одном хранилище. Поэтому только часть ОО БД находится в данный момент в RAM. Большая часть объектов заморожена в файловом хранилище и десериализируется по мере необходимости.

Учитывая, что у каждого объекта в такой базе имеется поведение, реализованное в виде методов этого объекта, логично называть такую базу активной. Используя данную разработку программист полностью свободен создавать собственные таблицы, содержащие объекты-строки собственных типов. Так как классы можно разрабатывать самостоятельно, то строки могут иметь методы, свойства, события и все другие достижения современных ОО методов программирования.

 

 

ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ НА ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ
Cerebrum V1.0. Сетевая объектно-ориентированная система управления базой знаний

Настоящее лицензионное соглашение (далее "Соглашение") является договором, заключаемым между конечным пользователем (далее "Пользователем") и Шуклиным Дмитрием Евгеньевичем (далее "Автором") относительно указанного в заглавии документа программного продукта Автора (далее "Программа"), включающего в себя саму Программу и встроенную в нее документацию. Воспроизводя, распространяя или иным образом используя Программу, Пользователь тем самым принимает на себя условия Соглашения. Если Пользователь не принимает условий Соглашения, то он не имеет права использовать Программу.

1. ПРЕДМЕТ ЛИЦЕНЗИИ
Предметом лицензии является право использования Программы, относительно которой Автор утверждает, что она является продуктом его интеллектуальной деятельности и все авторские и иные права на нее принадлежат Автору. В случае возникновения споров по поводу авторских прав на Программу всю ответственность берет на себя Автор.

2. ОБЪЕМ ЛИЦЕНЗИИ
При условии ссылки на Автора как на владельца авторских прав на Программу Автор предоставляет Пользователю неисключительное и свободное от лицензионных платежей право:
• распространять и воспроизводить любое количество копий Программы на любом числе компьютеров;
• модифицировать Программу;
• встраивать Программу или ее части в собственные программные продукты Пользователя;
• передавать программу третьим лицам, согласившимся с условиями Соглашения.

3. УСЛУГИ ПО ОБЕСПЕЧЕНИЮ
Автор предоставляет Программу "как есть" и не берет на себя обязательств предоставлять Пользователю поддержку.

4. ОГРАНИЧЕНИЯ
Пользователь обязан:
• сохранять или воспроизводить все уведомления об авторских правах на всех копиях Программы;
• использовать Программу в соответствии с действующим законодательством.

5. АВТОРСКОЕ ПРАВО
Все авторские права на Программу принадлежат Автору. Программа защищена законами и международными соглашениями об авторских правах, а также положениями иных законов и международных договоров в области интеллектуальной собственности. Программа лицензируется, а не продается.

6. ОТКАЗ ОТ ГАРАНТИЙ
Пользователь отвечает за любое использование Программы. В наибольшей степени, допускаемой действующим законодательством, Автор отказывается от предоставления любых гарантий, явных или подразумеваемых, в том числе относительно товарности, безвредности или применимости Программы для какой-либо конкретной цели.

7. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ ЗА КОСВЕННЫЙ УЩЕРБ
В наибольшей степени, допускаемой действующим законодательством, Автор отказывается нести ответственность за какие-либо убытки (включая реальный ущерб и упущенную выгоду), возникшие из-за использования или невозможности использования Программы, даже если Автор был предупрежден о возможности возникновения такого ущерба.

8. ОГРАНИЧЕНИЕ СУММЫ ОТВЕТСТВЕННОСТИ
Вся возможная совокупная ответственность Автора при возмещении ущерба Пользователю по Соглашению не может превысить суммы, эквивалентной одному доллару США.

 


Copyright (C) 2000-2005 Dmitry Shuklin Eidolon