convert to jm.Record from dict result
Parameters:
| Name | Type | Description | Default |
results | Iterable[dict[int, int | float]] | | required |
compiled_model | CompiledInstance | compiled_model to get var_map and fixed_variables. | required |
Returns:
| Type | Description |
Record | jm.Record: converted record. |
Source code in jijmodeling_transpiler/core/decode/decode.py
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 | def dict_to_record(
results: typ.Iterable[dict[int, int | float]],
compiled_model: CompiledInstance,
) -> jm.Record:
"""convert to jm.Record from dict result
Args:
results (typ.Iterable[dict[int, int | float]]): dict result
compiled_model (CompiledInstance): compiled_model to get var_map and fixed_variables.
Returns:
jm.Record: converted record.
"""
decoded_solutions: dict = {}
var_map = compiled_model.var_map.var_map
for label in var_map.keys():
decoded_solutions[label] = []
for sample in results:
decoded_subs: dict[str, tuple[list[int], ...]] = {}
decoded_values = {label: [] for label in var_map.keys()}
decoded_shape = {}
for label, _var_map in var_map.items():
for subs, var_index in _var_map.items():
if label not in decoded_subs:
decoded_subs[label] = tuple([[] for _ in range(len(subs))])
if label not in decoded_shape:
decoded_shape[label] = tuple([0 for _ in range(len(subs))])
value = sample.get(var_index, 0.0)
if value != 0.0:
for _i, s in enumerate(subs):
decoded_subs[label][_i].append(s)
decoded_values[label].append(value)
for label, fixed_vars in compiled_model.data.fixed_variables.items():
for subs, value in fixed_vars.items():
if label not in decoded_subs:
decoded_subs[label] = tuple([[] for _ in range(len(subs))])
if value != 0.0:
for _i, s in enumerate(subs):
decoded_subs[label][_i].append(s)
decoded_values[label].append(value)
# format to record
for label in var_map.keys():
shape_value = compiled_model.deci_var_shape[label]
shape: tuple[int, ...] = tuple(
[s if s is not None else 0 for s in shape_value]
)
sparse_solution = (
decoded_subs[label],
decoded_values[label],
shape,
)
decoded_solutions[label].append(sparse_solution)
record = jm.Record(solution=decoded_solutions, num_occurrences=[1 for _ in range(len(decoded_solutions))]) # type: ignore
return record
|