Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        public Coordinate Genera(string codiceUO)
        {
            if (this.statistiche.ContainsKey(codiceUO))
            {
                var statistiche  = this.statistiche[codiceUO];
                var gaussianaLat = new Gaussiana((float)statistiche.AvgLat, (float)statistiche.StDevLat);
                var gaussianaLon = new Gaussiana((float)statistiche.AvgLon, (float)statistiche.StDevLon);

                return(new Coordinate(gaussianaLat.Genera(), gaussianaLon.Genera()));
            }

            return(new Coordinate(Math.Round(faker.Random.Double(0.0, 1) * 0.03 + 41.850, 6), Math.Round(faker.Random.Double(0.0, 1) * 0.12 + 12.450, 6)));
        }