def main():
    from optparse import OptionParser
    parser = OptionParser(usage="usage: %prog [options] [input_file]")
    parser.add_option('-a', '--alpha', type='float', default=0.3, metavar='NUM', help='Alpha parameter for RCL construction')
    parser.add_option('-b', '--ptb',   type='float', default=300, metavar='NUM', help='Per task bonification in greedy function')
    parser.add_option('-p', '--pertr', type='float', default=0,   metavar='NUM', help='Cost perturbation radius in greedy function')
    parser.add_option('--debug-greedy', action='store_true', help='Print debugging data for construction stage')
    parser.add_option('--debug-search', action='store_true', help='Print debugging data for search stage')
    (options, args) = parser.parse_args()
    if not args:
        args = ['orlib/csp50.txt']

    if not options.debug_greedy:
        global DEBUG_SOLUTION, DEBUG_RCL
        DEBUG_SOLUTION = lambda *args: None
        DEBUG_RCL = lambda *args: None

    csp = CrewSchedulingProblem(open(args[0]))
    rotations = list(csp.generate_rotations())

    greedy_cost = partial(rotation_cost, per_task_bonification=options.ptb, perturbation_radius=options.pertr)
    solution = grasp(rotations, csp, options.alpha, greedy_cost)
Exemple #2
0
    def __init__(self, problem_file):
        csp = CrewSchedulingProblem(problem_file)
        columns, costs = [], []
        for rotation in csp.generate_rotations():
            column = zeros(len(csp.tasks), dtype="uint8")
            for task in rotation.tasks:
                column[task] = 1
            columns.append(column)
            costs.append(rotation.cost)

        A = array(columns).transpose()
        m, n = A.shape

        alpha = [set() for row in range(m)]
        beta = [set() for col in range(n)]
        for row, col in transpose(A.nonzero()):
            alpha[row].add(col)
            beta[col].add(row)

        self.A = A
        self.costs = array(costs)
        self.nr_tasks, self.nr_rotations = m, n
        self.alpha = map(frozenset, alpha)
        self.beta = map(frozenset, beta)