Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
| Download
Project: tests and ideas
Path: or-tools.ipynb
Views: 46Image: ubuntu2204
Kernel: Python 3 (system-wide)
Rockbands Rätsel mittels OR-Tools lösen
Man soll die 26 Buchstaben des Alphabets den Werten von 1 bis 16 derartig zuordnen, sodass eine Reihe von Nebenbedingungen erfüllt sind. zB soll gelten. Anschließend ergibt sich ein Lösungswort aus der zurückübersetzen Kombination von einigen Zahlen.
In [3]:
In [4]:
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
CP-SAT solver: https://developers.google.com/optimization/cp/cp_solver
In [5]:
In [6]:
F(1..26)
Nebenbedingungen
In [7]:
In [8]:
(((((((((((((((((((((((((A + B) + C) + D) + E) + F) + G) + H) + I) + J) + K) + L) + M) + N) + O) + P) + Q) + R) + S) + T) + U) + V) + W) + X) + Y) + Z) == 351
In [9]:
<ortools.sat.python.cp_model.Constraint at 0x7fe4a376fa90>
In [10]:
((((((B + E) + A) + T) + L) + E) + S) == 52
(((((((C + O) + L) + D) + P) + L) + A) + Y) == 62
(((((((((D + E) + E) + P) + P) + U) + R) + P) + L) + E) == 27
((((((((((D + I) + R) + E) + S) + T) + R) + A) + I) + T) + S) == 82
(((((E + A) + G) + L) + E) + S) == 29
((((((G + E) + N) + E) + S) + I) + S) == 47
(((((((((J + E) + T) + H) + R) + O) + T) + U) + L) + L) == 97
((((((((((L + E) + D) + Z) + E) + P) + P) + E) + L) + I) + N) == 55
((((((((((((L + Y) + N) + Y) + R) + D) + S) + K) + Y) + N) + Y) + R) + D) == 126
((((((((M + E) + T) + A) + L) + L) + I) + C) + A) == 87
((((((N + I) + R) + V) + A) + N) + A) == 75
((((O + A) + S) + I) + S) == 43
((((((((P + I) + N) + K) + F) + L) + O) + Y) + D) == 92
((((((((((((R + O) + L) + L) + I) + N) + G) + S) + T) + O) + N) + E) + S) == 103
((((((((((S + T) + E) + P) + P) + E) + N) + W) + O) + L) + F) == 91
(((S + T) + Y) + X) == 60
((((((((U + R) + I) + A) + H) + H) + E) + E) + P) == 78
(((((((V + A) + N) + H) + A) + L) + E) + N) == 88
Lösen
Status 4 ist "optimal", 3 wäre "infeasible"
In [11]:
4
In [12]:
In [13]:
Lösung
Für die Lösung übersetzen wir die Zahlen wieder zurück zu den Buchstaben. Dafür machen wir uns ein dictionary von den Lösungswert jedes Buchstabens zu dem Buchstaben (also das Invertierte!) ...
In [14]:
{8: 'A',
19: 'B',
16: 'C',
5: 'D',
1: 'E',
17: 'F',
9: 'G',
23: 'H',
10: 'I',
20: 'J',
18: 'K',
3: 'L',
25: 'M',
12: 'N',
11: 'O',
2: 'P',
24: 'Q',
4: 'R',
7: 'S',
13: 'T',
6: 'U',
21: 'V',
22: 'W',
26: 'X',
14: 'Y',
15: 'Z'}
In [15]:
{1: 'E',
2: 'P',
3: 'L',
4: 'R',
5: 'D',
6: 'U',
7: 'S',
8: 'A',
9: 'G',
10: 'I',
11: 'O',
12: 'N',
13: 'T',
14: 'Y',
15: 'Z',
16: 'C',
17: 'F',
18: 'K',
19: 'B',
20: 'J',
21: 'V',
22: 'W',
23: 'H',
24: 'Q',
25: 'M',
26: 'X'}
... und übersetzen die Zahlen
In [16]:
ROXY MUSIC