From b0662df6165aeccb76dacd8c53222b2166a6198c Mon Sep 17 00:00:00 2001 From: Matthias Miltenberger Date: Thu, 8 Apr 2021 18:37:38 +0200 Subject: [PATCH] add script to package --- bin/treed | 40 ++++++++++++++++++++++++++++++++++++++++ setup.py | 3 ++- src/treed/treed.py | 21 +++++---------------- 3 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 bin/treed diff --git a/bin/treed b/bin/treed new file mode 100644 index 0000000..5076d1d --- /dev/null +++ b/bin/treed @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +from treed import TreeD +import argparse + +desc = """Draw a visual representation of the branch-and-cut tree of SCIP for + a particular instance using spatial dissimilarities of the node LP solutions. + """ + +parser = argparse.ArgumentParser(description=desc) + +parser.add_argument("model", type=str, help="path to model") +parser.add_argument( + "--transformation", + "-t", + type=str, + default="mds", + help="2D transformation algorithm for node LP solutions ('mds' or 'tsne')", +) +parser.add_argument( + "--hidecuts", + action="store_true", + help="hide cutting rounds and only show final node LP solutions", +) + +parser.add_argument( + "--nodelimit", type=int, default=500, help="node limit for solving the model" +) + +args = parser.parse_args() + +treed = TreeD( + probpath=args.model, + transformation=args.transformation, + showcuts=~args.hidecuts, + nodelimit=args.nodelimit, +) + +treed.main() +treed.draw() diff --git a/setup.py b/setup.py index af3f2e9..f8fbd02 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name="treed", - version="0.0.1", + version="0.0.2", author="Matthias Miltenberger", author_email="matthias.miltenberger@gmail.com", description="3D Visualization of Branch-and-Cut Trees using PySCIPOpt", @@ -21,4 +21,5 @@ ], install_requires=["pyscipopt", "scikit-learn", "pandas", "plotly", "networkx"], python_requires=">=3.6", + scripts=['bin/treed'], ) diff --git a/src/treed/treed.py b/src/treed/treed.py index f5673e0..4983c54 100644 --- a/src/treed/treed.py +++ b/src/treed/treed.py @@ -93,11 +93,11 @@ class TreeD: - pandas to organize the collected data """ - def __init__(self, probpath=""): - self.probpath = probpath - self.scip_settings = [("limits/totalnodes", 500)] - self.transformation = "mds" - self.showcuts = True + def __init__(self, **kwargs): + self.probpath = kwargs.get("probpath", "") + self.scip_settings = [("limits/totalnodes", kwargs.get("nodelimit", 500))] + self.transformation = kwargs.get("transformation", "mds") + self.showcuts = kwargs.get("showcuts", True) self.color = "age" self.colorscale = "Portland" self.colorbar = False @@ -440,14 +440,3 @@ def distance(p1, p2): dist += (p1.get(k, 0) - p2.get(k, 0)) ** 2 return math.sqrt(dist) - -if __name__ == "__main__": - - treed = TreeD() - if len(sys.argv) == 1: - print(treed.__doc__) - print("usage: {} ".format(sys.argv[0])) - else: - treed.probpath = sys.argv[1] - treed.main() - treed.draw()