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)
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()
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()
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)
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)
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
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))