|
|
pl:prolog:pllib:modelling_circuits [2019/06/27 15:50] |
pl:prolog:pllib:modelling_circuits [2019/06/27 15:50] (aktualna) |
| ====== Modelling circuits ====== |
| {{tag>model electronics}} |
| ===== Description ===== |
| Qualitative modelling program for simple circuits. |
| |
| **Source**: PROLOG programming for artificial intelligence, 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7. |
| ===== Download ===== |
| Program source code: {{modelling_circuits.pl}} |
| ===== Listing ===== |
| <code prolog> |
| % Figure 20.3 Qualitative modelling program for simple circuits. |
| |
| |
| % Modelling simple electric circuits |
| % Qualitative values of voltages and currents are: neg, zero, pos |
| |
| % Definition of switch |
| % switch( SwitchPosition, Voltage, Current) |
| |
| switch( on, zero, AnyCurrent). % Switch on: zero voltage |
| switch( off, AnyVoltage, zero). % Switch off: zero current |
| |
| % Definition of bulb |
| % bulb( BulbState, Lightness, Voltage, Current) |
| |
| bulb( blown, dark, AnyVoltage, zero). |
| bulb( ok, light, pos, pos). |
| bulb( ok, light, neg, neg). |
| bulb( ok, dark, zero, zero). |
| |
| % A simple circuit consisting of a bulb, switch and battery |
| |
| circuit1( SwitchPos, BulbState, Lightness) :- |
| switch( SwitchPos, SwVolt, Curr), |
| bulb( BulbState, Lightness, BulbVolt, Curr), |
| qsum( SwVolt, BulbVolt, pos). % Battery voltage = pos |
| |
| % A more interesting circuit made of a battery, three bulbs and |
| % three switches |
| |
| circuit2( Sw1, Sw2, Sw3, B1, B2, B3, L1, L2, L3) :- |
| switch( Sw1, VSw1, C1), |
| bulb( B1, L1, VB1, C1), |
| switch( Sw2, VSw2, C2), |
| bulb( B2, L2, VB2, C2), |
| qsum( VSw2, VB2, V3), |
| switch( Sw3, V3, CSw3), |
| bulb( B3, L3, V3, CB3), |
| qsum( VSw1, VB1, V1), |
| qsum( V1, V3, pos), |
| qsum( CSw3, CB3, C3), |
| qsum( C2, C3, C1). |
| |
| % qsum( Q1, Q2, Q3): |
| % Q3 = Q1 + Q2, qualitative sum over domain [pos,zero,neg] |
| |
| qsum( pos, pos, pos). |
| qsum( pos, zero, pos). |
| qsum( pos, neg, pos). |
| qsum( pos, neg, zero). |
| qsum( pos, neg, neg). |
| qsum( zero, pos, pos). |
| qsum( zero, zero, zero). |
| qsum( zero, neg, neg). |
| qsum( neg, pos, pos). |
| qsum( neg, pos, zero). |
| qsum( neg, pos, neg). |
| qsum( neg, zero, neg). |
| qsum( neg, neg, neg). |
| </code> |
| ===== Comments ===== |
| |