-
Notifications
You must be signed in to change notification settings - Fork 116
/
RulesChecker.py
57 lines (46 loc) · 2.21 KB
/
RulesChecker.py
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
# Copyright (c) 2019-2020, RTE (https://www.rte-france.com)
# See AUTHORS.txt
# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0.
# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file,
# you can obtain one at http://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0
# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems.
from grid2op.Exceptions import Grid2OpException
from grid2op.Rules.BaseRules import BaseRules
from grid2op.Rules.AlwaysLegal import AlwaysLegal
class RulesChecker(object):
"""
Class that defin the rules of the game.
"""
def __init__(self, legalActClass=AlwaysLegal):
"""
Parameters
----------
legalActClass: ``type``
The class that will be used to tell if the actions are legal or not. The class must be given, and not
an object of this class. It should derived from :class:`BaseRules`.
"""
if not isinstance(legalActClass, type):
raise Grid2OpException("Parameter \"legalActClass\" used to build the RulesChecker should be a "
"type (a class) "
"and not an object (an instance of a class). "
"It is currently \"{}\"".format(type(legalActClass)))
if not issubclass(legalActClass, BaseRules):
raise Grid2OpException("Gamerules: legalActClass should be initialize with a class deriving "
"from BaseRules and not {}".format(type(legalActClass)))
self.legal_action = legalActClass()
def __call__(self, action, env):
"""
Says if an action is legal or not.
Parameters
----------
action: :class:`grid2op.Action.Action`
The action that need to be tested
env: :class:`grid2op.Environment.Environment`
The current used environment.
Returns
-------
res: ``bool``
Assess if the given action is legal or not. ``True``: the action is legal, ``False`` otherwise
"""
return self.legal_action(action, env)