def test_RNG_getter(self):
        # basically the same as the _init test, just performed another way
        # set seed to ensure known sequence
        np.random.seed(100)

        # initialize empty list for distributions
        valid = list()
        invalid = list()

        # The commented tests evaluate the additional functionality in my Distribution
        # class not required by the assignment.

        valid.append(Distribution('normal(100, 20)'))
        valid.append(Distribution('poisson(5)'))
        valid.append(Distribution('triangular(10, 20, 40)'))
        valid.append(Distribution('uniform(10,20)'))
        # valid.append(Distribution('lambda: np.random.normal(100,20)'))
        # valid.append(Distribution('lambda: 1'))
        # valid.append(Distribution(lambda: np.random.normal(100, 20)))
        # valid.append(Distribution(foo1))

        invalid.append(Distribution('nrml(100,20)'))
        # invalid.append(Distribution('lamda: np.random.normal(100,20'))
        # invalid.append(Distribution(foo2))

        for i in range(len(valid)):
            with self.subTest(i=i):
                self.assertFalse(valid[i].RNG is None)

        for i in range(len(invalid)):
            with self.subTest(i=i):
                self.assertTrue(invalid[i].RNG is None)
示例#2
0
    def test_init(self):
        # check a valid SourcePopulation instance
        self.assertTrue(isinstance(self.sp, SourcePopulation))
        self.assertTrue(isinstance(self.sp, SimulationStage))
        self.assertTrue(isinstance(self.sp._destination, dict))
        self.assertFalse(self.sp._arrivalTimeDistribution is None)
        self.assertFalse(self.sp._assignDestination is None)

        # now try  where the arrivalTimeDistribution is invalid
        dist = Distribution('nrml(100, 20)')
        sp = SourcePopulation("Source1", dist, Assigner().assignInSequence)
        self.assertTrue(sp._arrivalTimeDistribution is None)
        self.assertFalse(sp._assignDestination is None)

        # now try  where the assignDestination function is invalid
        dist = Distribution('normal(100, 20)')

        # invalid assignDestination function, no arguments
        sp = SourcePopulation("Source1", dist, lambda: 5)

        self.assertFalse(sp._arrivalTimeDistribution is None)
        self.assertTrue(sp._assignDestination is None)

        # invalid assignDestination function, too many arguments
        sp = SourcePopulation("Source1", dist, lambda x, y: 5)

        self.assertFalse(sp._arrivalTimeDistribution is None)
        self.assertTrue(sp._assignDestination is None)

        # invalid assignDestination function, not callable
        sp = SourcePopulation("Source1", dist, 5)

        self.assertFalse(sp._arrivalTimeDistribution is None)
        self.assertTrue(sp._assignDestination is None)
    def test_isValid(self):
        # set seed to ensure known sequence
        np.random.seed(100)

        # initialize empty list for distributions
        valid = list()
        invalid = list()

        # The commented tests evaluate additional functionality in my Distribution
        # class that is not required for the assignment.

        valid.append(Distribution('normal(100, 20)'))
        valid.append(Distribution('poisson(5)'))
        valid.append(Distribution('triangular(10, 20, 40)'))
        valid.append(Distribution('uniform(10,20)'))
        # valid.append(Distribution('lambda: np.random.normal(100,20)'))
        # valid.append(Distribution('lambda: 1'))
        # valid.append(Distribution(lambda: np.random.normal(100, 20)))
        # valid.append(Distribution(foo1))

        invalid.append(Distribution('nrml(100,20)'))
        # invalid.append(Distribution('lamda: np.random.normal(100,20'))
        # invalid.append(Distribution(foo2))

        for i in range(len(valid)):
            with self.subTest(i=i):
                self.assertTrue(valid[i].isValid())

        for i in range(len(invalid)):
            with self.subTest(i=i):
                self.assertFalse(invalid[i].isValid())
示例#4
0
    def test_isValid(self):
        # check SourcePopulation instance, invalid because it has no destinations
        self.assertFalse(self.sp.isValid())

        # now force it to be valid - make sure it has a destination
        dest = CustomerDestination('test_dest')
        self.sp._destination[dest.id] = dest
        self.assertTrue(self.sp.isValid())

        # now try  where the arrivalTimeDistribution is invalid
        dist = Distribution('nrml(100, 20)')
        sp = SourcePopulation("Source1", dist, Assigner().assignInSequence)
        sp._destination[dest.id] = dest
        self.assertFalse(sp.isValid())

        # now try  where the assignDestination function is invalid
        dist = Distribution('normal(100, 20)')

        # invalid assignDestination function, no arguments
        sp = SourcePopulation("Source1", dist, lambda: 5)
        sp._destination[dest.id] = dest
        self.assertFalse(sp.isValid())

        # invalid assignDestination function, too many arguments
        sp = SourcePopulation("Source1", dist, lambda x, y: 5)
        sp._destination[dest.id] = dest
        self.assertFalse(sp.isValid())

        # invalid assignDestination function, not callable
        sp = SourcePopulation("Source1", dist, 5)
        sp._destination[dest.id] = dest
        self.assertFalse(sp.isValid())
示例#5
0
    def setUp(self) -> None:
        np.random.seed(100)
        # first setup a queue
        self.testq = SimQueue('Q1', Assigner().assignInSequence)

        # then setup servers
        self.dist = {}
        self.dist['dt'] = Distribution("triangular(14400, 14400, 18000)")
        self.dist['oos'] = Distribution("triangular(300, 600, 1200)")
        self.dist['st'] = Distribution("exponential(1/300)")

        # uncomment to test validity of server construction
        # for k, v in self.dist.items():
        #     with self.subTest(dist=k):
        #         self.assertTrue(v.isValid())

        self.dist['invalid'] = Customer('teddy', 0)

        self.servers = [
            Server(f'Server{i}', 100 * i, self.dist['dt'], self.dist['oos'],
                   self.dist['st']) for i in range(1, 4)
        ]

        self.dest = [
            SimQueue(f'Queue{i}',
                     Assigner().assignInSequence) for i in range(1, 4)
        ]
        self.dest.append(SystemExit('Exit1'))

        self.cust = [Customer(f'Cust{i}', i * 100) for i in range(1, 11)]
示例#6
0
    def __init__(self, s, m, h):
        #init simulations
        self.mainArrDist = Distribution(stats.expon(scale=1/m))
        self.sideArrDist = Distribution(stats.expon(scale=1/s))

        self.s = s
        self.m = m
        self.h = h
    def setup_Figure2(self):
        np.random.seed(self.seed)

        assigner = Assigner()
        dist = dict()
        dist['ar'] = Distribution("exponential(180)")
        dist['dt'] = Distribution("triangular(14400, 14400, 18000)")
        dist['oos'] = Distribution("triangular(300, 600, 1200)")
        dist['st'] = Distribution("exponential(144)")

        # define 2 valid system exits
        for i in range(2):
            self._stages[f'SE{i}'] = SystemExit(f'SE{i}')

        # define one valid source populations
        self._stages['SP-PRE'] = SourcePopulation('SP-PRE', dist['ar'],
                                                  assigner.assignToShortest)

        # define the other valid source populations
        self._stages['SP-REG'] = SourcePopulation('SP-REG', dist['ar'],
                                                  assigner.assignToShortest)

        # define a valid one server per one queue for SP-PRE
        for i in range(3):
            self._stages[f'Q{i}'] = SimQueue(f'Q{i}',
                                             assigner.assignInSequence)
            self._stages[f'Q{i}'].addCustomerDestination(self._stages['SE0'])
            self._stages[f'Q{i}'].assignServer = assigner.assignByAvailableTime

            server = Server(f'Server{i}', 0, dist['dt'], dist['oos'],
                            dist['st'])
            self._stages[f'Q{i}'].addServer(server)

            self._stages['SP-PRE'].addCustomerDestination(
                self._stages[f'Q{i}'])

        # define a valid one server per one queue for SP-REG
        for i in range(3, 7):
            self._stages[f'Q{i}'] = SimQueue(f'Q{i}',
                                             assigner.assignInSequence)
            self._stages[f'Q{i}'].addCustomerDestination(self._stages['SE1'])
            self._stages[f'Q{i}'].assignServer = assigner.assignByAvailableTime

            server = Server(f'Server{i}', 0, dist['dt'], dist['oos'],
                            dist['st'])
            self._stages[f'Q{i}'].addServer(server)

            self._stages['SP-REG'].addCustomerDestination(
                self._stages[f'Q{i}'])
示例#8
0
def perform_eval(eid, data):
    global word_classifiers
    global relation_word_classifiers
    global results_outfile
    
    target_dist = Distribution(data['objects'])
    landmark_dist = Distribution(data['objects'])
    target = data['target']
    increment_data = []
    relation = None

    relation_is_negated = False
    inc = 1
    prev_rank = len(data['objects'])
    for w,tags in [(w['word'],w['tags']) for w in data['speech']]:
        utt = {}
        word = None
        c_rank = None
        relation_dist = None
        prepare_word(utt, w, tags)
        objects = data['objects']
        if 't' in utt:
            word = utt['t'][0]
            target_dist.update(logreg.classify(word, word_classifiers, objects))
        if 'l' in utt:
            word = utt['l'][0]
            landmark_dist.update(logreg.classify(word, word_classifiers, objects))
        if 'r' in utt:
            word = utt['r'][0]
            if relation is not None: relation += '_' + word 
            else: relation = word
        if 'r-' in utt:
            word = utt['r-'][0]
            if relation is not None: relation += '_' + word 
            else: relation = word
            relation_is_negated = True            
                
        if relation is not None: # indent this with above for loop to make it incremental
            tdist = target_dist.copy()
            ldist = landmark_dist.copy()
            relation_dist = apply_relation(tdist, ldist, relation, relation_is_negated, objects)
            
    if relation_dist is not None:      
        return relation_dist.rank(target)
    else:
        target_dist.normalise()
        return target_dist.rank(target) 
示例#9
0
    def setup_posterior_and_pf(self):

        # Sample the posterior
        post_samples, post_pf_samples = self.generate_posterior_samples()

        # Create a posterior distribution
        self.p_post = Distribution(samples=post_samples,
                                   rv_name=self.p_prior.rv_name,
                                   rv_transform=self.p_prior.rv_transform,
                                   label='Updated',
                                   kde=False)

        # Create the posterior push-forward distribution
        self.p_post_pf = Distribution(samples=post_pf_samples,
                                      rv_name=self.p_obs.rv_name,
                                      rv_transform=self.p_obs.rv_transform,
                                      label='PF Updated')
 def __init__(self, p, network):
     self.p = p
     self.network = network
     self.network_dicts = nx.convert.to_dict_of_dicts(
         self.network)  #convert to dictionaryform
     self.N = len(set(self.network_dicts.keys()))
     self.distr = Distribution(stats.bernoulli(self.p))
     print("transmission-probability: {}, populationsize: {}".format(
         self.p, self.N))
示例#11
0
    def setUp(self):
        dist = Distribution('triangular(10, 20, 40)')

        # SourcePopulation generates the first arrival time on construction
        # so we have to set the random number before creating the source population

        np.random.seed(100)
        self.sp = SourcePopulation("Source1", dist,
                                   Assigner().assignInSequence)
示例#12
0
    def setUp(self) -> None:
        self.dist = {}
        self.dist['dt'] = Distribution("triangular(14400, 14400, 18000)")
        self.dist['oos'] = Distribution("triangular(300, 600, 1200)")
        self.dist['st'] = Distribution("exponential(1/300)")

        # uncomment to test validity of server construction
        # for k, v in self.dist.items():
        #     with self.subTest(dist=k):
        #         self.assertTrue(v.isValid())

        self.dist['invalid'] = Customer('teddy', 0)

        self.server = Server('S1', 100,
                             self.dist['dt'],
                             self.dist['oos'],
                             self.dist['st']
                             )
示例#13
0
    def setUp(self) -> None:
        self.gen_setup = False
        self.sim = Simulation(100)

        rstate = np.random.get_state()

        self.assigner = Assigner()
        self.dist = {}
        self.dist['ar'] = Distribution("exponential(180)")
        self.dist['dt'] = Distribution("triangular(14400, 14400, 18000)")
        self.dist['oos'] = Distribution("triangular(300, 600, 1200)")
        # 144 second service time corresponds to 25 service completions per hour
        self.dist['st'] = Distribution("exponential(144)")

        np.random.set_state(rstate)

        self.stages = {}

        # define 2 valid system exits
        for i in range(2):
            self.stages[f'SE{i}'] = SystemExit(f'SE{i}')

        # define 2 valid source populations - destinations not yet assigned
        for i in range(2):
            # 180 second average inter-arrival time corresponds to 20 arrivals per hour
            self.stages[f'SP{i}'] = SourcePopulation(
                f'SP{i}', self.dist['ar'], self.assigner.assignToShortest)
            self.stages[f'SP{i}'].addCustomerDestination(self.stages[f'SE{i}'])
            # print(f"SP{i} arrival: {self.stages[f'SP{i}'].getNextEventTime()}")

        rstate = np.random.get_state()

        # define 4 valid queues (alternating system exits)
        for i in range(5):
            tqueue = SimQueue(f'Q{i}', self.assigner.assignInSequence)
            self.stages[f'Q{i}'] = tqueue

            server = self.server = Server(f'Server{i}', 0, self.dist['dt'],
                                          self.dist['oos'], self.dist['st'])
            tqueue.addServer(server)
            tqueue.addCustomerDestination(self.stages[f'SE{i % 2}'])
            tqueue.assignServer = self.assigner.assignByAvailableTime

        np.random.set_state(rstate)
    def test_init(self):
        # set seed to ensure known sequence
        np.random.seed(100)

        # initialize empty list for distributions
        valid = list()
        invalid = list()

        # test construction.
        # I made my Distribution class more flexible than the assignment requires.
        # This provides additional flexibility on how I can create distributions.
        # The commented tests evaluate the additional functionality in my Distribution
        # class.

        valid.append(Distribution('normal(100, 20)'))
        valid.append(Distribution('poisson(5)'))
        valid.append(Distribution('triangular(10, 20, 40)'))
        valid.append(Distribution('uniform(10,20)'))
        # valid.append(Distribution('lambda: np.random.normal(100,20)'))
        # valid.append(Distribution('lambda: 1'))
        # valid.append(Distribution(lambda: np.random.normal(100, 20)))
        # valid.append(Distribution(foo1))

        # I also wrote my Distribution class to cleanly handle erroneous
        # distribution specifications and produce an "invalid" Distribution
        # instance rather than crashing with an exception. However, I did
        # not require this level of advanced functionality in your class.
        # The commented tests below relate to testing this additional functionality.

        invalid.append(Distribution('nrml(100,20)'))
        # invalid.append(Distribution('lamda: np.random.normal(100,20'))
        # invalid.append(Distribution(foo2))

        # test construction of VALID Distributions
        for i in range(len(valid)):
            with self.subTest(i=i):
                self.assertFalse(valid[i]._RNG is None)
                self.assertTrue(isinstance(valid[i].__repr__(), str))
                self.assertTrue(isinstance(valid[i].__str__(), str))

        # test construction of INVALID Distributions
        for i in range(len(invalid)):
            with self.subTest(i=i):
                self.assertTrue(invalid[i]._RNG is None)
    async def load(cls, descriptor, content):
        descriptor.icon = content[0][0]
        descriptor.datea = content[0][1]

        for i in range(1,len(content)):
            distributionid = content[i][0].split(" ")
            if len(distributionid) > 1:
                distribution = Distribution(distributionid[1])
                descriptor.distributions[content[i][0][0]] = distribution
                await Distribution.load(distribution, content[i][1:])
示例#16
0
 def dataset(self):
     dl = Distribution([1, 0], [
         self.probiablity,
     ])
     v = dl.generator(len(self.dset))
     m = []
     for i in range(len(self.dset)):
         if v[i] == 1:
             m.append(self.dset)
     return m
示例#17
0
    def set_mortality(self, data):
        print("Fitting mortality distribution")
        mortality_data = list(data.values())
        r = []
        for i in range(len(mortality_data)):
            deaths = mortality_data[i]
            for _ in range(deaths):
                r.append(i)

        dist = Distribution()
        dist.Fit(r)

        self.mortality_distribution = dist
示例#18
0
    def create_from_bucket(col_name, buckets):
        b = {}
        for val in buckets:
            if 'grades' not in buckets[val]:
                b[val] = buckets[val]
                continue
            grades = []
            for g in buckets[val]['grades']:
                a = np.array([])
                for split in g['split_count']:
                    a = np.append(a, split)
                grades.append(Distribution(a))

            salaries = []
            for s in buckets[val]['salaries']:
                a = np.array([])
                for split in s['split_count']:
                    a = np.append(a, split)
                salaries.append(Distribution(a))

            b[val] = Bucket(col_name, val, grades, salaries)
        return b
示例#19
0
 def set_migrations(self, data):
     print("Fitting migration distribution")
     
     r = []
     for i in range(len(data)):
         num = data[i]
         for _ in range(num):
             r.append(i)
             
     dist = Distribution()
     dist.min_val = 0
     dist.max_val = len(data) - 1
     dist.Fit(r)
     
     self.migrations_distribution = dist
示例#20
0
    def set_natality(self, data):
        print("Fitting natality distribution")
        data.pop('total_births', None)
        
        r = []
        for i in range(len(data)):
            key = list(data.keys())[i]
            num = int(data[key])
            for _ in range(num):
                r.append(i)

        dist = Distribution()
        dist.Fit(r)
        
        self.natality_distribution = dist
示例#21
0
    def test_oosDistribution(self):
        np.random.seed(100)
        expected = self.dist['oos'].getEvent()

        np.random.seed(100)
        actual = self.server._oosDistribution.getEvent()
        self.assertAlmostEqual(expected, actual)

        # replace the downtime distribution and check
        np.random.seed(200)
        expected = np.random.normal(100, 30)

        np.random.seed(200)
        self.server.oosDistribution = Distribution("normal(100,30)")
        actual = self.server._oosDistribution.getEvent()
        self.assertAlmostEqual(expected, actual)
示例#22
0
def readDistributions(iFilename):
    """Read JSON file *iFileName* and return its list of distributions."""
    try:
        file = open(iFilename)
    except IOError:
        print('Cannot open file : ', iFilename)
        exit()

    n = 1
    lDistList = []
    for lDist in json.load(file):
        lDistList.append(Distribution(lDist, n))
        n += 1

    if gAbort: exit()

    return lDistList
 async def appendfrom(self, content, i):
     distribution = None
     while i < len(content):
         if await is_emoji(content[i][0]):
             if distribution:
                 await Distribution.load(distribution, content[start:i])
             if content[i][0] in self.distributions:
                 distribution = self.distributions[content[i][0]]
             else:
                 distributionid = content[i].split(" ")
                 if len(distributionid) > 1:
                     distribution = Distribution(distributionid[1])
                     self.distributions[content[i][0]] = distribution
             start = i+1
         i += 1
     if distribution:
         await Distribution.load(distribution, content[start:i])
示例#24
0
    def init(self):
        self.cfg = RebuilddConfig()

        # Init log system
        RebuilddLog()

        self._sqlconnection = sqlobject.connectionForURI(
            self.cfg.get('build', 'database_uri'))
        sqlobject.sqlhub.processConnection = self._sqlconnection

        # Create distributions
        for dist in self.cfg.get('build', 'dists').split(' '):
            for arch in self.cfg.arch:
                Dists().add_dist(Distribution(dist, arch))

        self.do_quit = threading.Event()
        self.jobs_locker = threading.Lock()
        self.job_finished = threading.Event()
示例#25
0
    def test_setArrivalTimeDistribution(self):
        # save the state, Distribution will have generated it's first RV
        rstate = np.random.get_state()

        # add a valid destination to the SourcePopulation
        dest = SimQueue('test_dest', Assigner().assignInSequence)
        self.sp.addCustomerDestination(dest)

        # set seed and generate expected results
        np.random.seed(100)
        expected = list(np.cumsum(np.random.triangular(10, 20, 40, 10)))
        print(f'expected near line {sys._getframe().f_lineno}: {expected}')

        # reset state and generate test values
        np.random.set_state(rstate)
        actual = list()

        for i in range(10):
            with self.subTest(i=i):
                actual.append(self.sp.getNextEventTime())
                self.sp.processEvent(self.sp.getNextEventTime())
                self.assertAlmostEqual(expected[i], actual[i])

        # capture seed state
        rstate = np.random.get_state()
        temp = np.zeros(10)
        temp[1:10] = np.random.uniform(10, 20, 9)
        expected = self.sp.getNextEventTime() + np.cumsum(temp)
        print(f'expected near line {sys._getframe().f_lineno}: {expected}')

        # restore the random state
        np.random.set_state(rstate)
        self.sp.setArrivalTimeDistribution(Distribution("uniform(10, 20)"))

        # reset state and generate test values
        np.random.set_state(rstate)
        actual = list()

        for i in range(10):
            with self.subTest(i=i):
                actual.append(self.sp.getNextEventTime())
                self.sp.processEvent(self.sp.getNextEventTime())
                self.assertAlmostEqual(expected[i], actual[i])
    def test_getEvent(self):
        # create distribution instance, normal distribution with mean 100, std 20
        dist1 = Distribution('normal(100, 20, 1)')

        # the seed must be set AFTER creating the Distribution instances, because
        # the constructor invokes the RNG function one time to validate that it
        # can be called.

        np.random.seed(100)

        expected = [
            65.00469054, 106.85360807, 123.06071605, 94.95127927, 119.62641574,
            110.28437683, 104.42359338, 78.59913339, 96.21008338, 105.10002889
        ]

        for i in range(0, 10):
            with self.subTest(i=i):
                actual = dist1.getEvent()
                self.assertAlmostEqual(expected[i], actual)
示例#27
0
def apply_relation(target_dist, landmark_dist, relation, negated, objects):
    global relation_word_classifiers
    if relation  not in relation_word_classifiers: 
        relation = "UNK_REL"
        negated = False
        
    combined = Distribution()
    for t in objects:
        for l in objects:
            if t == l: continue
            if negated:
                features = get_relational_features(objects[l], objects[t])
            else:
                features = get_relational_features(objects[t], objects[l])
                
            p = logreg.classify_obj(relation, relation_word_classifiers, features.values())
            combined.add(make_id(t,l), target_dist.get(t) * landmark_dist.get(l) * p)    
            
    combined.marginalise()
    return combined
    def __init__(self, samples_x_y: SamplesXY,
                 shared_combined_sample: CombinedSample):
        self.shared_combined_sample = shared_combined_sample
        self.shared_combined_sample_size = self.shared_combined_sample.combined_sample_size
        self.sample_size_y = samples_x_y.sample_size_y
        self.sample_size_x = self.shared_combined_sample_size - self.sample_size_y
        self.sample_size_x_y_gcd = gcd(self.sample_size_x, self.sample_size_y)
        self.test_statistic_factor = self.sample_size_x * self.sample_size_y / self.sample_size_x_y_gcd
        self.test_statistic_factor_approximate = self.sample_size_x_y_gcd / \
                                 sqrt(self.sample_size_x * self.sample_size_y * self.shared_combined_sample_size)
        self.algorithm = CountAlgorithm()
        self.combined_sample_counts = []
        self.x_meshing_cdf = []
        self.y_meshing_cdf = []
        self.max_cumulative_difference = 0
        self.meshing_test_statistic = 0
        self.y_item_positions = []
        self.number_of_y_item_positions = 0
        self.combined_sample_attributions_cache = []

        self.distribution = Distribution()
示例#29
0
 def __getdistributions(self):
     distributions = self.__doc.getElementsByTagName("distributions")
     distribution = distributions[0].getElementsByTagName("distribution")
     output = []
     retester = re.compile('\(([^)]+)\)')
     for x in distribution:
         completestring = x.getAttribute("type")
         auxiliarstring = retester.search(completestring)
         params = None
         if (auxiliarstring != None):
             params = auxiliarstring.group(0)[1:-1]
             firstbrack = auxiliarstring.regs[0][0]
             name = completestring[0:firstbrack]
         else:
             name = completestring
         classesids = []
         for classaux in x.getElementsByTagName("class"):
             classesids.append(int(classaux.getAttribute("id"), 10))
         reqpen = x.getAttribute("required")
         if (reqpen == ''):
             reqpen = int(x.getAttribute("penalty"), 10)
         output.append(Distribution(name, params, classesids, reqpen))
     return output
 def set_simulation_distributions(self):
     """
     Método de clase
     Se inicializan cada una de las simulaciones y sus respectivos parámetros
     """
     # Se crea un diccionario para manejar los identificadores de cada distribución
     distribution_dictionary = {
         1: "Direct",
         2: "TLC",
         3: "Uniform",
         4: "Exponential",
         5: "Density"
     }
     # Se realiza la solicitud de los datos de cada una de las 6 distribuciones
     for i in range(6):
         dist = Distribution()
         # Se pregunta cual distribución desa asignar a la distribución de la simulación: D_i
         option = self.interface.ask_distribution("D" + str(i + 1))
         # Según la distribución señalada entonces se asígna el identificador
         dist.id = distribution_dictionary[option]
         # Se piden los parámetros que necesita la distribución elegida
         self.set_dist_parameters(dist)
         # Agrega la distribución al diccionario de distribuciones en su ubicación asociada
         self.distribution_list["D" + str(i + 1)] = dist