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.
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
tail(df,n=1)
## Malto Luppolo Sodio Potassio L
## 1000 55.58585 11.13341 3.50404 26.3514 29.85544
plot(df$L,type="h",col="darkblue",main="Funzione di Loss",xlab="Iterazioni",ylab="Sodio+Potassio")