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 увеличиваться до тех пор, пока оба напряжения не станут равными (после этого ток и напряжение на резисторе примут нулевое значение).