Листинг 14.3. Ограничения для некоторых электрических компонентов и соединений
% модель электрической схемы, заданная средствами CLP(R)
% resistort Tl, T2 , R) :
% R - резистор; Tl, T2 - его клеммы
resistort (VI,il], <V2,I2], R) :-
{ II - -12, V1-V2 - I1*R ) .
% diode! Tl, T2> :
% Tl, T2 - клеммы диода.
% Диод пропускает ток в направлении от Т1 к Т2
diodet (VI,il], (V2,I2) ) :-
{II + 12 - 0) , (II > 0, VI - V2
II - О, VI -< V2].
battery! (VI, ID, [V2,12), Voltage) :-{II + 12 - 0, Voltage =vl - v2 ).
% conn[ [TlrT2, ...]) :
% Соединение клеш* Tl, T2 , ... .
Поскольку потенциалы на всех клеммах соединения одинаковы,
Часть II. Применение языка Prolog в области искусственного интеллекта
сумма токов равна нулю
connf Terminals) :-conn< Terminals, 0).
conn( [ (V,I) ] , Sum) :-
( Sum + I = 0 } .
conni [ (VI,II), <V2,I2) I Rest], Sum) { VI - V2, Suml = Sum + II), COnn( [ (V2, 12) [ Rest], Suml).
Потенциалы на всех клеммах соединения должны быть одинаковыми, а сумма токов через все клеммы должна быть равна нулю.
Теперь можно легко составлять моделируемые схемы. Некоторые примеры схем приведены на рис. 14.4. На этом рисунке даны также определения таких схем, которые могут использоваться в программе моделирования, выполняемой а системе CLP(R). Рассмотрим схему на рис. 14.4, а. Следующий пример показывает, что данная программа моделирования может до некоторой степени использоваться также для проектирования, а не только для моделирования. В частности, было решено в определении предиката circuita на рис. 14.4, а сделать клемму Т21 одним из параметров этого предиката. Это дает возможность "считывать" значения потенциала и тока а данной точке схемы. Потенциал на клемме Т2 имеет постоянное значение 0, источник питания имеет напряжение 10 В, но резисторы остались незаданными (они также являются параметрами предиката circuit_a).
Рассмотрим вопрос о том, какими должны быть резисторы, чтобы напряжение на клемме Т21 было равно 6 В, а ток - 1 А.
? -circuit_a [ Rl, R2, [6,1)). Rl= 4. 0 82 - 6.0
Теперь рассмотрим более сложную схему (см. рис. 14.4, б). В этом случае можно задать вопрос о том, какими будут электрические потенциалы и ток на "среднем" резисторе 35, если источник питания имеет напряжение 10 В.
?- circuit_b<10, _, _, _, _, Т51, Т52) .
151= ( 7.340425531514894, 0.0425531914893617)
Т52 = ( 5.212765957446809, -0.0425531914893617)
Итак, потенциалы на клеммах резистора RS равны соответственно 7,340 В и 5,213 В, а ток равен 0,04255 А.
Упражнение
14.6. Проведите эксперименты с программами, приведенными на рис. 14.4. Определите другие схемы. Например, дополните схему на рис. 14.4, б, установив диод последовательно с резистором R5. Как это повлияет на потенциал клеммы Т517 Попробуйте также переставить диод в противоположном направлении.
Глава 14. Логическое программирование в ограничениях
TI
Til
к:
111 p.
i. T12 ii T21
T И
k/
I
T22
circuit a(R1,R2, T21} :-T2 = (0,J, battery(T1,T2,10), resistorf Til,T12,R1), resistorf T21, T22, R2), conn([T1,T11]), сопп<[Т12,Т21]), conn([T2,T22J).
% Потенциал клеммы Т2 равен О % Источник питания на 10 В
б]
Т11
TJ
T2I
Я)
К2
TI2
Т22
Т31
TS1
К5
Т52
Т41
Ri
R4
Тг
]
T42
Т32
circuit Ь[ U, T11 ,Т21 ,Т31,Т41, Т51 ,TS2): Т2= ( 0, J, battery! T1,T2,U), resistorf Т11.Т12. II,
resistorf Тг^Тгг!10), resistorf T31.T32, 15), resistorf 141,142,10), resistorf T51.T52,50), conn([T1,T11,T21]), conn([T12,T31,T51)J, conn([T22,T41,T52]), conn([T2, T32,T42]).
% Потенциал клеммы Т2 равен 0
%R1 = 5 % R2 = 10 % R3 = 15
%R4=10 % R5 = 50
Рве. 14.4. Две электрические схемы
Часть II. Применение изыка Prolog в области искусственного интеллекта