Листинг 20.3. Качественная модель ванны
i Модель ванны
landmarks) amount, [ гего, full, inf)) . landmarks! level, [ zero, top, inf]). landmarks! flow, [ minf, zero, inflow, inf]).
correspond! amount:zero, level:zero) . correspond! amount:full, level:top).
legalstate( t Level, Amount, Outflow, Netflow]) :-mplus[ Amount, Level), mplus[ Level, Outflow),
Inflow • flow:inflDw/std, % Постоянный приток
sum( Outflow, Netflow, Inflow), % Netflow • Inflow - Outflow
detiv( Amount, Metflow),
not overflowing,- Level) . % вода не переливается через край
overflowing! level:top..inf/_). % Вода переливается через край
initial! I level: zero/inc, amount,- zero/inc, flow: zero/inc, flow: inflow/dec 3 ) .
Ниже приведен первый из ответов системы Prolog на этот запрос (немного отредактированный) .
Ё = [level:zero/inc, amount;zero/inc, flow:zero/inc, flow:inficu/dec]
Behaviour =
[level:zero/inc,amount:zero/inc, flow:zero/inc,flow:inflow/dec] , [level:zero..top/inc,amount:zero..full/inc,flow:zero..inflow/inc,
flow:zero..inflow/dec] , [level:zero..top/std,amount:zero..full/std,flow:inflow/stdE flow:zero/std]]
Глава 20. Качественные рассуждения
Программу машинного моделирования, приведенную в листинге 20.2, можно легко применить для эксплуатации других моделей. На рис. 20.7 показана электрическая схема с двумя конденсаторами и резистором, а в листинге 20.4 приведена качественная модель этой динамической схемы и соответствующее начальное состояние.
Б начальном состоянии на левом конденсаторе имеется некоторое начальное напряжение, а правый конденсатор разряжен. Ниже приведены запрос, позволяющий начать процедуру машинного моделирования, и ответ программы моделирования (немного отредактированный).
?- initial( S), simulate( S, Behaviour, 10]. Behaviour =
[ [volt:vO/dec,volt:zero/inc, . . . ], [volt:zero..vO/dec,volt:zero..vO/inc,...], [volt:zero..vO/std,volt:zero,.vO/std,... ] ]
UC1
C1
C2
UC2
Рис. 20.7, Электрическая схема с двумя конденсаторами и резистором
Листинг 20.4. Качественная модель схемы, приведенной на рис. 20.7
h Качественная модель электрической схемы с резистором и конденсаторами
landmarks( volt, [minf, zero, vO, inf]). i landmarks( voltR, [minf, zero, vO, inf]). % landmarks( current, [minf, zero, inf]).
Напряжение на конденсаторам Напряжение на резисторе
correspond! voltR:zero, current:zero) .
% Закон Ома для резистора |
legalstate[ [ UC1, ЦС2, UR, CurrR]) sumi ш, исг, uci] , mplus( UR, CurrR), deriv( UC2, CurrR)r
Sum( CurrR, current:CurrCl, current:zero/std), * CurrCl deriv{ UCI, current:CurrCl) . * CurrCl - d/dt UCI
CurrR
initial! [ volt:v0/dec, volt:zero/inc, voltR:vO/dec, current:zero..inf/dec]) .
По сути, этот ответ означает, что напряжение на конденсаторе С1 будет уменьшаться, а на конденсаторе С2 увеличиваться до тех пор, пока оба напряжения не станут равными (после этого ток и напряжение на резисторе примут нулевое значение) .