% Zeus Large Scale Demonstrator rules in the language of JavaAS v0.4. % created-by: mjs (matthew.south @ cancer.org.uk) % created-on: 27th September 2006 %------------------------------------------------------------------------------------------------------ % customer data %------------------------------------------------------------------------------------------------------ % All customer data is represented using binary terms where the first argument is the Company ID customer(1, new). % customer status : {new, existing} business(1, existing). % business status : {new, existing} lmto(1, 250). % last month turnover (1000's EUR) smto(1, 1500). % six month turnover (1000's EUR) oyto(1, 3500). % one year turnover (1000's EUR) capital(1, 9). % starting capital (1000's EUR) customer(2, new). business(2, existing). lmto(2, 450). smto(2, 750). capital(2, 60). history(2, bad). % credit history : { good, average, bad } customer(3, existing). business(3, new). lmto(3, 300). capital(3, 5). history(3, bad). customer(4, existing). business(4, new). lmto(4, 125). smto(4, 800). oyto(4, 4500). capital(4, 8). history(4, good). limit(4, 25). % credit limit (1000's EUR) customer(5, existing). business(5, new). lmto(5, 500). smto(5, 600). capital(5, 65). history(5, bad). limit(5, 400). customer(6, existing). business(6, new). lmto(6, 90). capital(6, 3). history(6, good). customer(7, new). business(7, new). lmto(7, 115). smto(7, 500). oyto(7, 1200). capital(7, 4). history(7,bad). limit(7, 104.5). customer(8, new). business(8, new). lmto(8, 105). smto(8, 1900). capital(8, 56). history(8, average). business(9, new). lmto(9, 95). capital(9, 75). history(9, good). customer(10, existing). business(10, existing). lmto(10, 310). smto(10, 600). oyto(10, 3200). capital(10, 80). history(10, good). customer(11, existing). business(11, existing). lmto(11, 100). smto(11, 500). oyto(11, 1600). capital(11, 30). history(11, average). limit(11, 56). customer(12, existing). business(12, existing). lmto(12, 100). smto(12, 300). oyto(12, 1500). capital(12, 65). history(12, bad). limit(12, 70). customer(13, existing). business(13, existing). lmto(13, 140). smto(13, 900). oyto(13, 2000). capital(13, 11). history(13, average). %------------------------------------------------------------------------------------------------------ % status rules %------------------------------------------------------------------------------------------------------ % qlmto - qualitative last month turnover : {bad, average, good} [qlmto1(Company)] qlmto(Company, good) <- lmto(Company, LMTO), >=(LMTO, 250). [qlmto2(Company)] qlmto(Company, average) <- lmto(Company, LMTO), <(LMTO, 250), >(LMTO, 125). [qlmto3(Company)] qlmto(Company, bad) <- lmto(Company, LMTO), =<(LMTO, 125). % qsmto - qualitative six month turnover : {bad, average, good} [qsmto1(Company)] qsmto(Company, good) <- smto(Company, SMTO), >=(SMTO, 1500). [qsmto2(Company)] qsmto(Company, average) <- smto(Company, SMTO), >(SMTO, 750), <(SMTO, 1500). [qsmto3(Company)] qsmto(Company, bad) <- smto(Company, SMTO), =<(SMTO, 750). % qoyto - qualitative one year turnover : {bad, average, good} [qoyto1(Company)] qoyto(Company, good) <- oyto(Company, OYTO), >=(OYTO, 3000). [qoyto2(Company)] qoyto(Company, average) <- oyto(Company, OYTO), <(OYTO, 3000), >(OYTO, 1500). [qoyto3(Company)] qoyto(Company, bad) <- oyto(Company, OYTO), =<(OYTO, 1500). % qcapital - qualitative starting capital : {low, average, high} [qcapital1(Company)] qcapital(Company, high) <- capital(Company, Capital), >=(Capital, 60). [qcapital2(Company)] qcapital(Company, average) <- capital(Company, Capital), <(Capital, 60), >(Capital, 10). [qcapital3(Company)] qcapital(Company, low) <- capital(Company, Capital), =<(Capital, 10). % status - credit status is the ratio of lmto/limit. The idea is that it shouldnt exceed 0.6. [status1(Company)] status(Company, Status) <- limit(Company, Limit), lmto(Company, LMTO), product(LMTO, Status, Limit). %------------------------------------------------------------------------------------------------------ % business rules %------------------------------------------------------------------------------------------------------ [increase(Company)] change(Company, 10) <- history(Company, good). [decrease(Company)] change(Company, -10) <- history(Company, bad). %------------------------------------------------------------------------------------------------------ % specialised business rules %------------------------------------------------------------------------------------------------------ [a1(Company)] change(Company, 10) <- qlmto(Company, good), qsmto(Company, bad) 0.8. [a4(Company)] change(Company, 10) <- qlmto(Company, average), qsmto(Company, good) 0.8. [a6(Company)] change(Company, 10) <- qlmto(Company, bad), qsmto(Company, good), lmto(Company, LMTO), smto(Company, SMTO), is(S, *(SMTO, 0.6)), >(S, LMTO) 0.8. [a9(Company)] change(Company, -10) <- qlmto(Company, bad), qsmto(Company, bad), qoyto(Company, bad) 0.8. [b1a(Company)] change(Company, 10) <- qsmto(Company, bad), qoyto(Company, good), smto(Company, SMTO), oyto(Company, OYTO), is(S, *(SMTO, 0.7)), >=(OYTO, S) 0.6. [b1b(Company)] change(Company, 0) <- qsmto(Company, bad), qoyto(Company, good), smto(Company, SMTO), oyto(Company, OYTO), is(S, *(SMTO, 0.7)), <(OYTO, S) 0.6. [b2a(Company)] change(Company, 0) <- qsmto(Company, average), qoyto(Company, good), oyto(Company, OYTO), smto(Company, SMTO), is(S, *(SMTO, 0.5)), =<(OYTO, S) 0.6. [b2b(Company)] change(Company, 5) <- qsmto(Company, average), qoyto(Company, good), oyto(Company, OYTO), smto(Company, SMTO), is(S, *(SMTO, 0.5)), >(OYTO, S) 0.6. [b3(Company)] change(Company, 10) <- qsmto(Company, good), qoyto(Company, good) 0.6. [b4(Company)] change(Company, -10) <- qsmto(Company, good), qoyto(Company, bad) 0.6. [b5(Company)] change(Company, -10) <- qsmto(Company, bad), qoyto(Company, bad) 0.6. [b6(Company)] change(Company, -10) <- qsmto(Company, bad), qoyto(Company, good) 0.6. [c1(Company)] change(Company, 10) <- qoyto(Company, good), qcapital(Company, average) 0.4. [c2(Company)] change(Company, -10) <- qoyto(Company, bad), qcapital(Company, average) 0.4. [c3(Company)] change(Company, 10) <- qoyto(Company, good), qcapital(Company, high) 0.4. [c4a(Company)] change(Company, 0) <- qoyto(Company, average), qcapital(Company, high) 0.4. [c4b(Company)] change(Company, 0) <- qoyto(Company, average), qcapital(Company, average) 0.4. [c5(Company)] change(Company, -10) <- qoyto(Company, bad), qcapital(Company, high) 0.4. [c6a(Company)] change(Company, 10) <- qoyto(Company, good), qcapital(Company, low) 0.4. [c6b(Company)] change(Company, 10) <- qoyto(Company, average), qcapital(Company, low) 0.4. [c7(Company)] change(Company, -10) <- qoyto(Company, bad), qcapital(Company, low) 0.4. [c8(Company)] change(Company, 5) <- business(Company, new), qcapital(Company, high) 0.4. % These three rules are re-written. It's awkward to capture [c9(Company)] change(Company, 0) <- business(Company, new), qcapital(Company, average) 0.4. % "oyto doesnt exist", but if a company is new, then they dont [c10(Company)] change(Company, -5) <- business(Company, new), qcapital(Company, low) 0.4. % have an oyto, so this premise is used instead. %------------------------------------------------------------------------------------------------------ % limit is capped to 60% of lmto %------------------------------------------------------------------------------------------------------ [cap(Company)] ~change(Company, Percentage) <- lmto(Company, LMTO), product(LMTO, 0.6, TheoreticalLimit), sum(100, Percentage, Result), product(100, Multiplier, Result), limit(Company, ActualLimit), product(ActualLimit, Multiplier, NewLimit), >(NewLimit, TheoreticalLimit). %------------------------------------------------------------------------------------------------------ % arithmetic rules - standard prolog constructions. %------------------------------------------------------------------------------------------------------ sum(X, Y, Z) <- nonvar(X), nonvar(Y), is(Z, +(X, Y)). sum(X, Y, Z) <- nonvar(X), nonvar(Z), is(Y, -(Z, X)). sum(X, Y, Z) <- nonvar(Y), nonvar(Z), is(X, -(Z, Y)). product(X, Y, Z) <- nonvar(X), nonvar(Y), is(Z, *(X, Y)). product(X, Y, Z) <- nonvar(X), nonvar(Z), is(Y, /(Z, X)). product(X, Y, Z) <- nonvar(Y), nonvar(Z), is(X, /(Z, Y)).