Научная статья на тему 'ПРОГРАММНЫЙ ИНСТРУМЕНТАРИЙ С++ МОДЕЛИРОВАНИЯ ПРОДУКЦИОННЫХ СИСТЕМ'

ПРОГРАММНЫЙ ИНСТРУМЕНТАРИЙ С++ МОДЕЛИРОВАНИЯ ПРОДУКЦИОННЫХ СИСТЕМ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
67
25
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
граф / списки / обобщенное программирование / поиск / деревья / шаблоны / классы / правила продукции / динамические структуры / graph / lists / generalized programming / search / trees / templates / classes / product rules / dynamic structures

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Русакова Зинаида Николаевна

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

C++ SOFTWARE TOOLKIT FOR MODELING PRODUCT SYSTEMS

The algorithmic and software implementation of the pattern of the interpreter for finding solutions in production systems in the state space is described. Template parameters are passed as class parameters and are replaced with real types, which are determined by the used solution algorithms and mathematical models. The developed algorithms for the formation of decision trees are based on the basic methods of search in breadth and depth. To build a solution, the strategy of forming lists of open and closed peaks is used

Текст научной работы на тему «ПРОГРАММНЫЙ ИНСТРУМЕНТАРИЙ С++ МОДЕЛИРОВАНИЯ ПРОДУКЦИОННЫХ СИСТЕМ»

«Научные исследования и инновации»

4. Palaniappan R, Krishnan SM. Identifying individuals using ECG beats. In: International conference on signal processing and communications, 2004 SPCOM '04, 2004. 2004. p. 569-72.

УДК 519.682

Русакова Зинаида Николаевна Rusakova Zinaida Nikolaevna

кандидат технических наук, старший научный сотрудник, доцент candidate of technical sciences, senior researcher, associate professor Московский Государственный Технический Университет

имени Н.Э. Баумана Moscow State Technical University named after N.E. Bauman

ПРОГРАММНЫЙ ИНСТРУМЕНТАРИЙ С++ МОДЕЛИРОВАНИЯ

ПРОДУКЦИОННЫХ СИСТЕМ

C++ SOFTWARE TOOLKIT FOR MODELING PRODUCT SYSTEMS

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

Abstract: The algorithmic and software implementation of the pattern of the interpreter for finding solutions in production systems in the state space is described. Template parameters are passed as class parameters and are replaced with real types, which are determined by the used solution algorithms and mathematical models. The developed algorithms for the formation of decision trees are based on the basic methods of search in breadth and depth. To build a solution, the strategy of forming lists of open and closed peaks is used

Ключевые слова: граф, списки, обобщенное программирование, поиск, деревья, шаблоны, классы, правила продукции, динамические структуры

Международная научно-практическая конференция

Keywords: graph, lists, generalized programming, search, trees, templates, classes, product rules, dynamic structures

В продукционных системах знания представляются с помощью набора правил продукций. [1,2,3]. Посылка является множеством условий, связанных логической связкой "И". Правила продукции представляются графами И-ИЛИ. Если правила-продукции не содержат в условной части конъюнкций, вывод в продукционных системах будет соответствовать поиску решений в пространстве состояний. В пространстве состояний правило представляется направленным ребром графа. База правил соответствует списку ребер графа. Семантические определения вершин задается в словаре, в котором каждая вершина ставится в соответствие понятию предметной области. Правила базы знаний формулируются в терминах понятий предметной области.

В качестве формальной модели описания графа (или базы правил) в пространстве состояний используется представление графа списком ребер [4,5,6]. Для программной реализации используются обобщенные динамические структуры -списки [6,7,8]. Ребро графа описывается классом Rebro, полями которого объявляются начальная и конечные вершины - int firstNum, lastNum, номер правила - num_p, метка ребра, которая изначально равна 0, при включении ребра в дерево решения метка устанавливается в 1. В конструктор класса передаются параметры для инициализации.

class Rebro {

public:

int firstNum, lastNum, num_p, metka;

Rebro(){}

Rebro(int fn, int ln, int vs):firstNum(fn), lastNum(ln), num_p (vs), metka(0){}

};

Вершина описывается классом Node [5], полями которого объявляются целые числа - номер вершины (num) и поле flag, определяющее выбор вершины в процессе поиска. Списки открытых и закрытых вершин и список,

«Научные исследования и инновации» описывающий граф сети, создаются на основе методов разработанного шаблонного класса List [4], моделирующего двунаправленные списки объектов. В классе List определяются адресные поля: указатели на первое и последнее звено и реализованы основные методы обработки списка: добавить в голову, добавить в хвост, взять из головы, взять из хвоста, просмотр списка. template < class T > class List { public:

Elem <T> * first,* last,* cur;

List<T>() {first=0; last=0; cur=0; }

// прототипы основных методов

void add (T temp ); //добавить в хвост void add_head ( T temp); //добавить в голову void del_xwost() ; //удалить из хвоста

void del_head ( ); // удалить из головы };

Реализация методов класса рассматривается в [4]. Звено списка описывается шаблонным классом Elem с информационным полем, тип которого передается как параметр, и двумя указателя [4].

На основе обобщенных классов C++ разработана иерархия классов для моделирования продукционных систем как решение поисковых задач в графах. Обобщенный класс C++ Poisk_graf - базовый класс в иерархии. Полями класса Poisk_graf объявляются списки открытых и закрытых вершин и список ребер, описывающий граф:

List <Tr> listOpenNodes; List <Tr> listCloseNodes; List <T> sreb; Параметрами шаблона являются классы, описывающие ребра (правила) графа - класс Rebro и вершины - класс Node [4]. В конструктор класса с параметрами передаются аргументы: список описания графа, вершина источника и целевая вершина, и вызываются конструкторы создания списков открытых и закрытых вершин

Международная научно-практическая конференция

template < class T , class Tr > class Poisk_graf { public:

int flagys, flagnot, incep, cel ;

List <Tr> listOpenNodes; //список открытых вершин

List <Tr> listCloseNodes; // список закрытых вершин List <T> sreb; //список ребер - правила продукции Poisk_graf <T, Tr > (){}

Poisk_graf <T, Tr> ( List <T> p, int inw, int celw){//конструктор sreb = p; incep=inw; cel= celw; flagys=1, flagnot= 1; listOpenNodes=List <Tr>();

listOpenNodes.add(incep);

listCloseNodes=List <Tr>(); } };

Этот класс является предком классов потомков, в каждом из которых реализуется свой метод поиска [4,5,6]. В интерпретаторах систем продукций используются классические методы, лежащие в основе алгоритмов обработки графов - поиск в ширину и в глубину. В данной работе описывается шаблонный класс потомок, реализующий интерпретатор логического вывода, в методах которого реализуется модифицированная стратегия поиска в глубину.

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

Методы поиска в ширину и в глубину отличаются стратегией формирования списков закрытых и открытых вершин. Эти вершины хранятся и обрабатываются в двух списках поиска: список открытых вершин и список

«Научные исследования и инновации» закрытых вершин. Стратегия метода поиска в глубину: вершина для раскрытия

выбирается из головы списка открытых вершин, и потомки записываются в

голову списка открытых вершин (используется механизм стека).

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

является порождение потомков вершины, выбранной для раскрытия. В

алгоритме поиска от цели в глубину из головы списка открытых вершин

выбирается вершина раскрытия. При поиске в глубину находится один из

возможных потомков. Возможный выбор определяется различными критериями,

которые определяют количество итераций достижения решения. В простейшем

случае этот потомок - вершина первого ребра, инцидентного вершине

раскрытия. Построение дерева решения и поиск достижимых вершин

выполняется по следующему алгоритму.

Пока список открытых вершин не пуст или целевая вершина не достигнута

на каждом шаге цикла выполнить:

Из головы списка открытых вершин извлекается вершина, которая

становится текущей подцелью, для нее вызывается метод поиска по образцу и

определяется потомок;

Далее проверяются условия:

если цель достигнута - выход из цикла поиска;

если потомок в поиске по образцу не найден (вершина не раскрывается) и список открытых вершин не пуст, то вершина, для которой порождали потомка, из списка открытых вершин удаляется и записывается в список запрещенных вершин, который соответствует в поиске в глубину списку закрытых;

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

если потомок определен и цель не достигнута, то запись потомка в голову списка открытых вершин;

Ниже описывается шаблонный класс - потомок базового класса, в двух методах которого определяется список вершин решения модифицированным

Международная научно-практическая конференция методом поиска в глубину, в котором при выборе потомка проверяются

перечисленные ниже условия.

template < class T , class Tr>

class Poisk_graf_potomok_gl: public Poisk_graf <T,Tr>{ public: // конструкторы

Poisk_graf_potomok_gl <T, Tr >() : Poisk_graf <T, Tr > (){} Poisk_graf_potomok_gl <T, Tr> ( List <T> p, int inw, int celw): Poisk_graf(p, inw,celw){}

int potomki_gl (); // методы:- поиск по образцу

int poisk1_gl(); // метод в глубину };

В методе класса potomki_gl () выполняется поиск по образцу, в методе -poisk1_gl() - алгоритм поиска в глубину. Для поиска потомка в цикле просматривается список ребер графа. Найденная вершина записывается в голову списка открытых вершин. Поиск по образцу выполняется методом класса, в котором выполняется цикл просмотра ребер графа.

На каждом шаге цикла проверяется выполнение одного из условий: проверка совпадения вершины раскрытия с начальной вершиной и определения конечной как целевой. В этом случае получено решение и устанавливается значение флага поиска определяющее решение;

если потомок не целевая вершина, то для выбора вершины подцели на следующий шаг поиска необходимо выполнение условий:

выбор инцидентного ребра определяется условием, что ребро еще не было просмотрено (его метка равна 0) и следующая подцель не входит в список запрещенных вершин. Если условия выполняются, то вершина потомок записывается в голову списка открытых вершин и выполняется выход из цикла поиска образца список;

«Научные исследования и инновации» В методе поиска в глубину используются вызывается метод поиска по

образцу. Построение дерева решения и поиск достижимых вершин выполняется

в методах класса по вышеописанному алгоритму.

Пока список открытых вершин не пуст или целевая вершина не достигнута,

на каждом шаге цикла поиска вызывается метод поиска по образцу и

определяется потомок, который заносится в голову списка открытых вершин.

Если потомок в поиске по образцу не найден (вершина не раскрывается) ( j=0 и

решения нет - flagys=1) и список открытых вершин не пуст, то вершина, для

которой порождали потомка, из списка открытых вершин удаляется и

записывается в список запрещенных вершин. Если потомок определен и цель не

достигнута, то продолжение цикла поиска.

template < class T , class Tr>

int Poisk_graf_potomok_gl <T,Tr >:: int poisk1_gl() { int i,j,k, n; listCloseNodes.first=0; while ( flagys && flagnot ) { j=potomki_gl (); // определение потомка if ( flagys==0 ){ return 1; }

else if ( flagys && j==0 && listOpenNodes.first->next!=0 ) { // вершина не раскрывается: нет допустимых потомков //запись в список закрытых вершин listCloseNodes.add_head(listOpenNodes.first->data.num); listOpenNodes.del_head(); }

else // нет решения if ( j==0 && listOpenNodes.first->next==0 && listOpenNodes.first->data.num ==incep) {

flagnot=0; return 0; }

}

}

Вершины графа, по которым восстанавливается список правил вывода, содержатся в списке открытых вершин. При объявлении объекта класса

Международная научно-практическая конференция параметры шаблона передаются как параметры класса: Poisk_graf_potomok_gl < Rebro , Node > graf;

Заключение: Разработан шаблон интерпретатора для решения задач моделирования продукционных систем в пространстве состояний.

Библиографический список:

1.Новиков Ф.А Символический искусственный интеллект: математические основы представления знаний Москва: Издательство Юрайт, 2019,278

2.Седжвик Р. Алгоритмы на C++. Фундаментальные алгоритмы и структуры данных. - М.: Вильямс, 2013. - 1056 с.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3.Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 3-е изд. - М.: Вильямс, 2013. - 1328 с.

4.Русакова З.Н. Применение обобщенного программирования для решения поисковых задач в графах Журнал Тенденции развития науки и образования. Апрель 2020 г. №60, Часть 2 Изд. НИЦ «Л-Журнал»,

5.Русакова З.Н. Динамические структуры данных и вычислительные алгоритмы. Visual C++. Санкт-Петербургбург.2014, 272 с.

6.Русакова З.Н., Рудаков И.В. Структуры данных в С++. Москва: Издательство МГТУ им. Н.Э Баумана.2020, c157.

7. Русакова З.Н., Разработка инструментальных средств для решения задач принятия решений. Интеллектуальные системы. Труды Девятого международного симпозиума, М., РУСАКИ, 2010, 773

8. Страуструп - 1999 Страуструп Б. Язык программирования C++. СПб.: Бином, 1999. с. 990.

i Надоели баннеры? Вы всегда можете отключить рекламу.