Modello di Ottimizzazione

Messaggioda Pessima_Scelta » 10/01/2020, 10:58

Ciao a tutti,

Volevo condividere con voi un problema pratico che ho riscontrato nella produzione di birra artigianale.
In pratica, per ogni stile di birra (es: pils, IPA, stout etc...) esiste un profilo di acqua idoneo a quel determinato stile di birra. Viene definito come profilo il numero di parti per milione (ppm) dei seguenti ioni disciolti nell'acqua

Ca2+
Mg2+
Na+
Cl-
SO42-
HCO3-

Io sono in possesso di tutti i profili target delle acque ed un database contenente i profili delle acque minerali in commercio in Italia. La mia domanda è questa: esiste un algoritmo che mi permetta di creare un mix con un numero predefinito di acque minerali (es: 2/3/4 tipi di acqua differente) che più si avvicini al profilo target? Tale algoritmo può essere implementato su Excel?

Ho provato a rispolverare gli appunti di ricerca operativa ed AMPL ma con scarsi risultati

Birretta offerta a chi mi darà una mano :DDD
Pessima_Scelta
Starting Member
Starting Member
 
Messaggio: 1 di 10
Iscritto il: 10/01/2020, 10:34

Re: Modello di Ottimizzazione

Messaggioda Bokonon » 15/01/2020, 16:05

Il metodo più semplice è trovare 6 acque minerali e infilare i profili in 6 colonne per ottenere una matrice quadrata A (6x6). Cercane 6 che siano il più possibile differenti (tipo una che praticamente 0 dei primi tre ioni e tanto dei rimanenti tre. Poi una seconda che sia l'opposto). Insomma, quando calcolerai il determinante della matrice https://matrixcalc.org/en/ usa delle frazioni e fa in modo he sia il più possibile diverso da zero.
Una volta trovata A dovrai solo risolvere il sistema $Ax=b$ dove b è un profilo ideale di acqua per una birra.
Troverai un'unica soluzione $x=<x_1,x_2,x_3,x_4,x_5,x_6>$
$x_1$ ti da la proporzione di acqua da prendere dalla prima acqua minerale/colonna
$x_2$ ti da la proporzione di acqua da prendere dalla seconda acqua minerale/colonna
e così via.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1925 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Modello di Ottimizzazione

Messaggioda Pessima_Scelta » 15/01/2020, 16:25

Grazie mille per la risposta.

Il problema che il DB delle mie acque minerali è di circa 250 acque differenti :lol: :lol: :lol:

Ci sarebbe uno strumento automatizzato tipo Excel, AMPL o altri?
Pessima_Scelta
Starting Member
Starting Member
 
Messaggio: 4 di 10
Iscritto il: 10/01/2020, 10:34

Re: Modello di Ottimizzazione

Messaggioda Bokonon » 16/01/2020, 00:19

Beh un modo ci sarebbe ma francamente non credo ne valga la pena. Scegline 6 che non siano "simili" a coppie e andranno benissimo.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1935 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Modello di Ottimizzazione

Messaggioda Pessima_Scelta » 16/01/2020, 12:17

Grazie mille!

Sarei curioso anche di sapere quale sia il metodo per usare tutto il DB: normalizzare la matrice per farla diventare quadrata?
Pessima_Scelta
Starting Member
Starting Member
 
Messaggio: 5 di 10
Iscritto il: 10/01/2020, 10:34

Re: Modello di Ottimizzazione

Messaggioda Bokonon » 16/01/2020, 17:30

Oh no, ti bastano 6 acque minerali e quindi una matrice 6x6 per ottenere il risultato voluto.

E' la scelta di 6 fra le 250 acque minerale che è interessante. E credo di aver trovato un modo "semplice" per selezionarle.
In pratica crei la matrice in excel di 250 colonne (che forse hai già creato). Quindi avrai una matrice 250x6.
Poi calcoli la media aritmetica delle sei righe e la sottrai da ogni singolo valore della rispettiva riga (così sposti i baricentri a zero e otterrai anche valori negativi). Chiamiamo il risultato di questa operazione matrice A.

Crei la trasposta $A^T$ (6x250) e poi fai il prodotto matriciale $A*A^T=B$
B è una matrice simmetrica di dimensioni 250x250, ed la matrice di devianza e codevianza. Gli elementi che stanno sulla diagonale sono le devianze e non ti interessano.
Ciò che ti interessa sono gli elementi al di fuori della diagonale, ovvero le codevianze fra diverse acque minerali.
Per esempio l'elemento $b_(ij)=b_(ji)$ è il prodotto scalare fra l'acqua nella colonna i-esima e l'acqua nella riga j-esima.
Tanto più $|b_(ij)|$ è piccolo (ovvero tanto più il valore assoluto della codevianza è piccola), tanto più le due acque tendono ad essere perpendicolari.
Quindi riordinando prima le colonne per valori crescenti (dopo averle etichettate e avendo cura di ordinare simultaneamente anche le etichette con le colonne) e successivamente le righe, troverai che la prima riga/acqua avrà i valori più piccoli con le prime colonne.

Dovrebbe funzionare bene.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1937 di 5942
Iscritto il: 25/05/2018, 20:22


Torna a Pensare un po' di più

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite