Научная статья на тему 'Застосування мови програмування Python для побудови баз знань та експертних систем'

Застосування мови програмування Python для побудови баз знань та експертних систем Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
323
43
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БАЗА ЗНАНИЙ / KNOWLEDGE BASE / ОНТОЛОГИЯ / ONTOLOGY / ПРЕДСТАВЛЕНИЕ ЗНАНИЙ / KNOWLEDGE REPRESENTATION / ЭКСПЕРТНАЯ СИСТЕМА / EXPERT SYSTEM

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Копей В.Б., Семанишин Л.М.

На основе фреймовой модели представления знаний предложены принципы разработки баз знаний и экспертных систем на универсальном языке программирования Python. Проанализированы объектноориентированные возможности и средства интроспекции Python. Разработана демонстрационная база знаний и даны примеры запросов к ней

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

Use programming language Python for construction of knowledge bases and expert systems

On the basis of frames for knowledge representation have been proposed principles for the development of knowledge bases and expert systems on general-purpose programming language Python. Object-oriented and introspection capabilities of Python have been analyzed. The demo of knowledge base and the examples of querying to it have been developed

Текст научной работы на тему «Застосування мови програмування Python для побудови баз знань та експертних систем»

2. Забара С. С., Изварин И. В. Семантические базы данных документов с различным реквизитным содержанием // Комп'ютер-но-штегроваш технологи: осв™, наука, виробництво: Науковий журнал / Пщ редакщею доктора техшчних наук В. Д. Рудь. - Луцьк: Видавництво Луцького нацюнального техшчного ушверситету, 2011, № 5. — С. 87-92.

3. Изварин И.В. Жизненный цикл информационного потока // Интеллектуальные сисьемы принятия решений и проблемы вычислительного интеллекта: Материалы международной научной конференции. Том 1. - Херсон: ЧНТУб 2011ю - с. 76-78.

4. Gerald J. Kowalski, Mark T. Maybury. Information Storage and Retrieval Systems. Theory and Implementation. Second Edition. Kluwer Academic Publishers 2002.

5. Greengrass Ed. Information Retrieval: A Survey, 2000.

6. Stefano Cen, Marco Brambilla. Search Computing. Trends and Developments. Springer-Verlag Berlin Heidelberg 2011.

УДК 004.822

ЗАСТОСУВАННЯ МОВИ ПРОГРАМУВАННЯ PYTHON ДЛЯ ПОБУДОВИ БАЗ ЗНАНЬ ТА ЕКСПЕРТНИХ СИСТЕМ

-□ □-

На ocHoei фреймовог модел1 подання знань запропоновано принципи розробки баз знань та експертних систем утверсальною мовою програмування Python. Проанал1зовано об'ектно-ор1ентоват можливостг та засо-би ттроспекци Python. Розроблено демон-страцшну базу знань та подано приклади запитгв до нег

Ключов1 слова: база знань, онтолотя,

подання знань, експертна система

□-□

На основе фреймовой модели представления знаний предложены принципы разработки баз знаний и экспертных систем на универсальном языке программирования Python. Проанализированы объектно-ориентированные возможности и средства интроспекции Python. Разработана демонстрационная база знаний и даны примеры запросов к ней

Ключевые слова: база знаний, онтология,

представление знаний, экспертная система □-□

On the basis of frames for knowledge representation have been proposed principles for the development of knowledge bases and expert systems on general-purpose programming language Python. Object-oriented and introspection capabilities of Python have been analyzed. The demo of knowledge base and the examples of querying to it have been developed

Keywords: knowledge base, ontology, knowledge representation, expert system -□ □-

1. Вступ

Вщомо, що розвиток науки основуеться на отри-манш об'ективних i системно-оргашзованих знань, як допомагають людям рацюнально оргашзувати свою дiяльнiсть i виршувати рiзнi проблеми, котрi виникають в ü процесс Сучасш комп'ютерш технологи зумовили розвиток шженерп знань - обласи науки про штучний штелект, яка вивчае методи i засоби отримання, представлення, структурування

В.Б. Копей

Кандидат техычних наук, доцент Кафедра технологи нафтогазового машинобудування 1вано-Франмвський нацюнальний техшчний ушверситет нафти i газу вул. Карпатська, 15, м. 1вано-Франмвськ, 76019 Контактний тел.: (03422) 4-30-24 E-mail: vkopey@gmail.com

Л.М. Семанишин

Астрант

1вано-Франмвська ф^я Вщкритого мiжнародного уыверситету розвитку людини «УкраТна» вул. Набережна, 42а, м. 1вано-Франмвськ, 76010 Контактний тел: 096-990-89-38 E-mail: symanyshyn_lesja@mail.ru

i використання знань. Iнженерiя знань пов'язана з розробкою баз знань i експертних систем [1,2].

База знань - це сукупшсть фак^в i правил лопч-ного висновку (виведення) в обранш предметнш область Правила лопчного висновку - це правила пере-творення вихщно! системи факив (суджень) в нову систему факив (висновюв). Наприклад, за такими правилами з вихщних факив "ва люди смертш" i "Сократ - людина" можна зробити висновок "Сократ смертний". В даному випадку правилом висновку е

параметризоване твердження "якщо Bci люди смер-тш i Х - людина, то Х смертний". Власне наявшсть правил висновку е основною вщмшшстю баз знань вiд баз даних.

Програма, яка виконуе лопчний висновок з по-передньо побудованоï бази факпв i правил у вщпо-вiдностi з законами формальноï лопки, називаеться машиною виведення. База знань i машина виведен-ня е основними компонентами експертно!' системи - програми, яка призначена для пошуку способiв вирiшення проблем з певноï предметноï областi. Для такого пошуку користувач подае вщповщш запити до бази знань.

Для збереження знань в комп'ютернш системi з можливштю ïx подальшоï автоматизованоï обробки використовують рiзноманiтнi методи подання (пред-ставлення) знань. Прикладами методiв подання чгг-ких знань е: логiка першого порядку, мова програ-мування Пролог, реляцшш системи, продукцiйна модель, фреймова модель, семантичш мережi [1,2]. Щ методи можна реалiзувати рiзними формальними мо-вами подання знань, наприклад класу онтологш. Пiд онтологieю в шформатищ розумiють детальну фор-малiзацiю деякоï областi знань за допомогою концеп-туальноï схеми. Онтологiя може використовуватись для представлення в базi знань iерарxiï понять i ïx вщносин. Наприклад, мова Веб-Онтологiй OWL (ontology web language) [3] була розроблена для реалiзацiï концепцп семантичноï павутини в межах всесвiтньоï павутини (WWW) i е розширенням мови RDF (Resource Description Framework) - мови розмгтки на основi XML, яка використовуеться для подання тверджень про ресурси в виглядi придатному для машинноï обробки. Дiалекти OWL Lite i OWL DL основан на дескрiпцiйних лопках - мовах подання знань, що дозволяють описувати поняття предметноï обласп в недвозначному, формалiзованому виглядi. Для ство-рення запитiв до даних, поданих за моделлю RDF, використовуеться мова запипв SPARQL. Не зважа-ючи на усi переваги OWL i SPARQL е спещальними мовами, що певною мiрою обмежуе '¿х можливость

2. Постановка задачi

Основною щеею aBTopiB е застосування в якоси мови подання знань та створення запи^в до бази знань мови програмування Python [4,5], яка на вщ-мшу вiд спецiальних мов е мовою загального при-значення, i тому дае розробнику експертних систем набагато б^ьше можливостей. Для цього можна ви-користати об'eктно-орieнтованi можливостi Python та 11 засоби штроспекцп, адже вiдомо, що таю методи подання чиких знань як фрейми i семантичнi мережi можна просто реалiзувати засобами об'eктно-орieн-тованого програмування (ООП).

3. Огляд можливостей Python для подання знань

Чому авторами була вибрана саме Python? Python - розповсюджена високорiвнева мова загального призначення з акцентом на продуктившсть розробника. Основш ïï особливостк працюе майже

на у«х вiдомих платформах, е вщкритим i вiльним програмним забезпеченням, виконуеться шляхом iнтерпретацii байт-коду, тдтримуе кiлька парадигм програмування (в тому числi об'ектно-орiентоване), код програм компактний i легко читаеться, мовi ха-рактернi динамiчна типiзацiя, повна штроспекщя, зручнi структури даних (кортежi, списки, словники, множини), велика стандартна бiблiотека та велика юльюсть стороннiх бiблiотек рiзноманiтного при-значення.

Python володiе потужними об'ектно-орiентова-ними можливостями, наприклад, у« значення в програмi е об'ектами. ООП основане на використан-ш об'eктiв, якi е абстрактними моделями реальних об'екив. Об'екти створюються за допомогою спе-цiальних типiв даних - клаив. Кожен клас описуе множину об'екив певного типу. Приклад ООП мовою Python:

# -*- coding: UTF-8 -*-import inspect

# клас A успадкований вщ object class A(object):

'"Клас A''' # рядок документацп

def_init_(se/f,a): # конструктор

self.a=a # атрибут a def f(sef): # метод f '"Повертае self.a''' # рядок документацп return self.a class B(A): # клас B успадкований вщ A '''Клас B''' # рядок документацп

def_init_(sef,a,b): # конструктор

# виклик конструктора базового класу

super(B, self)._init_(a)

selfb=b # атрибут b def f(sef): # метод f '''Повертае суму self.a+self.b''' # рядок документацп return self.a+self.b

obj=B(0,2) # створення об'екта класу B, виклик конструктора obj.a=1 # змша значення атрибута a print obj.f() # виклик методу f

Основними принципами ООП е шкапсулящя, успадкування i полiморфiзм. Iнкапсуляцiя - об'ед-нання даних (атрибутiв) i функцiй 1х опрацювання (методiв) в клась

Наприклад, в класi B об'еднано атрибути a i b та

методи__init__() i f(). Успадкування - можлившть

створення похщних класiв шляхом успадкування ними члешв базового класу. Наприклад, атрибут a класу B успадкований вщ класу A. Полiморфiзм - властившть об'ектiв з однаковою специфiкацiею мати рiзну реалiзацiю. Наприклад, функцп f() кла-сiв A i B мають одну назву, але виконуеться по^з-ному.

Розглянемо засоби штроспекцш Python. Python пiдтримуе повну штроспекщю часу виконання. Тоб-то для будь-якого об'екта шд час виконання можна отримати всю шформащю про його структуру. При-клади:

print dir(B) # список ¡мен атрибута класу B print dir(obj) # список ¡мен атрибутш об'екта obj

print id(obj) # ун¡кальний ¡дентифкатор об'екта print obj._sizeof_() # розмф об'екта в пам'ят¡ в байтах

print B._doc_# рядок документаци класу B

print obj .f._doc_# рядок документаци методу f

print B._name_# ¡м'я класу B

print_name_# ¡м'я модуля

print type(obj) # тип (клас) об'екта obj

# або

print obj._class_

print obj._class_._name_# ¡м'я типу об'екта obj

print vars(obj) # словник з парами атрибут:значення

# або

print obj._dict_

print hasattr(obj, 'a') # чи е атрибут 'a' у об'екта obj? setattr(obj,'a',3) # змша значення (3) атрибута 'a' об'екта obj

# або

obj._setattr_('a',3)

print getattr(obj, 'a') # значення атрибута 'a' об'екта obj

# або

print obj._getattribute_('a')

# або

print obj._dict_['a']

print callable(obj.f) # чи атрибут f е методом?

print isinstance(obj, B) # чи obj е екземпляром B?

print issubclass(A, object) # чи A е тдкласом object?

print A._subclasses_() # тдкласи A

print B._bases_# кортеж базових класш

print B._mro_# кортеж з ¡ерархкю базових класш

# або

import inspect print inspect.getmro(B)

# повертае список пар (¡м'я, значення) члешв об'екта print inspect.getmembers(obj)

print inspect.getcomments(A) # коментар перед класом A print inspectgetsource(A) # текст вихдаого коду класу A print inspect.isclass(A) # чи A е класом? print inspect.ismethod(obj.f) # чи obj.f е методом?

Найб^ьш вщомим шструментом для штроспек-ци в Python е функщя dir(), яка повертае список iмен атрибуив переданого ш об'екта. Ця функщя працюе з усiма типами об'екив. Функцiя id() повертае уш-кальний щентифжатор об'екта. Рядок документацii _doc_ - це атрибут, який мштить рядок-коментар, який описуе об'ект. Рядки документаци дозволяють зберiгати документацiю на класи i функцii прямо в кодi програми i звертатись до mi пiд час виконан-ня програми. Атрибут _name_ мiстить iм'я об'екта. Функцiя type() або атрибут _class_ дозволяють отри-мати тип об'екта. Функщя vars() або атрибут _dict_ дозволяють отримати словник з парами атрибут: значення об'екта. Функци hasattr(), getattr() i setat-tr() дозволяють вiдповiдно перевiрити наявнiсть у

об'екта заданого атрибута, повернути його i змшити значення. Функцiя callable() дозволяе визначити чи об'ект е функщею або методом. Функцiя isinstance() дозволяе визначити чи об'ект е екземпляром задано-го типу. Функцiя issubclass() дозволяе визначити чи успадковуеться один клас вщ шшого, а метод _subc-lasses_() повертае список пiдкласiв. Кортеж базових клаив та ix iерархiю можна отримати за допомогою атрибуив _bases_ i _mro_. Модуль inspect мштить додатковi функцii, якi допомагають отримати шфор-мацiю про об'екти шд час виконання.

Застосування штроспекци дозволяе ефективно програмувати меxанiзми виведення та запити до бази знань.

4. Приклад бази знань i запиив до не! мовою Python

Подамо приклад створення мовою Python демон-страцiйноï бази знань, яка мштить поняття (класи) персони i cïm'ï, вiдповiднi iндивiди (об'екти) та вла-стивоси (атрибути), якi описують родиннi зв'язки мiж iндивiдами. Для цього застосуемо фреймову модель подання знань.

Елементи розробленоï авторами онтологи частко-во вiдповiдають основним елементам OWL Lite [3]: класи (з можливштю створення шдклаив), власти-воси (якi можуть бути функцiональними, шверсни-ми, симетричними i транзитивними) i шдивщи. Тому можливим е iмпорт i експорт таких онтологiй в OWL. Модуль Python, який мштить базу знань i запити до не! повинен мати блочну структуру - спочатку ство-рюються класи, поим шдивщи, потiм задаються вла-стивостi iндивiдiв, а в кшщ виконуються запити.

Класи онтологiï вщповщають класам мови Python, а шдкласи можна створювати за допомогою меха-нiзму успадкування Python. Так розроблено базовий клас Base (описуе у« об'екти, яю мають iм'я), класи Persona (описуе персону), PersonaMarried (описуе одружену персону, успадковуеться вщ Persona) i Family (описуе «м'ю).

# -*- coding: UTF-8 -*-

class Base(object): '"Базовий клас онтологи"' def_mit__(sefname):

sefname-name # назва обекта

KB[sefname]-.sef# добавиги себе в базу знань

###########################################################

class Persona(Base): # успадковуе клас Base '"Клас, який описуе персону'" def_mit_(sefname):

Base._init_(sefname) # виклик консгрукгора базового класу

# симетрична i транзигивна властивють 'е братом/сестрою'

Property(subj-.sef name-isSibling',

symmetric=True, transitive-True)

# транзитивна властивють 'е нащадком' (iнверсна - 'е батьком')

Property(subj-.sef name-'isChild',

inverseName-'isParent', transitive-True)

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

# властивють 'е членом амТ (iнверсна - 'мае членiв')

Property(subj -self, name-'isMember',

inverseName-'hasMembers',transitive-True)

###########################################################

class PersonaMarried(Persona):

"'Клас, який описуе одружену персону"' def_init__(sefname):

Persona._init_(sef name)

# симетрична i функцюнальна властивють 'е одружений' Property(subj =self, name='isMarried',

symmetric=True, functional=Trae)

# транзитивна властивiсть 'е батьком' (iнверсна - 'е нащадком') Property(subj =self, name='isParent',

inverseName='isChild', transitive=True)

###########################################################

class Family(Base): '"Клас, який описуе ам'ю'" def_init__(sefname):

Base._init_(sefname)

# властивiсть 'мае членiв' (iнверсна - 'е членом амТ) Property(subj=sef name='hasMembers',

inverseName='isMember', transitive=True) defnumberSf): "'Повертае кшьюсть члешв амТ" return sefhasMembers()._len_()

Iндивiди онтологп вiдповiдають об'ектам Python -значенням словника KB. Такий споаб дозволяе зверта-тись до шдивдав за ïx iменем у виглядi Юнiкод-рядка. Iндивiди можуть мати властивост у виглядi атрибупв Python, якi дозволяють описувати вщношення мiж iндивiдами. Властивостi е об'ектами класу Property, мають атрибути subj (суб'ект властивостi - це шдивщ, який мае дану властивiсть), name (назва властивосп), inverseName (назва iнверсноï властивостi), functional (визначае чи властивють функцiональна), symmetric (визначае чи властивЮть симетрична), transitive (визначае чи властивють транзитивна), set (множина зна-

чень властивостi) та методи _init_() (конструктор,

створюе властивють), add() (добавляе об'ект або кортеж об'екпв в множину) i _call_( ) (повертае множину значень властивостi).

Останнi два методи реалiзують елементи машини виведення. Таю елементи можуть бути присутш також в запитах до бази знань.

class Property(object): '"Клас, який описуе власгивгсгь об'екта'"

def init (sefsubj,name,inverseName=",functional=False, symmetric=False, transitive=False): "'Конструктор'"

sefsubj=subj # суб'ект властивосп sefname=name # назва властивосп

sefinverseName=inverseName # назва шверсжя властивосп seffunctional=functional # властивють функцюнальна sefsymmetric=symmetric # властивють симетрична seftransitive=transitive # властивють транзитивна sefset=set() # множина значень властивосп

# установити атрибут властивосп для суб'екта sefsubj._setattr (sefnamesefi

def add(sef*args): "'Добавляе об'ект або кортеж об'екпв в множину'" for obj in args: # для вых об'екпв в args if seffunctional: # якщо властивють функцюнальна sefset.clear() # очистити множину

if sefinverseName!=": # якщо е ¡нверсна властивють # якщо суб'екта немае в шверснш властивосп об'екта

if sefsubj not in obj._dict_[sefinverseName].set:

# добавити його в ¡нверсну властивють об'екта obj._dict_[sefinverseName] .set.add(sefsubj)

if sefsymmetric: # якщо властивють симетрична #якщо субекта немае в аналопчнш властивосп обе

if sefsubj not in obj._dict_[sefname] .set:

# добавити його в аналопчну властивють об'екта obj._dict_[sefname].set.add(sefsubj)

sefset.add(obj) # добавити об'ект в множину

def_call (self, showTransitive=False):

'"Повертае множину значень властивосп (showTransitive=True - транзитивно! властивосп) Дозволяе викликати об'ект як функцю'" def getTransitive(subj ,s=set()): "'Повертае множину значень транзитивно! властивосп. Рекурсивна'"

# якщо subj мае атрибут self.name if hasattr(subj, sefname):

#для уых об'екпв в властивосп з назвою self.nami

for obj in subj._dict_[sefname] .set:

if obj not in s: # якщо obj немае в множит s s.add(obj) # добавити об'ект в множину s=getTransitive(obj,s) # рекурсш return s # повертае множину

# якщо властивють транзитивна i показувати транзи if self .transitive and showTransitive:

# множина значень транзитивно! властивосп s=getTransitive(sefsubj)

# вилучити self.subj з множини, якщо е s.discard(sefsubj)

return s

# шакше повернути множину значень властивосп else: return self. set

База знань мктить шдиввди 'я', 'дружина', 'мати', 'батько', 'донька' i т.д. - об'екти вiдповiдних клаав. Створений об'ект iндивiда автоматично додаеться в словник KB. Блок створення об'екпв шдиввдв вигля-дае так:

KB={} # словник бази знань Persona('onyK') Регеопа('племшниця') Persona('cHH')

for x in ('я','дружина','мати','батько','донька','зять', 'теща', 'тесть', 'двд', 'баба', 'стрийко','прадвд', 'брат', 'сестра', 'вуйко', 'тiтка'):

PersonaMarried(x)

Клас Persona мктить властивостi isSibling (е братом/сестрою), isChild (е нащадком), isMember (е членом сiм'i); клас PersonaMarried - властивостi isMarr-ied (е одруженим з), isParent (е батьком); клас Family - властивють hasMembers (мае членiв). Властивiсть створюеться пiд час створення iндивiда шляхом ви-

клику ii конструктора _init_() з параметрами subj,

name, inverseName, functional, symmetric, transitive, яю описують ii характеристики. Так властивють isMarr-ied е функцюнальною, тобто мае ушкальне значення (адже неможливо бути одруженим б^ьше нiж з одним шдивщом). Вона також е симетричною, що до-зволятиме, наприклад, з твердження "я одружений з дружиною" робити лопчний висновок "дружина одру-жена зi мною". Властивостi isChild i isParent е взаемно шверсними. Це дозволяе, наприклад, з твердження "я е нащадком дща" робити лопчний висновок "дщ е моiм предком". Вони також е транзитивними. Це до-зволяе, наприклад, з тверджень "я е нащадком батька"

i "батько е нащадком дща" робити лопчний висновок "я е нащадком дща".

Значення в властивiсть добавляються за допомогою методу add(). Блок добавлення значень в власти-востi iндивiдiв виглядае так:

# суб'ект 'я' 'е одружений' з об'ектом 'дружина' KB^'^isMamed.add^B^pj^ma']) KB['H'].isChild.add(KB['MaTH'],KB['6aibKo']) KB[v].isParentadd(KB['cm'],KB[>HbKa']) KB['я'].isSibling.add(KB['бpaт'],KB['cecтpa']) KB['мaти'].isChild.add(KB['бaбa'],KB['дiд']) Щ'зять']^Раге^^(щ'онук']) KB['зять'].isChild.add(KB['тeщa'],KB['тecть']) Щ"мoяciм'я"].hasMembers.add(Щ'я'],Щ'дpyжинa'], KB['cин'],KB['дoнькa'])

Запити до бази знань створюються шляхом по-шуку об'екпв в множинах. Для цього можна викори-стовувати оператори Python for та if. Для доступу до множин використовують об'ект KB, метод класу Property _call_() та стандартш математичш операцп над множинами. Метод ^all^^ параметром showTransiti-ve=True повертае множину усiх значень транзитивноï властивостi. Наприклад, запит, який виводить уах предкiв онука:

for x in KB['oHyK'].isChild(showTransitive=True): print x.name,

На вщмшу вiд OWL в класах та^ онтологи мо-жуть бути властивосп, якi не зберiгають конкретного значення, а дозволяють його обчислити. Наприклад, метод класу Family number() обчислюе i повертае юль-юсть члешв ам'ь Наступний запит виводить ам% в яких бiльше двох члешв:

for x in KB.itervalues():

if x._class_._name_=='Family':

if x.number()>2: print x.name,

Серед вихщних факпв вiдсутнi факти про батьюв брата i сестри, але е факти про моïх батьюв, брата i сестру. Тому наступний запит дозволяе вивести батьюв брата i сестри:

for x in KB['6paï'].isSibling(True)|KB['cecTpa'].isSibling(True): for y in x.isChild(): print y.name,

Перед блоком запиив можна створити блок з правилами виведення. Для прикладу, створимо правило

виведення: "якщо x е братом (сестрою) y i x е дитиною z, то y е дитиною z ".

p=[] # обмежимо множину пошуку класом PersonaMarried for x in KB.itervalues():

if x._class_._name_=='PersonaMarried' :

p.append(x) for x in p: for y in p: for z in p:

if x in y.isSiblingO and x in z.isParent(): # добавити нов1 факти в базу знань KB[y.name].isChild.add(KB[z.name]) print y.name+'-'+z.name,

Наявшсть великоï кiлькостi таких правил може суттево уповшьнити виконання програми, тому ба-жано виконувати цей код пльки один раз i збертти об'екти бази знань в постшнш пам'ятi за допомогою способiв серiалiзацiï даних Python (модулiв pickle або shelve).

5. Висновки

Запропоноваш авторами методи побудови баз знань i експертних систем мовою Python мають переваги у порiвняннi з шнуючими. Основною перевагою е те, що розробнику доступш усi широкi можливостi мови Python.

Пiд час розширення функцiональностi системи немае потреби винаходити ще одну спецiальну мову опису знань i мову запиив до них. Завдяки ушвер-сальноси Python база знань е гнучкою до змш, iснуе можливiсть легкого удосконалення клаив, атрибутiв, правил виведення i запиив. Цi принципи можна використати для розробки повнощнних експертних систем в наущ i техшщ. Наприклад, автор плануе '¿х застосування для побудови експертноï системи з проблем надшноси i довговiчностi рiзьбових з'еднань [6].

В такому пiдходi до побудови баз знань е i певш не-должи. Зокрема, користувач повинен добре володгги мовою Python. Недолiком е також складшсть програ-мування машини виведення. Проте, якщо онтолопя може бути експортована в OWL, то до програми можна тдключати вiдомi машини введення FaCT++, HermiT, Cwm (реалiзована на Python), Pellet, яю мають ефективнi алгоритми i доступш у вихщному кодi. У порiвняннi з iснуючими редакторами онтологш тут можуть бути певнi незручноси створення великоï бази знань.

Тому для ефективного використання програма потребуе надбудови у виглядi графiчного iнтерфейсу користувача.

Лiтература

1. Субботш С. О. Подання й обробка знань у системах штучного штелекту та тдтримки прийняття ршень: навчальний по-

абник / С. О. Субботш. — Запор1жжя: ЗНТУ, 2008. — 341 с.

2. Рыбина Г.В. Основы построения интеллектуальных систем / Г. В. Рыбина. - М.: Финансы и статистика, ИНФРА-М, 2010.

- 432 с.

3. OWL Web Ontology Language. Overview [Електронний ресурс]: W3C Recommendation 10 February 2004 / W3C. - Режим до-

ступу: http://www.w3.org/TR/owl-features/.

4. Бизли Д. Python. Подробный справочник / Дэвид Бизли, 4-е издание. — Пер. с англ. — СПб.: Символ-Плюс, 2010.

— 864 с

5. Лутц М. Изучаем Python / Марк Лутц, 4-е издание - Пер. с англ. - СПб.: Символ-Плюс, 2010. — 1280 с.

6. Копей В.Б. Принципи розробки бази знань з проблем надшност i довгов1чност р1зьбових з'еднань / В.Б. Копей, Ю.Д.

Петрина // Науковий вюник Нащонального техшчного ушверситету нафти i газу. - № 4(26). - 2010. - С.66-69.

Викладена методика експери-ментального визначення po3nodi-лу ймовiрностей значень параме-mpie транспортних nomoKie на вулично-дорожтй мережi м^та Ключoвi слова: емтрико-сто-хастичний nidxid, розподт ймо-

вiрнoсmей

□-□

Изложена методика экспериментального определения распределения вероятностей значений параметров транспортных потоков на улично-дорожной сети города

Ключевые слова: эмпирико-стохастический подход, распределение вероятностей

□-□

The method of experimental determination of the probability distribution of the parameters of traffic flows on the road network of the city are presented

Keywords: empirical-stochastic approach, probability distribution

УДК 656.13

МЕТОДИКА ЭКСПЕРИМЕНТАЛЬНОГО ОПРЕДЕЛЕНИЯ РАСПРЕДЕЛЕНИЯ ПАРАМЕТРОВ ТРАНСПОРТНЫХ

ПОТОКОВ

Е.М. Гецович

Доктор технических наук, профессор*

Н.А. Семченко

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

Старший преподаватель* *Кафедра организации и безопасности дорожного

движения

Харьковский национальный автомобильно-дорожный

университет

ул. Петровского, 25, г. Харьков, Украина, 61002 Контактный тел.: (057) 707-37-06

1. Вступление

Непрерывный рост уровня автомобилизации населения при существенном отставании развития улично-дорожной сети (УДС) городов в сочетании с высокой концентрацией центров тяготения в их центральных деловых частях (ЦДЧМ) обусловливают высокий спрос на въезд, проезд и парковку в ЦДЧГ. Одним из наиболее эффективных путей снижения напряженности в работе транспортной системы ЦДЧГ является создание автоматической системы управления дорожным движением (АСУ ДД) всей центральной части. В задачи такой системы входит непрерывный мониторинг транспортных потоков, прогнозирование развития ситуаций на всех участках УДС ЦДЧГ, выявление проблемных участков и перекоммутация транспортных потоков в обход проблемных участков с помощью различных технических средств регулирования дорожного движения (ДД).

Решение задачи прогнозирования развития ситуаций на всех участках УДС ЦДЧГ возможно только на основе моделирования движения транспортных потоков при заданной схеме организации ДД.

Авторам представляется возможным создание модели движения транспортных потоков и на ее базе

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

При эмпирико-стохастическом подходе транспортный поток представляется в виде движущихся «пакетов» автомобилей [1].

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

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