François Bergeret schrieb:
Vierter Weg zum Boulierspiel
Hi Lee,
JMP hat eine sehr schöne Funktion, die Wünschbarkeitsfunktionen, die auch zur Lösung des Bouli-Problems verwendet werden können.
- Erstellen eines Datensatzes mit 4 neuen Spalten (eine pro Farbe) mit zufälligen Daten aus einer Normalverteilung: Random Normal () * 3
- Erstellen von 5 neuen Variablen y, eine pro Zeile, y1 bis y5, mit einer Formel, um die Farben mit der Zeilensumme zu verknüpfen (z. B. y1 = 5schwarz + 5blau ...)
- Erstellen von 100 000 Zeilen mit Zufallsdaten für Farben und Ergebnisse von y1 bis y5
- Anpassung eines Modells für y1 bis y5 mit Farben als erklärende Variablen
- Hervorhebung in der Fit-Modellplattform ist das Effekt-Screening. Dann wird die gewünschte Attraktivität für jedes y auf 12 gesetzt (die gewünschte Attraktivität ist 1, wenn y = 12, geht sie auf 0, wenn y weit von 12 entfernt ist)
- Die Konvergenztoleranz in den Maximierungsoptionen ist auf 1E-12 eingestellt, um genaue numerische Ergebnisse für das Boulier-Problem zu erhalten (nur wenige ms länger).
- Maximale Erwünschtheit ergibt: Schwarz = 5, Blau = 1, Braun = 3, Rot = 1,5
Datensatz auf Anfrage erhältlich
François Bergeret (aus Frankreich)
Dieser Blogbeitrag wurde von einem Blogger verfasst, der nicht mehr bei SAS ist
Meine Freunde und Mitarbeiter kennen mich als den ganz kleinen Frankophonen. Ich reise so oft ich kann nach Frankreich. Ich arbeite derzeit an einem Master-Abschluss in diesem Fach an der North Carolina State University. Und ich horte jede französische Zeitung und Zeitschrift, die ich in die Hände bekomme.
Le figaro ist eine Tageszeitung, die eine Ergänzung hinzufügt, Le Figaro Magazine zu seiner Samstagsausgabe. Dort finden Sie Kunstnachrichten, Kolumnisten und meine Lieblingsspiele.
Ich bin immer wieder erstaunt darüber, wie die Franzosen Spiele einfach aus Dingen machen, die wir für dramatisch unspaßig halten. Zum Beispiel bezieht sich eines der Spiele in der Zeitschrift auf einen Brief von Blaise Pascal an seinen Bruder, in dem Sie (a) den Brief mit 16 vorgegebenen Wörtern vervollständigen müssen; (b) 16 Rechtschreib- oder Sprachfehler korrigieren; und (c) 15 Anomalien, Anachronismen oder historische Unmöglichkeiten finden.
Eines der Zahlenspiele sprang auf mich los (Wortspiel beabsichtigt). Hier ist das Spiel, das ich mit JMP in seiner ursprünglichen Form lösen werde.
[ Finden Sie den Wert eines Balls jeder Farbe, wobei Sie wissen, dass die Summe der Bälle auf einer Linie immer gleich 12 ist.]
Es gibt mindestens drei Möglichkeiten, dies zu lösen - wahrscheinlich mehr, wenn ich länger über diese Dinge nachdachte, als ich brauchte, um bei Chez McDo's ein Happy Meal ™ zu essen.
Methode 1: Brute Force
Ein sehr brachialer Ansatz besteht darin, alle möglichen Farben durchzugehen ( rot = x , braun = y schwarz = z. blau = w ) zu erkennen, dass sie nicht kleiner als Null und nicht größer als 12 sein dürfen. Hier ist ein JMP-Skript, das das macht: Vier For-Schleifen, die jeden Wert von 0 bis 12 in Schritten von 0,5 durchlaufen. Wenn es auf ein Ergebnis trifft, schreibt es das Ergebnis in das Protokoll.
For( x = 1, x <= 12, x += 0.5,
For( y = 1, y <= 12, y += 0.5,
For( z = 1, z <= 12, z += 0.5,
For( w = 1, w <= 12, w += 0.5,
If( 2 * z + 2 * w == 12,
If( z + 2 * y + w == 12,
If( 3 * y + 2 * x == 12,
If( z + y + 4 * w == 12,
If( z + w + 4 * x == 12,
Show( x, y, z, w );
)
)
)
)
)
)
)
)
)
Die Ergebnisse? rot = 1,5 , braun = 3 schwarz = 5. blau = 1
Methode 2: Kleinste Quadrate
Der nächste Weg besteht darin, dies als Problem der kleinsten Fehlerquadrate zu erkennen. Der an die Kugeln gebundene Wert sind die Koeffizienten eines linearen Modells, wobei die Kugeln selbst als Daten dienen. So kann ich eine JMP-Datentabelle erstellen, die die fünf Zeilen und Informationen zu den vier farbigen Kugeln enthält. Nämlich:
Und mit dem Fenster Fit Model von JMP kann ich die kleinsten Quadrate der Bälle schätzen. Ich verwende ein No-Intercept-Modell, weil ich weiß, dass das lineare Modell den Ursprung durchlaufen sollte.
So ("Bam!", Sage ich mir) bekomme ich die Ergebnisse und die Antwort auf das Rätsel.
Methode 3. Mathe benutzen
Wenn Sie in den letzten 40 Jahren Algebra II eingenommen haben, haben Sie diese so genannten Matrizen untersucht. Es stellt sich heraus, dass sie tatsächlich nützlich sind. Und wenn Sie das Rätsel nicht im Sinne der kleinsten Quadrate erkennen, gibt es immer diese mathematische Betrachtungsweise. Erzählen Sie es niemandem, aber es ist im Grunde derselbe Ansatz: Die unten dargestellte Mathematik zeigt, was sich hinter den Kulissen von JMP abspielt.
Wenn Sie den Puzzle-Aufbau mit Matrizen ausdrücken (fünf Zeilen stehen für die fünf Zeilen des Puzzles), können Sie die Tabelle selbst so darstellen lassen (nennen Sie sie EIN ).
A = [0 0 2 2
0 2 1 1
2 3 0 0
0 1 1 4
4 0 1 1]
und die Tatsache, dass diese fünf Bedingungen insgesamt 12 ergeben, dargestellt als
C = [12
12
12
12
12]
mit einer endgültigen Matrix b Repräsentation der Unbekannten: der Wert der Bälle.
b = [x
y
z
w]
Um dies zu lösen, müssen wir einfach anfangen
Ab = C
und bekomme b allein auf der linken Seite der Gleichung. Normalerweise multiplizieren wir beide Seiten mit EIN -1 , so was:
EIN -1 Ab = EIN -1 C
Aber weißt du nicht, dass es ein Problem gibt? Da das Puzzle vier Variablen und fünf Zeilen enthält, ist seine Matrixdarstellung nicht quadratisch. Wir können also nicht einfach eine gewöhnliche Inverse verwenden. Wir können A mit seiner Transponierung multiplizieren, um eine quadratische Matrix zu erhalten, obwohl dies immer noch nicht invertierbar ist. Zum Glück hat JMP die Moore-Penrose verallgemeinertes Inverse Funktion (was klingt besser in Kursivschrift, finden Sie nicht?). Damit kann ich ein einfaches JMP-Skript schreiben, um die Matrizen zuzuweisen und das Problem zu lösen:
A = [ 0 0 2 2, 0 2 1 1, 2 3 0 0, 0 1 1 4, 4 0 1 1];
C = [12, 12, 12, 12, 12];
ginverse(A`*A)*A`*C;
Angabe des Ergebnisses (bei Rundungsfehlern nehme ich an, bei dem heiklen Inversionsprozess)
[1.5, 3, 5.00000000000001, 0.999999999999994]
Die gleiche Antwort. Und wenn die Rundungsfehler die Heeby-Jeebys ergeben, können Sie stattdessen die JMP-Solve-Funktion verwenden.
A = [ 0 0 2 2, 0 2 1 1, 2 3 0 0, 0 1 1 4, 4 0 1 1];
C = [12, 12, 12, 12, 12];
solve((A`*A),A`*C);