Beispiel #1
0
def test_vbpsolver():
    """Test vbpsolver."""
    from pyvpsolver import VPSolver
    from pyvpsolver.solvers import vbpsolver
    W, w, b = (1, ), [(1, )], [1]
    lp_file = VPSolver.new_tmp_file(".lp")
    mps_file = VPSolver.new_tmp_file(".mps")
    svg_file = VPSolver.new_tmp_file(".svg")

    solution = vbpsolver.solve(W, w, b, script="vpsolver_glpk.sh")
    vbpsolver.print_solution(solution)
    obj, patterns = solution
    assert obj == 1

    solution = vbpsolver.solve(W,
                               w,
                               b,
                               lp_file=lp_file,
                               mps_file=mps_file,
                               svg_file=svg_file,
                               script="vpsolver_glpk.sh")
    vbpsolver.print_solution(solution)
    obj, patterns = solution
    assert obj == 1
    vbpsolver.print_solution(obj, patterns)
def test_mvpsolvers():
    """Test mvpsolvers."""
    from pyvpsolver import VPSolver
    from pyvpsolver.solvers import mvpsolver2013, mvpsolver2016
    Ws = [(100, 75), (75, 50), (75, 50), (100, 100)]
    Cs = [3, 2, 3, 100]
    Qs = [inf, -1, -1, -1]
    ws = [[(75, 50)], [(40, 75), (25, 25)]]
    b = [2, 1]
    for mvpsolver in [mvpsolver2013, mvpsolver2016]:
        solution = mvpsolver.solve(
            Ws, Cs, Qs, ws, b, script="vpsolver_glpk.sh"
        )
        mvpsolver.print_solution(solution)
        obj, patterns = solution
        assert obj == 5

        lp_file = VPSolver.new_tmp_file(".lp")
        mps_file = VPSolver.new_tmp_file(".mps")
        svg_file = VPSolver.new_tmp_file(".svg")

        solution = mvpsolver.solve(
            Ws, Cs, Qs, ws, b, lp_file=lp_file, mps_file=mps_file,
            svg_file=svg_file, script="vpsolver_glpk.sh", verbose=True
        )
        mvpsolver.print_solution(solution)
        obj, patterns = solution
        assert obj == 5
        mvpsolver.print_solution(obj, patterns)
Beispiel #3
0
def solve_worker(app_name, method, form, args, output=sys.stdout):
    """Worker for solving the problem in a separate process."""
    VPSolver.PLIST = []

    def signal_handler(sig, frame):
        """Signal handler for cleaner exit."""
        for p in VPSolver.PLIST:
            try:
                os.killpg(p.pid, signal.SIGTERM)
            except Exception as e:
                pass
        sys.exit(0)

    signal.signal(signal.SIGTERM, signal_handler)

    sys.stdout = output
    sys.stderr = output
    input_ = form["input"].strip("\n")
    if DEBUG:
        print("Input:\n{0}\n\nOutput:".format(input_))
        output.flush()

    if app_name == "vbp":
        tmpfile = VPSolver.new_tmp_file(ext=".vbp")
        with open(tmpfile, "w") as f:
            f.write(input_)
        instance = VBP.from_file(tmpfile, verbose=False)
        afg = AFG(instance, verbose=True)
        lp_model = LP(afg, verbose=False)
        out, sol = VPSolver.script(form["script"],
                                   lp_model,
                                   afg,
                                   pyout=False,
                                   verbose=True)
    elif app_name == "mvp":
        tmpfile = VPSolver.new_tmp_file(ext=".mvp")
        with open(tmpfile, "w") as f:
            f.write(input_)
        instance = MVP.from_file(tmpfile, verbose=False)
        afg = AFG(instance, verbose=True)
        lp_model = LP(afg, verbose=False)
        out, sol = VPSolver.script(form["script"],
                                   lp_model,
                                   afg,
                                   pyout=False,
                                   verbose=True)

    print("EOF\n")
    output.flush()
Beispiel #4
0
def solve_worker(app_name, method, form, args, output=sys.stdout):
    """Worker for solving the problem in a separate process."""
    VPSolver.PLIST = []

    def signal_handler(sig, frame):
        """Signal handler for cleaner exit."""
        for p in VPSolver.PLIST:
            try:
                os.killpg(p.pid, signal.SIGTERM)
            except Exception as e:
                pass
        sys.exit(0)
    signal.signal(signal.SIGTERM, signal_handler)

    sys.stdout = output
    sys.stderr = output
    input_ = form["input"].strip("\n")
    if DEBUG:
        print("Input:\n{0}\n\nOutput:".format(input_))
        output.flush()

    if app_name == "vbp":
        tmpfile = VPSolver.new_tmp_file(ext=".vbp")
        with open(tmpfile, "w") as f:
            f.write(input_)
        instance = VBP.from_file(tmpfile, verbose=False)
        afg = AFG(instance, verbose=True)
        lp_model = LP(afg, verbose=False)
        out, sol = VPSolver.script(
            form["script"], lp_model, afg,
            verbose=True
        )
    elif app_name == "pympl":
        tmpfile = VPSolver.new_tmp_file(ext=".mod")
        parser = PyMPL()
        parser.input = input_
        parser.parse()
        parser.write(tmpfile)
        VPSolver.run(
            "glpsol --math {0}".format(tmpfile),
            grepv="Generating",
            verbose=True
        )

    print("EOF\n")
    output.flush()
Beispiel #5
0
def test_lowlevel():
    """Test low-level API."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG
    vbp = VBP(W=(1, ), w=[(1, )], b=[1])
    mvp = MVP(Ws=[(1, )], Cs=[1], Qs=[inf], ws=[[(1, )]], b=[1])
    afg_file = VPSolver.new_tmp_file(".afg")
    lp_file = VPSolver.new_tmp_file(".lp")
    mps_file = VPSolver.new_tmp_file(".mps")
    svg_file = VPSolver.new_tmp_file(".svg")
    VPSolver.vbp2afg(vbp, afg_file)
    VPSolver.vbp2afg(mvp, afg_file)
    VPSolver.vbp2afg(vbp.filename, afg_file)
    VPSolver.vbp2afg(mvp.filename, afg_file)
    VPSolver.afg2lp(afg_file, lp_file)
    VPSolver.afg2mps(afg_file, mps_file)
    VPSolver.afg2lp(AFG(vbp), lp_file)
    VPSolver.afg2mps(AFG(mvp), mps_file)
def test_lowlevel():
    """Test low-level API."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG
    vbp = VBP(W=(1,), w=[(1,)], b=[1])
    mvp = MVP(Ws=[(1,)], Cs=[1], Qs=[inf], ws=[[(1,)]], b=[1])
    afg_file = VPSolver.new_tmp_file(".afg")
    lp_file = VPSolver.new_tmp_file(".lp")
    mps_file = VPSolver.new_tmp_file(".mps")
    svg_file = VPSolver.new_tmp_file(".svg")
    VPSolver.vbp2afg(vbp, afg_file)
    VPSolver.vbp2afg(mvp, afg_file)
    VPSolver.vbp2afg(vbp.filename, afg_file)
    VPSolver.vbp2afg(mvp.filename, afg_file)
    VPSolver.afg2lp(afg_file, lp_file)
    VPSolver.afg2mps(afg_file, mps_file)
    VPSolver.afg2lp(AFG(vbp), lp_file)
    VPSolver.afg2mps(AFG(mvp), mps_file)
def test_vbpsolver():
    """Test vbpsolver."""
    from pyvpsolver import VPSolver
    from pyvpsolver.solvers import vbpsolver
    W, w, b = (1,), [(1,)], [1]
    lp_file = VPSolver.new_tmp_file(".lp")
    mps_file = VPSolver.new_tmp_file(".mps")
    svg_file = VPSolver.new_tmp_file(".svg")

    solution = vbpsolver.solve(W, w, b, script="vpsolver_glpk.sh")
    vbpsolver.print_solution(solution)
    obj, patterns = solution
    assert obj == 1

    solution = vbpsolver.solve(
        W, w, b, lp_file=lp_file, mps_file=mps_file, svg_file=svg_file,
        script="vpsolver_glpk.sh"
    )
    vbpsolver.print_solution(solution)
    obj, patterns = solution
    assert obj == 1
    vbpsolver.print_solution(obj, patterns)
Beispiel #8
0
def test_mvpsolvers():
    """Test mvpsolvers."""
    from pyvpsolver import VPSolver
    from pyvpsolver.solvers import mvpsolver2013, mvpsolver2016
    Ws = [(100, 75), (75, 50), (75, 50), (100, 100)]
    Cs = [3, 2, 3, 100]
    Qs = [inf, -1, -1, -1]
    ws = [[(75, 50)], [(40, 75), (25, 25)]]
    b = [2, 1]
    for mvpsolver in [mvpsolver2013, mvpsolver2016]:
        solution = mvpsolver.solve(Ws,
                                   Cs,
                                   Qs,
                                   ws,
                                   b,
                                   script="vpsolver_glpk.sh")
        mvpsolver.print_solution(solution)
        obj, patterns = solution
        assert obj == 5

        lp_file = VPSolver.new_tmp_file(".lp")
        mps_file = VPSolver.new_tmp_file(".mps")
        svg_file = VPSolver.new_tmp_file(".svg")

        solution = mvpsolver.solve(Ws,
                                   Cs,
                                   Qs,
                                   ws,
                                   b,
                                   lp_file=lp_file,
                                   mps_file=mps_file,
                                   svg_file=svg_file,
                                   script="vpsolver_glpk.sh",
                                   verbose=True)
        mvpsolver.print_solution(solution)
        obj, patterns = solution
        assert obj == 5
        mvpsolver.print_solution(obj, patterns)
Beispiel #9
0
def test_vbpsol():
    """Test vbpsol."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG, LP, MPS
    vbp = VBP(W=(1, ), w=[(1, )], b=[1], verbose=True)
    afg = AFG(vbp, verbose=True)
    lp = LP(afg, verbose=True)
    sol_file = VPSolver.new_tmp_file(".sol")
    output, solution = VPSolver.script_wsol("vpsolver_glpk.sh", lp)
    assert isinstance(solution, dict)
    with open(sol_file, "w") as f:
        lst = []
        for var, value in solution.items():
            lst.append(str(var))
            lst.append(str(value))
        print(" ".join(lst), file=f)
    obj, patterns = VPSolver.vbpsol(afg, sol_file)
    assert obj == 1
def test_vbpsol():
    """Test vbpsol."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG, LP, MPS
    vbp = VBP(W=(1,), w=[(1,)], b=[1], verbose=True)
    afg = AFG(vbp, verbose=True)
    lp = LP(afg, verbose=True)
    sol_file = VPSolver.new_tmp_file(".sol")
    output, solution = VPSolver.script_wsol("vpsolver_glpk.sh", lp)
    assert isinstance(solution, dict)
    with open(sol_file, "w") as f:
        lst = []
        for var, value in solution.items():
            lst.append(str(var))
            lst.append(str(value))
        print(" ".join(lst), file=f)
    obj, patterns = VPSolver.vbpsol(afg, sol_file)
    assert obj == 1
Beispiel #11
0
def test_draw():
    """Test scripts."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG
    vbp = VBP(W=(1, ), w=[(1, )], b=[1])
    mvp = MVP(Ws=[(1, )], Cs=[1], Qs=[inf], ws=[[(1, )]], b=[1])
    svg_file = VPSolver.new_tmp_file(".svg")
    for instance in [vbp, mvp]:
        afg = AFG(instance)
        try:
            afg.draw(svg_file, lpaths=True, graph_attrs={"size": "8,8"})
        except Exception as e:
            print(repr(e))
        try:
            VPSolver.afg2svg(afg, svg_file)
        except Exception as e:
            print(repr(e))
        try:
            VPSolver.afg2svg(afg.filename, svg_file)
        except Exception as e:
            print(repr(e))
def test_draw():
    """Test scripts."""
    from pyvpsolver import VPSolver, VBP, MVP, AFG
    vbp = VBP(W=(1,), w=[(1,)], b=[1])
    mvp = MVP(Ws=[(1,)], Cs=[1], Qs=[inf], ws=[[(1,)]], b=[1])
    svg_file = VPSolver.new_tmp_file(".svg")
    for instance in [vbp, mvp]:
        afg = AFG(instance)
        try:
            afg.draw(
                svg_file, lpaths=True, graph_attrs={"size": "8,8"}
            )
        except Exception as e:
            print(repr(e))
        try:
            VPSolver.afg2svg(afg, svg_file)
        except Exception as e:
            print(repr(e))
        try:
            VPSolver.afg2svg(afg.filename, svg_file)
        except Exception as e:
            print(repr(e))