/// <summary> /// Genera un'istanza della classe in modo casuale /// </summary> /// <param name="partenzaImmediata"> /// Indica se la partenza deve essere immediata, oppure se è un mezzo inviato in seguito /// alla richiesta /// </param> /// <param name="secondiPartenzeSuccessive"> /// Gaussiana per la generazione del tempo dopo il quale vengono inviate le partenza /// successive alla prima /// </param> /// <param name="secondiArrivoSulPosto"> /// Gaussiana per la generazione del tempo di viaggio verso il luogo del sinistro /// </param> /// <param name="secondiPermanenzaSulPosto"> /// Gaussiana per la generazione del tempo di permanenza del mezzo sul posto /// </param> /// <param name="secondiInRientro"> /// Gaussiana per la generazione del tempo di viaggio dal luogo del sinistro verso la sede /// (sempre che il mezzo non venga rediretto su altra richiesta) /// </param> /// <returns>L'istanza casuale creata</returns> internal static ParametriMezzo GenerateFake( bool partenzaImmediata, Gaussiana secondiPartenzeSuccessive, Gaussiana secondiArrivoSulPosto, Gaussiana secondiPermanenzaSulPosto, Gaussiana secondiInRientro) { partenzaImmediata = partenzaImmediata || FAKER.Random.Number(1, 100) < 90; var parametri = new ParametriMezzo(); if (partenzaImmediata) { parametri.SecondiComposizione = (int)new Gaussiana(60, 20).Genera(); } else { parametri.SecondiComposizione = (int)secondiPartenzeSuccessive.Genera(); } parametri.SecondiArrivoSulPosto = (int)secondiArrivoSulPosto.Genera(); parametri.SecondiPermanenzaSulPosto = (int)secondiPermanenzaSulPosto.Genera(); parametri.SecondiInRientro = (int)secondiInRientro.Genera(); return(parametri); }
/// <summary> /// Metodo per la generazione di parametri di una richiesta fake /// </summary> /// <param name="dataMin"> /// L'estremo inferiore dell'intervallo in cui le richieste possono essere generate /// </param> /// <param name="dataMax"> /// L'estremo superiore dell'intervallo in cui le richieste possono essere generate /// </param> /// <param name="pesiNumeroMezziPartecipanti"> /// Pesi del numero di mezzi partecipanti ad un intervento (per es. se i pesi sono[0.75, /// 0.20, 0.05] significa che al 75% un intervento ha un solo mezzo, al 20% ne ha due, al /// 5% ne ha tre). /// </param> /// <param name="secondiPartenzeSuccessive"> /// Gaussiana per la generazione del tempo dopo il quale vengono inviate le partenza /// successive alla prima /// </param> /// <param name="secondiArrivoSulPosto"> /// Gaussiana per la generazione del tempo di viaggio verso il luogo del sinistro /// </param> /// <param name="secondiPermanenzaSulPosto"> /// Gaussiana per la generazione del tempo di permanenza del mezzo sul posto /// </param> /// <param name="secondiInRientro"> /// Gaussiana per la generazione del tempo di viaggio dal luogo del sinistro verso la sede /// (sempre che il mezzo non venga rediretto su altra richiesta) /// </param> /// <returns>L'istanza fake creata</returns> public static ParametriRichiesta GetParametriFake( DateTime dataMin, DateTime dataMax, float[] pesiNumeroMezziPartecipanti, Gaussiana secondiPartenzeSuccessive, Gaussiana secondiArrivoSulPosto, Gaussiana secondiPermanenzaSulPosto, Gaussiana secondiInRientro) { var numeroMezzi = FAKER.Random.WeightedRandom(Enumerable.Range(1, pesiNumeroMezziPartecipanti.Length).ToArray(), pesiNumeroMezziPartecipanti); var dataSegnalazione = FAKER.Date.Between(dataMin, dataMax); var parametriRichiesta = new ParametriRichiesta() { DataSegnalazione = dataSegnalazione, ParametriMezzi = Enumerable.Range(1, numeroMezzi) .Select(i => ParametriMezzo.GenerateFake( i == 1, // la prima partenza è sempre immediata secondiPartenzeSuccessive, secondiArrivoSulPosto, secondiPermanenzaSulPosto, secondiInRientro)) .OrderBy(p => p.SecondiComposizione) .ToArray() }; return(parametriRichiesta); }