Advertisement
Guest User

MDP JSON Generator v2

a guest
Feb 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.09 KB | None | 0 0
  1. import json
  2.  
  3. class MDP(object):
  4.  
  5.     def __init__(self, gamma = 0.75):
  6.         self.gamma = gamma
  7.         self.__id = 0
  8.         self.states = []
  9.  
  10.     def add_state(self, state):
  11.         state.id = self.__id if state.id < 0 else state.id
  12.         self.__id += 1
  13.         self.states.append(state)
  14.         return self
  15.  
  16.     def dump(self):
  17.         data = {}
  18.         states = data["states"] = []
  19.         data["gamma"] = self.gamma
  20.         #
  21.         for state in self.states:
  22.             state_dict = {}
  23.             state_dict["id"] = state.id
  24.             actions = state_dict["actions"] = []
  25.             for action in state.actions:
  26.                 action_dict = {}
  27.                 action_dict["id"] = action.id
  28.                 transitions = action_dict["transitions"] = []
  29.                 for transition in action.transitions:
  30.                     trans_dict = {}
  31.                     trans_dict["id"] = transition.id
  32.                     trans_dict["probability"] = transition.prob
  33.                     trans_dict["reward"] = transition.reward
  34.                     trans_dict["to"] = transition.to
  35.                     transitions.append(trans_dict)
  36.                 actions.append(action_dict)
  37.  
  38.             states.append(state_dict)
  39.         print json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))
  40.  
  41.  
  42. class MDPState:
  43.    
  44.     def __init__(self):
  45.         self.id = 0
  46.         self.__action_id = 0
  47.         self.actions = []
  48.  
  49.     def add_action(self, action):
  50.         action.id = self.__action_id
  51.         self.actions.append(action)
  52.         self.__action_id += 1
  53.         return self
  54.  
  55. class MPDAction:
  56.    
  57.     def __init__(self):
  58.         self.id = 0
  59.         self.__transition_id = 0
  60.         self.transitions = []
  61.  
  62.  
  63.     def add_transition(self, transition):
  64.         transition.id = self.__transition_id
  65.         self.transitions.append(transition)
  66.         self.__transition_id += 1
  67.         return self
  68.  
  69.  
  70. class MPDTransition:
  71.    
  72.     def __init__(self, prob, reward, to):
  73.         self.id = 0
  74.         self.prob = prob
  75.         self.reward = reward
  76.         self.to = to
  77.  
  78.  
  79. # State, State', Reward, Prob
  80. data = [[0, 2, 1, .5],
  81. [0, 1, 0, .5],
  82. [0, 0, 0, 1.0],
  83. [1, 1, 0, 1.0],
  84. [1, 0, 0, 1.0],
  85. [2, 5, 0, .5],
  86. [2, 3, 1, .5],
  87. [2, 2, 1, 1.0],
  88. [5, 0, 0, 1.],
  89. [5, 5, 0, 1.0],
  90. [3, 4, 0, .5],
  91. [3, 6, 1, .5],
  92. [3, 3, 1, 1.0],
  93. [4, 4, 0, 1.],
  94. [4, 6, 0, .2],
  95. [4, 5, 1, .8],
  96. [6, 7, 1, 1.0],
  97. [6, 6, 1, 1.0],
  98. [7, 7, 0, 1.],
  99. [7, 4, 0, 0.9],
  100. [7, 6, 0, 0.1]]
  101.  
  102. states = []
  103. states_dict = {}
  104. actions = []
  105. for ary in data:
  106.     s = ary[0]
  107.     s2 = ary[1]
  108.     same = s == s2
  109.     if s not in states_dict:
  110.         state = states_dict[s] = MDPState()
  111.         state.id = s
  112.         states.append(state)
  113.         actions = [MPDAction()]
  114.         state.add_action(actions[0])
  115.     if len(actions) == 1 and same:
  116.         actions.append(MPDAction())
  117.         states_dict[s].add_action(actions[1])
  118.  
  119.     action_index = 1 if same else 0
  120.     actions[action_index].add_transition(MPDTransition(ary[3], ary[2], s2))
  121.        
  122.  
  123. mdp = MDP()
  124. for state in states:
  125.     mdp.add_state(state)
  126.  
  127. mdp.dump()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement