Example #1
0
def greedy_allocation3(parameters):
    """
    Greedy heuristic for 3 supplier (the same as heu_allocation3 but with different parameters)
    Does not write on the file but returns the solution
    :param df: dataframe containing the data from the excel file
    :param parameters: parameters dict
    :return: write o the df and save on the file
    """
    if not parameters['distribution']:
        print 'No distribution set...abort'
        exit(1)
    elif parameters['distribution'] == 'truncnorm':
        rv1 = truncnorm_custom(parameters['min_intrv1'], parameters['max_intrv1'], parameters['mu1'], parameters['sigma1'])
        rv2 = truncnorm_custom(parameters['min_intrv2'], parameters['max_intrv2'], parameters['mu2'], parameters['sigma2'])
        rv3 = truncnorm_custom(parameters['min_intrv3'], parameters['max_intrv3'], parameters['mu3'], parameters['sigma3'])
    elif parameters['distribution'] == 'norm':
        rv1 = norm(parameters['mu1'], parameters['sigma1'])
        rv2 = norm(parameters['mu2'], parameters['sigma2'])
        rv3 = norm(parameters['mu3'], parameters['sigma3'])
    elif parameters['distribution'] == 'uniform':
        rv1 = uniform(loc=parameters['mu1'], scale=parameters['sigma1'])
        rv2 = uniform(loc=parameters['mu2'], scale=parameters['sigma2'])
        rv3 = uniform(loc=parameters['mu3'], scale=parameters['sigma3'])
    elif parameters['distribution'] == 'beta':
        rv1 = beta(a=parameters['min_intrv1'], b=parameters['max_intrv1'], loc=parameters['mu1'], scale=parameters['sigma1'])
        rv2 = beta(a=parameters['min_intrv2'], b=parameters['max_intrv2'], loc=parameters['mu2'], scale=parameters['sigma2'])
        rv3 = beta(a=parameters['min_intrv3'], b=parameters['max_intrv3'], loc=parameters['mu3'], scale=parameters['sigma3'])
    elif parameters['distribution'] == 'triang':
        rv1 = triang(loc=parameters['min_intrv1'], scale=parameters['max_intrv1'], c=parameters['mu1'])
        rv2 = triang(loc=parameters['min_intrv2'], scale=parameters['max_intrv2'], c=parameters['mu2'])
        rv3 = triang(loc=parameters['min_intrv3'], scale=parameters['max_intrv3'], c=parameters['mu3'])
    else:
        print 'Distribution not recognized...abort'
        exit(1)

    A = parameters['A']
    Q = {i: 0 for i in xrange(3)}

    while A > 0:
        best_probability = -1
        best_retailer = -1
        for n, r in enumerate([rv1, rv2, rv3]):
            p = 1 - r.cdf(Q[n]+1)
            if p > best_probability:
                best_probability = p
                best_retailer = n

        Q[best_retailer] += 1
        A -= 1

    parameters['Q1'] = Q[0]
    parameters['Q2'] = Q[1]
    parameters['Q3'] = Q[2]

    return {'Q1': Q[0],
            'Q2': Q[1],
            'Q3': Q[2],
            'PROB': f3TruncNormRVSnp(parameters)}
Example #2
0
def heu_allocation3(df, parameters):
    """
    Greedy heuristic for 3 supplier
    :param df: dataframe containing the data from the excel file
    :param parameters: parameters dict
    :return: write o the df and save on the file
    """

    for index, row in df.iterrows():
        print "Elaborating index {}".format(index)
        # read parameters from the excel file
        parameters['mu1'] = row['MU1']
        parameters['mu2'] = row['MU2']
        parameters['mu3'] = row['MU3']
        parameters['sigma1'] = row['S1']
        parameters['sigma2'] = row['S2']
        parameters['sigma3'] = row['S3']
        parameters['target'] = row['TARGET']
        parameters['A'] = row['AVAIL']

        rv1 = truncnorm_custom(parameters['min_intrv1'], parameters['max_intrv1'], parameters['mu1'], parameters['sigma1'])
        rv2 = truncnorm_custom(parameters['min_intrv2'], parameters['max_intrv2'], parameters['mu2'], parameters['sigma2'])
        rv3 = truncnorm_custom(parameters['min_intrv3'], parameters['max_intrv3'], parameters['mu3'], parameters['sigma3'])

        A = parameters['A']
        i = 0
        Q = {i:0 for i in xrange(3)}
        log = []

        while A >= 0:
            best_probability = -1
            best_retailer = -1
            l = {}
            for n, r in enumerate([rv1, rv2, rv3]):
                p = 1 - r.cdf(Q[n]+1)
                l[n] = p
                # print "n: {}   p: {}".format(n,p)
                if p > best_probability:
                    best_probability = p
                    best_retailer = n

            # print "Best retailer: {} with value {}".format(best_retailer, best_probability)
            Q[best_retailer] += 1
            A -= 1
            # print "Current allocation: {}".format(Q)
            log.append(l)

        # print "best allocation:"
        # print Q
        parameters['Q1'] = Q[0]
        parameters['Q2'] = Q[1]
        parameters['Q3'] = Q[2]

        df.ix[index, 'ALLOC_HEU'] = str(Q.values())
        df.ix[index, 'HEURISTIC_VALUE'] = f3TruncNormRVSnp(parameters)


    df.to_excel(parameters['outfile'])