Программа качественного машинного моделирования

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

Листинг 20.2. Программа машинного моделирования, предназначенная для решения качественных дифференциальных уравнений. В этой программе используются обычные предикаты обработки списков member/2 И сопс/3

% Интерпретатор качественных дифференциальных уравнений

:- ор( 100, xfx, ..>. :- ор( 500, xfx, :].

% landmarks! Domain, [ Landl, Land2, ... ]

% Landl, Land2 и т.д. - отметки для области определения Domain; они входят

* в состав определения качественной модели, заданного пользователем

% correspond! Constraint):

% переменная Constraint задает соответствующие значения

% для ограничения некоторого типа

correspond! sum! Doml:zero, Dom2:zero, Dom3:zeroM.

correspond! sum( Doml:L, Don\2 : zero, Doml:L)) !~

qmag I Doml:L), L \ = = zero, not [L = _••_)• % L - это ненулевая отметка

i в области определения Doml

correspond! sum( Doml:zero, Dom2:L, Dom2:U) :-

qmag I Doro2:L), L \ = zero, not [L = _.._) . % L - это ненулевая отметка

% в области определения Dom2

correspond; sum( VI, V2, V3)) :-

correspond! VI, V2, V3) . i Определяемые пользователем соответствующие значения

% Ниже приведено пустое определение отношения correspond/З, которое

% предназначено лишь для предотвращения возникновения ошибки "Неопределенный

* предикат" в некоторых версиях системы Prolog

Correspond! dumny, dummy, dummy) .

% gmag! Domain:QualMagnitude) фпад[ Domain;Qm) :-

landmarks! Domain, Lands) ,

gmag ( Lands, QnO .

gmag( Lands, L) :-
member) L, Lands) ,
L \== minf, L \== inf. % Конечная отметка

Глава 20. Качественные рассуждения



qmag( Lands, L1..L2) :- * Интервал

concl _, [L1,L2 I _ ] , Lands). l Две смежные отметки

% relative_qmag{ Domainl:QM, Domain2:Landmark, Sign):

% переменная Sign - это знак разности между переменными QM и Landmark;

\ если QH < Landmark, го Sign - neg и т.д.

relative_qraag( Domain:Ma..Mb, Domain:Land, Sign) :- !, landmarks[ Domain, Lands),

( compare_lands( Ma, Land, Lands, neg). Sign » neg, ! ;

Sign - pos ) .

rrlative_qmag( Domain:Ml, Domain:M2, Sign) :-landmarks! Domain, Lands) , compare_lands( Ml, M2, Lands, Sign), !.

% qdir( Qdir, Sign) :

% переменная Qdir - это качественное значение направления изменения

% со знаком Sign

qdir[ dec, neg) . gdir( std, zero) . qdir( inc, pos) .

в Законы качественного суммирования

% qsum( Ql, Q2, Q3] :

% Q3 = Ql + Q2 , качественная операция суммирования

% в области определения [pos,zero,neg]

qsum( pos, pos, pos) .

qsum; pos, zero, pos) .

qsumi pos, neg, pos) .

gsuml pos, neg, zero),

qsuml pos, neg, neg) .

qsum( zero, pos, pos) .

qsum< zero, zero, zero) .

qsum( zero, neg, neg) .

qsumj neg, pos, pos) .

gsum{ neg, pos, zero).

qsum( neg, pos, neg) .

qsuml neg, zero, neg) .

qsum< neg, neg, neg) .

% qdirsuml Dl, D2 , D3) :

% качественная операция суммирования обозначений направления изменения

qdirsumt Dl, D2 , D3I :-

qdir[ Dl, Ql) , qdiri D2, Q2) , qdiri D3, Q3) , qsuraf Ql, Q2 , Q3) .

% sum( QV1, QV2, QV3) :

i QVl - QV2 + QV3, качественная операция суммирования качественных значений % в форме Domain:Qmag/Dir. При вызове этого предиката предполагается, что % области определения всех трех параметров конкретизированы

sum! D1:QM1/Dirl, D2;QM2/Dir2, D3:QM3/Dir3) :-

qdirsumf Dirl, Dir2, Dir3), % Направления изменений: Dill + Dir2 = Dir3 qraag( D1:QM1), qmag ( D2:QM2) , qmag ( D3:QM3) ,

% QM1+QM2-QM3 должны Сыть согласованы со всеми соответствующими значениями: not (



Часть II. Применение языка Prolog в области искусственного интеллекта

correspond sum[ D1:V1, D2:V2, D3:V3)),* VI + V2 = V3 relative_qmag( D1;QM1, D1:V1, Signl), relative_qmag( D2:QM2, D2:V2, Sign2}, relative_qmag( D3:QM3,D3:V3, Sign3}, not qsuml Signl,Sign2, Sign3) ).

% inplus (X, Y} :

* переменная Y - монотонно возрастающая функция от- X

raplus( D1:QM1/Dir, D2:QM2/Dir) :- % Равные направления изменения qmag{ D1:QM1) , qmagf D2:QM2) ,

$ переменные QM1, QM2 согласованы со всеми соответствующими значениями $ от D1 до D2 : not ( correspond; D1:V1, D2:V2)r

relative_qmag( D1:QM1, D1:V1, Signl),

relative_qmag( D2:QM2, D2:V2 , Sign2),

Signl \== Sign2 ) .

% derivf Van , Var2) :

% производная по времени переменной varl качественно равна Var2

deriv{ Doml:Qmagl/Dirl,Dom2:Qmag2/Dir2 ) :-qriir( Dirl, Signl) , qmag( Dom2:Qmag2) ,

relative_qmag( Dom2:Qmag2, Dom2:zero, Sign2), % 3ign2 - знак переменной Qmag2 Signl = Sign2.

I transitionf Domain:Qmagl/Dirl, Domain:Craag2/Dir2) :

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

* в другое в "последовательные" моменты времени

transition! Dom:LI..L2/std, Dom:LI..L2/Dir2) :-qdir( Dir2, AnySign) .

transition! Dom:Ll,.L2/inc, Don:Li..L2/inc).

transition! Dom:LI..L2/inc, Dora:LI.,L2/std) .

transition,- Dom:LI..L2/inc, Dom:L2/inc) :-L2 \== inf.

transition! Dom: LI . . L2/inc, Dom:Ij2/std} :-L2 \== inf.

transition! Dora:LI..L2/dec, Dora:LI..L2/dec; .

transition! Dem:LI,.L2/dec, Dom:LI..L2/std).

transition! Dom:LI.,L2/dec, Dom:LI/decj LI \== minf.

transition,- Dom:Ll..L2/dec, Dom:Ll/std) :-LI \== minf,

transition! Dem:Ll/std, Dom:Ll/std) :-

LI \« A..B. % Переменная LI ке относится к интервалу

transition,- Dom:Ll/std, Dom:LI..L2/inc) :-qmag< Dom:LI..L2) .

transition! Dom;Ll/std, Dom:LO..Li/dec) :-qmag( Dom:L0..LI} .

transition,- Dom:Ll/inc, Dom:LI..L2/inc) :-qpag( Dom:LI..L2) .

Глава 20. Качественные рассуждения



transition! Dom:Ll/dec, Dom:LO..Ll/dec) :-qmag ( Dom;LQ-.LI}.

t system_trans( Statel, State2):

% переход системы из одного состояния в другое; состояние системы - это

% список значений переменный

system_trans ( [] , [ ] ) .

system_trarts< [Vail I Valsl], [Val2 I Vals2]} :-transition! Vail, Val2), system_transl Valsl, Vals2) .

% legal_trans( Statel, State2):

§ переход иэ одного состояния в другое, допустимый в соответствии с моделью

legal^trans( Statel, State2) : -system_ti:ans ! Statel, Scate2 ) ,

Statel \== State2, % Следующее состояние, качественно отличное от предыдущего legalstate{ State2J. % СОСТОЯНИЕ, допустимое в соответствии с моделью

* simulate! SystemStates, MaxLength) :

% переменная SystemStates представляет собой последовательность состояний

i моделируемой системы, не превышающую по длине MaxLength

simulate{ [State], MaxLength) :-

( MaxLength = 1 % Достигнута максимальная длина

not legaltrans{ State, _) % Отсутствует допустимое следующее состояние

1 , ! •

simulate! [Statel,State2 ( Rest], MaxLength) :-MaxLength > 1, NewMaxL is MaxLength - 1, legaltransl Statel, State2), simulate) [State2 IRest], NewMaxL).

% simulate! InitialState, QualBehaviour, MaxLength)

simulate! InitialState, [InitialState I Rest], MaxLength) :-

Iegal3tate( InitialState), % Проверка соответствия модели системы

simulate! [InitialState i Rest], MaxLength).

I compare_lands ( XI, X.2, List, Sign) :

I если переменная XI предшествует переменной Х2 в списке List, то Sign = neg;

% если Х2 предшествует XI, то Sign ™ pos; в ином случае Sign — zero

coTTipare_lands [ XI, Х2 , [First I Rest) , Sign] :-XI = X2 , ! , Sign - zero

XI = First, ! , Sign = neg

X2 = First, ! , Sign = pos

cc;r.pare_lands ( XI, X2, Rest, Sign) .

Наши рекомендации