Bases: Node
Selects the direct encoding formulation to use for the problem instance.
Modifications at runtime:
- formulation:
- {str} : name of the direct encoding mode to use
Source code in src/quast_decisiontree/nodes/formulation.py
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 | class FormulationSelectNode(Node):
"""Selects the direct encoding formulation to use for the problem instance.
Modifications at runtime:
- formulation:
- {str} : name of the direct encoding mode to use
"""
_known_children = ["DirectEncodingNode"]
_path_keys = dict(formulation=PathKey(str))
def __init__(self, children: list):
super().__init__(
requires="problem_instance",
creates="formulation",
children=children,
)
self.problem_instance = None
def _formulation_choices(self) -> dict:
modes = self.problem_instance.direct_encoding_modes
if not modes:
return {"direct": "Perform a direct encoding with the default setting"}
return {mode: f"Perform a direct encoding with the mode {mode!r}" for mode in modes}
def _formulation_default(self) -> str:
modes = self.problem_instance.direct_encoding_modes
return modes[0] if modes else "direct"
def _build_query(self) -> MultiChoiceQuery:
return MultiChoiceQuery(
question="Which formulation do you want to use?",
answers=self._formulation_choices(),
default=self._formulation_default(),
)
def execute(self, problem_data: dict, path_info: dict) -> dict:
self.problem_instance = problem_data["problem_instance"]
formulation = path_info.get("formulation")
if formulation is None:
query = self._build_query()
if len(query.options) == 1:
formulation = next(iter(query.options))
else:
formulation = query.input()
path_info["formulation"] = formulation
problem_data["formulation"] = formulation
return dict(formulation=formulation)
|
Source code in src/quast_decisiontree/nodes/formulation.py
| def __init__(self, children: list):
super().__init__(
requires="problem_instance",
creates="formulation",
children=children,
)
self.problem_instance = None
|
execute(problem_data, path_info)
Source code in src/quast_decisiontree/nodes/formulation.py
56
57
58
59
60
61
62
63
64
65
66
67 | def execute(self, problem_data: dict, path_info: dict) -> dict:
self.problem_instance = problem_data["problem_instance"]
formulation = path_info.get("formulation")
if formulation is None:
query = self._build_query()
if len(query.options) == 1:
formulation = next(iter(query.options))
else:
formulation = query.input()
path_info["formulation"] = formulation
problem_data["formulation"] = formulation
return dict(formulation=formulation)
|