François Bergeret ha scritto:
Quarta strada per il gioco dei boulier
Ciao Lee,
JMP ha una funzionalità molto bella, le funzioni di desiderabilità, che possono anche essere utilizzate per risolvere il problema dei boulier.
- Creazione di un set di dati con 4 nuove colonne, una per colore, con dati casuali da una distribuzione normale: casuale Normale () * 3
- Creazione di 5 nuove variabili y, una per riga, da y1 a y5, con una formula per collegare i colori con la linea totale (ad es. Y1 = 5 nero + 5 nero ...)
- Creazione di 100.000 linee con dati casuali per i colori e risultati da y1 a y5
- Adattare un modello per y1 a y5, con colori come variabili esplicative
- L'enfasi nella piattaforma del modello Fit è lo screening degli effetti, quindi impostare la desiderabilità su un obiettivo di 12 per ogni y (desiderabilità = 1 quando y = 12, passando a 0 quando y è lontano da 12)
- La tolleranza di convergenza nelle opzioni di Massimizzazione è impostata su 1E-12 per ottenere risultati numerici esatti per il problema dei boulier (solo alcuni ms più lunghi)
- Massimizzare la desiderabilità dà: nero = 5, blu = 1, marrone = 3, rosso = 1,5
Dataset disponibile su richiesta
François Bergeret (dalla Francia)
Questo post sul blog è stato scritto da un blogger che non è più in SAS
I miei amici e colleghi mi conoscono come un piccolo francofono. Vado in Francia tutte le volte che posso. Attualmente sto lavorando a un master in materia presso la North Carolina State University. E accumulo tutti i giornali e le riviste francesi sui quali ho messo le mani.
Le Figaro è un quotidiano che aggiunge un supplemento, Le Figaro Magazine alla sua edizione del sabato. Lì troverai notizie sull'arte, editorialisti e il mio preferito: i giochi.
Sono costantemente stupito di come i francesi rendano i giochi semplicemente fuori da cose che consideriamo drammaticamente non divertenti. Ad esempio, uno dei giochi della rivista si riferisce a una lettera di Blaise Pascal a suo fratello, in cui devi (a) completare la lettera con 16 parole date; (b) correggere 16 errori di ortografia o lingua; e (c) trovare 15 anomalie, anacronismi o impossibilità storiche.
Uno dei giochi numero è saltato fuori (gioco di parole). Ecco il gioco che ho intenzione di risolvere usando JMP, nella sua forma originale.
[ Trova il valore di una palla di ogni colore, sapendo che il totale delle palle su una linea è sempre uguale a 12]
Ci sono almeno tre modi per risolvere questo problema - probabilmente di più, se pensassi a queste cose più a lungo di quanto non ci volesse mangiare un Happy Meal ™ da Chez McDo's.
Metodo 1: forza bruta
Un approccio molto brusco è quello di scorrere tutti i possibili colori ( rosso = x , marrone = y , nero = z. blu = w ) riconoscendo che non possono essere inferiori a zero né superiori a 12. Ecco uno script JMP che fa ciò: Four For loop che cicla ogni valore da 0 a 12 in step di 0.5. Quando raggiunge un risultato, scrive il risultato nel log.
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 );
)
)
)
)
)
)
)
)
)
I risultati? rosso = 1.5 , marrone = 3 , nero = 5. blu = 1
Metodo 2: minimi quadrati
Il prossimo passo è riconoscere questo come un problema dei minimi quadrati. Il valore attribuito alle palle sono i coefficienti di un modello lineare, con le palle stesse che servono come dati. Quindi, posso creare una tabella dati JMP che contenga le cinque righe e le informazioni sulle quattro sfere colorate. A titolo di:
E usando la finestra Fit Model di JMP, posso ottenere stime dei minimi quadrati sulle palle. Sto usando un modello senza intercettazione perché so che il modello lineare dovrebbe passare attraverso l'origine.
Come quello ("Bam!", Dico a me stesso), ottengo i risultati e la risposta al puzzle.
Metodo 3. Usando la matematica
Se hai preso Algebra II negli ultimi 40 anni, hai studiato queste cose chiamate matrici. Risulta che sono effettivamente utili. E se non si riconosce il puzzle nel suo senso dei minimi quadrati, c'è sempre questo modo matematico di guardarlo. Non dirlo a nessuno, ma in realtà sono lo stesso approccio: la matematica che vedi qui sotto è ciò che accade dietro le quinte di JMP.
Se esprimi il set-up del puzzle usando matrici (cinque file che rappresentano le cinque file del puzzle), puoi avere il tavolo stesso rappresentato in questo modo (chiamalo UN ).
A = [0 0 2 2
0 2 1 1
2 3 0 0
0 1 1 4
4 0 1 1]
e il fatto che queste cinque condizioni siano tutte a 12, rappresentate come
C = [12
12
12
12
12]
con una matrice finale B rappresenta le incognite: il valore delle palle.
b = [x
y
z
w]
Per risolvere questo, dobbiamo semplicemente iniziare
Ab = C
e prendi B da solo sul lato sinistro dell'equazione. In genere, faremmo la cosa semplice per moltiplicare entrambi i lati UN -1 , come questo:
UN -1 Ab = UN -1 C
Ma non sai che c'è un problema. Poiché il puzzle ha quattro variabili e cinque righe, la sua rappresentazione della matrice non è quadrata. Quindi non possiamo usare solo un inverso ordinario. Possiamo moltiplicare A per la sua trasposizione per ottenere una matrice quadrata, sebbene questo non sia ancora invertibile. Fortunatamente, JMP ha il Inondazione generalizzata di Moore-Penrose funzione (che suona meglio in corsivo, non credi?). Usandolo, posso scrivere un semplice script JMP per assegnare le matrici e risolvere il problema:
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;
dando il risultato (con errore di arrotondamento, suppongo nel delicato processo di inversione)
[1.5, 3, 5.00000000000001, 0.999999999999994]
La stessa risposta. E se gli errori di arrotondamento ti danno l'heeby-jeebys, puoi usare la funzione Risolvi di JMP.
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);