~yrke/opaal/timedart-vars+discrete

« back to all changes in this revision

Viewing changes to opaal/passed_waiting_list/simple_pwlist.py

  • Committer: Kenneth Yrke Jørgensen
  • Date: 2011-05-17 08:07:38 UTC
  • mfrom: (37.1.19 timedart-vars)
  • Revision ID: mail@yrke.dk-20110517080738-y09sdczr3npky2af
Merged with vars

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#with this program.  If not, see <http://www.gnu.org/licenses/>.
15
15
### END LICENSE
16
16
 
 
17
import logging
 
18
logger = logging.getLogger('simple_pwlist')
 
19
 
17
20
from opaal import util
18
21
 
19
22
class NoMoreStatesException(util.Error):
28
31
        self.passed_waiting = set() 
29
32
        #number of successful adds to passed-waiting list
30
33
        self.num_adds = 0
 
34
        self.wp = {}
31
35
 
32
36
    def stateInPwList(self, state):
33
37
        return state in self.passed_waiting
34
 
 
35
 
    def addState(self, state):
 
38
        #return state in self.wp
 
39
 
 
40
    def getWP(self, state):
 
41
        return self.wp[state]
 
42
 
 
43
    def setWP(self, state, w, p):
 
44
        self.wp[state]=(w, p)
 
45
 
 
46
    def addState(self, state, w, p):
36
47
        """Add a state to the passed-waiting list.
37
48
        @returns: state if state was new, False if state was seen before"""
38
 
        if not self.stateInPwList(state):
 
49
        self.num_adds += 1
 
50
 
 
51
        try:
 
52
            (w1, p1) = self.wp[state]
 
53
#New minimum values 
 
54
            w2 = w1
 
55
            p2 = p1
 
56
            update = False
 
57
 
 
58
            if w < w2:
 
59
                update = True
 
60
                w2 = w
 
61
            if p < p2:
 
62
                update = True
 
63
                p2 = p
 
64
 
 
65
            #New value is
 
66
            if update:
 
67
                self.wp[state] = (w2, p2)       
 
68
 
 
69
            #If there are something unexplored and state is not already on pw list            
 
70
            #if w2 < p2 and not w1 < p1:
 
71
            if w2 < p2: #Add if unexplored
 
72
                self.waiting.append(state)
 
73
                return state
 
74
            else:
 
75
                return False
 
76
 
 
77
        except KeyError:
39
78
            self.waiting.append(state)
40
79
            self.passed_waiting.add(state)
41
 
            self.num_adds += 1
 
80
            self.wp[state] = (w, p)
42
81
            return state
43
 
        return False
44
82
 
 
83
            
45
84
    def getWaitingState(self):
46
85
        try:
47
86
            return self.waiting.pop()