главная     об авторе       содержание        часть1      часть3       часть4      литература

II МАТЕМАТИЧЕСКИЕ ОСНОВЫ МОДЕЛИРОВАНИЯ И АЛГОРИТМИЗАЦИИ СЛОЖНЫХ СИСТЕМ

2.1. Элементы теории множеств

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

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

({а, а,...,а} = {a}). Множества обозначаются буквами А, B, .. , Z и выражениями

{a1, ..., an}, где аi - символ элемента множества, i = 1,...,n. Основными отношениями абстрактных множеств являются: 

Image_1.gif (1516 bytes)

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

Image_2.gif (1674 bytes)

Важное значение в построении формальной теории множеств имеют так называемые особые множества и подмножества. К ним относятся:

Image_3.gif (2331 bytes)

В алгебре множеств ( точнее подмножеств универсума) понятия пустое множество и универсум играют роль аналогичную той, которую играют понятия нуль и единица в арифметике. Свойства перечисленных отношений и операций над множествами определяются системой аксиом, образующих абстрактную алгебру множеств. Аксиомы абстрактной алгебры множеств приведены в    таблице 2.1.

Таблица 2.1.    Основные свойства операций над множествами

Image_4.gif (8635 bytes)

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

2.2. Представление множеств и подмножеств обобщенными кодами.

Пусть U - множество универсум, содержащее в себе все элементы с определенными свойствами, например множество всех людей, множество всех космических аппаратов, множество всех вещей, находящихся в вашей комнате и так далее. Для описания свойств всех элементов универсума вводится база переменных X1, X2, ..., Xn, характеризующих показатели соответствующих свойств Si элементов из U и принимающих значения из множеств   Ai = {a0, a1, ..., as}i,  i = 1,...,n.   При этих обозначениях элемент из U представляется кортежем (кодом)

kj = (ае1, аg2, ..., аsn)О(A1ґ A2ґ ... ґ An). Пусть символ a i обозначает любое, в том числе и пустое, подмножество из Аi, тогда кортеж Кj= (a 1, a 2, ..., a n) будем называть обобщенным кодом подмножества

Mj = (a 1ґ a 2ґ ...ґa n)Н(A1ґ A2ґ ... ґ An) = U. Другими словами, Kj есть код подмножества Mj из универсума U. Обобщенный код Kj, в котором все компоненты a 1,...,a n представляют собой конкретные значения ае1,..., аsn переменных X1,...,Xn, называется элементарным кодом, то есть - кодом отдельного элемента из U.

Пример. Пусть U есть множество людей, обладающих следующими свойствами: X1 - имя из множества {петр, ольга, иван, фома}=A1

X2 - пол из {мужчина, женщина}=A2,

X3 - год рождения из {1950, ..., 1996}=A3,

X4 - образование из {начальное, среднее, высшее}=A4.   Тогда конкретные люди из множества U обозначаются элементарными кодами, например К1=(иван, мужчина, 1960, высшее), а подмножество M2 из U всех мужчин, не имеющих высшего образования, обозначается обобщенным кодом

К2=(- 1, мужчина,щ высшее, - ), где знак - 1 означает, что переменная Х1 может принимать любое значение из множества А1.  Весьма важную роль в теории множеств и в других формальных системах играют так называемые особые подмножества, к которым относятся: одноэлементное множество {a}, пустое множество Image_5.gif (79 bytes) , собственно множество А в целом, дополнение элемента {a} к множеству А, перечисление элементов ({ae}, ..., {ag}) из А, перечисление дополнений и дополнение перечисления.   Для построения обобщенных кодов в теории исчисления обобщенных кодов [14] используются специальные символы особых подмножеств базовых множеств Ai. Вот эти символы: aei » {ae}iОAi,

` aei » (Ai \ {ae}i)  или щ aei » (Ai \ {ae}i),     - i » Ai,        q i » Image_5.gif (79 bytes) ,

е, ..., аs)i » {{ae}, ..., {as}}iН Ai,    щ е, ..., аs) » Ai \ {{ae}, ..., {as}}i

и (щ ае, ..., щ аs). Здесь символ “» ” используется в качестве символа метаязыка, обозначающего эквивалентность выражений. В формальных выражениях исчисления обобщенных кодов символ a i обозначает переменную с множеством значений

{aei,` aei, - i, q i, (ае,...,аs),ще, ..., аs), (` ае, ...,` аs) }.  Поэтому формула Кj=(a 1,...a i,...,a n) означает, что в конкретных обобщенных кодах символы a i замещаются соответствующими символами особых подмножеств из множеств Аi. Позиции переменных a i в обобщенном коде Кj называются разрядами обобщенного кода. Разряды различных обобщенных кодов, относящиеся к одной и той же переменной Хi, называются одноименными.  Представление подмножеств универсума U обобщенными кодами позволяет выполнять над ними все теоретико-множественные операции по формальным правилам, посредством определенных действий над обобщенными кодами, подобно тому, как выполняются операции над числами, представленными цифровыми кодами. Термин “обобщенный код” заимствован из работ профессора Л. Т. Мавренкова (ВИА им.Ф.Э.Дзержинского), где он использовался для обозначения интервалов двоичных чисел.

2.3. Исчисление обобщенных кодов подмножеств универсума

Исчислением обобщенных кодов подмножеств MjН U называется формальная система, в которой определены:

В дальнейшем, для краткости, вместо слов: “отношение (операция) над подмножествами Mj и Mk,представленными обобщенными кодами Kj и Kk”, будем говорить: “отношение (операция) над кодами Kj и Kk”, имея в виду, что речь идет о действиях над соответствующими подмножествами элементарных кодов, представленными в обобщенных кодах Kj и Kk.

Пусть Kj= (a 1,..., a i, ..., a n)j и Kk= (a 1,..., a i, ..., a n)k,

где a ij, a ikО {- i, aei, ` aei, q i, (аe,...,аs), щ e, ..., аs), (` аe, ...,` аs) },

iО{1,...,n}, j,kО{1,...,m}, и пусть предполагается, что отношения между символами особых подмножеств указывают на те же отношения между соответствующими этим символам подмножествами элементов aeiОAi. Тогда для определения истинности отношений между подмножествами MjНU можно применять следующие правила:

  1. Kj=Kk, если, и только если, a ij= a ik для всех i=1,..., i=n;
  2. KjНKk, если, и только если, a ijНa ik для всех i=1,..., i=n;
  3. KjМKk, если хотя бы в одном одноименном разряде имеется отношение a ij I a ik при наличии отношений a ijНa ik во всех остальных одноименных разрядах.

Пример 1. Дана база переменных (X12 X23 X33) с базовыми множествами А1={0, 1}, A2={0, 1, 2}, A3={0, 1, 2} и даны обобщенные коды K1=(1, 0, -) и K2=(1, ` 2, -). Номера разрядов обобщенных кодов строго соответствуют номерам позиций базовых переменных Xi, поэтому индексы разрядов в обобщенных кода можно опускать.  Согласно правилу 3 данные обобщенные коды находятся в отношении K1МK2, так как (02)1М(` 22)2, а также (11)1=(11)2 и (- 3)1=(- 3)2. Действительно по определению K1={(1, 0,1), (1, 0, 0)}

и K2={(1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2)}.

Легко заметить, что подмножество элементарных кодов, представленное обобщенным кодом K1, целиком содержится в подмножестве элементарных кодов, представленных обобщенным кодом K2 (смотри коды, выделенные жирным шрифтом).

Определение. Обобщенные коды называются ортогональными, если они представляют непересекающиеся подмножества элементарных кодов. Отношение ортогональности обобщенных кодов будем обозначать символом ^ . Для проверки истинности отношения ортогональности обобщенных кодов установлено следующее правило:  Kj ^ Kk (читается: Kj и Kk ортогональны), если хотя бы в одном одноименном разряде данных кодов имеется отношение a ij З a ik=q i, т. е. подмножества значений, представленные переменными a ij и a ik не пересекаются.

Пример 2. Коды (- , ` 1, 2)1 и (- , 1, 2)2 ортогональны, так как подмножества {0, 2}21 и {1}22, представленные соответственно символами ` 1 и 1, не пересекаются.

Определение. Операция “@” над обобщенными кодами Kj и Kk, соответственно представляющими собой подмножества Mj и Mk из U, есть последовательность действий, приводящих к получению кода Kr или объединения кодов Kr,...,Kt, представляющих подмножество M*НU такое, что M* = Mj@Mk. Формальная запись операции над обобщенными кодами имеет вид Kj@Kk = {Kr,...,Kt,}. Для выполнения операций над обобщенными кодами подмножеств MНU были установлены следующие формальные правила.

  1. Операция пересечения: Kj З Kk = Kr. Для получения кода пересечения Kr необходимо во всех одноименных разрядах заданных кодов выполнить следующие действия: a ij З a ik=a ir , i=1,..., i=n. Kr=Image_5.gif (79 bytes) , если хотя бы в одном разряде имеет место соотношение a ijЗa ik=q ir.

Пример 3. Для кодов K1=(1,0,-) и K2=(1,`2,-) примера 1 в результате поразрядных операций находим: (11)1З(11)2=(11)3,(02)1З(`22)2=(02)3,   (-3)1З(-3)2=(-3)3. Поэтому код пересечения будет следующим K3=(1,0,-). В данном случае K3=K1, так как K1МK2.

  1. Операция объединения: K1И K2И...ИKs=Kr. Коды K1,K2 ... Ks могут быть объединены в один обобщенный код Kr по разрядам i,...,e, если из комбинаций qj=(ai,..,ae) значений данных разрядов можно составить декартово произведение a iґ ...ґa e, а значения всех остальных одноименных разрядов заданных кодов одинаковы, то есть: a k1= ... = a ks ля всех ki,...,ke. Здесь ai,..,ae - соответственно любые значения из a i,...,a e, j=1,..., j=m, где m - количество элементов множества {a iґ ...ґa e}.
  2. Пример 4. Двоичные обобщенные коды (-,1,0,0)1, (-,1,0,1)2, (-,1,1,0)3, (-,1,1,1)4 можно объединить по третьему и четвертому разрядам, так как из значений этих разрядов можно составить декартово произведение А3ґА4={0,1}ґ{0,1}={(0,0),(0,1),(1,0),(1,1)}»(-3,-4), а остальные разряды имеют поразрядно одинаковые значения. Поэтому код данного объединения имеет вид (-,1,-,-).

    Пример 5. Коды K1=(0,1,1), K2=(0,0,1), K3=(1,1,1), K4=(1,0,1) с базой A1={0,1}, A2={0,1,2}, A3={0,1,2} можно объединить в один обобщенный код Kr= (-,`2,1). Это следует из того, что {(0,0),(0,1),(1,0),(1,1)}=({0,1}ґ{0,1})=((-1)ґ(`22))=(-1,2), и при этом третьи разряды всех заданных кодов содержат одинаковые значения - “1”.

    Пример 6. Коды K1=(0,`2,1), K2=(1,`2,1), K3=(0,2,1), K4=(1,2,1) с базой, указанной в предыдущем примере, можно объединить по двум первым разрядам. Это объединение выполняется так: (0,`2)1И(1,`2)2И(0,2)3И(1,2)4={0,1}ґ{0,1,2}=(-1)ґ(-2) = (-1, -2).   В результате получим: K1ИK2ИK3ИK4=(-1, -2,1).

    Пример 7. Коды K1=(1,2,1), K2=(1,2,0) с неизвестной базой можно объединить так K1ИK2=K3=(1,2,(1,0)). При этом, если затем окажется, что A3={0,1}, то можно преобразовать результат объединения к виду K3=(1,2,-), если A3={0,1,2}, то результат можно представить как K3=(1,2,`2). 

      Из приведенных примеров видно, что объединение элементарных кодов в обобщенные открывает широкие возможности для экономного представления множеств конкретных объектов и анализа свойств этих множеств без полного перебора всех содержащихся в них элементов. Однако следует заметить, что одно и то же множество элементарных кодов может быть представлено различными обобщенными кодами. Поэтому важной проблемой теории исчисления обобщенных кодов является проблема поиска методов представления множеств элементарных кодов (подмножеств универсума U) объединением обобщенных кодов с минимальным числом обобщенных кодов или с минимальным количеством символов (a ei) значений переменных Xi в объединении обобщенных кодов. Ряд методов частичного решения данной проблемы известен в современной математической логике, где они используются для минимизации форм представления логических функций [4,14].

    Определение. Разностью Kj \ Kk называется объединение всех элементарных кодов из Kj, не принадлежащих пересечению KjЗKk, то есть R = Kj \ (KjЗKk). R= Kj, если KjЗKk=Image_5.gif (79 bytes)и R= K1ИK2И ... ИKs, если KjЗKkImage_5.gif (79 bytes)и KjKk.

  3. Операция вычитания: Kj \ Kk= K1ИK2И...ИKs = R. Результат вычитания кода Kk из кода Kj получается в виде объединения кодов K1, K2,..., Ks, которые образуются из заданных обобщенных кодов по правилам:
    1. Kj \ Kk=Image_5.gif (79 bytes), если Kj = Kk;
    2. число s обобщенных кодов, представляющих разность R, равно числу разрядов заданных кодов, удовлетворяющих условиям: a ijЗa ik q i и aij№a ik;
    3. код Kr (r=1,...,s) из R подучается в результате выполнения следующих действий: разряд, номер которого равен i, кода Kr заполняется значением a ir= a ij \ a ik, а все остальные разряды кода Kr заполняются значениями одноименных разрядов кода Kj.

Пример 8. Найти разность R = (0,-,`2,1)1 \ (0,0,0,-)2 обобщенных кодов с базой (X21,X32,X33,X24). Здесь верхний индекс указывает на значность переменной Xi, то есть на мощность базового множества AiРешение:

1) (-2)1 \ (02)2 = (` 02)r,   поэтому   K1r =(0,`0,`2,1),

2) (`23)1 \ (03)2 = (13)r,   поэтому    K2r =(0,-,1,1),

R = (0,`0,`2,1)И(0,-,1,1).

Читателю предлагается проверить, что R представляет собой все элементарные коды из кода (0,-,`2,1)1, кроме кода (0,0,0,1), который является пересечением исходных обобщенных кодов K1 и K2. Операция вычитания обобщенных кодов является весьма полезной при решении многих практических задач с конкретными конечными множествами, представленными обобщенными кодами. Одной из таких задач является задача ортогонализации обобщенных кодов.

  1. Операция ортогонализации двух пересекающихся обобщенных кодов. Эта операция может быть выполнена двумя способами:
    1. KjИKk= KjИ (Kk \ Kj) и    2) KjИKk= KkИ (Kj \ Kk),

так как Kj ^ (Kk \ Kj) и Kk ^ (Kj \ Kk) по определению разности (Kj\Kk).

Пример 9. Представить объединение двух обобщенных кодов (0,`0,2,1)1И(0,-,1,1)2 из предыдущего примера объединением ортогональных кодов. Решение:

1) (0,`0,`2,1)1 \ (0,-,1,1)2 = (0,`0,0,1)3, поэтому

(0,`0,`2,1)1И (0,-,1,1)2= (0,-,1,1)2И(0,`0,0,1)3;

2) (0,-,1,1)2 \ (0,`0,`2,1)1= (0,0,1,1)4, поэтому

(0,`0,`2,1)1И(0,-,1,1)2=(0,`0,`2,1)1И(0,0,1,1)4.

Легко проверить, что полученные результаты представляют собой одно и тоже подмножество элементарных кодов, а именно:

Е={(0,0,1,1), (0,1,1,1), (0,2,1,1), (0,1,0,1) (0,2,0,1)}.

  1. Операция декартового умножения обобщенных кодов из двух различных универсумов U1 и U2. Пусть заданы два подмножества M1 из U1 и M2 из U2 с соответствующими базами переменных (X1,...,Xn) и (Xn+1,...,Xm). K1 и K2 - обобщенные коды подмножеств M1 и M2 соответственно. Тогда декартово произведение M1? M2 может быть представлено одним обобщенным кодом Kr, который получается в результате конкатенации (присоединения) кодов K1 и K2, то есть: M1? M2 » K1 ? K2 = (K1, K2).

Пример 10. Пусть дано K1=(-,`2,0,0)1 с базой (X21, X32, X33, X24)1 и K2=(-,1,0)2 с базой (X25, X36, X37)2. Тогда K1ґ K2= (-1,`22,03,04,05,16,07). Свойства данной операции, в отличие от всех предыдущих, еще мало изучены и область ее применимости не исследована.

2.4. Элементы теории отношений. Общее понятие и свойства отношений

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

Определяющими атрибутами любого отношения являются:

Всеобщими свойствами отношений являются:

Формальное определение понятия отношения обычно дается в терминах теории множеств. При этом, в общем случае, отношением называется подмножество R декартового произведения (A1ґ A2ґ ...ґAn), где Ai - базовое множество значений некоторого свойства Xi.

Отметим четыре важных частных случая:

Общий вид формулы любого отношения может быть следующим:

 Image_7.gif (702 bytes)   (2.1)

где аргументы представляют собой значения свойств объектов некоторого универсума, например БОЛЬШЕ(x, y),  ЛЮБИТЬ(Иван, Марья), СЛОЖИТЬ(10, 2, 4),  И(дождь, ветер, звезд_ночной_полет).  Заметим, что слова БОЛЬШЕ и И не являются глаголами, но при употреблении их в качестве имен отношений они соответственно имеют смысл (по умолчанию) “Быть больше” и “Одновременно иметь место”.   В классической математике отношения R с однородной базой (AґA) называются бинарными [11]. Если (x,y)ОRН(AґA), то говорят, что элементы x и y находятся в бинарном отношении R. Формальная запись бинарных отношений имеет вид: (x,y)ОR, xRy, R(x,y) или x*y, где x и y любые элементы, взятые их множества А. Другими словами, x и y - переменные, принимающие значения из множества А, а R или * - имя отношения.   В связи с тем, что по определению отношения R являются подмножествами некоторого универсума U, к ним применимы все известные нам теоретико-множественные операции. С другой стороны, все теоретико-множественные операции - суть отношения между объектами, определенными как множества.  Кроме уже упоминавшихся теоретико-множественных операций для бинарных отношений дополнительно были установлены еще следующие операции: обращения R-1={ (x,y)| (y,x)ОR}, умножения R1° R2 = {(x,y)| ($ zОA) (xR1z и zR2y)} (последнее выражение читается: (x,y) есть результат умножения R1° R2, если существует элемент z из A такой, что xR1z и zR2y); а также отношение равенства D ={(a, a)| aОА}, представляющее собой диагональ множества (AґA), и отношение следствия R1ЮR2, означающее, что из истинности R1 всегда следует истинность R2.   В общем случае отношения описывают на некотором формализованном языке определенные связи между естественными или абстрактными объектами. В то же время сами отношения по определению являются формализованными символьными объектами (формулами), обладающими вполне определенными логическими свойствами. Суть этих свойств для бинарных отношений показана в таблице 2.2, где x, y, z - символы переменных, характеризующих свойства каких-нибудь объектов из универсума U, * и · - символы переменных, обозначающих имена отношений, а  Щ, Ъ, Ю, щ, є - формальные символы, соответствующие словам: И, ИЛИ, СЛЕДУЕТ, НЕ, ТОЖДЕСТВЕННО в их обычном смысле.

Таблица 2.2.         Основные свойства отношений

Image_8.gif (7495 bytes)

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

2.5. Понятие об исчислении высказываний

При моделировании проектов сложных систем единственным способом доказательства адекватности математической модели и будущей реальной системы является логический вывод правдоподобных суждений о свойствах будущей системы и об отношениях между ними. Формализация методов логического вывода суждений дается в теориях исчисления высказываний, логических функций и предикатов. Мы будем рассматривать высказывание как определенное отношение PНU, представленное на некотором формализованном или естественном языке. При этом будем полагать, что всякое высказывание Pi обладает свойством истинности (Xi) с областью значений Ei = {истинно, ложно}. Другими словами, Pi есть функциональное отношение, определенное в универсуме V= UґE, как функция fi(X1, ...,Xn), принимающая значения из множества истинности E.   Значения “истинно”, “ложно” часто для краткости обозначают цифрами “1”, “0”. В этом случае их не следует воспринимать как какие-то количественные оценки, кроме как вероятности соответствующих логических значений “истинно”, “ложно”.  Под исчислением высказываний понимают формальную систему операций и отношений, определенных в универсуме V.  Всякая формальная система Ф определяется как четверка множеств (A, F, G, R), где A - алфавит символов языка данной системы, F - множество всех формальных выражений (формул), G - подмножество формул из F, называемых аксиомами, R - множество правил, служащих для вывода любой формулы из F из заданного множества аксиом. Пишут Ф = (A, F, G, R).  В зависимости от смыслового определения множеств A, F, G, R возможны различные варианты исчисления высказываний. Известными частными случаями исчисления высказываний являются: булева алгебра, алгебра логики, логические функции и исчисление предикатов. Далее рассмотрим один из возможных обобщенных вариантов исчисления высказываний.

  1. Определение алфавита А.  
  2. A = {p1,...,pn, 0, 1, ..., a, ...,z, E, истинно, ложно, ( , ) , щ , ® , » , є , Щ, Ъ , Ы , Ю }, где “A”, “=”, “{“, “}”, “,” - символы метаязыка, с помощью которого определяется исчисление,  pi - элементарные высказывания о свойствах объектов из U, рассматриваемые как элементарные функции f(Xi) = a, aОE, 0,1,... - цифровые символы, которые используются как числа или как символы логических значений “ложно”, “истинно”,     a, ..., z - буквы латинского алфавита, употребляемые в качестве значений свойств, о которых идет речь в высказываниях;  E - множество {истинно, ложно}; щ , ® , » , є , Щ, Ъ , Ы , Ю - символы отношений между высказываниями и формулами, имеющие следующий смысл:

    “pi” – любое высказывание, принимающее значение “истинно” или “ложно” при определенных условиях; 

    щ pi“ - отрицание высказывания pi, представляет собой высказывание истинное, когда pi ложно, и ложное, когда pi истинно, другими словами, щ pi = (E \ { e }), если pi= e, eОE; такой же смысл имеет и запрись ` pi;

    “pi ® pj” - импликация высказывания pj высказыванием pi, представляющая собой высказывание pk, ложное, когда pi истинно, а pj ложно, то есть pi ® pj= pk - (ложно) только если (pi, pj) = (истинно, ложно), где истинноО E и ложно ОE;

    “pi » pj” - эквивалентность высказываний, представляющая собой истинное высказывание pk, тогда и только тогда, когда оба высказывания pi и pj имеют одинаковые значения истинности, то есть, когда (pi, pj) =(е, е), для всех (е,е)ОEґE;

    “pi є pi” - тождество высказываний является всегда истинным высказыванием pk, независимо от значений входящих в него переменных pi, например щ щ pi;

    “piЩ pj” - конъюнкция высказываний pi и pj есть отношение, соединяющее данные высказывания союзом “И”, высказывание pk = (piЩ pj) истинно только тогда, когда оба высказывания pi и pj истины;

    “piЪ pj” - дизъюнкция высказываний pi и pj есть отношение, соединяющее данные высказывания союзом “ИЛИ”, высказывание pk = (piЪpj) ложно только тогда, когда оба высказывания pi и pj ложны;

    “fiЫ fj” – равносильность есть отношение, указывающее на эквивалентность формул f, состоящих из высказываний и отношений между ними, fi равносильно fj, если они имеют одинаковые значения истинности на одинаковых наборах значений истинности высказываний и отношений, из которых они составлены;

    “fiЮ fj” – следствие это высказывание, обозначающее тождественно истинную импликацию, говорят, что формула fj следует из формулы fi, если fj истинно на всех наборах значений переменных, на которых истинно fi.

  3. Определение формул.
  4. 1. Всякое высказывание, связанное со значением истинности из Е и обозначаемое символом pi, есть формула f.

    2. Если выражение f - формула, то выражение щ f - тоже формула.

    3. Если выражения fi и fj - формулы, то выражения (fi * fj), где *О{® , » , є , Щ, Ъ , Ы , Ю } - тоже формулы.

    4. Других формул нет.

  5. Определение аксиом.

Аксиомы обычно определяются как бинарные функциональные отношения (элементарные функции f (pi, pj)=e, eОE), из которых затем с помощью правил вывода составляются все остальные формулы данной системы. Истинность высказывания pk = fk (pi, pj) определяется в зависимости от истинности входящих в него высказываний pi, pj. Один из вариантов множества аксиом, которые мы будем использовать в дальнейшем, приведены в таблице 2.3, где для изображения формул применяются символы вышеперечисленного алгоритма и используются следующие обозначения: fk= fk (pi, pj),     k=1, 2, ... 10, “1” »истинно”, “0” »ложно”.

Таблица 2.3.

Image_9.gif (8050 bytes)

4. Определение правил вывода.

Главной задачей формальной теории вывода является образование тождественно истинных формул (тавтологий) из заданного подмножества исходных тождественно истинных формул (исходных тавтологий).

Формула называется тавтологией, если она остается истинной при любых значениях входящих в нее высказываний. Например, формула f1® f2 єщf1Ъ f2 является тавтологией, так как она истина при любых значениях ее компонентов f1 и f2, что легко проверить простой подстановкой этих значений в данную формулу.

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

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

Таблица 2.4.           Система основных тавтологий (законов) исчисления высказываний

Image_10.gif (8512 bytes)

Для логического вывода обычно используют следующие два правила:

  1. правило подстановки, утверждающее, что в результате замены всех входящих в тавтологию Fi символов переменной X на произвольную формулу f получается формула Fj, которая также является тавтологией;
  2. правило заключения, определяющее, что в импликации F1® F2 формула F2 является тавтологией тогда и только тогда, когда F1 является тавтологией.

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

2.6. Метод дедуктивного логического вывода

В математической логике теория логического вывода предназначена в основном для формализации доказательства теорем [5]. Доказательство теорем, как правило, ведется методом дедукции (от общего к частному), согласно которому истинное заключение выводится в результате конечного числа тождественных преобразований исходных формул в искомую заключительную формулу. Формальная схема этого метода преобразования имеет следующий вид:

Ф1Щ Ф2Щ ... ЩФn® F1 Ъ F2 Ъ ...Ъ Fm.           (2.2)

На практике этот метод логического вывода обычно используется для определения истинности конкретных отношений по заданным исходным отношениям (фактам), которые априори считаются истинными, и по определенным формулам (правилам вывода) следующего вида:

Ф1Щ Ф2Щ ... Щ Фn® F.                                    (2.3)

Вывод осуществляется по правилам подстановки заданных фактов в левую часть выражения 2.2 вместо содержащихся там символов переменных. Данная методика называется конкретизацией высказываний. В наших обозначениях конкретизация высказываний или отношений означает подстановку в его формулу конкретных значений aeОA вместо входящих в нее предметных переменных X. Формальная постановка задачи конкретизации высказываний состоит в следующем. Дано:

  1. множество D фактов, представляющих собой конкретные, или частично конкретные высказывания или отношения;
  2. множество R правил вывода, представляющих собой тождественно истинные формулы Ф1 Щ Ф2 Щ Фn® Fj, содержащие переменные Xi.

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

Пример. Пусть заданы следующие факты:

ЕСТЬ (Петр, мужчина),

РОДИТЕЛЬ (Петр, Иван), и определено следующее правило вывода:

ЕСТЬ(X, мужчина) Щ РОДИТЕЛЬ(X, Y) ® ОТЕЦ(X, Y).

Выполняя конкретизацию данного правила путем подстановки значений переменных X и Y, которые они имеют в заданных фактах, получим конкретное отношение ОТЕЦ (Петр, Иван).   Формализация и автоматизация данной методики вывода широко известна под именем системы ПРОЛОГ, включающей в себя специализированный язык логического программирования (Пролог) и реализующее его программное обеспечение [1,12]Обратим внимание, что в классическом исчислении высказываний фактор времени рассматриваемых отношений в явном виде не указывается. Время действия отношения обычно определяется по форме глагола, употребляемого в качестве имени, или из контекста. Проблема формализованного представления (моделирования) высказываний и отношений с учетом времени и пространства сегодня еще не решена, несмотря на наличие значительного количества работ в этой области. Не менее интересной является и обратная задача, состоящая в том, чтобы по заданным конкретным фактам найти обобщенные формулы, представляющие собой правила вывода. По сути, это задача индуктивного вывода (вывода от частного к общему). Формальная постановка данной задачи состоит в следующем.  Дано множество D факторов, отражающих определенные отношения в некоторой предметной области. Найти обобщенное правило, связывающее некоторые факты в тождественно истинные формулы с предметными переменными, характеризующими данную предметную область.

Пример. Пусть заданы следующие факты:

ЕСТЬ (Петр, мужчина),

РОДИТЕЛЬ (Петр, Иван),

ОТЕЦ (Петр, Иван),

ЕСТЬ (Фома, мужчина),

ЕСТЬ (отец, мужчина). Из этих фактов необходимо вывести формулу

ЕСТЬ(X, мужчина) Щ РОДИТЕЛЬ(X, Y) ® ОТЕЦ(X,Y).

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

2.7. Методика индуктивного логического вывода

Для построения методики индуктивного вывода мы разделим все возможные высказывания на три принципиально различных класса. К первому классу отнесем высказывания, определяющие свойства объектов. Формально эти высказывания представляют собой двухместные отношения вида S(x, y), где S - имя отношения (свойства), xОX, yОY,    X - переменная, определенная на множестве объектов, а Y - переменная, определенная на множестве значений свойства S, x и y - конкретные значения переменных X и Y соответственно.

Пример. ЛЮБИТ (человек, пиво), ЕСТЬ (Петр, мужчина).

Ко второму классу высказываний отнесем высказывания, определяющие объекты. Формальные выражения для таких высказываний имеют следующий вид: Q(S1ЩS2Щ...ЩSn), или Q(S1,S2,...,Sn), где Q - имя определяемого объекта, а Si - имя свойства, или его значения. В последнем случае наименование свойства должно быть определено заранее.    Пример.

ЧЕЛОВЕК (ИМЯ, РОСТ, ДАТА_РОЖДЕНИЯ, ОБРАЗОВАНИЕ),

ТРАНСПОРТНОЕ_СРЕДСТВО (автомобиль, СКОРОСТЬ_ ДВИЖЕНИЯ, ГРУЗОПОДЪЕМНОСТЬ).

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

Пример. ЕСТЬ(Петр, человек) Щ ЛЮБИТ(человек, пиво) ® ЛЮБИТ(Петр, пиво).

Заметим, что данная формула является истинной только тогда, когда отношение ЕСТЬ(Петр, человек) обладает свойствами коммутативности и рефлексивности.

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

  1. ЕСТЬ(Петр, мужчина) Ъ ЕСТЬ(Иван, мужчина) Ъ ЕСТЬ(Фома, мужчина) ® ЕСТЬ((ПетрЪ ИванЪ Фома), мужчина),
  2. ЕСТЬ(Петр, мужчина) Щ ЕСТЬ(Иван, мужчина) Щ ЕСТЬ(Фома, мужчина) ® ЕСТЬ((ПетрЩ ИванЩ Фома), мужчина).

По существу эти преобразования представляют собой вынесение за скобки значения “мужчина”, как свойства, которым обладают некоторые из перечисленных объектов (выражение 1), или все перечисленные объекты (выражение 2).   Пусть X1 - переменная, определенная на множестве A1={Петр, Иван, Фома}, тогда результат первого преобразования можно представить высказыванием СУЩЕСТВУЕТ(Х1, мужчина), а второго - КАЖДЫЙ(Х1, мужчина). Так мы приходим к известным классическим формам исчисления предикатов:     $ xО A1 ЕСТЬ(x, мужчина), читается: существует x из A1 такой, что x есть мужчина, и      " xО A1 ЕСТЬ(x, мужчина), читается: для всех x из A1 x есть мужчина.  Так из конкретных фактов выводятся высказывания с предметными переменными, принимающими значения из определенных подмножеств. Отношение ЕСТЬ(X, Y) указывает, что аргумент X обладает свойством Y. По смыслу данного отношения объединять можно как объекты, обладающие одинаковыми свойствами, так и свойства, характеризующие одинаковые объекта. Следовательно, в заданной выше базе возможны и такие преобразования:

  1. ЕСТЬ(отец, мужчина) Щ ЕСТЬ(отец, РОДИТЕЛЬ) ®
  2. ЕСТЬ(отец, (мужчина Щ РОДИТЕЛЬ));

  3. ЕСТЬ(родитель, мужчина) Ъ ЕСТЬ(родитель, женщина) ® ЕСТЬ(родитель, (мужчина Ъ женщина).

Заметим, что в первом случае речь идет о свойствах одного и того же объекта, а во втором о свойствах различных объектов, имеющих одинаковое наименование. Это различие отражается соответственно символами “Щ ” и “Ъ ”. Если предположить, что в любой формуле свойства S(x, y) первый аргумент всегда представляет собой имя (или имена) объектов, а второй аргумент представляет собой значение (или значения) свойства (или свойств) данного объекта, то будут справедливы следующие формальные соотношения:

  1. S(x, y) ® xS(y), то есть из истинности S(x, y) следует истинность xS(y), например: ЕСТЬ(Петр, мужчина) ® Петр ЕСТЬ( мужчина),
  2. S(x, y) Щ S(x, z) ® x S(yЩ z) ® x S(y, z),
  3. S(x, y) Ъ S(x, z) ® x S(yЪ z) ® x S{y, z}.

В процессе индуктивного вывода можно использовать также следующие правила обобщения отношений, содержащих переменные X, Y и их значения x, y:

  1. R(X, Y)Щ R (x, y) ® R (x, y),
  2. R(X, Y)Ъ R (x, y)® R(X, Y), где R - имя любого отношения (высказывания).

Полезным является также условие эквивалентности отношений и высказываний. Оно состоит в том, что два высказывания (отношения), у которых все аргументы одинаковы, то есть имеют одинаковые наименования и значения, считаются эквивалентными. Другими словами, R1(X1,...,Xn)» R2(X1,...,Xn), если xi1=xi2 для всех i=1,...,n, xiО Xi. Xi - формула, представляющая собой свойство, объект или любое тождественно истинное высказывание.    Пример.

ЕСТЬ(отец, мужчина)Щ РОДИТЕЛЬ(отец, X) ® отец ЕСТЬ (мужчина) Щ отец РОДИТЕЛЬ(X) ® отец (ЕСТЬ (мужчина) Щ РОДИТЕЛЬ(X));

ЕСТЬ(Петр, мужчина) Щ РОДИТЕЛЬ(Петр, Иван) ® Петр ЕСТЬ(мужчина) Щ Петр РОДИТЕЛЬ(Иван)® Петр( ЕСТЬ(мужчина) Щ РОДИТЕЛЬ(Иван));

РОДИТЕЛЬ(X) Щ РОДИТЕЛЬ(Иван)® РОДИТЕЛЬ(Иван);

РОДИТЕЛЬ(Иван) ® РОДИТЕЛЬ(X);

отец (ЕСТЬ(мужчина) Щ РОДИТЕЛЬ(Иван)) Щ Петр(ЕСТЬ(мужчина) Щ РОДИТЕЛЬ(Иван)) ® отец » Петр.

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

Image_11.gif (14299 bytes)

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

2.8. Представление высказываний и отношений обобщенными кодами

В современной теории баз данных одна из возможных моделей базы данных представляется как отношение частичного порядка (Н) на множества типов объектов определенной предметной области [16]. Другими словами, база данных представляет собой описание системы подмножеств объектов, взаимосвязанных между собой отношением частичного порядка. Каждое подмножество включает в себя определенный тип объектов, который имеет собственное имя и характеризуется определенными свойствами, например подмножества ЧЕЛОВЕК, МАШИНА, ПОМЕЩЕНИЕ, КОСМИЧЕСКИЙ АППАРАТ являются типами. Определенная структура, заданная на множестве типов, называется схемой базы данных.  В общем виде схема базы данных показана на рис. 2.1.

Рис 2.1. Общий вид схемы базы данных о предметной области

Image23.gif (2952 bytes)

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

Рис 2.2. Схема фрагмента базы данных, отражающего помещения высшего учебного заведения

Image24.gif (3759 bytes)

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

ЕСТЬ(помещение, (учебное Ъ служебное)), ЕСТЬ(помещение_учебное, (аудитория Ъ класс Ъ лаборатория )) или ЕСТЬ(ЕСТЬ(помещение, учебное), (аудитория Ъ класс Ъ лаборатория )).

Легко заметить, что все подчиненные типы объектов представляют собой значения определенных свойств вышестоящих типов. Поэтому для корневого (заглавного) типа можно составить базу свойств S1, S2, ..., Sn и определить для каждого свойства Si соответствующий показатель Xi с областью значений Ai. При этом любой объект данного типа будет определяться отношение Q(x1,x2,...,xn), где xiОAi. Так в данном примере можно определить:

S1 - назначение помещения, X1 - наименование специализации помещения, А1={учебное, служебное, - };

S2 - специализация учебных помещений, X2 - наименование специализации, А2={лекции, занятия, опыты, - };

S3 - специализация служебных помещений, X3 - наименование специализации, А3={администрация, делопроизводство, преподавательская, - }. Знак “- ” здесь будет указывать на то, что свойство Si не относится к данному объекту.   Используя приведенные выше определения, получим таблицу 2.6, содержащую описание той же предметной области, которая была представлена на Рис. 2.2.

Таблица 2.6.

Image_12.gif (3507 bytes)

По существу каждая строка данной таблицы представляет собой элемент Q(x1,x2,...,xn) универсума U= {A1ґ A2ґA3}, то есть представляет собой код (или обобщенный код) помещения определенного типа. Таким образом, мы рассмотрели способ представления баз данных в форме таблиц обобщенных кодов. Полезность такой формы представления видна из следующего маленького примера.

Пример. Из таблицы 2.6 следует, что свойства S2 и S3 отнесены к различным объектам. Но эти свойства не являются независимыми. Фактически множества А2 и А3 являются подмножествами значений одного и того же свойства. Поэтому свойства S2 и S3 можно заменить одним свойством S’2 - “специализация помещения” с областью значений A’2 = {лекции, занятия, опыты, администрация, делопроизводство, преподавательская}. В результате структура базы данных существенно упрощается. При необходимости в таблицу2.6 можно легко добавить любое количество новых свойств рассматриваемых объектов, например номер помещения, площадь помещения, освещенность и так далее. Важно то, что действия над элементами базы данных, такие как поиск, сравнение, сортировка по значениям заданных свойств и т.д., можно выполнять путем формальных операций над соответствующими обобщенными кодами. Особенно широкие перспективы при этом открываются для реализации механизмов логического вывода.

Пример. Рассмотрим еще раз базу данных (фактов), приведенную в предыдущем разделе. Судя по содержащимся там фактам, можно заметить, что все они определяют свойства объектов одного тип - человек. Эти свойства определяются как: S1 - наличие имени, S2 - наличие пола и S3 - способность быть родителем. Для характеристики этих свойств используются соответствующие переменные: X1 - имя с областью значений A1 = {Петр, Иван, Фома, Ольга, Марья}, X2 - пол с областью значений A2 = {мужчина, женщина} и X3 - отношение РОЛИТЕЛЬ(X1) с областью значений A3 = {да, нет} или A3 = {РОДИТЕЛЬ(X1), НЕ_РОДИТЕЛЬ(X1)}.    Частными случаями типа человек является типы: отец, мать и не_родитель. Эти типы является конкретизацией типа человек по имени (S1), полу (S2) и по наличию ребенка (S3). Согласно имеющимся в базе данных фактам объекты типа отец и мать определяются следующими высказываниями:

отец( - , мужчина, РОДИТЕЛЬ(X1)),

мать( - , женщина, РОДИТЕЛЬ(X1)).

Эти высказывания являются обобщенными кодами по свойству S1 – имя человека. Легко заметить, что обобщенный коды отец и мать представляют собой значения логической функции F(X1, X2,X3), определенной на множестве объектов типа человек. С учетом данных определений вышеупомянутая база фактов представляется следующей таблицей:

Таблица 2.7.

Image_14.gif (4829 bytes)

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

отец (Петр, мужчина, РОДИТЕЛЬ(Иван)).

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

2.9. Логические функции

2.9.1. Определения и формы представления логических функций

Отличительная особенность логических функций состоит в том, что области определения самих функций и их аргументов являются дискретными конечными множествами. Обычно это множества истинности определенных высказываний или отношений, представляющих собой предикаты pe. Например, областью значений логической функции может быть множество {(x<a), (x>a), (x=a)}, где каждое выражение в круглых скобках представляет собой утверждение об истинности определенного отношения.

Определения:

1. Пусть Xi переменная, принимающая значения из множества Ai={a1(i),...,ak(i)}, тогда логическая функция F(X1,...,Xn) есть однозначное отображение {A1ґA2ґAn} ® AF, где AF - область значений функции F(X1,...,Xn). Вместо F(X1,...,Xn) будем писать также F(X).

2. Если логическая функция и ее аргументы (переменные Xi) принимают значения из одного и того же множества A, содержащего k различных значений, то эта функция называется однородной k-значной логической функцией, или логической функцией класса Pk.

3. Логические функции класса P2, с множеством значений E={ИСТИННО,ЛОЖНО}, называются двоичными или булевыми логическими функциями, если они определены на множестве аксиом, содержащихся в таблицах 2.8 и 2.9, и только на них. В этих таблицах приняты следующие обозначения: ИСТИГННО=1, ЛОЖНО=0.

    Таблица 2.8.    Булевы функции одной переменной

    Image_15.gif (3706 bytes)

    Таблица 2.9. Булевы функции двух переменных

    Image_16.gif (16332 bytes)

    Наиболее общей универсальной формой представления логических функций являются таблицы. Кроме того, существует много различных алгебраических форм представления логических функций, основанных на использовании функционально полных систем аксиом (элементарных функций), специально определяемых для каждого класса логических функций. Доказано, что из перечисленных булевых функций одной и двух переменных можно составить несколько функционально полных систем, пригодных для формального представления любой n-местной булевой функции. Наиболее популярной функционально полной системой булевых функций является система, состоящая из константы 0, константа 1, отрицания ` X1, конъюнкции X1Щ X2 и дизъюнкции X1Ъ X2. Существуют две формы представления логических функций с использованием этой системы:    дизъюнктивная, представляемая в виде

      Image_17.gif (418 bytes)                        (2.4)

    и конъюнктивная, формула которой имеет вид

    Image_18.gif (410 bytes)                            (2.5)

    где ~Xi означает, что переменная Xi может входить в данную формулу, как со знаком отрицания, так и без него.

4.  Если функция F(X1, ..., Xn) принимает значения из множества   AF = {f1, f2,...,fe,...,fk,q }F, где q - нулевое (пустое) значение, то функция F(X1, ..., Xn)fe, принимающая значение fe только на одном из наборов значений переменных X1, ..., Xn и принимающая значение q на всех остальных наборах этих переменных, называется конституентой функции F(X1,...,Xn)

5. Функция F(X1, ..., Xn)fe, принимающая значение fe на нескольких наборах значений переменных X1, ..., Xn и принимающая значение q на всех остальных наборах этих переменных, называется импликантой функции F(X1, ..., Xn). По данным определениям конституента есть частный случай импликанты.

6. Логические функции, допускающие неравенство AiAe, i,eО{1, ..., n, F}, называются неоднородными логическими функциями или функциями общего класса Po.

По данным определениям логические функции класса Pk являются частным случаем функций класса Po. Разработка теории логических функций класса Po до настоящего времени еще не завершена. И все же, имеющиеся в этой области результаты уже сейчас могут быть эффективно использованы для моделирования сложных алгоритмических процессов и систем [14]. В дальнейшем мы будем рассматривать в основном формальные построения логических функций класса Po, сравнивая их, при необходимости, с аналогичными формальными построениями в классе булевых функций.

2.9.2. Формальные представления логических функций класса Po

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

Таблица 2.10.  Форма табличного представления логических функций общего класса

Image_19.gif (4411 bytes)

В этой таблице показано, что все множество определения функции F(X1,...,Xn) в общем случае делится на r+1 подмножество Mj, j=0,1,...r, наборов значений переменных X1,...,Xn. Каждый набор представляет собой кортеж q = (x1,...,xn), где xiОAi, Mj - подмножество кортежей, на которых функция F(X1,...,Xn) принимает значение fj. На подмножестве M0 функция F(X1,...,Xn) не определена, иначе говоря, F(X1,...,Xn) принимает значение f0= - .   Логические функции, для которых M0 = Image_5.gif (79 bytes) , называются полностью определенными. В противном случае они называются не полностью определенными, или не доопределенными. Предполагается, что каждое множество Ai представляет собой полную группу несовместных высказываний, то есть, предполагается, что вероятность того, что переменная Xi одновременно примет какие-либо два значения из множества Ai равна нулю. Такое же предположение принимается и для области значений функции F(Х). Предполагается также, что множества Mj не пересекаются. Эти предположения позволяют получить строго однозначное и корректное определение логических функций общего класса. При указанных условиях для любой логической функции справедливы соотношения:

 Image26.gif (819 bytes)          (2.6)

Эти соотношения задают дизъюнктивную форму представления логической функции общего класса.

Учитывая, что любое подмножество Mj может быть представлено соответствующим объединением обобщенных кодов   , где t номер обобщенного кода, из числа кодов, представляющих подмножество Mj, из соотношений (2.6) непосредственно получим форму представления логических функций общего класса с помощью обобщенных кодов:    

 Image27.gif (704 bytes)                               (2.7)

В дальнейшем будем называть ее кодовой дизъюнктивной нормальной формой (КДНФ) представления логических функций.

Табличный вид кодовой формы логической функции общего класса показан в таблице2.11.

Таблица 2.11.  Форма табличного представления логических функций общего класса

Image_20.gif (5006 bytes)

Доказательство того, что любая функция класса Po может быть представлена в КДНФ, следует из только что изложенного вывода формулы 2.7 из табличной формы, которая, как известно, является универсальной формой представления любых функций. Кроме табличных форм представления логических функций существуют и алгебраические формы, основанные на использовании различных функционально полных систем. Наиболее распространенными алгебраическими формами являются так называемые дизъюнктивные и конъюнктивные нормальные формы (КНФ и ДНФ). Общие принципы построения ДНФ логических функций общего класса следующие:

  1. Любая многозначная логическая переменная Xi может быть представлена дизъюнкцией ее конституент Xaei в следующем виде:
  2. Image_21.gif (214 bytes)                                                    (2.8)         

    Image_22.gif (641 bytes)                 (2.9)

  3. Любая логическая функция общего класса может быть представлена дизъюнкцией ее импликант F(X1,...,Xn)fj в следующем виде:

Image_23.gif (429 bytes)

Image_24.gif (1289 bytes)   (2.10)

  1. Любая импликанта F(X1,...,Xn)fj логической функции F(X1,...,Xn) может быть представлена дизъюнкцией конъюнкций конституент Xaei ее аргументов (переменных) Xi в следующем виде:

Image_25.gif (421 bytes)            (2.11)

  1. С учетом данных построений любая логическая функция общего класса может быть представлена в следующем алгебраическом виде:

Image_26.gif (447 bytes)       (2.12)

Данное выражение называется совершенной дизъюнктивной нормальной формой (СДНФ) логической функции общего класса. Это одна из возможных алгебраических форм представления логических функций. Фактически она, как и совершенная кодовая дизъюнктивная нормальная форма, совпадает с табличной формой представления этой же функции, так как каждая дизъюнкция  Image_27.gif (191 bytes) соответствует кортежу pt.  По определению таблица 2.10 и СДНФ должны содержать Image_28.gif (141 bytes)    кортежей q, где ki - значность переменной Xi. Ясно, что такие формы представления функций с большим числом переменных не экономичны и трудно обозримы. Поэтому в теории и практике применения логических функций изобретено много способов более экономного представления этих функций. Эти способы обычно основаны на минимизации совершенных (полных) нормальных форм представления логических функций.

2.9.3. Принципы минимизации кодовых форм представления логических функций

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

Алгоритм основан на следующих теоретических принципах.

  1. Минимальная форма представления логической функции F(X1,...,Xn) получается в результате минимизации форм, представляющих ее импликантов F(X1,...,Xn)fj. Поэтому для построения минимальной КНФ достаточно найти минимальные КНФ для каждой ее импликанты и объединить их в одной таблице обобщенных кодов.
  2. По определению любая импликанта полностью определенной логической функции общего класса представляет собой следующее соотношение:

F(X1,...,Xn)fj = (Mj® fj)Ъ(Mq ® q ),              (2.13)

где j=1,...,r, Mq = M \ Mj,      MjЗMq =Image_5.gif (79 bytes) . Поэтому для задания импликанты F(X1,...,Xn)fj такой функции достаточно в какой-нибудь форме задать только одно из указанных подмножеств. Другими слова, ее можно представлять как

F(X1,...,Xn)fj = Mj® fj,                                   (2.14)

или как щF(X1,...,Xn)fj = Mq ® q .                (2.15)

  1. Любое подмножество Mj может быть представлено соответствующим объединением обобщенных кодов Image25.gif (971 bytes). При этом одно и то же подмножество Mj, в общем случае, может быть представлено различными объединениями различных обобщенных кодов, и проблема состоит в том, чтобы представить подмножество Mj объединением обобщенных кодов, содержащим наименьшее число непустых значений переменных XiФормальная математическая постановка этой проблемы состоит в следующем. Дана табличная форма импликанты F(X1,...,Xn)fj = Mj®fj, j=1,...,r. Найти кодовую нормальную форму этой импликанты:

Image_29.gif (437 bytes)                 (2.16)

соответствующую минимальному значению оценочной функции

Image_30.gif (314 bytes)                                   (2.17)

где r(Kt,j) - число разрядов обобщенного кода Kt, не содержащих знак “- ”, то есть заполненных какими-либо значениями, кроме значения тире, s - число обобщенных кодов, входящих в КДНФ импликанты F(X1,...,Xn)fj.

  1. Минимизация СКДНФ осуществляется за счет объединения элементарных кодов (кортежей q) из Mj в обобщенные коды Kt,j. Полученная при этом КДНФ, удовлетворяющая минимальному значению оценочной функции 2.17, называется минимальной КДНФ (МКДНФ).
  2. Если функция F(X1,...,Xn) не доопределена, то ее СДНФ имеет следующий вид:

Image_31.gif (377 bytes)                        (2.18)

При ее минимизации подмножество M0 может быть использовано для увеличения количества свободных разрядов (разрядов со знаками тире) в обобщенных кодах Kt,j за счет добавления к подмножествам Mj некоторых кортежей из подмножества M0.  В связи с тем, что функция F(X1,...,Xn) не определена на подмножестве M0, предполагается, что его элементы (кортежи) можно добавлять к подмножествам Mj произвольно, то есть в любом количестве и в любом порядке. При этом для каждой импликанты F(X1,...,Xn)fj будет получена СКДНФ вида:

(Mj И M*0) ® fj, M*0 Н M0,                  (2.19)

и может быть найдена соответствующая ей минимальная КНФ (МКДНФ)       Image_32.gif (239 bytes)                      (2.20)        где K*t - обобщенный код, объединяющий некоторые элементарные коды из подмножества (MjИM*0).

  1. Кодовая форма, являющаяся наименьшей по показателю 2.17 из всех МКДНФ импликанты F(X1,...,Xn)fj, называется ее абсолютно минимальной КДНФ (АМКДНФ).
  2. АМКДНФ функции F(X1,...,Xn) состоит из АМКДНФ ее импликант, взятых по всем ее значениям.
  3. Строгое решение проблемы минимизации КДНФ логических функций требует построения сложных чрезвычайно трудоемких алгоритмов, основанных на полном многократном переборе кортежей заданной таблицы и промежуточных вариантов решения. Поэтому для практических приложений полезно иметь простые методы минимизации КДНФ, позволяющие находить КДНФ достаточно приближенные к абсолютно минимальным - приближенно минимальные КДНФ (ПМКДНФ).

Алгоритм приближенной минимизации КДФ импликанты F(X1,...,Xn)fj логической функции общего класса можно построить на следующих принципах.

  1. Всякий произвольно взятый обобщенный код Ke с базой (X1,...,Xn) представляет (задает или описывает) подмножество кортежей Me, которое в общем случае может включать в себя кортежи из всех трех подмножеств: Mj,, M0 и Mq . Схема расположения подмножества Me в области M определения функции F(X1,...,Xn)fj показана на рис. 2.3а.
  1. Код Kt,j принадлежит КДНФ, если и только если он представляет подмножество Mt,j, обязательно содержащее все кортежи из подмножества Mj, не содержащее ни одного кортежа из подмножества Mq и возможно включающее некоторые кортежи из подмножества M0. Схема расположения подмножества Mt,j в области М показана на рисунке 2.3б. Абсолютно минимальная КДНФ импликанты F(X1,...,Xn)fj состоит из кодов K*t,j, задающих подмножества M*t,j такие, что

    Image_33.gif (943 bytes)

      При этом g(r)j = min.

        Рис. 2.3.а                                       Рис. 2.3.б

      Image28.gif (2742 bytes)

    Другими словами, объединение Image_34.gif (157 bytes) является кодовым

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

    Рис.2.4.   Пример покрытия множества Mj обобщенными кодами K*t,j

       Image29.gif (2718 bytes)

  2. Любой обобщенный код K*t,j, принадлежащий КДНФ любой логической функции, если только эта функция не является константой, должен содержать не менее одного заполненного разряда. Поэтому поиск кодов K*t,j следует начинать с проверки всех возможных обобщенных кодов с одним заполненным разрядом
  3. Если среди обобщенных кодов с одним заполненным разрядом не окажется ни одного кода, удовлетворяющего условию 2, то проверке подлежат все обобщенные коды с двумя заполненными разрядами. Проверка с увеличением числа заполненных разрядов продолжается до обнаружения обобщенного кода, удовлетворяющего условию 2. Если этому условию удовлетворяют несколько обобщенных кодов с одинаковым числом r(Ke) заполненных разрядов, то первым в состав искомой КДНФ следует включать тот из них, который покрывает большее число кортежей из подмножества Mj. Таким образом, будет получен первый обобщенный код K*1,j для искомой КДНФ.
  4. Учитывая изложенное, поиск приближенно минимальной КДНФ предлагается осуществлять в следующем порядке:

    • найти код K*1,j, покрывающий наибольшее число кортежей из Mj,
    • затем таким же способом найти код K*2,j, покрывающий наибольшее число кортежей из подмножества Mj\ M*1,j,
    • и так далее, пока не выполним условие

    Mj\(M*1,jИ M*2,jИ ...ИM*s,j) = Image_5.gif (79 bytes) .

    При этом искомая приближенно минимальная КДНФ будет иметь вид:

    K*2,j И K*2,j И ... И K*2,j.

  5. Для оценки степени приближения произвольно взятого обобщенного кода Ke к коду K*t,j, пригодному для включения его в искомую минимизированную КДНФ, предлагается использовать следующие оценочные функции (показатели):

       Image_35.gif (516 bytes)    (2.21)

       и r(Ke),                                 (2.22)

    где x ( Ke) - показатель, характеризующий положение подмножества Me, представленного кодом Ke, относительно подмножеств Mj и Mq в области М определения функции F(X1,...,Xn)fj а r(Ke) - показатель количества заполненных разрядов в обобщенном коде Ke.   Величина x ( Ke) / r(Ke) показывает какая доля оценки x ( Ke) приходится на один заполненный разряд обобщенного года Ke. Чем больше эта величина, тем предпочтительнее включение кода Ke в искомую КДНФ.

2.9.4. Алгоритм приближенной минимизации КДНФ не полностью определенных логических функций общего класса

Предлагаемый алгоритм рассмотрим на примере функции   F(X12, X22, X33, X42)3,   заданной таблицей обобщенных кодов (таблица 2.12). Верхние индексы у символов переменных и у закрывающейся скобки соответственно обозначают значность переменных Xi и функции F(X). Общее количество кортежей, составляющих область определения данной функции равно величине Image_37.gif (378 bytes)  Однако в таблице 2.12 заданы только те кортежи, которым соответствуют определенные значения функции F(X12, X22, X33, X42)3, fj О {1, 2, 3}. Кортежи, на которых функция не определена и может иметь любое значение, в таблице отсутствуют. Они считаются заданными “по умолчанию”. Таким образом, достигается сокращение исходной таблицы.

Таблица 2.12                                    Таблица 2.13

Image_36.gif (5525 bytes)

Суть алгоритма состоит в следующем:

  1. Разделить заданную функцию F(X)k на импликанты F(X)fj по ее значениям fj. В результате для рассматриваемого примера получим таблицу 2.13. Положить j=1.
  2. Провести минимизацию КДНФ импликанты F(X)fj. Для этого выполнить следующие действия:

2.1. Составить таблицу КДНФ импликанты F(X)fj. В нашем примере это таблица 2.14, представляющая импликанту F(X)f1. Будем называть ее исходной таблицей.

2.2. Проверить ортогональность обобщенных кодов исходной таблицы (2.14). Если все обобщенные коды заданной таблицы ортогональны, то перейти к следующему пункту, иначе выполнить ортогонализацию заданных обобщенных кодов.  В таблице 2.14 не ортогональны между собой только два первых обобщенных кода: (0 0`2 0) и (0 0 1 - ). Над ними необходимо выполнить следующие действия:

(0 0`2 0) \ (0 0 1 - ) = (0 0 0 0),

(0 0`2 0) И (0 0 1 - ) = (0 0 0 0) И (0 0 1 - ).

Ортогонализация обобщенных кодов необходима для корректного подсчета значений оценочной функции x (Ke). Количество n(Mh) кортежей, соответствующих обобщенному коду в каждой строке ортогонализованной таблицы (2.15) показаны в первом столбце этой таблицы.

где n(a i) - мощность подмножества значений переменной Xi, представленного символом a i в коде Kh, h - номер строки данной таблицы.

Таблица 2.14                                    Таблица 2.15

Image_38.gif (4825 bytes)

2.3. Для базы переменных (X12, X22, X33, X42) импликанты F(X)f1 составить все возможные обобщенные коды с одним заполненным разрядом - коды K(1)e. При этом для получения более глубокой минимизации целесообразно использовать не только положительные значения переменных Xi, но также и отрицания этих значений. Смотрите пример,

Tаблица 2.16.                        Таблица 2.17

Image_39.gif (5479 bytes)

2.4. Для всех кодов K(1)e вычислить значения показателя x (Ke). Для рассматриваемого примера результаты вычислений приведены в таблице 2.16. Покажем процедуру вычислений на примере для случая, когда K(1)e= (0 - - - ). При этом

M(1)eЗM1= (0 - - - )З [(0 0 0 0)И(0 0 1 - )И(0 1 0 0)И(0 1 2 - )]=M1,    n(M1)=6;

M(1)eЗMq=[(0 0 2 - )И(0 - 0 1)],   n(M(1)eЗMq)=4;

x (0 - - - )=6 / 1+4= 1,200.

2.5. Найти максимальное значение показателя x (K(1)e) и соответствующий ему код K(1)e. В данном случае это код K(1)e = (0 - - - ) со значением x(K(1)e)=1,200.

2.6. Проверить, удовлетворяет ли код K(1)e условию n(MeЗMq) =Image_5.gif (79 bytes) . Если данное условие выполняется, то код K(1)e включить в искомую КДНФ, как K*1,j, и перейти к поиску следующего кода искомой КДНФ - K*2,j. Для этого выполнить пункт 2.8 настоящего алгоритма.  В нашем примере упомянутое условие не выполняется, так как код (0 - - - ) пересекается с кодом (0 0 2 - ) и с кодом (0 - 0 1) таблицы 2.15. Поэтому на основании кода K(1)e с максимальным значением показателя x (Ke) следует составить все возможные обобщенные коды K(2)e с двумя заполненными разрядами. В нашем примере эти коды представлены таблицей 2.17.

2.7. Повторить все действия указанные в пунктах 2.4, 2.5 и 2.6 с кодами K(2)e, то есть вычислить для этих кодов значения показателя x (K(2)e), найти максимальное из этих значений, определить соответствующий ему код K(2) e и проверить условие n(Me З Mq ) =  Image_5.gif (79 bytes). В результате этих действий в данном примере получим коды (0 - 1 - ) и (0 - - 0) с одинаковыми наибольшими значениями показателя x ( K(2)e) = 2, но условию n(Me З Mq ) = Image_5.gif (79 bytes) удовлетворяет только первый из них. Поэтому K*1,1= (0 - 1 - ). Если условие n(Me З Mq ) = Image_5.gif (79 bytes) не выполняется ни для одного из кодов K(2)e, то следует выполнять аналогичные действия с кодами K(3)e, ..., K(n)e, пока, наконец, не получатся код K*1,j, удовлетворяющий упомянутому условию.

2.8. Из таблицы, задающей импликанту F(X)f1 (таблица 2.15 рассматриваемого примера), вычесть код K*1,j (K*1,1). В результате получается исходная таблица для поиска следующего обобщенного кода подходящего для искомой КДНФ. В нашем примере это таблица 2.18.

2.9. С таблицей 2.18 повторить все действия, которые выполнялись с таблицей 2.15 и найти следующий обобщенный код K*2,j (K*2,1), подходящий для искомой КДНФ. Читателю предлагается проделать эту работу самостоятельно и убедиться, что следующим будет получен код K*2,1 = (- 1 2 - ).  

Таблица 2.18                Таблица 2.19

Image_40.gif (4233 bytes)

2.10. Вычесть код K*2,j из таблицы 2.18 и составить новую исходную таблицу для поиска следующего обобщенного кода K*t,j. В данном примере это будет код K*3,j = (- - 0 0).

2.11. Продолжать перечисленные выше действия до тех пор, пока при очередном вычитании кода K*t,j из таблицы, по которой он был получен, подмножество Mj окажется пустым, то есть в результате вычитания в таблице не останется ни одного кода, представляющего кортежи из этого подмножества. Другими словами, пока не будет выполнено условие: Mj\(M*1,jИM*2,jИ... ИM*s,j)=Image_5.gif (79 bytes) . В этом случае минимизация КДНФ импликанты F(X)fj заканчивается. Результат минимизации имеет вид:

F(X)fj = (K*1,j И K*2,j И ... И K*s,j) ® fj.

В нашем примере F(X) f1 = (0 - 1 - )И(- 1 2 - )И(- - 0 0) ® 1.

  1. Минимизация КДНФ других импликант F(X)f2, F(X)f3 и так далее выполняется по тому же алгоритму. В результате применения его к нашему примеру получим:

F(X) f2 = (1 0 - 1) ® 2 и

F(X) f3 = (1 1` 0 - )И(0 - 0 1)И(- 0 2 0) ® 3.

  1. Общая приближенно минимальная кодовая дизъюнктивная нормальная форма функции F*(X12, X22, X33, X42)3 представлена таблицей 2.19.  Заметим, что полученная нами минимизированная КДНФ представляет собой полностью определенную логическую функцию F*(X12, X22, X33, X42)3, которая является одним из возможных вариантов доопределения заданной логической функции F(X12, X22, X33, X42)3. Это доопределение произошло автоматически в ходе минимизации заданной КДНФ не доопределенной функции.

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

2.10. Вероятностные логические функции общего класса

2.10.1. Формальное представление вероятностных логических функций

В традиционной математической логике логические переменные Xi считаются детерминированными, то есть предполагается, что переменные Xi принимают, или не принимают определенное значение aeОAi в определенных условиях с вероятностью равной единице. В действительности же, как правило, реальные события носят случайный характер. Поэтому отражающие эти события переменные Xi следует рассматривать как вероятностные переменные, принимающие значения aeОAi с соответствующими вероятностями V(Xi = ae). По определению логической переменной Xi должно выполняться условие:

                        (2.23)

вытекающее из свойства несовместности значений aeОAiДанная интерпретация логических переменных требует разработки соответствующего математического аппарата вероятностной логики. В качестве теоретической основы для формального представления вероятностных логических функций целесообразно взять уже знакомый нам формализм логических функций общего класса. Тогда вероятностной логической функцией общего класса будет называться логическая функция общего класса F*(X1k1, ..., Xnkn)kF, определенная на базе вероятностных логических переменных X1k1, ..., Xnkn и принимающая значения fjОAF с вероятностями V(F* = fj), которые определяются как вероятности сложных событий:

Image_41.gif (432 bytes)     (2.24)

где j = 1,...,N, gj - номер конъюнкции в подмножестве конъюнкций, связанных с j-тым значением функции F*(X1k1, ..., Xnkn) kF. Из данного определения следует, что для представления вероятностных логических функций могут быть использованы все рассмотренные выше формы представления логических функций общего класса дополненные таблицами распределения вероятностей V(Xi = ae) значений переменных Xi.

Пример. Вероятностная логическая функция F*(X13, X23, X32)3 представлена двумя таблицами: 2.20 и 2.21. В таблице 2.20 задана ее сокращенная КДНФ, а в таблице 2.21 задано распределение вероятностей значений ее аргументов Xi.

Таблица 2.20                            Таблица 2.21

Image_42.gif (2700 bytes)                       

При этом вероятности значений функции V(F* = fj) могут быть вычислены по теореме сложения вероятностей. Эффективный алгоритм решения этой задачи предложен автором [14].

2.10.2. Вычисление вероятностей значений вероятностных логических функций

Если логическая функция представлена совершенной дизъюнктивной нормальной формой или совершенной кодовой нормальной формой, то формулы для вычисления вероятностей ее значений по заданным вероятностям значений ее аргументов Xi имеют следующий вид:

Image_43.gif (544 bytes)      (2.25)

Они получаются из совершенных дизъюнктивных нормальных форм импликант F*(X)f(j) после замены значений aeОAi логических переменных Xi на соответствующие значения вероятностей V(Xi = ~ae,i) и замены логических символов “U ” и “U ” на соответствующие им арифметические символы умножения и сложения. Символ ~ae,i означает, что ~ae,i I { ae,i, ` ae,i}.  Если же вероятностная логическая функция задана сокращенной дизъюнктивной нормальной формой или сокращенной КДНФ, то такое непосредственное преобразование возможно, только тогда, когда заданная ДНФ представлена ортогональными дизъюнктивными членами (конституентами) или ортогональными обобщенными кодами K*e,jДля преобразования ортогонализованной КДНФ логической функции в соответствующую ей формулу для вычисления вероятностей ее значений достаточно выполнить вышеизложенную замену символов логических операций на символы арифметических операций и замену логических значений переменных на значения их вероятностей. Эту операцию будем называть правилом замены по аналогии. В общем виде ее можно представить как отношение:

Image_44.gif (727 bytes)       (2.26)

Заметим, что в случае, когда переменная Xi имеет отрицательное значение Xi = ` ae,i, то соответствующая вероятность V(Xi = ` ae,i) вычисляется по формуле:

V(Xi = `ae,i) = 1 - V(Xi = ae,i),     (2.27)

и по определению Image_45.gif (504 bytes)

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

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

Пример. Вычислить вероятность значений логической функции общего класса, заданной таблицами 2.20 и 2.21. Таблица 2.20 представляет собой КДНФ логической функции F*(X13, X23, X32)3. В данной таблице имеются неортогональные обобщенные коды:

(1, 2, - ) и (-, 2, 1), а также (`0, `2, 0) и (2, -, 0).

После их ортогонализации получим таблицу 2.22 эквивалентную таблице 2.21 в том смысле, что обе эти таблицы задают одну и ту же логическую функцию F*(X13,X23,X32)3В результате применения к таблице 2.22 правила замены по аналогии получим следующие формулы для вычисления вероятностей значений заданной логической функции:

V(F*=0) = V(X13=0) + V(X13=1) * V(X23=2) + V(X13=2) * V(X23=2) * V(X32=1);

V(F*=1) = [1 - V(X13=0)] * [1 - V(X23=2)] * V(X32=1);

V(F*=2) = V(X13=1) * [1 - V(X23=2)] * V(X32=0) + V(X13=2) * V(X32=0).

После подстановки соответствующих значений вероятностей из таблицы 2.21 в эти формулы получим:

Таблица 2.22

Image_46.gif (1367 bytes)    

        V(F*=0) = 0,238;

        V(F*=1) = 0,504;

        V(F*=2) = 0,258.

   

Заметим, что значения логической функции, как и значения ее аргументов, представляют собой несовместные события и их вероятности связаны соотношением:Image_47.gif (242 bytes)

2.11. Алгоритмы и алгоритмические процессы

2.11.1. Основные понятия и определения

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

Рис. 2.5. Связь между алгоритмом и алгоритмическим процессом

Image32.gif (3361 bytes)

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

Результативность - означает, что алгоритмический процесс реализует определенную целевую функцию X® Y за конечное число шагов (действий) или за конечный отрезок времени, где X - множество исходных данных, а Y - множество результатов выполнения данного задания.

Массовость - означает возможность существования множества исходных данных {x1…xn} из которого могут быть взяты исходные данные xt для инициализации алгоритмического процесса. Каждому набору xi исходных данных соответствует один вполне определенный результат yj. Однако, один и тот же результат может соответствовать нескольким наборам исходных данных.

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

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

Адекватностью называется степень соответствия алгоритмического процесса (модели) реальному исходному процессу, являющемуся прообразом данного алгоритмического процесса.    Характеристика всей совокупности действий и причинно следственных связей между ними в алгоритмическом процессе называется его структурой.   Пусть D - множество всевозможных действий в алгоритмическом процессе. Тогда однозначно определенное отношение D® D есть структура S алгоритмического процессаСтруктура S является основной характеристикой сущности алгоритмического процесса. Каждый алгоритмический процесс имеет свою структуру S.

Самоуправляемость алгоритмического процесса характеризуется наличием в алгоритмическом процессе специальных действий duОD, предназначенных для управления последовательностью функциональных действий dfОD (вычислительных, механических, информационных, и так далее), предназначенных для непосредственной реализации целевой функции X® Y. Действия du делятся на два типа: условные переходы (распознаватели истинности определяющих условий Pе ) и безусловные переходы от текущего действия к следующему. Безусловные переходы обычно обозначаются в схемах алгоритмов стрелкой (® ), или последовательной записью описателей выполняемых действий друг за другом. Запись D® D означает, что множество действий D упорядочено определенным образом так, что все действия dОD связаны между собой условными и безусловными переходами.  Вообще говоря, безусловные переходы следует рассматривать как, частный случай условных переходов, du : = d(P)® , du : = ® , если условие P заключается в завершении текущего действия, или вообще отсутствует.

Альтернативность - означает, что функция X® Y может быть реализована несколькими различными алгоритмическими процессами (АП). Два АП реализующих одну и ту же функцию X® Y называют эквивалентными. Из эквивалентности АП следует эквивалентность соответствующих им структур и алгоритмов. При разработке алгоритмических процессов и алгоритмов стараются получить наиболее простой и экономичный алгоритмический процесс из всех возможных эквивалентных АП, реализующих заданную функцию X® Y.

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

Ресурсоемкость алгоритмического процесса оценивается величиной времени, необходимого на реализацию целевой функции X® Y и количеством затрачиваемых на это ресурсов (памяти, специальных устройств, математического обеспечения и т.д.).

Алгоритм, как правило, представляет собой описание множества D действий алгоритмического процесса и его структуры S на некотором формализованном языке.

Всеобщими свойствами алгоритмов являются:

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

2.11.2. Математические модели алгоритмических процессов

В зависимости от целей моделирования модели алгоритмических процессов могут характеризовать любые вышеперечисленные свойства. При разработке алгоритмов обычно используют модели для оценки структурных, точностных, временных и ресурсных показателей свойств алгоритмов и алгоритмических процессов. Особо следует отметить класс структурных моделей АП. Обычно они представляют собой формализованные описания отношения D ® D. В специальной научной литературе они известны как логические схемы алгоритмов (схемы Ляпунова), схемы программ Янова, канонические схемы алгоритмов Блохе - Неверова, схемы алгорифмов Маркова и схемы типовых алгоритмических процессов [14]. Сюда же могут быть отнесены и многочисленные математические модели конечных автоматов. Любую такую схему можно рассматривать как систему отображений множества Dr действий - распознавателей истинности условий Pe в множество Df действий - преобразователей и отображения множества Df обратно в множество Dr. Формальная запись этой системы имеет вид: Dr® Df ® Dr. Символом Pe будем обозначать набор (конъюнкцию) условий из множества P, определяющих е-тый переход в алгоритмическом процессе. При этом отношение P® Df будем называть характеристической функцией структуры алгоритмического процесса (ХФ). Действия - преобразователи Dfj из Df обычно записывают в виде определенных математических выражений. Стрелка “® ” обозначает здесь множество безусловных переходов в алгоритмическом процессе. Пусть F(p1, p2,...,pn)D(f) многозначная логическая функция общего класса, имеющая аргументы p1, p2,...,pn, область определения P и область значений Df. Аргументы p1, p2,...,pn представляют собой элементарные предикаты. Тогда математическую модель алгоритмического процесса можно изобразить в виде схемы, показанной на рис. 2.6.  На схеме затемненным прямоугольником обозначено множество всех действий распознавателей условий Pi, а подмножества Dfj действий преобразователей из множества Df представлены светлыми прямоугольниками. Информационные потоки на схеме изображены удвоенными стрелками, а простыми стрелками обозначены безусловные переходы между действиями.

Рис. 2.6. Схема (модель) типовой логической структуры алгоритмического процесса

Image33.gif (4997 bytes)

  Подмножества Dfj состоят из действий непосредственно связанных друг с другом безусловными переходами в одну последовательность, или составляющих отдельный алгоритмический процесс (подпроцесс), рассматриваемый в данном случае, как одно целое. Множества действий Dfj бывают промежуточные и заключительные. В результате промежуточных действий выполняются определенные преобразования данных из множества X и преобразование значений предикатов Pi, определяющих условия перехода к следующему действию Dfj. После выполнения промежуточных действий осуществляется переход к следующим действиям распознавателям, а в результате выполнения заключительных действий получают искомое решение Y, и алгоритмический процесс останавливается.  В приведенной модели структура алгоритмического процесса отличается тем, что все условные переходы определяются в результате вычисления значений одной обобщенной логической функции F(p1,...,pn)D(f), называемой характеристической функцией алгоритмического процесса. Каждый такой переход ведет к промежуточному, или к заключительному подмножеству действий Dfj. После выполнения любого промежуточного подмножества действий Dfj осуществляется переход к вычислению очередного следующего значения характеристической функции. После выполнения заключительных действий получается определенный результат и алгоритмический процесс заканчивается. Описанная структура алгоритмического процесса называется типовой [14]. Соответственно алгоритмический процесс с такой структурой называется типовым алгоритмическим процессом (ТАП).  Важным достоинством типовых алгоритмических процессов является возможность формализации анализа и синтеза их структуры. Эта возможность следует из того, что характеристическая функция ТАП может быть легко представлена в кодовой ДНФ и для ее анализа и эквивалентного преобразования может быть эффективно применен аппарат теории обобщенных кодов.

2.11.3. Пример синтеза структуры типового алгоритмического процесса

Пусть нам поставлена задача разработать алгоритмический процесс и алгоритм для решения на ЭВМ задачи вычисления действительных корней квадратного уравнения ay2+by+c=0 по заданным значениям коэффициентов a, b, c.   Методика решения этой задачи общеизвестна. Суть методики состоит в следующем.

  1. По заданным значениям a, b, c вычислить детерминант d данного уравнения, d=b2-4ac.
  2. Проверить условие P1: (a ? 0) U (d > 0). Если оно истинно, то вычислить корни заданного уравнения по формулам:

Image34.gif (538 bytes)     (2.31)

  1. В противном случае проверить условие P2: (a0)Щ(d = 0). Если оно истинно, то применить формулу:

y1 = y2 = y = - b/2a.        (2.32)

4. В противном случае проверить условие P3: (a = 0)Щ(b 0). Если оно истинно, то применить формулу:

y = - c/b                           (2.33)

  1. Иначе проверить условие P4: (a 0)Щ(d < 0). Если оно истинно, то заданное уравнение не имеет действительных корней.

Эта методика еще не является алгоритмом, так как в ней не определена строгая последовательность действий, не оговорены условия начала и окончания процесса и другие атрибуты алгоритма. Чтобы превратить эту методику в алгоритм типового алгоритмического процесса поступим так:

  1. Определим множество X исходных данных, необходимых для решения задачи. В данном случае X={a, b, c}, x = (a,b,c)ОX.
  2. Определим базу (p1, . . ., pn) характеристической функции проектируемого алгоритмического процесса. Для этого согласно вышеизложенной методике установим множество элементарных предикатов p1, . . ., pn и соответствующие им множества значений Ai. В нашем примере положим, что предикату p1 соответствует множество значений {(a = 0), (a0)}, p2 - {(d = 0), (d > 0), (d < 0)}, p3 - {(b = 0), (b0)}. Кроме того, положим, что началом алгоритмического процесса является условие P4 - “исходные данные x введены в ЭВМ”. Поэтому в базу характеристической функции введем предикат p4 с множеством значений {(данные x не введены), (данные x введены)}. Когда p4 = (данные x не введены) необходимо выполнить первое действие алгоритмического процесса Df1 - ввод исходных данных x.
  3. Установим последовательность выполнения всех остальных действий в данном алгоритмическом процессе. Если данные x введены, то выполняются действия Df2, в результате которых вычисляется значение детерминанта d = b2 - 4ac. Дальнейшая последовательность действий определяется в результате анализа значений a, b, d в соответствии с вышеизложенной методикой. В зависимости от результатов анализа могут выполняться или действия Df3 по формулам 2.31, или действия Df4 по формуле 2.32, или действия Df5 по формуле 2.33, или действия Df5, в результате которых выдается сообщение “нет действительных корней”. Каждые из перечисленных действий являются заключительными, так как они заканчиваются выдачей соответствующего результата и остановкой алгоритмического процесса.
  4. Используя определенную выше базу переменных p1,...,p4, и установленную последовательность действий - преобразователей, определим характеристическую функцию F(p1, p2, p3, p4)D(f) данного алгоритмического процесса. Для наглядности в качестве значений переменных, которыми в данном случае являются многозначные предикаты pi, i=1,..,4, будем использовать простые утверждения (истинные высказывания): (a = 0), (a0); (d = 0), (d > 0), (d < 0); (b = 0), (b0); (данные Х не введены), (данные Х введены). Значениями функции F(p1, p2, p3, p4)D(f) являются символы и описания действий преобразователей Dfj. Поэтому данная характеристическая функция будет представлена таблицей 2.23. В этой таблице легко узнать сокращенную КДНФ логической функции общего класса F(p21, p32, p23, p24)6.

    Таблица 2.23

    Image_48.gif (8113 bytes)

    Полученную характеристическую функцию проверим на непротиворечивость (корректность) и на полноту ее определения. Для этого введем следующие сокращенные обозначения для значений переменных: p1={0, 1}, p2={0, 1, 2}, p3={0, 1}, p4={0, 1}, и для значений функции Dfj = {1, 2, 3, 4, 5, 6}, соответствующие значениям, определенным ранее. Тогда таблица 2.23 превратится в более удобную для формального анализа таблицу 2.24, где P - переменная, принимающая значения из множества М всех возможных наборов значений переменных p1,..., p4. Каждый такой набор PeI M есть формальное выражение условия, определяющего переход к соответствующим действиям Dfj. Если Pe истинно, то выполнить переход к Dfj.

    Таблица 2.24.

    Image_49.gif (1669 bytes)

  5. Анализ этой таблицы показывает, что функция F(p21, p32, p23, p24)6 определена не корректно, так как обобщенный код (- - - 1), задающий область определения импликанты F(P)2 пересекается с обобщенными кодами, задающими области определения импликант F(P)3,..., F(P)6Для устранения этой некорректности необходимо добавить еще одну переменную p5, по значениям которой можно было бы отличить условие P2, определяющее действия Df2 от условий, определяющих действия Df3,..., Df6. Эти значения в данном случае должны иметь следующий смысл: “значение d не вычислено” или “значение d вычислено”. При этом характеристическая функция проектируемого алгоритмического процесса должна быть переопределена так, как это показано в таблице 2.25, где значению “значение d не вычислено” переменной p5 соответствует краткое значение “0”, а значению “значение d вычислено” - значение “1”.

    Таблица 2.25.

    Image_50.gif (1810 bytes)

    Данная таблица представляет собой корректно определенную логическую функцию общего класса F(p21, p32, p23, p24, p25)6 и является ее минимальной кодовой ДНФ, так как каждая ее импликанта представлена только одним обобщенным кодом. Однако данная функция может быть определена не полностью. Для проверки полноты ее определения вычислим полную мощность ее области определения по формуле: где ki - мощность области значений переменной pi (число элементов множества Ai). В данном примере n(M) = 2* 3* 2* 2* 2= 48. Затем следует вычислить мощность n(M’) той части M’ области определения характеристической функции, где она определена. Эта часть представлена таблицей 2.25. Если в данной таблице все обобщенные коды ортогональны, как в данном случае, то Image_51.gif (313 bytes) где m(M*e) - мощность подмножества M*e элементарных кодов (наборов значений переменных pi) представленных обобщенным кодом Ке в данной таблице. Напомним, что Image_52.gif (311 bytes)  где n(a i) - число значений, которые переменная pi может принимать в обобщенном коде Ке. Например, для кода К2 = ( - - - 0 1) в нашем примере m(M*e) = 2* 3* 2* 1* 1 = 12. В целом для таблицы 2.25 n(M’) = 45. Следовательно, в заданной таблице отсутствуют три элементарных кода, на которых наша характеристическая функция оказалась не доопределенной. Найти эти коды можно путем последовательного вычитания всех обобщенных кодов, представляющих заданную таблицу (КДНФ), из обобщенного кода (- - - - - ), представляющего собой множество М в целом. В результате, в данном случае, получим обобщенный код К*е = (0 - 0 1 1), представляющий собой три отсутствующих в таблице 2.25 элементарных кода: (0 0 0 1 1), (0 1 0 1 1) и (0 2 0 1 1).   Для определения логического смысла найденного обобщенного кода достаточно подставить в него ранее определенные смысловые значения переменных pi. При этом получим: К*е = (а = 0)Щ(b = 0)Щ(данные Х введены)Щ(d вычислено). Другими словами, данный обобщенный код характеризует ситуацию, когда квадратное уравнение ay2 + by + c = 0 превращается в константу c. В этой ситуации, как и в случае, когда d< 0, можно полагать, что y = “нет действительных корней”. Поэтому будем считать, что обобщенный код (0 - 0 1 1) задает условия перехода к действиям Df6, и дополним  таблицу 2.5   соответствующей строкой. В результате получим корректно и полностью определенную характеристическую функцию проектируемого алгоритмического процесса, представленную в сокращенном виде таблицей 2.26.

    Таблица 2.26.

    Image_53.gif (2038 bytes)

    Согласно определению функция F(p21, p32, p23, p24, p25)6, она же F(P)6, представляет собой отображение P® Df множества условий P в множество функциональных действий Df.

  1. Превратим отображение P® Df в отображение Dr ® Df. Для этого: заменим множество условий P на множество Dr действий - распознавателей этих условий, и построим схему отображения Dr ® Df (рис. 2.7), наглядно отражающую порядок действий в типовом алгоритмическом процессе, вычисляющих значения характеристической функции F(p21, p32, p23, p24, p25)D(f) и осуществляющих условные переходы к соответствующим функциональным действиям Dfj. При этом, пока остается открытым вопрос о том, как в типовом АП осуществляется обратный переход от промежуточных действий Dfj к вычислению очередного значения характеристической функции.

Рис. 2.7. Схема отображения множества действий – распознавателей (Dr), реализующих характеристическую функцию F6, в множество действий - преобразователей (Df).

Image_54.gif (9264 bytes)

  1. Определим обратное отображение Df ® Dr , задающее переходы от промежуточных действий Dfj к действиям Dr, вычисляющим значения характеристической функции. Для этого необходимо каждое подмножество промежуточных действий, в нашем примере это - Df1 и Df2, дополнить действиями преобразователями значений соответствующих переменных pi, определяющих переход от Dfj к DrеНDr , и включить в множество Df одно, общее для всех подмножеств промежуточных действий Dfj, действие - безусловный переход к началу множества действий Dr.   Внесение перечисленных дополнительных действий в АП обеспечивает его самоуправляемость. В данном примере такими действиями являются: действие (p4:=1) - присвоение значения “1” переменной p4, указывающего на факт завершения ввода исходных данных х, осуществляемого подмножеством Df1, и действие (p5:= 1) - присвоение значения “1” переменной p5, указывающего на факт завершения вычисления значения детерминанта d, выполняемого подмножеством Dfj, и безусловные переходы Df1® Dr, Df2® DrНапомним, что подмножества заключительных действий Dfj должны включать в себя действия, выдающие искомые результаты. В данном случае это - значения: y, y1, y2 и сообщение “нет действительных корней”.   Схема проектируемого алгоритмического процесса с перечисленными дополнениями показана на рис. 2.8. Строго говоря, эта схема является схемой математической, точнее логической, модели типовой структуры данного процесса.

Рис. 2.8. Схема отображения множеств Dr® Df® Dr, образующих алгоритмический процесс вычисления корней квадратного уравнения ay2+by+c=0

Image_55.gif (10572 bytes)

Дальнейшее проектирование типового АП заключается в том, чтобы определить способы и построить частные алгоритмические процессы для реализации действий Dr, вычисляющих значения характеристической функции F(p21, p32, p23, p24, p25)D(f), и действий Dfj, осуществляющих непосредственные преобразования данных x в результаты y.  Для построения процесса вычисления значений характеристической функции F(p21, p32, p23, p24, p25)D(f) можно предложить два алгоритма. Первый состоит из следующих простых инструкций:

  1. Определить текущие значения предикатов pi и составить набор (элементарный код) из этих значений [p1(t), p2(t), . . ., pn(t)], представляющий собой текущее условие Pt для перехода к определенному действию Dfj.
  2. Определить обобщенный код К* в таблице, задающей функцию F(p21, p32, p23, p24, p25)D(f), который включает в себя данный набор [p1(t), p2(t), . . ., pn(t)].
  3. Определить имя (индекс или символ) подмножества Dfj, соответствующего коду К*.
  4. Перейти к выполнению действий из подмножества Dfj.

Данный алгоритм вычисления характеристической функции хорош тем, что он не зависит от конкретного содержания самой функции. Поэтому его можно реализовать как универсальный алгоритм для вычисления любой характеристической функции.  Второй алгоритм вычисления значений характеристической функции предписывает последовательное вычисление значений истинности только тех предикатов pi(t), которые существенно связаны с очередными действиями Dfj. Например, для перехода к выполнению действий из подмножества Df1 в рассматриваемом примере достаточно проверить значение только одного предиката p4. Значения остальных предикатов для условий перехода к Df1 не существенны. Это следует из того, что на месте значений этих предикатов в обобщенном коде, с которым связаны действия Df1, стоят символы “-”. Иначе говоря, для определения условий перехода к действиям Dfj следует проверять значения только тех предикатов pi, которые в соответствующей строке таблицы ХФ содержат символы, отличные от знака тире.

Для реализации такого алгоритма вычисления ХФ необходимо ее кодовую ДНФ превратить в эквивалентную ей логическую схему. Эта процедура может быть выполнена формально одним из способов, изложенных в докторской диссертации Устенко А. С. [14].   Для рассматриваемого примера логическая схема алгоритма вычисления значений ХФ, полученная из таблицы 2.26, показана на рис. 2.9.

Рис. 2.9 Логическая схема алгоритма вычисления значений характеристической функции проектируемого АП

Image_56.gif (3652 bytes)

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

2.11.4. Показатели качества алгоритмов и алгоритмических процессов

2.11.4.1. Обобщенные и частные показатели

Обобщенными показателями качества алгоритмов и алгоритмических процессов являются характеристики их потребительских свойств:

Эти характеристики (показатели) определяются по уже известным нам показателям частных свойств алгоритмов и алгоритмических процессов. Структура функциональных связей между показателями качества алгоритмических процессов и алгоритмов показаны соответственно на рис. 2.10 и рис. 2.11

Рис 2.10. Функциональная структура показателей качества алгоритма

Image37.gif (9321 bytes)

Рис. 2.11. Функциональная структура показателей качества алгоритмических процессов

Image38.gif (9289 bytes)

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

2.11.4.2. Показатель сложности решаемой задачи X® Y

Сложность решаемой задачи X® Y определяется степенью неопределенности Н(X® Y) выбора (вычисления) результата решения данной задачи.

Решение задачи X® Y представляет собой процесс выбора элемента xe из множества Х, e=1,...,m, и выбора соответствующего ему элемента yj из множества Y, j=1,...,N, согласно заданному отображению X® Y. Поэтому источником неопределенности при решении задачи X® Y является разнообразие элементов в множествах X, Y и разнообразие связей в отображении X в Y.

Image_57.gif (466 bytes)             (2.34)

В общем случае неопределенность выбора некоторого, безразлично какого именно, элемента y из множества Y оценивают величиной энтропии:

где p(yj) - вероятность выбора элемента yj из множества Y,

N - число всех элементов множества Y,

а - основание логарифма.

Поэтому величина H(Y) может служить мерой разнообразия элементов множества Y. Другими словами, величина H(Y) есть математическое ожидание логарифма вероятности выбора некоторого элемента из Y, безразлично какого именно. Вероятность p(yj) является условной вероятностью, зависящей от вероятности p(xe) выбора элемента xe из множества исходных данных X и от заданного отображения X® Y, согласно которому один и тот же элемент yj может соответствовать нескольким различным наборам исходных данных xe из Х. Поэтому вероятность p(yj) следует вычислять по формуле:

Image39.gif (376 bytes)     где mj - количество элементов xe из Х, которым отвечает элемент yj из Y.   Таким образом, приходим к выводу, что величина неопределенности (сложность) решения задачи X® Y, с учетом неопределенности выбора наборов xe исходных данных и заданного (определенного) отображения X® Y, может быть вычислена по формуле:

Image_58.gif (658 bytes)                              (2.35)

Если вероятности p(xe) одинаковы для всех xe из Х, то p(xe) = 1/m, где m - количество всех элементов в множестве Х, и формула (2.35) приобретает вид:

Image_59.gif (797 bytes)        (2.36)

Выбор показателя 2.34 для оценки сложности функции X® Y основан на следующих соображениях:

  1. Величина C(X® Y) определяется параметрами N и mj / m, j=1,...N, которые характеризуют разнообразие элементов в множествах X и Y и разнообразие отношений между этими элементами, т. е. - сложность функции X® Y.
  2. Величина C(X® Y) не зависит ни от способа вычисления функции X® Y, ни от времени t ее вычисления.
  3. Величина C(X® Y) принимает минимальное значение, равное нулю, при N=1, то есть при минимальном разнообразии элементов в множестве Y, когда разнообразие элементов множества X не оказывает влияние на выбор элементов их Y и функция превращается в константу.
  4. Величина C(X® Y) принимает максимальное значение C(X® Y)=logaN при максимально возможном разнообразии решений (элементов множества Y), когда N=m, и p(xe) = 1/m.
  5. В общем случае величина C(X® Y) изменяется в пределах:

Image_70.gif (843 bytes)

  1. Здесь величина C(X® Y) представляет собой меру неопределенности (энтропию H(X® Y)) выбора решения yjОY при условии, что задано функциональное соответствие X® Y, и что все наборы исходных данных xeОX могут быть взяты для обработки с одинаковой вероятностью p(xe)= 1 / m.  Энтропия H(X® Y) есть среднее значение логарифма вероятности принятия какого-либо решения yjОY при заданном функциональном соответствии X® Y. Эта величина прямо зависит от логической сложности функции X® Y и поэтому может служить ее мерой (мерой сложности функции).

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

“Налево пойдешь - женатым будешь.

Направо пойдешь - коня потеряешь.

Прямо пойдешь - сам погибнешь”.

В данном случае множество Y возможных решений состоит из трех альтернатив: женатым будешь, коня потеряешь, сам погибнешь. Множество X исходных данных также определено тремя условиями: налево пойдешь, направо пойдешь, прямо пойдешь. Между элементами множеств X и Y установлено однозначное соответствие. Поэтому

C(X® Y) = - 3 (1 / 3) loge (1 / 3) = 1,1.     Основание логарифма в данном случае принято равным величине e.    При первой же попытке формального анализа этой задачи выясняется, что она определена не полностью. В области исходных данных не учтены два возможных условия: “обратно пойдешь” и “на месте останешься”. Этим условиям необходимо сопоставить какие-то следствия yj из Y. Например, по смыслу сказки безрезультатное возвращение домой нашего героя, равно как и безрезультатное сидение на одном месте, свидетельствуют о его несостоятельности. Это, очевидно, и подразумевается в данной сказке “по умолчанию”. Поэтому полностью определенная задача нашего сказочного героя фактически имеет следующую постановку:

“Налево пойдешь - женатым будешь.

Направо пойдешь - коня потеряешь.

Прямо пойдешь - сам погибнешь.

Обратно пойдешь или

на месте останешься - позором покроешься”.

Если наш герой с равной вероятностью может принять любое из пяти перечисленных решений, то сложность получения любого из четырех перечисленных результатов в среднем равна величине:

C(X® Y) = - 3 (1 / 5) loge (1 / 5) - (2 / 5) loge (2 / 5) = 1,3.     Следовательно, судя по вычисленным значениям показателя C(X® Y), задача нашего героя на самом деле несколько сложнее, чем ее постановка, изложенная в известной сказке.

2.11.4.3. Показатель сложности алгоритма

По определению алгоритм задает процесс вычисления функции X® Y. Для этого в алгоритме имеются описатели DjОD действий DjОD и описатели (предикаты) PrОP условий PrОP. Здесь символы Dj, D, Pr, P используются для обозначения описателей, соответствующих   действий   Dj, D и условий     Pr, P, r=1,2,...,m , PrОPjНP, j=1,2,...,mj, .  Другими словами, алгоритм представляет собой описание детерминированного отображения P® D, которое по определению является описанием характеристической функции типового алгоритмического процесса. Поэтому сложность алгоритма, задающего этот процесс можно оценить, как сложность функции P® D по формуле:

Image_71.gif (671 bytes)        (2.37)

В данном выражении величина mj / m есть оценка неопределенности или вероятности выбора подмножества действий Dj из множества D в предположении, что вероятности истинности предикатов Pr одинаковы для всех r=1, 2,...,m, то есть что вероятность p(Pr)=(1/m). В общем случае эти оценки различны для различных подмножеств Dj. Однако, для оценки сложности алгоритма в целом имеет смысл среднее значение (mj / m)* величины (mj/ m), которое можно вычислить следующим способом: m*j=(m/N), (mj / m)* = (m/N/m) = (1/N). При этом сложность алгоритма при условии равных вероятностей выбора действий DjОD оценивается по формуле:

или     aC(P® D) = N,    или   eC(P® D) = N.      (2.38)

Последнее уравнение позволяет объяснить смысл введенной нами оценки сложности алгоритмов. В правой части этого уравнения стоит число N описателей Dj альтернативных действий Dj из множества D. Это прямая оценка разнообразия элементов множества D.

Image_72.gif (798 bytes)          (2.39)

Для содержательной интерпретации левой части уравнения 2.39 напомним, что предикаты Pr представляют собой конституенты F(p1, p2,...,pn)Dj характеристической функции F(p1, p2,...,pn)D(f), где p1, p2,...,pn - базовые переменные данной функции (элементарные предикаты, определенные на множестве Х исходных данных и на множестве Z состояний алгоритмического процесса). Число m конституент Pr в множестве P (мощность множества P) определяется по формуле: m = k1- k2-   ... - kn, или m = kn, если k1=k2 =... =kn, k - число значений базовой переменной рi, i=1,...,n.    Полагая, что основание а логарифма в выражении 2.39 равно числу k значений элементарных предикатов pi, и что величина C(P® D) равна числу n переменных (предикатов pi) в базе характеристической функции алгоритма, приходим к выводу, что kn=N. Это означает, что в алгоритме минимальное разнообразие условий, представленных конституентами Pr должно соответствовать разнообразию описателей действий Dj. При этом сложность алгоритма C(P® D) оценивается числом переменных (элементарных предикатов p), необходимых для корректного задания характеристической функции данного алгоритма.   Величина C(P® D) зависит также от значности переменных pi. Поэтому при сравнительной оценке сложности алгоритмов по формуле 2.37 необходимо выбирать единое значение основания логарифма. Рекомендуется принимать a=e (основание натурального логарифма) или а=2 (значность двоичных переменных). В последнем случае сложность алгоритма C(P® D) можно интерпретировать, как среднее число двоичных базовых переменных рi, подлежащих проверке при определении переходов между действиями Dj и Dt, j, t О {1,2,...,N}.   Соотношение C(X® Y) / C(P® D) = K (C) является показателем качества проектирования алгоритмов. Чем ближе это отношение к единице, тем проще и, следовательно, лучше спроектирован алгоритм для решения задачи X® Y. Наличие в алгоритмах избыточных описателей условий Pr, переменных pi, или действий Dj усложняет алгоритм и соответственно снижает его качество. Избыточность описателей в алгоритме оправдана только тогда, когда алгоритм реализует дополнительные функции, обеспечивающие устойчивость алгоритмического процесса или необходимые сервисные возможности при решении поставленной задачи.

2.11.4.4. Оценка сложности иерархических алгоритмов

До сих пор мы рассматривали типовые алгоритмы, с множеством функциональных действий, относящихся к одному уровню иерархии. Схема такого алгоритма показана на рис. 2.12.

Рис 2.12. Схема типового алгоритмического процесса с одним уровнем иерархии

Image41.gif (2140 bytes)

Однако на практике чаще всего приходится иметь дело со сложными многоуровневыми иерархическими алгоритмами, в которых подмножества Dj также представлены типовыми алгоритмами, как это показано на рис. 2.13.  Оценка сложности таких алгоритмов может быть основана на следующих соображениях. Пусть сложность частного типового алгоритма, задающего подмножество действий Dj равна величине Cj. По определению Cj есть среднее число базовых переменных pi характеристической функции этого алгоритма, проверяемых при определении условных переходов между функциональными действиями в j-том частном алгоритме. Так как на каждом иерархическом уровне сложного алгоритма может быть несколько частных алгоритмов, то имеет смысл оценка Cu средней сложности частных алгоритмов на данном иерархическом уровне.

Рис. 2.13. Схема типового алгоритмического процесса с двумя уровнями иерархии

Image42.gif (8409 bytes)

При этом сложность всего сложного иерархического алгоритма в целом оценивается величиной  где u - номер иерархического уровня в сложном алгоритме,  Cu,r=C(P® D)u,r - сложность r-того частного алгоритма на уровне с номером

Image_73.gif (261 bytes)       (2.40)   

  Image_74.gif (259 bytes)         u, Nu - количество частных алгоритмов на этом уровне, r=1,2,...,Nu,  C(P® D) u,r определяется по формулам 2.37 или 2.39 применительно к данному частному алгоритму.   Другими словами, сложность иерархического алгоритма в целом оценивается средним числом элементарных условий (базовых переменных p), проверяемых в процессе реализации алгоритма. Последовательность проверок условий p, изображенную на схеме алгоритма, называют маршрутом. В данной терминологии сложность алгоритма оценивается средней длиной маршрута реализации алгоритма от ввода исходных данных до получения какого-нибудь решения поставленной задачи.

Пример 1. В разделе 2.11.3 мы рассматривали пример синтеза алгоритма для вычисления корней квадратного уравнения ay2 + by + c = 0. Суть этого алгоритма состоит в том, что он представляет собой точную инструкцию, как по любому заданному набору xe значений действительных чисел a,b,c получить значение y, удовлетворяющее заданному уравнению. В общем случае область исходных данных X={a,b,c} и область значений корней Y={y} являются бесконечными. Однако многие значения y из Y вычисляются по одним и тем же правилам (формулам Fj(x)), если соответствующие исходные данные xe из X удовлетворяют определенным условиям Pr. Поэтому суть алгоритма состоит в том, чтобы для любого xe определить условия Pr применения соответствующей формулы или действия Fj(xe) = ye. Множества условий Pr и соответствующих им формул Fj(x) конечны и должны быть описаны в алгоритме. Поэтому алгоритм представляет собой описание метода отображения P ® F, и сложность алгоритма можно оценить величиной сложности функционального отображения P ® F.    Согласно известному методу вычисления корней квадратного уравнения существует 5 условий Pr, разбивающих множество исходных данных X на 5 характерных подмножеств Xr:P1=(a0)Щ(d>0), P2=(a0)Щ(d=0), P3=(a=0)Щ(b0), P4=(a0)Щ(d<0) и P5=(a=0)Щ(b=0).   В результате многообразие элементов бесконечного множества X преобразуется в многообразие подмножеств Xr, которых всего пять. Каждому подмножеству Xr соответствует определенная формула Fj. В данном случае таких формул всего четыре: F1= (- b +_Цd)/ 2a, F2= b/ 2a, F3= - c/ b и F4- сообщение “действительных корней нет”. В методике предполагается, что формула F4 соответствует условию P4 и условию P5. Поэтому оценка сложности рассматриваемого метода решения поставленной задачи выполняется по формуле:  

Image_75.gif (676 bytes)    

где N - количество альтернативных формул, преобразующих элементы xeОXr в элементы yjОY,  

mj=1 для jО{1,2,3} и mj = 2 для j=2,

m = 5 количество условий Pr, разделяющих множество X на подмножества Xr,

а - основание натурального логарифма. При этом C(P®F)=-(3/5)loga(1/5)-(2/5)loga(2/5)=1,3322.    Однако реальный алгоритм, реализующий изложенный метод, должен содержать еще дополнительные условия и описатели функций или действий, предназначенные для организации соответствующего алгоритмического процесса на заданных технических средствах. В данном примере для этой цели были добавлены условия, обеспечивающие ввод исходных данных и вычисление значения детерминанта d. В результате количество условий Pr увеличилось до семи, а число описателей действий Df, реализующих функции Fj(x) и другие действия, увеличилось до шести.    Таким образом, реальный алгоритм представляет собой описание отображения P ® Df, которое задается таблицей 2.26. Оценке сложности алгоритма при этом получается в результате следующих вычислений:   C(P® Df)= -(5/7)loga(1/7)-(2/7)loga(2/7) =1,7487.  Для сравнения оценки сложности математической методики решения задачи и оценки сложности соответствующего ей типового алгоритма введем коэффициент сложности:

K(C) = C(P® Df) / C(P® F).      (2.41)

В данном примере K(C) =1,3126 показывает, что алгоритм сложнее методики, на основании которой он составлен примерно на 30%. Это усложнение происходит за счет необходимости явно описывать в алгоритме все действия, которые в методике выполняются “по умолчанию”.

Пример 2. Примером иерархических алгоритмов является так называемые диалоговые человеко-машинные системы. В них после запуска алгоритмического процесса и прихода его в определенное устойчивое состояние Sg на экране дисплея появляется сообщение в виде меню, в котором пользователю предлагается несколько вариантов дальнейшего продолжения процесса. Действия пользователя также могут состоять из нескольких допустимых вариантов, заранее предусмотренных в алгоритме. Комбинация элементов меню qОQg, значений параметров данного состояния hОHg и действий пользователя rОRg приводит к следующему состоянию St алгоритмического процесса. Каждое такое состояние соответствует определенному уровню сложного иерархического алгоритма и может быть представлено одним типовым алгоритмом. Макет отдельного состояния Sg представлен на рис. 2.14.

Рис. 2.14. Макет одного состояния диалоговогоалгоритмического процесса

Image_77.gif (3639 bytes)

Заключительным действием в каждом состоянии Sg является переход в следующее состояние St. В новом состоянии выдается новое меню и так далее. В качестве примера диалогового алгоритма рассмотрим алгоритм, реализующий процесс автоматизированного обучения иностранному языку по словарю. Алгоритм предусматривает два режима обучения. Первый режим заключается в том, что обучаемому показывают на экране N иностранных слов из заданного словаря и русское слово, являющееся переводом одного из показанных иностранных слов. Обучаемому необходимо стрелкой “мышки” указать иностранное слово, соответствующее показанному на экране русскому слову. Факт правильного ответа подтверждается сообщением “правильно” и запоминается в памяти ЭВМ, а обучаемому выдается следующее русское слово из заданного набора. При этом правильно переведенные обучаемым русские слова больше не показывается на экране. Если обучаемым допущена ошибка, то ему сообщается об этом и выдается другое русское слово для опознания, а ранее заданное слово остается для следующего предъявления. После того, как обучаемый правильно укажет перевод всех N заданных слов, первый режим обучения заканчивается сообщением: “Вы усвоили заданные слова. Переходите ко второму режиму обучения”. Второй режим обучения состоит в том, что обучаемому показывают на экране русское слово из заданного словаря, состоящего из тех же N слов, а он должен ввести с клавиатуры соответствующее иностранное слово - перевод. Реакция системы на правильный и неправильный ответ обучаемого такая же, как и в первом режиме обучения. Предварительная описательная характеристическая таблица данного алгоритма представлена в виде таблицы 2.27.  В ней описаны четыре состояния алгоритмического процесса: S0, S1, S2, S3,. Каждое состояние St определено на собственной базе предикатов p1, ...,pn(t) и имеет собственную характеристическую функцию Ft, по которой можно определить логическую сложность алгоритма данного состояния. Так для состояния S0 по функции F0 находим:

С(S0) = - (1/4) loga (1/4) - (3/4) loga (3/4) = 0,562.

Для состояний S1, S2, S3 на основании функций F1, F2, F3 соответственно подучим следующие оценки сложности этих состояний:

С(S1) = - (3/6) loga (1/6) - (3/6) loga (3/6) = 1, 242,

С(S2) = - (2/8) loga (1/8) - (2/8) loga (2/8) - (4/8) loga (4/8) = 1,213,

С(S3) = - (2/8) loga (1/8) - (2/8) loga (2/8) - (4/8) loga (4/8) = 1,213.

Таблица 2.27

Image_78_1.gif (17138 bytes)

Image_78_2.gif (13867 bytes)

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

Рис. 2.15. Иерархическая схема алгоритма обучения иностранному языку

Image43.gif (7131 bytes)

Из данного рисунка видно, что рассматриваемый алгоритм состоит из трех иерархических уровней. Первый и второй уровни алгоритма описывают по одному состоянию алгоритмического процесса, а третий уровень алгоритма описывает два состояния (S2 и S3). Поэтому согласно изложенной выше методике определения сложности типовых иерархических алгоритмов искомая оценка сложности может быть вычислена по следующей формуле:    C(P® Df)= C(S0)+C(S1)+[C(S2)+C(S3)]/2 =3,017.    Так как алгоритм однозначно задает соответствующий алгоритмический процесс, то сложность алгоритмического процесса можно оценивать сложностью его алгоритма с учетом сложности С(L) преобразования алгоритмического языка L , на котором представлен данный алгоритм, в соответствующую машинную программу.

C(АП) = C(P® Df)*K(L),         (2.42)

где K(L) - коэффициент усложнения алгоритма при переводе его на машинный язык.

главная     об авторе       содержание        часть1      часть3       часть4      литература