root/trunk/examples/searching/performance.lgt

Revision 4668, 3.8 KB (checked in by pmoura, 4 days ago)

Corrected some minor typos.

  • Property svn:mime-type set to text/x-logtalk
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(performance,
3    implements(monitoring)).    % built-in protocol for event handler methods
4
5    :- info([
6        version is 1.4,
7        author is 'Paulo Moura',
8        date is 2008/10/20,
9        comment is 'Performance monitor for state space searches.']).
10
11    :- uses(event_registry).
12    :- uses(before_event_registry).
13    :- uses(after_event_registry).
14
15    :- uses(list, [length/2]).
16    :- uses(numberlist, [min/2, max/2, sum/2]).
17    :- uses(time, [cpu_time/1]).
18
19    :- private(transitions_/3).
20    :- dynamic(transitions_/3).
21    :- mode(transitions_(?state, ?state, ?integer), zero_or_more).
22
23    :- private(solution_length_/1).
24    :- dynamic(solution_length_/1).
25    :- mode(solution_length_(?integer), zero_or_one).
26
27    :- private(time_/1).
28    :- dynamic(time_/1).
29    :- mode(time_(-number), zero_or_one).
30
31    :- public(time/1).
32    :- mode(time(-number), zero_or_one).
33
34    :- public(transitions/1).
35    :- mode(transitions(-number), zero_or_one).
36
37    :- public(branching/3).
38    :- mode(branching(-integer, -float, -integer), zero_or_one).
39
40    :- public(report/0).
41    :- mode(report, zero_or_one).
42
43    :- public(init/0).
44    :- mode(init, one).
45
46    :- public(stop/0).
47    :- mode(stop, one).
48
49    report :-
50        solution_length_(Length),
51        transitions(Number),
52        Ratio is Length / Number,
53        branching(Minimum, Average, Maximum),
54        time(Time),
55        write('solution length: '), write(Length), nl,
56        write('state transitions (including previous solutions): '), write(Number), nl,
57        write('ratio solution length / state transitions: '), write(Ratio), nl,
58        write('minimum branching degree: '), write(Minimum), nl,
59        write('average branching degree: '), write(Average), nl,
60        write('maximum branching degree: '), write(Maximum), nl,
61        write('time: '), write(Time), nl.
62
63    report :-       % clean up for next solution
64        retractall(time_(_)),
65        retractall(solution_length_(_)),
66        cpu_time(Start),
67        asserta(time_(Start)),
68        fail.
69
70    transitions(Number) :-
71        findall(N, transitions_(_, _, N), List),
72        sum(List, Number).
73
74    time(Time) :-
75        cpu_time(End),
76        retract(time_(Start)),
77        Time is End - Start.
78
79    branching(Minimum, Average, Maximum) :-
80        findall(
81            Length,
82            (transitions_(State1, _, _),
83             findall(State2, transitions_(State1, State2, _), States2),
84             length(States2, Length)),
85            Lengths),
86        min(Lengths, Minimum),
87        max(Lengths, Maximum),
88        sum(Lengths, Sum),
89        length(Lengths, Length),
90        Average is Sum / Length.
91
92    init :-
93        self(Self),
94        event_registry::set_monitor(_, solve(_, _, _), _, Self),
95        after_event_registry::set_monitor(_, next_state(_, _), _, Self),
96        event_registry::set_monitor(_, solve(_, _, _, _), _, Self),
97        after_event_registry::set_monitor(_, next_state(_, _, _), _, Self),
98        retractall(transitions_(_, _, _)),
99        retractall(time_(_)),
100        retractall(solution_length_(_)),
101        set_logtalk_flag(events, on).   % solve/3-4 messages are sent from "user"
102
103    stop :-
104        set_logtalk_flag(events, off),
105        self(Self),
106        before_event_registry::del_monitors(_, _, _, Self),
107        after_event_registry::del_monitors(_, _, _, Self).
108
109    before(_, solve(_, _, _), _) :-
110        !,
111        retractall(transitions_(_, _, _)),
112        cpu_time(Start),
113        retractall(time_(_)),
114        asserta(time_(Start)).
115
116    before(_, solve(_, _, _, _), _) :-
117        !,
118        retractall(transitions_(_, _, _)),
119        cpu_time(Start),
120        retractall(time_(_)),
121        asserta(time_(Start)).
122
123    after(_, next_state(S1, S2), _) :-
124        !,
125        (   retract(transitions_(S1, S2, N)) ->
126            N2 is N + 1
127        ;   N2 is 1
128        ),
129        assertz(transitions_(S1, S2, N2)).
130
131    after(_, next_state(S1, S2, _), _) :-
132        !,
133        (   retract(transitions_(S1, S2, N)) ->
134            N2 is N + 1
135        ;   N2 is 1
136        ),
137        assertz(transitions_(S1, S2, N2)).
138
139    after(_, solve(_, _, Solution), _) :-
140        !,
141        length(Solution, Length),
142        retractall(solution_length_(_)),
143        asserta(solution_length_(Length)).
144
145    after(_, solve(_, _, Solution, _), _) :-
146        !,
147        length(Solution, Length),
148        retractall(solution_length_(_)),
149        asserta(solution_length_(Length)).
150
151:- end_object.
Note: See TracBrowser for help on using the browser.