Download presentation
Presentation is loading. Please wait.
Published byBarnaby Ray Modified over 8 years ago
1
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 1 Chapter 17 Planning Based on Model Checking Dana S. Nau Dept. of Computer Science, and Institute for Systems Research University of Maryland Lecture slides for Automated Planning: Theory and Practice
2
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 2 Motivation l Actions with multiple possible outcomes u Action failures »e.g., gripper drops its load u Exogenous events »e.g., road closed l Like Markov Decision Processes (MDPs), but without probabilities attached to the outcomes u Useful if accurate probabilities aren’t available, or if probability calculations would introduce inaccuracies a c b Grasp block c a c b Intended outcome abc Unintended outcome
3
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 3 Nondeterministic Systems l Nondeterministic system: a triple = (S, A) u S = finite set of states u A = finite set of actions u : S A 2 s l Like in the previous chapter, the book doesn’t commit to any particular representation u It only deals with the underlying semantics u Draw the state-transition graph explicitly l Like in the previous chapter, a policy is a function from states into actions u π: S A l At certain points we will also have nondeterministic policies u π: S 2 A, or equivalently, π S A
4
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 4 Robot r1 starts at location l1 Objective is to get r1 to location l4 π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start Example 2
5
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 5 Robot r1 starts at location l1 Objective is to get r1 to location l4 π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start Example 2
6
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 6 Robot r1 starts at location l1 Objective is to get r1 to location l4 π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start Example 2
7
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 7 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start s2 s1 s5 s3 s4 2
8
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 8 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } s2 s1 s5 s3 s4
9
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 9 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start s2 s1 s5 s3 s4 2
10
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 10 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } s2 s1 s5 s3 s4
11
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 11 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } Goal Start s1 s4 2
12
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 12 Execution Structures l Execution structure for a policy π: u The graph of all of π’s execution paths l Notation: π = (Q,T) u Q S u T S S π 1 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)) } π 2 = { (s1, move(r1,l1,l2)), (s2, move(r1,l2,l3)), (s3, move(r1,l3,l4)), (s5, move(r1,l3,l4)) } π 3 = { (s1, move(r1,l1,l4)) } s1 s4
13
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 13 l Weak solution: at least one execution path reaches a goal l Strong solution: every execution path reaches a goal l Strong-cyclic solution: every fair execution path reaches a goal u Don’t stay in a cycle forever if there’s a state-transition out of it s0 s1 s3 Goal a0 a1 a2 s2 a3 s0 s1 s3 Goal a0 a1 a2 s2 s0 s1 s3 Goal a0 a1 a2 s2 Goal Types of Solutions a3
14
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 14 Finding Strong Solutions l Backward breadth-first search StrongPreImg (S) = {(s,a) : (s,a) ≠ , (s,a) S} u all state-action pairs for which all successors are in S PruneStates (π,S) = {(s,a) π : s S} u S is the set of states we’ve already solved u keep only the state-action pairs for other states l MkDet(π') u π' is a policy that may be nondeterministic u remove some state-action pairs if necessary, to get a deterministic policy
15
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 15 π = failure π' = S π' = S g S π' = { s4 } Example Goal Start s4 2
16
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 16 Example Start π = failure π' = S π' = S g S π' = { s5 } PreImage = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π'' = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } Goal s5 s3 s4 2
17
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 17 Example Start π = failure π' = S π' = S g S π' = { s5 } PreImage = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π'' = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π = π' = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } Goal s5 s3 s4 2
18
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 18 Example Goal Start π = π' = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S π' = { s3,s4,s5 } S g S π' = { s3,s4,s5 } s5 s3 s4 2
19
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 19 π = π' = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S π' = { s3,s4,s5 } S g S π' = { s3,s4,s5 } PreImage = { (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)), ( s4,move(r1,l4,l3)), ( s4,move(r1,l4,l5)) } π'' = { (s2,move(r1,l2,l3) } Example Goal Start s5 s3 s4 s2 2
20
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 20 π = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s2,move(r1,l2,l3), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S g S π' = { s2,s3,s4,s5 } Example Goal Start s2 s5 s3 s4 2
21
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 21 π = { ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S g S π' = { s2,s3,s4,s5 } PreImage = { (s1,move(r1,l1,l2)), (s2,move(r1,l2,l3)), (s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)), … } π'' = { (s1,move(r1,l1,l2)) } Example Goal Start s2 s5 s3 s4 s1 2
22
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 22 π = { (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s1,move(r1,l1,l2)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S g S π' = { s1,s2,s3,s4,s5 } Example Goal Start s2 s5 s3 s4 s1 2
23
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 23 π = { (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s1,move(r1,l1,l2)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S g S π' = { s1,s2,s3,s4,s5 } S 0 S g S π' MkDet (π') = π' Example Goal Start s2 s1 s5 s3 s4 2
24
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 24 Finding Weak Solutions Weak-Plan is just like Strong-Plan except for this: WeakPreImg (S) = {(s,a) : (s,a) i S ≠ } u at least one successor is in S Weak
25
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 25 π = failure π' = S π' = S g S π' = { s5 } Example Goal Start s4 2 Weak
26
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 26 Example Start π = failure π' = S π' = S g S π' = { s5 } PreImage = { ( s1,move(r1,l1,l4)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π'' = PreImage Goal s5 s3 s4 2 s1 Weak
27
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 27 Example Goal Start π = π' = { ( s1,move(r1,l1,l4)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S π' = { s1,s3,s4,s5 } S g S π' = { s1,s3,s4,s5 } PreImage = { ( s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)), … } π'' = { ( s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } s5 s3 s4 2 s1 s2 Weak
28
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 28 π = { (s1,move(r1,l1,l4)), (s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S π' = { s1,s3,s4,s5 } S g S π' = { s1,s3,s4,s5 } Example Goal Start s5 s3 s4 s2 2 s1 Weak
29
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 29 π = { (s1,move(r1,l1,l4)), (s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S π' = { s1,s3,s4,s5 } S g S π' = { s1,s3,s4,s5 } PreImage = { ( s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)), … } π'' = Example Goal Start s5 s3 s4 s2 2 s1 Weak
30
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 30 π = { (s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } π' = { (s1,move(r1,l1,l4)), (s2,move(r1,l2,l3)), ( s3,move(r1,l3,l4)), (s5,move(r1,l5,l4)) } S g S π' = { s1,s2,s3,s4,s5 } S 0 S g S π' MkDet (π') = π' Example Goal Start s2 s1 s5 s3 s4 2 Weak
31
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 31 Finding Strong-Cyclic Solutions l Begin with a “universal policy” π' that contains all state-action pairs l Repeatedly, eliminate state-action pairs that take us to bad states PruneOutgoing removes state-action pairs that go to states not in S g u S π »PruneOutgoing (π,S) = π – {(s,a) π : (s,a) subset S u S π ») PruneUnconnected removes states from which it is impossible to get to S g »Details are in the book l Once the policy stops changing u If the policy is a solution, return a deterministic subpolicy u Else return failure
32
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 32 π = π' = {(s,a) : a is applicable to s} Example 1 Goal Start s5 s3 s4 s2 2 s1 s6 at(r1,l6)
33
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 33 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = π' PruneUnconnected(π',S g ) = π' RemoveNonProgress(π') = … Example 1 Goal Start s5 s3 s4 s2 2 s1 s6 at(r1,l6)
34
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 34 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = π' PruneUnconnected(π',S g ) = π' RemoveNonProgress(π') = … as shown … Example 1 Start s5 s3 s4 s2 2 s1 s6 Goal at(r1,l6)
35
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 35 Example 1 Start s5 s3 s4 s2 2 s1 s6 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = π' PruneUnconnected(π',S g ) = π' RemoveNonProgress(π') = … as shown … MkDet(RemoveNonProgress(π')) = either {(s1,move(r1,l1,l4), (s4,move(r1,l4,l6))} or {all the black edges} at(r1,l6) Goal
36
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 36 π = π' = {(s,a) : a is applicable to s} Example 2 Goal Start s5 s3 s4 s2 2 s1 s6 at(r1,l6)
37
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 37 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = as shown Example 2 Goal Start s5 s3 s4 s2 2 s1 s6 at(r1,l6)
38
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 38 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = as shown PruneUnconnected(…) = as shown Example 2 Goal Start s3 s4 s2 2 s1 s6 at(r1,l6)
39
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 39 π = π' = {(s,a) : a is applicable to s} π = {(s,a) : a is applicable to s} PruneOutgoing(π',S g ) = π' PruneUnconnected(π'',S g ) = as shown π' = as shown Example 2 Goal Start s3 s4 s2 2 s1 s6 at(r1,l6)
40
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 40 π' = as shown π = π' PruneOutgoing(π',S g ) = π' PruneUnconnected(π'',S g ) = π' RemoveNonProgress(π') = … Example 2 Goal Start s3 s4 s2 2 s1 s6 at(r1,l6)
41
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 41 Example 2 Goal Start s3 s4 s2 2 s1 s6 π' = as shown PruneOutgoing(π',S g ) = π' PruneUnconnected(π'',S g ) = π' RemoveNonProgress(π') = π'' as shown MkDet(π'') = π'' at(r1,l6)
42
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 42 Planning for Extended Goals 2 s6 at(r1,l6) l Here, “extended” means temporally extended u Constraints that apply to some sequence of states l Examples: u move to l3, and then to l5 u keep going back and forth between l3 and l5
43
Dana Nau: Lecture slides for Automated Planning Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License: http://creativecommons.org/licenses/by-nc-sa/2.0/ 43 Planning for Extended Goals l Context: the internal state of the controller l Plan: (C, c 0, act, ctxt) u C = a set of execution contexts u c 0 is the initial context u act: S C A u ctxt: S C S C l Sections 17.3 extends the ideas in Sections 17.1 and 17.2 to deal with extended goals u We’ll skip the details
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.