예제 #1
0
    # Check if the LP is valid.
    valid, msg = check_valid_lp(var_signs, A, directions, bvals, max_or_min,
                                cvals, verbose)
    if not valid:
        err_msg = msg if verbose else 'Invalid LP. Exiting.'
        exit_with_message(err_msg)

    # TODO(optional): Check if constraints are linearly indepdent. Should be pretty easy with NumPy.

    if command == 'dual':
        d_var_signs, d_A, d_directions, d_bvals, d_max_or_min, d_cvals = convert_to_dual(
            var_signs, A, directions, bvals, max_or_min, cvals)
        writer = FileWriter()
        # Prints model to stdout.
        writer.write_model_to_file(d_var_signs, d_A, d_directions, d_bvals,
                                   d_max_or_min, d_cvals)
    elif command == 'solve':
        model = StandardFormLP(var_signs, A, directions, bvals, max_or_min,
                               cvals)
        if model.are_dependent_constraints():
            print('Dependent constraints. Exiting.')
            exit()
        solver = TwoPhaseSimplex(verbose=verbose)
        solution, obj, x = solver.solve(model)
        if solution == 'Infeasible':
            print('Infeasible problem. Exiting.')
        elif solution == 'Unbounded':
            print('Unbounded problem. Exiting.')
        elif solution == 'Solved':
            print(convert_to_signed_string(model.convert_objective(obj)))
            print('\t'.join(