mdpsolver 0.9.6__tar.gz → 0.9.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mdpsolver-0.9.6/src/mdpsolver.egg-info → mdpsolver-0.9.7}/PKG-INFO +5 -4
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/README.md +4 -3
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/pyproject.toml +1 -1
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/model.py +2 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cp310-win_amd64.pyd +0 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cp311-win_amd64.pyd +0 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cp312-win_amd64.pyd +0 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cpython-310-x86_64-linux-gnu.so +0 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cpython-311-x86_64-linux-gnu.so +0 -0
- mdpsolver-0.9.7/src/mdpsolver/solvermodule.cpython-312-x86_64-linux-gnu.so +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7/src/mdpsolver.egg-info}/PKG-INFO +5 -4
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver.egg-info/SOURCES.txt +3 -1
- mdpsolver-0.9.7/tests/test1.py +646 -0
- mdpsolver-0.9.7/tests/test2.py +75 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cp310-win_amd64.pyd +0 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cp311-win_amd64.pyd +0 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cp312-win_amd64.pyd +0 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cpython-310-x86_64-linux-gnu.so +0 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cpython-311-x86_64-linux-gnu.so +0 -0
- mdpsolver-0.9.6/src/mdpsolver/solvermodule.cpython-312-x86_64-linux-gnu.so +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/LICENSE +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/MANIFEST.in +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/setup.cfg +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/__init__.py +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/__pycache__/cbmaux.cpython-310.pyc +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/__pycache__/tbmaux.cpython-310.pyc +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/cbmaux.py +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/tbmaux.py +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver.egg-info/dependency_links.txt +0 -0
- {mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mdpsolver
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.7
|
|
4
4
|
Summary: A fast solver for Markov Decision Processes
|
|
5
5
|
Author-email: Anders Reenberg Andersen <andersra@live.dk>, Jesper Fink Andersen <jfan@dtu.dk>
|
|
6
6
|
Project-URL: Homepage, https://github.com/areenberg/MDPSolver
|
|
@@ -17,13 +17,14 @@ License-File: LICENSE
|
|
|
17
17
|
|
|
18
18
|
<img src="https://github.com/areenberg/MDPSolver/blob/anders_development/Images/MDPSolver_logo_3.png" alt="Logo" width="180">
|
|
19
19
|
|
|
20
|
-
MDPSolver is a Python package for Markov Decision Processes (MDPs) with
|
|
20
|
+
MDPSolver is a Python package for large Markov Decision Processes (MDPs) with infinite-horizons.
|
|
21
21
|
|
|
22
22
|
## Features
|
|
23
23
|
|
|
24
24
|
* Fast solver: Our C++-based solver is substantially faster than other MDP packages available for Python. See details in the documentation.
|
|
25
|
+
* Two optimality criteria: *Discounted* and *Average* reward.
|
|
25
26
|
* Three optimization algorithms: *Value iteration*, *Policy iteration*, and *Modified policy iteration*.
|
|
26
|
-
* Three value-update methods: *Standard*, *Gauss–Seidel*, *Successive over-relaxation*.
|
|
27
|
+
* Three value-update methods: *Standard*, *Gauss–Seidel*, and *Successive over-relaxation*.
|
|
27
28
|
* Supports sparse matrices.
|
|
28
29
|
* Employs parallel computing.
|
|
29
30
|
|
|
@@ -37,7 +38,7 @@ Install directly from PyPI with:
|
|
|
37
38
|
pip install mdpsolver
|
|
38
39
|
```
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
MDPSolver works *out of the box* on Linux.
|
|
41
42
|
|
|
42
43
|
## Windows
|
|
43
44
|
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="https://github.com/areenberg/MDPSolver/blob/anders_development/Images/MDPSolver_logo_3.png" alt="Logo" width="180">
|
|
4
4
|
|
|
5
|
-
MDPSolver is a Python package for Markov Decision Processes (MDPs) with
|
|
5
|
+
MDPSolver is a Python package for large Markov Decision Processes (MDPs) with infinite-horizons.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
* Fast solver: Our C++-based solver is substantially faster than other MDP packages available for Python. See details in the documentation.
|
|
10
|
+
* Two optimality criteria: *Discounted* and *Average* reward.
|
|
10
11
|
* Three optimization algorithms: *Value iteration*, *Policy iteration*, and *Modified policy iteration*.
|
|
11
|
-
* Three value-update methods: *Standard*, *Gauss–Seidel*, *Successive over-relaxation*.
|
|
12
|
+
* Three value-update methods: *Standard*, *Gauss–Seidel*, and *Successive over-relaxation*.
|
|
12
13
|
* Supports sparse matrices.
|
|
13
14
|
* Employs parallel computing.
|
|
14
15
|
|
|
@@ -22,7 +23,7 @@ Install directly from PyPI with:
|
|
|
22
23
|
pip install mdpsolver
|
|
23
24
|
```
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
MDPSolver works *out of the box* on Linux.
|
|
26
27
|
|
|
27
28
|
## Windows
|
|
28
29
|
|
|
@@ -17,6 +17,7 @@ class model:
|
|
|
17
17
|
algorithm="mpi",
|
|
18
18
|
tolerance=1e-3,
|
|
19
19
|
update="standard",
|
|
20
|
+
criterion="discounted",
|
|
20
21
|
parIterLim=100,
|
|
21
22
|
SORrelaxation=1.0,
|
|
22
23
|
initPolicy=list(),
|
|
@@ -29,6 +30,7 @@ class model:
|
|
|
29
30
|
self.mdl.solve(algorithm=algorithm,
|
|
30
31
|
tolerance=tolerance,
|
|
31
32
|
update=update,
|
|
33
|
+
criterion=criterion,
|
|
32
34
|
parIterLim=parIterLim,
|
|
33
35
|
SORrelaxation=SORrelaxation,
|
|
34
36
|
initPolicy=initPolicy,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mdpsolver
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.7
|
|
4
4
|
Summary: A fast solver for Markov Decision Processes
|
|
5
5
|
Author-email: Anders Reenberg Andersen <andersra@live.dk>, Jesper Fink Andersen <jfan@dtu.dk>
|
|
6
6
|
Project-URL: Homepage, https://github.com/areenberg/MDPSolver
|
|
@@ -17,13 +17,14 @@ License-File: LICENSE
|
|
|
17
17
|
|
|
18
18
|
<img src="https://github.com/areenberg/MDPSolver/blob/anders_development/Images/MDPSolver_logo_3.png" alt="Logo" width="180">
|
|
19
19
|
|
|
20
|
-
MDPSolver is a Python package for Markov Decision Processes (MDPs) with
|
|
20
|
+
MDPSolver is a Python package for large Markov Decision Processes (MDPs) with infinite-horizons.
|
|
21
21
|
|
|
22
22
|
## Features
|
|
23
23
|
|
|
24
24
|
* Fast solver: Our C++-based solver is substantially faster than other MDP packages available for Python. See details in the documentation.
|
|
25
|
+
* Two optimality criteria: *Discounted* and *Average* reward.
|
|
25
26
|
* Three optimization algorithms: *Value iteration*, *Policy iteration*, and *Modified policy iteration*.
|
|
26
|
-
* Three value-update methods: *Standard*, *Gauss–Seidel*, *Successive over-relaxation*.
|
|
27
|
+
* Three value-update methods: *Standard*, *Gauss–Seidel*, and *Successive over-relaxation*.
|
|
27
28
|
* Supports sparse matrices.
|
|
28
29
|
* Employs parallel computing.
|
|
29
30
|
|
|
@@ -37,7 +38,7 @@ Install directly from PyPI with:
|
|
|
37
38
|
pip install mdpsolver
|
|
38
39
|
```
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
MDPSolver works *out of the box* on Linux.
|
|
41
42
|
|
|
42
43
|
## Windows
|
|
43
44
|
|
|
@@ -17,4 +17,6 @@ src/mdpsolver.egg-info/top_level.txt
|
|
|
17
17
|
src/mdpsolver/problems/cbmaux.py
|
|
18
18
|
src/mdpsolver/problems/tbmaux.py
|
|
19
19
|
src/mdpsolver/problems/__pycache__/cbmaux.cpython-310.pyc
|
|
20
|
-
src/mdpsolver/problems/__pycache__/tbmaux.cpython-310.pyc
|
|
20
|
+
src/mdpsolver/problems/__pycache__/tbmaux.cpython-310.pyc
|
|
21
|
+
tests/test1.py
|
|
22
|
+
tests/test2.py
|
|
@@ -0,0 +1,646 @@
|
|
|
1
|
+
import mdpsolver
|
|
2
|
+
import random
|
|
3
|
+
from random import randint
|
|
4
|
+
|
|
5
|
+
#TEST 1
|
|
6
|
+
#Simple MDP with 3 states and 2 actions in each state.
|
|
7
|
+
|
|
8
|
+
#---------------------------------------
|
|
9
|
+
# CONFIGURATION 1
|
|
10
|
+
#---------------------------------------
|
|
11
|
+
|
|
12
|
+
print("## CONFIG. 1 ##\n")
|
|
13
|
+
|
|
14
|
+
#rewards
|
|
15
|
+
#1st index: from (current) states
|
|
16
|
+
#2nd index: actions
|
|
17
|
+
rewards = [[5,-1],
|
|
18
|
+
[1,-2],
|
|
19
|
+
[50,0]]
|
|
20
|
+
|
|
21
|
+
#transition probabilities
|
|
22
|
+
#1st index: from (current) states
|
|
23
|
+
#2nd index: actions
|
|
24
|
+
#3rd index: to (next) states
|
|
25
|
+
tranMatWithZeros = [[[0.9,0.1,0.0],[0.1,0.9,0.0]],
|
|
26
|
+
[[0.4,0.5,0.1],[0.3,0.5,0.2]],
|
|
27
|
+
[[0.2,0.2,0.6],[0.5,0.5,0.0]]]
|
|
28
|
+
|
|
29
|
+
#initial policy
|
|
30
|
+
random.seed(10)
|
|
31
|
+
initPolicy = [randint(0, 1) for p in range(0, 3)]
|
|
32
|
+
|
|
33
|
+
#Model 1a (discounted reward, parallel)
|
|
34
|
+
print("# Model 1a (discounted reward, parallel) #")
|
|
35
|
+
mdl1a = mdpsolver.model()
|
|
36
|
+
mdl1a.mdp(discount=0.95,
|
|
37
|
+
rewards=rewards,
|
|
38
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
39
|
+
mdl1a.solve(algorithm="mpi",
|
|
40
|
+
update="standard",
|
|
41
|
+
parallel=True,
|
|
42
|
+
initPolicy=initPolicy)
|
|
43
|
+
print(mdl1a.getPolicy())
|
|
44
|
+
print(mdl1a.getValueVector())
|
|
45
|
+
|
|
46
|
+
#Model 2a (discounted reward, parallel)
|
|
47
|
+
print("# Model 2a (discounted reward, parallel) #")
|
|
48
|
+
mdl2a = mdpsolver.model()
|
|
49
|
+
mdl2a.mdp(discount=0.95,
|
|
50
|
+
rewards=rewards,
|
|
51
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
52
|
+
mdl2a.solve(algorithm="pi",
|
|
53
|
+
update="standard",
|
|
54
|
+
parallel=True,
|
|
55
|
+
initPolicy=initPolicy)
|
|
56
|
+
print(mdl2a.getPolicy())
|
|
57
|
+
print(mdl2a.getValueVector())
|
|
58
|
+
|
|
59
|
+
#Model 3a (discounted reward, parallel)
|
|
60
|
+
print("# Model 3a (discounted reward, parallel) #")
|
|
61
|
+
mdl3a = mdpsolver.model()
|
|
62
|
+
mdl3a.mdp(discount=0.95,
|
|
63
|
+
rewards=rewards,
|
|
64
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
65
|
+
mdl3a.solve(algorithm="vi",
|
|
66
|
+
update="standard",
|
|
67
|
+
parallel=True)
|
|
68
|
+
print(mdl3a.getPolicy())
|
|
69
|
+
print(mdl3a.getValueVector())
|
|
70
|
+
|
|
71
|
+
#Model 1b (discounted reward, unparallel)
|
|
72
|
+
print("# Model 1b (discounted reward, unparallel) #")
|
|
73
|
+
mdl1b = mdpsolver.model()
|
|
74
|
+
mdl1b.mdp(discount=0.95,
|
|
75
|
+
rewards=rewards,
|
|
76
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
77
|
+
mdl1b.solve(algorithm="mpi",
|
|
78
|
+
update="standard",
|
|
79
|
+
parallel=False,
|
|
80
|
+
initPolicy=initPolicy)
|
|
81
|
+
print(mdl1b.getPolicy())
|
|
82
|
+
print(mdl1b.getValueVector())
|
|
83
|
+
|
|
84
|
+
#Model 2b (discounted reward, unparallel)
|
|
85
|
+
print("# Model 2b (discounted reward, unparallel) #")
|
|
86
|
+
mdl2b = mdpsolver.model()
|
|
87
|
+
mdl2b.mdp(discount=0.95,
|
|
88
|
+
rewards=rewards,
|
|
89
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
90
|
+
mdl2b.solve(algorithm="pi",
|
|
91
|
+
update="standard",
|
|
92
|
+
parallel=False,
|
|
93
|
+
initPolicy=initPolicy)
|
|
94
|
+
print(mdl2b.getPolicy())
|
|
95
|
+
print(mdl2b.getValueVector())
|
|
96
|
+
|
|
97
|
+
#Model 3b (discounted reward, unparallel)
|
|
98
|
+
print("# Model 3b (discounted reward, unparallel) #")
|
|
99
|
+
mdl3b = mdpsolver.model()
|
|
100
|
+
mdl3b.mdp(discount=0.95,
|
|
101
|
+
rewards=rewards,
|
|
102
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
103
|
+
mdl3b.solve(algorithm="vi",
|
|
104
|
+
update="standard",
|
|
105
|
+
parallel=False)
|
|
106
|
+
print(mdl3b.getPolicy())
|
|
107
|
+
print(mdl3b.getValueVector())
|
|
108
|
+
|
|
109
|
+
#Model 1a (average reward, parallel)
|
|
110
|
+
print("# Model 1a (average reward, parallel) #")
|
|
111
|
+
mdl1a = mdpsolver.model()
|
|
112
|
+
mdl1a.mdp(rewards=rewards,
|
|
113
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
114
|
+
mdl1a.solve(algorithm="mpi",
|
|
115
|
+
update="standard",
|
|
116
|
+
criterion="average",
|
|
117
|
+
parallel=True,
|
|
118
|
+
initPolicy=initPolicy)
|
|
119
|
+
print(mdl1a.getPolicy())
|
|
120
|
+
print(mdl1a.getValueVector())
|
|
121
|
+
|
|
122
|
+
#Model 2a (average reward, parallel)
|
|
123
|
+
print("# Model 2a (average reward, parallel) #")
|
|
124
|
+
mdl2a = mdpsolver.model()
|
|
125
|
+
mdl2a.mdp(rewards=rewards,
|
|
126
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
127
|
+
mdl2a.solve(algorithm="pi",
|
|
128
|
+
update="standard",
|
|
129
|
+
criterion="average",
|
|
130
|
+
parallel=True,
|
|
131
|
+
initPolicy=initPolicy)
|
|
132
|
+
print(mdl2a.getPolicy())
|
|
133
|
+
print(mdl2a.getValueVector())
|
|
134
|
+
|
|
135
|
+
#Model 3a (average reward, parallel)
|
|
136
|
+
print("# Model 3a (average reward, parallel) #")
|
|
137
|
+
mdl3a = mdpsolver.model()
|
|
138
|
+
mdl3a.mdp(rewards=rewards,
|
|
139
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
140
|
+
mdl3a.solve(algorithm="vi",
|
|
141
|
+
update="standard",
|
|
142
|
+
criterion="average",
|
|
143
|
+
parallel=True)
|
|
144
|
+
print(mdl3a.getPolicy())
|
|
145
|
+
print(mdl3a.getValueVector())
|
|
146
|
+
|
|
147
|
+
#Model 1b (average reward, unparallel)
|
|
148
|
+
print("# Model 1b (average reward, unparallel) #")
|
|
149
|
+
mdl1b = mdpsolver.model()
|
|
150
|
+
mdl1b.mdp(rewards=rewards,
|
|
151
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
152
|
+
mdl1b.solve(algorithm="mpi",
|
|
153
|
+
update="standard",
|
|
154
|
+
criterion="average",
|
|
155
|
+
parallel=False,
|
|
156
|
+
initPolicy=initPolicy)
|
|
157
|
+
print(mdl1b.getPolicy())
|
|
158
|
+
print(mdl1b.getValueVector())
|
|
159
|
+
|
|
160
|
+
#Model 2b (average reward, unparallel)
|
|
161
|
+
print("# Model 2b (average reward, unparallel) #")
|
|
162
|
+
mdl2b = mdpsolver.model()
|
|
163
|
+
mdl2b.mdp(rewards=rewards,
|
|
164
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
165
|
+
mdl2b.solve(algorithm="pi",
|
|
166
|
+
update="standard",
|
|
167
|
+
criterion="average",
|
|
168
|
+
parallel=False,
|
|
169
|
+
initPolicy=initPolicy)
|
|
170
|
+
print(mdl2b.getPolicy())
|
|
171
|
+
print(mdl2b.getValueVector())
|
|
172
|
+
|
|
173
|
+
#Model 3b (average reward, unparallel)
|
|
174
|
+
print("# Model 3b (average reward, unparallel) #")
|
|
175
|
+
mdl3b = mdpsolver.model()
|
|
176
|
+
mdl3b.mdp(rewards=rewards,
|
|
177
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
178
|
+
mdl3b.solve(algorithm="vi",
|
|
179
|
+
update="standard",
|
|
180
|
+
criterion="average",
|
|
181
|
+
parallel=False)
|
|
182
|
+
print(mdl3b.getPolicy())
|
|
183
|
+
print(mdl3b.getValueVector())
|
|
184
|
+
|
|
185
|
+
#Model 1c (discounted, Gauss-Seidel)
|
|
186
|
+
print("# Model 1c (discounted reward, Gauss-Seidel) #")
|
|
187
|
+
mdl1c = mdpsolver.model()
|
|
188
|
+
mdl1c.mdp(discount=0.95,
|
|
189
|
+
rewards=rewards,
|
|
190
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
191
|
+
mdl1c.solve(algorithm="mpi",
|
|
192
|
+
update="gs",
|
|
193
|
+
parallel=False,
|
|
194
|
+
initPolicy=initPolicy)
|
|
195
|
+
print(mdl1c.getPolicy())
|
|
196
|
+
print(mdl1c.getValueVector())
|
|
197
|
+
|
|
198
|
+
#Model 2c (Gauss-Seidel)
|
|
199
|
+
print("# Model 2c (discounted reward, Gauss-Seidel) #")
|
|
200
|
+
initPolicy=[1,1,1]
|
|
201
|
+
mdl2c = mdpsolver.model()
|
|
202
|
+
mdl2c.mdp(discount=0.95,
|
|
203
|
+
rewards=rewards,
|
|
204
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
205
|
+
mdl2c.solve(algorithm="pi",
|
|
206
|
+
update="gs",
|
|
207
|
+
parallel=False,
|
|
208
|
+
initPolicy=initPolicy)
|
|
209
|
+
print(mdl2c.getPolicy())
|
|
210
|
+
print(mdl2c.getValueVector())
|
|
211
|
+
|
|
212
|
+
#Model 3c (Gauss-Seidel)
|
|
213
|
+
print("# Model 3c (discounted reward, Gauss-Seidel) #")
|
|
214
|
+
mdl3c = mdpsolver.model()
|
|
215
|
+
mdl3c.mdp(discount=0.95,
|
|
216
|
+
rewards=rewards,
|
|
217
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
218
|
+
mdl3c.solve(algorithm="vi",
|
|
219
|
+
update="gs",
|
|
220
|
+
parallel=False)
|
|
221
|
+
print(mdl3c.getPolicy())
|
|
222
|
+
print(mdl3c.getValueVector())
|
|
223
|
+
|
|
224
|
+
#Model 1d (SOR)
|
|
225
|
+
print("# Model 1d (discounted reward, SOR) #")
|
|
226
|
+
mdl1d = mdpsolver.model()
|
|
227
|
+
mdl1d.mdp(discount=0.95,
|
|
228
|
+
rewards=rewards,
|
|
229
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
230
|
+
mdl1d.solve(algorithm="mpi",
|
|
231
|
+
update="sor",
|
|
232
|
+
SORrelaxation=1.01,
|
|
233
|
+
parallel=False,
|
|
234
|
+
initPolicy=initPolicy)
|
|
235
|
+
print(mdl1d.getPolicy())
|
|
236
|
+
print(mdl1d.getValueVector())
|
|
237
|
+
|
|
238
|
+
#Model 2d (SOR)
|
|
239
|
+
print("# Model 2d (discounted reward, SOR) #")
|
|
240
|
+
mdl2d = mdpsolver.model()
|
|
241
|
+
mdl2d.mdp(discount=0.95,
|
|
242
|
+
rewards=rewards,
|
|
243
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
244
|
+
mdl2d.solve(algorithm="pi",
|
|
245
|
+
update="sor",
|
|
246
|
+
SORrelaxation=1.01,
|
|
247
|
+
parallel=False,
|
|
248
|
+
initPolicy=initPolicy)
|
|
249
|
+
print(mdl2d.getPolicy())
|
|
250
|
+
print(mdl2d.getValueVector())
|
|
251
|
+
|
|
252
|
+
#Model 3d (SOR)
|
|
253
|
+
print("# Model 3d (discounted reward, SOR) #")
|
|
254
|
+
mdl3d = mdpsolver.model()
|
|
255
|
+
mdl3d.mdp(discount=0.95,
|
|
256
|
+
rewards=rewards,
|
|
257
|
+
tranMatWithZeros=tranMatWithZeros)
|
|
258
|
+
mdl3d.solve(algorithm="vi",
|
|
259
|
+
update="sor",
|
|
260
|
+
SORrelaxation=1.01,
|
|
261
|
+
parallel=False)
|
|
262
|
+
print(mdl3d.getPolicy())
|
|
263
|
+
print(mdl3d.getValueVector())
|
|
264
|
+
|
|
265
|
+
#---------------------------------------
|
|
266
|
+
# CONFIGURATION 2
|
|
267
|
+
#---------------------------------------
|
|
268
|
+
|
|
269
|
+
print("\n ## CONFIG. 2 ##\n")
|
|
270
|
+
|
|
271
|
+
#rewards
|
|
272
|
+
#1st index: from (current) states
|
|
273
|
+
#2nd index: actions
|
|
274
|
+
rewards = [[5,-1],
|
|
275
|
+
[1,-2],
|
|
276
|
+
[50,0]]
|
|
277
|
+
|
|
278
|
+
#transition probabilities
|
|
279
|
+
#[from_state,action,to_state,probability]
|
|
280
|
+
tranMatElementwise = [[0,0,0,0.9],
|
|
281
|
+
[0,0,1,0.1],
|
|
282
|
+
[0,1,0,0.1],
|
|
283
|
+
[0,1,1,0.9],
|
|
284
|
+
[1,0,0,0.4],
|
|
285
|
+
[1,0,1,0.5],
|
|
286
|
+
[1,0,2,0.1],
|
|
287
|
+
[1,1,0,0.3],
|
|
288
|
+
[1,1,1,0.5],
|
|
289
|
+
[1,1,2,0.2],
|
|
290
|
+
[2,0,0,0.2],
|
|
291
|
+
[2,0,1,0.2],
|
|
292
|
+
[2,0,2,0.6],
|
|
293
|
+
[2,1,0,0.5],
|
|
294
|
+
[2,1,1,0.5]]
|
|
295
|
+
|
|
296
|
+
#initial policy
|
|
297
|
+
random.seed(10)
|
|
298
|
+
initPolicy = [randint(0, 1) for p in range(0, 3)]
|
|
299
|
+
|
|
300
|
+
#Model 1a
|
|
301
|
+
print("# Model 1a #")
|
|
302
|
+
mdl1a = mdpsolver.model()
|
|
303
|
+
mdl1a.mdp(discount=0.95,
|
|
304
|
+
rewards=rewards,
|
|
305
|
+
tranMatElementwise=tranMatElementwise)
|
|
306
|
+
mdl1a.solve(algorithm="mpi",
|
|
307
|
+
update="standard",
|
|
308
|
+
parallel=True,
|
|
309
|
+
initPolicy=initPolicy)
|
|
310
|
+
print(mdl1a.getPolicy())
|
|
311
|
+
print(mdl1a.getValueVector())
|
|
312
|
+
|
|
313
|
+
#Model 2a
|
|
314
|
+
print("# Model 2a #")
|
|
315
|
+
mdl2a = mdpsolver.model()
|
|
316
|
+
mdl2a.mdp(discount=0.95,
|
|
317
|
+
rewards=rewards,
|
|
318
|
+
tranMatElementwise=tranMatElementwise)
|
|
319
|
+
mdl2a.solve(algorithm="pi",
|
|
320
|
+
update="standard",
|
|
321
|
+
parallel=True,
|
|
322
|
+
initPolicy=initPolicy)
|
|
323
|
+
print(mdl2a.getPolicy())
|
|
324
|
+
print(mdl2a.getValueVector())
|
|
325
|
+
|
|
326
|
+
#Model 3a
|
|
327
|
+
print("# Model 3a #")
|
|
328
|
+
mdl3a = mdpsolver.model()
|
|
329
|
+
mdl3a.mdp(discount=0.95,
|
|
330
|
+
rewards=rewards,
|
|
331
|
+
tranMatElementwise=tranMatElementwise)
|
|
332
|
+
mdl3a.solve(algorithm="vi",
|
|
333
|
+
update="standard",
|
|
334
|
+
parallel=True)
|
|
335
|
+
print(mdl3a.getPolicy())
|
|
336
|
+
print(mdl3a.getValueVector())
|
|
337
|
+
|
|
338
|
+
#Model 1b
|
|
339
|
+
print("# Model 1b #")
|
|
340
|
+
mdl1b = mdpsolver.model()
|
|
341
|
+
mdl1b.mdp(discount=0.95,
|
|
342
|
+
rewards=rewards,
|
|
343
|
+
tranMatElementwise=tranMatElementwise)
|
|
344
|
+
mdl1b.solve(algorithm="mpi",
|
|
345
|
+
update="standard",
|
|
346
|
+
parallel=False,
|
|
347
|
+
initPolicy=initPolicy)
|
|
348
|
+
print(mdl1b.getPolicy())
|
|
349
|
+
print(mdl1b.getValueVector())
|
|
350
|
+
|
|
351
|
+
#Model 2b
|
|
352
|
+
print("# Model 2b #")
|
|
353
|
+
mdl2b = mdpsolver.model()
|
|
354
|
+
mdl2b.mdp(discount=0.95,
|
|
355
|
+
rewards=rewards,
|
|
356
|
+
tranMatElementwise=tranMatElementwise)
|
|
357
|
+
mdl2b.solve(algorithm="pi",
|
|
358
|
+
update="standard",
|
|
359
|
+
parallel=False,
|
|
360
|
+
initPolicy=initPolicy)
|
|
361
|
+
print(mdl2b.getPolicy())
|
|
362
|
+
print(mdl2b.getValueVector())
|
|
363
|
+
|
|
364
|
+
#Model 3b
|
|
365
|
+
print("# Model 3b #")
|
|
366
|
+
mdl3b = mdpsolver.model()
|
|
367
|
+
mdl3b.mdp(discount=0.95,
|
|
368
|
+
rewards=rewards,
|
|
369
|
+
tranMatElementwise=tranMatElementwise)
|
|
370
|
+
mdl3b.solve(algorithm="vi",
|
|
371
|
+
update="standard",
|
|
372
|
+
parallel=False)
|
|
373
|
+
print(mdl3b.getPolicy())
|
|
374
|
+
print(mdl3b.getValueVector())
|
|
375
|
+
|
|
376
|
+
#Model 1c
|
|
377
|
+
print("# Model 1c #")
|
|
378
|
+
mdl1c = mdpsolver.model()
|
|
379
|
+
mdl1c.mdp(discount=0.95,
|
|
380
|
+
rewards=rewards,
|
|
381
|
+
tranMatElementwise=tranMatElementwise)
|
|
382
|
+
mdl1c.solve(algorithm="mpi",
|
|
383
|
+
update="gs",
|
|
384
|
+
parallel=False,
|
|
385
|
+
initPolicy=initPolicy)
|
|
386
|
+
print(mdl1c.getPolicy())
|
|
387
|
+
print(mdl1c.getValueVector())
|
|
388
|
+
|
|
389
|
+
#Model 2c
|
|
390
|
+
print("# Model 2c #")
|
|
391
|
+
mdl2c = mdpsolver.model()
|
|
392
|
+
mdl2c.mdp(discount=0.95,
|
|
393
|
+
rewards=rewards,
|
|
394
|
+
tranMatElementwise=tranMatElementwise)
|
|
395
|
+
mdl2c.solve(algorithm="pi",
|
|
396
|
+
update="gs",
|
|
397
|
+
parallel=False,
|
|
398
|
+
initPolicy=initPolicy)
|
|
399
|
+
print(mdl2c.getPolicy())
|
|
400
|
+
print(mdl2c.getValueVector())
|
|
401
|
+
|
|
402
|
+
#Model 3c
|
|
403
|
+
print("# Model 3c #")
|
|
404
|
+
mdl3c = mdpsolver.model()
|
|
405
|
+
mdl3c.mdp(discount=0.95,
|
|
406
|
+
rewards=rewards,
|
|
407
|
+
tranMatElementwise=tranMatElementwise)
|
|
408
|
+
mdl3c.solve(algorithm="vi",
|
|
409
|
+
update="gs",
|
|
410
|
+
parallel=False)
|
|
411
|
+
print(mdl3c.getPolicy())
|
|
412
|
+
print(mdl3c.getValueVector())
|
|
413
|
+
|
|
414
|
+
#Model 1d
|
|
415
|
+
print("# Model 1d #")
|
|
416
|
+
mdl1d = mdpsolver.model()
|
|
417
|
+
mdl1d.mdp(discount=0.95,
|
|
418
|
+
rewards=rewards,
|
|
419
|
+
tranMatElementwise=tranMatElementwise)
|
|
420
|
+
mdl1d.solve(algorithm="mpi",
|
|
421
|
+
update="sor",
|
|
422
|
+
SORrelaxation=1.01,
|
|
423
|
+
parallel=False,
|
|
424
|
+
initPolicy=initPolicy)
|
|
425
|
+
print(mdl1d.getPolicy())
|
|
426
|
+
print(mdl1d.getValueVector())
|
|
427
|
+
|
|
428
|
+
#Model 2d
|
|
429
|
+
print("# Model 2d #")
|
|
430
|
+
mdl2d = mdpsolver.model()
|
|
431
|
+
mdl2d.mdp(discount=0.95,
|
|
432
|
+
rewards=rewards,
|
|
433
|
+
tranMatElementwise=tranMatElementwise)
|
|
434
|
+
mdl2d.solve(algorithm="pi",
|
|
435
|
+
update="sor",
|
|
436
|
+
SORrelaxation=1.01,
|
|
437
|
+
parallel=False,
|
|
438
|
+
initPolicy=initPolicy)
|
|
439
|
+
print(mdl2d.getPolicy())
|
|
440
|
+
print(mdl2d.getValueVector())
|
|
441
|
+
|
|
442
|
+
#Model 3d
|
|
443
|
+
print("# Model 3d #")
|
|
444
|
+
mdl3d = mdpsolver.model()
|
|
445
|
+
mdl3d.mdp(discount=0.95,
|
|
446
|
+
rewards=rewards,
|
|
447
|
+
tranMatElementwise=tranMatElementwise)
|
|
448
|
+
mdl3d.solve(algorithm="vi",
|
|
449
|
+
update="sor",
|
|
450
|
+
SORrelaxation=1.01,
|
|
451
|
+
parallel=False)
|
|
452
|
+
print(mdl3d.getPolicy())
|
|
453
|
+
print(mdl3d.getValueVector())
|
|
454
|
+
|
|
455
|
+
#---------------------------------------
|
|
456
|
+
# CONFIGURATION 3
|
|
457
|
+
#---------------------------------------
|
|
458
|
+
|
|
459
|
+
print("\n ## CONFIG. 3 ##\n")
|
|
460
|
+
|
|
461
|
+
#rewards
|
|
462
|
+
#1st index: from (current) states
|
|
463
|
+
#2nd index: actions
|
|
464
|
+
rewards = [[5,-1],
|
|
465
|
+
[1,-2],
|
|
466
|
+
[50,0]]
|
|
467
|
+
|
|
468
|
+
#transition probabilities
|
|
469
|
+
tranMatProbs = [[[0.9,0.1],[0.1,0.9]],
|
|
470
|
+
[[0.4,0.5,0.1],[0.3,0.5,0.2]],
|
|
471
|
+
[[0.2,0.2,0.6],[0.5,0.5]]]
|
|
472
|
+
|
|
473
|
+
tranMatColumns = [[[0,1],[0,1]],
|
|
474
|
+
[[0,1,2],[0,1,2]],
|
|
475
|
+
[[0,1,2],[0,1]]]
|
|
476
|
+
|
|
477
|
+
#initial policy
|
|
478
|
+
random.seed(10)
|
|
479
|
+
initPolicy = [randint(0, 1) for p in range(0, 3)]
|
|
480
|
+
|
|
481
|
+
#Model 1a
|
|
482
|
+
print("# Model 1a #")
|
|
483
|
+
mdl1a = mdpsolver.model()
|
|
484
|
+
mdl1a.mdp(discount=0.95,
|
|
485
|
+
rewards=rewards,
|
|
486
|
+
tranMatProbs=tranMatProbs,
|
|
487
|
+
tranMatColumns=tranMatColumns)
|
|
488
|
+
mdl1a.solve(algorithm="mpi",
|
|
489
|
+
update="standard",
|
|
490
|
+
parallel=True,
|
|
491
|
+
initPolicy=initPolicy)
|
|
492
|
+
print(mdl1a.getPolicy())
|
|
493
|
+
print(mdl1a.getValueVector())
|
|
494
|
+
|
|
495
|
+
#Model 2a
|
|
496
|
+
print("# Model 2a #")
|
|
497
|
+
mdl2a = mdpsolver.model()
|
|
498
|
+
mdl2a.mdp(discount=0.95,
|
|
499
|
+
rewards=rewards,
|
|
500
|
+
tranMatProbs=tranMatProbs,
|
|
501
|
+
tranMatColumns=tranMatColumns)
|
|
502
|
+
mdl2a.solve(algorithm="pi",
|
|
503
|
+
update="standard",
|
|
504
|
+
parallel=True,
|
|
505
|
+
initPolicy=initPolicy)
|
|
506
|
+
print(mdl2a.getPolicy())
|
|
507
|
+
print(mdl2a.getValueVector())
|
|
508
|
+
|
|
509
|
+
#Model 3a
|
|
510
|
+
print("# Model 3a #")
|
|
511
|
+
mdl3a = mdpsolver.model()
|
|
512
|
+
mdl3a.mdp(discount=0.95,
|
|
513
|
+
rewards=rewards,
|
|
514
|
+
tranMatProbs=tranMatProbs,
|
|
515
|
+
tranMatColumns=tranMatColumns)
|
|
516
|
+
mdl3a.solve(algorithm="vi",
|
|
517
|
+
update="standard",
|
|
518
|
+
parallel=True)
|
|
519
|
+
print(mdl3a.getPolicy())
|
|
520
|
+
print(mdl3a.getValueVector())
|
|
521
|
+
|
|
522
|
+
#Model 1b
|
|
523
|
+
print("# Model 1b #")
|
|
524
|
+
mdl1b = mdpsolver.model()
|
|
525
|
+
mdl1b.mdp(discount=0.95,
|
|
526
|
+
rewards=rewards,
|
|
527
|
+
tranMatProbs=tranMatProbs,
|
|
528
|
+
tranMatColumns=tranMatColumns)
|
|
529
|
+
mdl1b.solve(algorithm="mpi",
|
|
530
|
+
update="standard",
|
|
531
|
+
parallel=False,
|
|
532
|
+
initPolicy=initPolicy)
|
|
533
|
+
print(mdl1b.getPolicy())
|
|
534
|
+
print(mdl1b.getValueVector())
|
|
535
|
+
|
|
536
|
+
#Model 2b
|
|
537
|
+
print("# Model 2b #")
|
|
538
|
+
mdl2b = mdpsolver.model()
|
|
539
|
+
mdl2b.mdp(discount=0.95,
|
|
540
|
+
rewards=rewards,
|
|
541
|
+
tranMatProbs=tranMatProbs,
|
|
542
|
+
tranMatColumns=tranMatColumns)
|
|
543
|
+
mdl2b.solve(algorithm="pi",
|
|
544
|
+
update="standard",
|
|
545
|
+
parallel=False,
|
|
546
|
+
initPolicy=initPolicy)
|
|
547
|
+
print(mdl2b.getPolicy())
|
|
548
|
+
print(mdl2b.getValueVector())
|
|
549
|
+
|
|
550
|
+
#Model 3b
|
|
551
|
+
print("# Model 3b #")
|
|
552
|
+
mdl3b = mdpsolver.model()
|
|
553
|
+
mdl3b.mdp(discount=0.95,
|
|
554
|
+
rewards=rewards,
|
|
555
|
+
tranMatProbs=tranMatProbs,
|
|
556
|
+
tranMatColumns=tranMatColumns)
|
|
557
|
+
mdl3b.solve(algorithm="vi",
|
|
558
|
+
update="standard",
|
|
559
|
+
parallel=False)
|
|
560
|
+
print(mdl3b.getPolicy())
|
|
561
|
+
print(mdl3b.getValueVector())
|
|
562
|
+
|
|
563
|
+
#Model 1c
|
|
564
|
+
print("# Model 1c #")
|
|
565
|
+
mdl1c = mdpsolver.model()
|
|
566
|
+
mdl1c.mdp(discount=0.95,
|
|
567
|
+
rewards=rewards,
|
|
568
|
+
tranMatProbs=tranMatProbs,
|
|
569
|
+
tranMatColumns=tranMatColumns)
|
|
570
|
+
mdl1c.solve(algorithm="mpi",
|
|
571
|
+
update="gs",
|
|
572
|
+
parallel=False,
|
|
573
|
+
initPolicy=initPolicy)
|
|
574
|
+
print(mdl1c.getPolicy())
|
|
575
|
+
print(mdl1c.getValueVector())
|
|
576
|
+
|
|
577
|
+
#Model 2c
|
|
578
|
+
print("# Model 2c #")
|
|
579
|
+
mdl2c = mdpsolver.model()
|
|
580
|
+
mdl2c.mdp(discount=0.95,
|
|
581
|
+
rewards=rewards,
|
|
582
|
+
tranMatProbs=tranMatProbs,
|
|
583
|
+
tranMatColumns=tranMatColumns)
|
|
584
|
+
mdl2c.solve(algorithm="pi",
|
|
585
|
+
update="gs",
|
|
586
|
+
parallel=False,
|
|
587
|
+
initPolicy=initPolicy)
|
|
588
|
+
print(mdl2c.getPolicy())
|
|
589
|
+
print(mdl2c.getValueVector())
|
|
590
|
+
|
|
591
|
+
#Model 3c
|
|
592
|
+
print("# Model 3c #")
|
|
593
|
+
mdl3c = mdpsolver.model()
|
|
594
|
+
mdl3c.mdp(discount=0.95,
|
|
595
|
+
rewards=rewards,
|
|
596
|
+
tranMatProbs=tranMatProbs,
|
|
597
|
+
tranMatColumns=tranMatColumns)
|
|
598
|
+
mdl3c.solve(algorithm="vi",
|
|
599
|
+
update="gs",
|
|
600
|
+
parallel=False)
|
|
601
|
+
print(mdl3c.getPolicy())
|
|
602
|
+
print(mdl3c.getValueVector())
|
|
603
|
+
|
|
604
|
+
#Model 1d
|
|
605
|
+
print("# Model 1d #")
|
|
606
|
+
mdl1d = mdpsolver.model()
|
|
607
|
+
mdl1d.mdp(discount=0.95,
|
|
608
|
+
rewards=rewards,
|
|
609
|
+
tranMatProbs=tranMatProbs,
|
|
610
|
+
tranMatColumns=tranMatColumns)
|
|
611
|
+
mdl1d.solve(algorithm="mpi",
|
|
612
|
+
update="sor",
|
|
613
|
+
SORrelaxation=1.01,
|
|
614
|
+
parallel=False,
|
|
615
|
+
initPolicy=initPolicy)
|
|
616
|
+
print(mdl1d.getPolicy())
|
|
617
|
+
print(mdl1d.getValueVector())
|
|
618
|
+
|
|
619
|
+
#Model 2d
|
|
620
|
+
print("# Model 2d #")
|
|
621
|
+
mdl2d = mdpsolver.model()
|
|
622
|
+
mdl2d.mdp(discount=0.95,
|
|
623
|
+
rewards=rewards,
|
|
624
|
+
tranMatProbs=tranMatProbs,
|
|
625
|
+
tranMatColumns=tranMatColumns)
|
|
626
|
+
mdl2d.solve(algorithm="pi",
|
|
627
|
+
update="sor",
|
|
628
|
+
SORrelaxation=1.01,
|
|
629
|
+
parallel=False,
|
|
630
|
+
initPolicy=initPolicy)
|
|
631
|
+
print(mdl2d.getPolicy())
|
|
632
|
+
print(mdl2d.getValueVector())
|
|
633
|
+
|
|
634
|
+
#Model 3d
|
|
635
|
+
print("# Model 3d #")
|
|
636
|
+
mdl3d = mdpsolver.model()
|
|
637
|
+
mdl3d.mdp(discount=0.95,
|
|
638
|
+
rewards=rewards,
|
|
639
|
+
tranMatProbs=tranMatProbs,
|
|
640
|
+
tranMatColumns=tranMatColumns)
|
|
641
|
+
mdl3d.solve(algorithm="vi",
|
|
642
|
+
update="sor",
|
|
643
|
+
SORrelaxation=1.01,
|
|
644
|
+
parallel=False)
|
|
645
|
+
print(mdl3d.getPolicy())
|
|
646
|
+
print(mdl3d.getValueVector())
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import mdpsolver
|
|
2
|
+
import example_model
|
|
3
|
+
|
|
4
|
+
#TEST 2
|
|
5
|
+
#In this test, we load the rewards and transition probabilities
|
|
6
|
+
#from two CSV-files (rewards_example.csv and transitions.csv).
|
|
7
|
+
#In addition, we test three optimization algorithms and compare
|
|
8
|
+
#the runtimes.
|
|
9
|
+
|
|
10
|
+
#PROBLEM DESCRIPTION: We derive the policy for a decision problem
|
|
11
|
+
#involving a queueing system with finite capacity and two customer
|
|
12
|
+
#types. The system is observed whenever a new customer arrives.
|
|
13
|
+
#Customers are not allowed to wait and can only be accepted if there
|
|
14
|
+
#are idle servers. Thus, with each arrival, we must choose whether
|
|
15
|
+
#to accept or reject the customer. We receive a low reward for
|
|
16
|
+
#accepting the first, more common type, and a high reward for
|
|
17
|
+
#accepting the second, rarer type.
|
|
18
|
+
|
|
19
|
+
#---------------------------------------
|
|
20
|
+
# CREATE PARAMETERS
|
|
21
|
+
#---------------------------------------
|
|
22
|
+
|
|
23
|
+
#rewards
|
|
24
|
+
capacity=100
|
|
25
|
+
rewardCust1=1
|
|
26
|
+
rewardCust2=1000
|
|
27
|
+
example_model.rewards(capacity,rewardCust1,rewardCust2,"rewards_example2.csv")
|
|
28
|
+
|
|
29
|
+
#transitions
|
|
30
|
+
arrRate1=50
|
|
31
|
+
arrRate2=10
|
|
32
|
+
serRate=3/4
|
|
33
|
+
example_model.tranMat(arrRate1,arrRate2,serRate,capacity,"transitions_example2.csv")
|
|
34
|
+
|
|
35
|
+
#---------------------------------------
|
|
36
|
+
# VALUE ITERATION
|
|
37
|
+
#---------------------------------------
|
|
38
|
+
|
|
39
|
+
mdl1 = mdpsolver.model()
|
|
40
|
+
|
|
41
|
+
mdl1.mdp(discount=0.99,
|
|
42
|
+
rewardsFromFile="rewards_example2.csv",
|
|
43
|
+
tranMatFromFile="transitions_example2.csv")
|
|
44
|
+
|
|
45
|
+
mdl1.solve(algorithm="vi")
|
|
46
|
+
|
|
47
|
+
print("Value iteration:",mdl1.getRuntime(),"milliseconds.")
|
|
48
|
+
|
|
49
|
+
#---------------------------------------
|
|
50
|
+
# POLICY ITERATION
|
|
51
|
+
#---------------------------------------
|
|
52
|
+
|
|
53
|
+
mdl2 = mdpsolver.model()
|
|
54
|
+
|
|
55
|
+
mdl2.mdp(discount=0.99,
|
|
56
|
+
rewardsFromFile="rewards_example2.csv",
|
|
57
|
+
tranMatFromFile="transitions_example2.csv")
|
|
58
|
+
|
|
59
|
+
mdl2.solve(algorithm="pi")
|
|
60
|
+
|
|
61
|
+
print("Policy iteration:",mdl2.getRuntime(),"milliseconds.")
|
|
62
|
+
|
|
63
|
+
#---------------------------------------
|
|
64
|
+
# MODIFIED POLICY ITERATION
|
|
65
|
+
#---------------------------------------
|
|
66
|
+
|
|
67
|
+
mdl3 = mdpsolver.model()
|
|
68
|
+
|
|
69
|
+
mdl3.mdp(discount=0.99,
|
|
70
|
+
rewardsFromFile="rewards_example2.csv",
|
|
71
|
+
tranMatFromFile="transitions_example2.csv")
|
|
72
|
+
|
|
73
|
+
mdl3.solve(algorithm="mpi")
|
|
74
|
+
|
|
75
|
+
print("Modified policy iteration:",mdl3.getRuntime(),"milliseconds.")
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/__pycache__/cbmaux.cpython-310.pyc
RENAMED
|
File without changes
|
{mdpsolver-0.9.6 → mdpsolver-0.9.7}/src/mdpsolver/problems/__pycache__/tbmaux.cpython-310.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|