-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
executable file
·97 lines (81 loc) · 3.19 KB
/
test.py
File metadata and controls
executable file
·97 lines (81 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/python
from argparse import ArgumentParser
from factored_MDP import random_MDP
from exact_solvers import *
from factored_solvers import *
def parse_args():
parser = ArgumentParser ()
parser.add_argument("-prm", type=str, default="", help="Optional "+\
"Gurobi parameter file to import.")
parser.add_argument("--exact_primal", action="store_true", help="Set "+\
"this to compute values via linear programming.")
parser.add_argument("--factored_primal", action="store_true", help= \
"Set this compute approximate values via "+\
"factored-MDP linear programming.")
parser.add_argument("--exact_dual", action="store_true", help="Set "+\
"this to compute an optimal policy via dual " +\
"linear programming.")
parser.add_argument("--factored_dual", action="store_true", help= \
"Set this compute an approximately optimal " +\
"policy via factored-MDP dual linear programming.")
parser.add_argument("--policy_iter", action="store_true", help="Set"+\
"this to solve the MDP via policy iteration.")
parser.add_argument("-num_vars", type=int, default=0, help="Number" +\
"of literals in the random MDP. If not set, the" +\
"size is set so that chosen solution algorithms "+\
"will take a reasonable amount of time.")
return parser.parse_args()
def main(args):
if args.num_vars > 0:
num_vars = args.num_vars
elif args.policy_iter:
num_vars = 8
elif args.exact_primal or args.exact_dual:
num_vars = 16
else:
num_vars = 32
mdp = random_MDP(min_vars=num_vars, max_vars=num_vars, min_acts= \
num_vars, max_acts=num_vars, min_outs=2*num_vars, max_outs= \
2*num_vars)
if args.prm != "":
G.readParams(args.prm)
print mdp
print "2^" + str(num_vars), "=", 2**num_vars, \
"total states"
if args.policy_iter or args.exact_primal or args.exact_dual:
print len(mdp.reachable_states), "reachable states"
if args.exact_primal:
lp, state_vars = exact_primal_LP(mdp)
print len(lp.getConstrs()), "primal LP constraints"
print "excact primal linear programming initial state value:", \
state_vars[mdp.initial].x
if args.exact_dual:
lp, sa_vars = exact_dual_LP(mdp)
print "excact dual linear programming initial state value:", \
lp.objVal
try:
print "excact dual linear programming initial state policy: "+\
str(filter(lambda sav: sav[2].x > 0, \
sa_vars.select(mdp.initial))[0][1].name)
except AttributeError:
print "excact dual linear programming initial state policy: "+\
"STOP"
if args.factored_primal:
lp, basis_vars = factored_primalLP(mdp)
print "factored primal linear programming approximate initial "+\
"state value:", basis_vars[mdp.initial].x
if args.factored_dual:
lp, basis_vars = factored_dual_LP(mdp)
print "factored primal linear programming approximate initial "+\
"state value:", basis_vars[mdp.initial].x
if args.policy_iter:
policy, values = policy_iteration(mdp)
print "policy iteration initial state value:", values[mdp.initial]
try:
print "policy iteration initial state policy: " + \
str(policy[mdp.initial].name)
except AttributeError:
print "policy iteration initial state policy: STOP"
if __name__ == "__main__":
args = parse_args()
main(args)