Definizione di funzione di Loss additiva

Viene creato un vettore di input input contenente due numeri casuali generati dalla funzione runif. In particolare, il primo numero (a cui corrisponde la variabile Malto) viene estratto casualmente tra 50 e 100, mentre il secondo (Luppolo) viene estratto casualmente tra 10 e 20.

Successivamente, viene chiamata la funzione birra tramite il vettore di input.

Infine, viene calcolata la somma degli elementi del vettore output, ovvero output[1] e output[2], il risultato viene assegnato alla variabile L che rappresenta la Loss Function additiva ipotizzata per il modello.

Viene inizializzato un dataframe df vuoto che si andrà a riempire con le iterazioni dell’algoritmo Random Search.

df=data.frame()
parametri<-c(input[1],input[2],output[1],output[2],L)
nomi_col<-c("Malto","Luppolo","Sodio","Potassio","L")
for (i in c(1:1000)){
  input1=c(runif(1,50,100),runif(1,10,20))
  output1=birra(input1)
  L1=output1[1]+output1[2]
  if (L1<L){
    input=input1
    output=output1
    L<-L1
    
  }
  parametri<-c(input[1],input[2],output[1],output[2],L)
  df=rbind(df,parametri)
}
colnames(df)=nomi_col

In questo codice viene eseguito un ciclo for di 1.000 iterazioni, seguendo i passi dell’algoritmo Random Blind Search, in cui la funzione birra viene chiamata ripetutamente con input casuali che vengono aggiornati ad ogni passo.

Ad ogni iterazione viene generata una nuova loss function L che viene confrontato con il valore precedente. Se il nuovo valore della L è migliore del precedente, allora i parametri vengono aggiornati e il processo continua fino a raggiungere le 1.000 iterazioni.

DataFrame risultante

Statistiche di sintesi

summary(df) 
##      Malto          Luppolo          Sodio          Potassio    
##  Min.   :55.59   Min.   :10.24   Min.   :3.504   Min.   :26.35  
##  1st Qu.:55.59   1st Qu.:11.13   1st Qu.:3.504   1st Qu.:26.35  
##  Median :55.59   Median :11.13   Median :3.504   Median :26.35  
##  Mean   :66.17   Mean   :11.09   Mean   :3.716   Mean   :26.45  
##  3rd Qu.:74.63   3rd Qu.:11.13   3rd Qu.:3.826   3rd Qu.:26.43  
##  Max.   :98.24   Max.   :12.40   Max.   :4.448   Max.   :27.78  
##        L        
##  Min.   :29.86  
##  1st Qu.:29.86  
##  Median :29.86  
##  Mean   :30.17  
##  3rd Qu.:30.50  
##  Max.   :31.51

Valore di ottimo

tail(df,n=1)
##         Malto  Luppolo   Sodio Potassio        L
## 1000 55.58585 11.13341 3.50404  26.3514 29.85544

Grafico della funzione

plot(df$L,type="h",col="darkblue",main="Funzione di Loss",xlab="Iterazioni",ylab="Sodio+Potassio")