├── graphics ├── architecture.png ├── full-results.jpg ├── AAAI21-Poster-GZarpellon.pdf └── HO-SCIPWorkshop-GZarpellon.pdf ├── trained-models ├── gcnn │ ├── gcnn │ │ ├── 0 │ │ │ └── best_params.pkl │ │ ├── 1 │ │ │ └── best_params.pkl │ │ ├── 2 │ │ │ └── best_params.pkl │ │ ├── 3 │ │ │ └── best_params.pkl │ │ └── 4 │ │ │ └── best_params.pkl │ ├── gcnn_test_20200501-100822.csv │ └── gcnn_20200501-101957-testset.csv ├── NoTreePolicy_hidden128_lr0.001 │ ├── final_checkpoint.pth.tar │ └── SCIP_Evals │ │ ├── air04_0_ILEval_info.pkl │ │ ├── air04_1_ILEval_info.pkl │ │ ├── air04_2_ILEval_info.pkl │ │ ├── air04_3_ILEval_info.pkl │ │ ├── air04_4_ILEval_info.pkl │ │ ├── air05_0_ILEval_info.pkl │ │ ├── air05_1_ILEval_info.pkl │ │ ├── air05_2_ILEval_info.pkl │ │ ├── air05_3_ILEval_info.pkl │ │ ├── air05_4_ILEval_info.pkl │ │ ├── lseu_0_ILEval_info.pkl │ │ ├── lseu_1_ILEval_info.pkl │ │ ├── lseu_2_ILEval_info.pkl │ │ ├── lseu_3_ILEval_info.pkl │ │ ├── lseu_4_ILEval_info.pkl │ │ ├── map18_0_ILEval_info.pkl │ │ ├── map18_1_ILEval_info.pkl │ │ ├── map18_2_ILEval_info.pkl │ │ ├── map18_3_ILEval_info.pkl │ │ ├── map18_4_ILEval_info.pkl │ │ ├── misc03_0_ILEval_info.pkl │ │ ├── misc03_1_ILEval_info.pkl │ │ ├── misc03_2_ILEval_info.pkl │ │ ├── misc03_3_ILEval_info.pkl │ │ ├── misc03_4_ILEval_info.pkl │ │ ├── neos11_0_ILEval_info.pkl │ │ ├── neos11_1_ILEval_info.pkl │ │ ├── neos11_2_ILEval_info.pkl │ │ ├── neos11_3_ILEval_info.pkl │ │ ├── neos11_4_ILEval_info.pkl │ │ ├── neos18_0_ILEval_info.pkl │ │ ├── neos18_1_ILEval_info.pkl │ │ ├── neos18_2_ILEval_info.pkl │ │ ├── neos18_3_ILEval_info.pkl │ │ ├── neos18_4_ILEval_info.pkl │ │ ├── neos20_0_ILEval_info.pkl │ │ ├── neos20_1_ILEval_info.pkl │ │ ├── neos20_2_ILEval_info.pkl │ │ ├── neos20_3_ILEval_info.pkl │ │ ├── neos20_4_ILEval_info.pkl │ │ ├── neos21_0_ILEval_info.pkl │ │ ├── neos21_1_ILEval_info.pkl │ │ ├── neos21_2_ILEval_info.pkl │ │ ├── neos21_3_ILEval_info.pkl │ │ ├── neos21_4_ILEval_info.pkl │ │ ├── swath1_0_ILEval_info.pkl │ │ ├── swath1_1_ILEval_info.pkl │ │ ├── swath1_2_ILEval_info.pkl │ │ ├── swath1_3_ILEval_info.pkl │ │ ├── swath1_4_ILEval_info.pkl │ │ ├── vpm2_0_ILEval_info.pkl │ │ ├── vpm2_1_ILEval_info.pkl │ │ ├── vpm2_2_ILEval_info.pkl │ │ ├── vpm2_3_ILEval_info.pkl │ │ ├── vpm2_4_ILEval_info.pkl │ │ ├── dcmulti_0_ILEval_info.pkl │ │ ├── dcmulti_1_ILEval_info.pkl │ │ ├── dcmulti_2_ILEval_info.pkl │ │ ├── dcmulti_3_ILEval_info.pkl │ │ ├── dcmulti_4_ILEval_info.pkl │ │ ├── eil33-2_0_ILEval_info.pkl │ │ ├── eil33-2_1_ILEval_info.pkl │ │ ├── eil33-2_2_ILEval_info.pkl │ │ ├── eil33-2_3_ILEval_info.pkl │ │ ├── eil33-2_4_ILEval_info.pkl │ │ ├── l152lav_0_ILEval_info.pkl │ │ ├── l152lav_1_ILEval_info.pkl │ │ ├── l152lav_2_ILEval_info.pkl │ │ ├── l152lav_3_ILEval_info.pkl │ │ ├── l152lav_4_ILEval_info.pkl │ │ ├── rail507_0_ILEval_info.pkl │ │ ├── rail507_1_ILEval_info.pkl │ │ ├── rail507_2_ILEval_info.pkl │ │ ├── rail507_3_ILEval_info.pkl │ │ ├── rail507_4_ILEval_info.pkl │ │ ├── seymour1_0_ILEval_info.pkl │ │ ├── seymour1_1_ILEval_info.pkl │ │ ├── seymour1_2_ILEval_info.pkl │ │ ├── seymour1_3_ILEval_info.pkl │ │ ├── seymour1_4_ILEval_info.pkl │ │ ├── stein27_0_ILEval_info.pkl │ │ ├── stein27_1_ILEval_info.pkl │ │ ├── stein27_2_ILEval_info.pkl │ │ ├── stein27_3_ILEval_info.pkl │ │ ├── stein27_4_ILEval_info.pkl │ │ ├── mine-166-5_0_ILEval_info.pkl │ │ ├── mine-166-5_1_ILEval_info.pkl │ │ ├── mine-166-5_2_ILEval_info.pkl │ │ ├── mine-166-5_3_ILEval_info.pkl │ │ ├── mine-166-5_4_ILEval_info.pkl │ │ ├── neos-476283_0_ILEval_info.pkl │ │ ├── neos-476283_1_ILEval_info.pkl │ │ ├── neos-476283_2_ILEval_info.pkl │ │ ├── neos-476283_3_ILEval_info.pkl │ │ ├── neos-476283_4_ILEval_info.pkl │ │ ├── neos648910_0_ILEval_info.pkl │ │ ├── neos648910_1_ILEval_info.pkl │ │ ├── neos648910_2_ILEval_info.pkl │ │ ├── neos648910_3_ILEval_info.pkl │ │ ├── neos648910_4_ILEval_info.pkl │ │ ├── ns1830653_0_ILEval_info.pkl │ │ ├── ns1830653_1_ILEval_info.pkl │ │ ├── ns1830653_2_ILEval_info.pkl │ │ ├── ns1830653_3_ILEval_info.pkl │ │ ├── ns1830653_4_ILEval_info.pkl │ │ ├── nu25-pr12_0_ILEval_info.pkl │ │ ├── nu25-pr12_1_ILEval_info.pkl │ │ ├── nu25-pr12_2_ILEval_info.pkl │ │ ├── nu25-pr12_3_ILEval_info.pkl │ │ ├── nu25-pr12_4_ILEval_info.pkl │ │ ├── pp08aCUTS_0_ILEval_info.pkl │ │ ├── pp08aCUTS_1_ILEval_info.pkl │ │ ├── pp08aCUTS_2_ILEval_info.pkl │ │ ├── pp08aCUTS_3_ILEval_info.pkl │ │ ├── pp08aCUTS_4_ILEval_info.pkl │ │ ├── rmatr100-p5_0_ILEval_info.pkl │ │ ├── rmatr100-p5_1_ILEval_info.pkl │ │ ├── rmatr100-p5_2_ILEval_info.pkl │ │ ├── rmatr100-p5_3_ILEval_info.pkl │ │ ├── rmatr100-p5_4_ILEval_info.pkl │ │ ├── sp150x300d_0_ILEval_info.pkl │ │ ├── sp150x300d_1_ILEval_info.pkl │ │ ├── sp150x300d_2_ILEval_info.pkl │ │ ├── sp150x300d_3_ILEval_info.pkl │ │ ├── sp150x300d_4_ILEval_info.pkl │ │ ├── rmatr100-p10_0_ILEval_info.pkl │ │ ├── rmatr100-p10_1_ILEval_info.pkl │ │ ├── rmatr100-p10_2_ILEval_info.pkl │ │ ├── rmatr100-p10_3_ILEval_info.pkl │ │ ├── rmatr100-p10_4_ILEval_info.pkl │ │ ├── istanbul-no-cutoff_0_ILEval_info.pkl │ │ ├── istanbul-no-cutoff_1_ILEval_info.pkl │ │ ├── istanbul-no-cutoff_2_ILEval_info.pkl │ │ ├── istanbul-no-cutoff_3_ILEval_info.pkl │ │ └── istanbul-no-cutoff_4_ILEval_info.pkl └── TreeGatePolicy_hidden64_depth5_lr0.01 │ ├── final_checkpoint.pth.tar │ └── SCIP_Evals │ ├── lseu_0_ILEval_info.pkl │ ├── lseu_1_ILEval_info.pkl │ ├── lseu_2_ILEval_info.pkl │ ├── lseu_3_ILEval_info.pkl │ ├── lseu_4_ILEval_info.pkl │ ├── vpm2_0_ILEval_info.pkl │ ├── vpm2_1_ILEval_info.pkl │ ├── vpm2_2_ILEval_info.pkl │ ├── vpm2_3_ILEval_info.pkl │ ├── vpm2_4_ILEval_info.pkl │ ├── air04_0_ILEval_info.pkl │ ├── air04_1_ILEval_info.pkl │ ├── air04_2_ILEval_info.pkl │ ├── air04_3_ILEval_info.pkl │ ├── air04_4_ILEval_info.pkl │ ├── air05_0_ILEval_info.pkl │ ├── air05_1_ILEval_info.pkl │ ├── air05_2_ILEval_info.pkl │ ├── air05_3_ILEval_info.pkl │ ├── air05_4_ILEval_info.pkl │ ├── map18_0_ILEval_info.pkl │ ├── map18_1_ILEval_info.pkl │ ├── map18_2_ILEval_info.pkl │ ├── map18_3_ILEval_info.pkl │ ├── map18_4_ILEval_info.pkl │ ├── misc03_0_ILEval_info.pkl │ ├── misc03_1_ILEval_info.pkl │ ├── misc03_2_ILEval_info.pkl │ ├── misc03_3_ILEval_info.pkl │ ├── misc03_4_ILEval_info.pkl │ ├── neos11_0_ILEval_info.pkl │ ├── neos11_1_ILEval_info.pkl │ ├── neos11_2_ILEval_info.pkl │ ├── neos11_3_ILEval_info.pkl │ ├── neos11_4_ILEval_info.pkl │ ├── neos18_0_ILEval_info.pkl │ ├── neos18_1_ILEval_info.pkl │ ├── neos18_2_ILEval_info.pkl │ ├── neos18_3_ILEval_info.pkl │ ├── neos18_4_ILEval_info.pkl │ ├── neos20_0_ILEval_info.pkl │ ├── neos20_1_ILEval_info.pkl │ ├── neos20_2_ILEval_info.pkl │ ├── neos20_3_ILEval_info.pkl │ ├── neos20_4_ILEval_info.pkl │ ├── neos21_0_ILEval_info.pkl │ ├── neos21_1_ILEval_info.pkl │ ├── neos21_2_ILEval_info.pkl │ ├── neos21_3_ILEval_info.pkl │ ├── neos21_4_ILEval_info.pkl │ ├── swath1_0_ILEval_info.pkl │ ├── swath1_1_ILEval_info.pkl │ ├── swath1_2_ILEval_info.pkl │ ├── swath1_3_ILEval_info.pkl │ ├── swath1_4_ILEval_info.pkl │ ├── dcmulti_0_ILEval_info.pkl │ ├── dcmulti_1_ILEval_info.pkl │ ├── dcmulti_2_ILEval_info.pkl │ ├── dcmulti_3_ILEval_info.pkl │ ├── dcmulti_4_ILEval_info.pkl │ ├── eil33-2_0_ILEval_info.pkl │ ├── eil33-2_1_ILEval_info.pkl │ ├── eil33-2_2_ILEval_info.pkl │ ├── eil33-2_3_ILEval_info.pkl │ ├── eil33-2_4_ILEval_info.pkl │ ├── l152lav_0_ILEval_info.pkl │ ├── l152lav_1_ILEval_info.pkl │ ├── l152lav_2_ILEval_info.pkl │ ├── l152lav_3_ILEval_info.pkl │ ├── l152lav_4_ILEval_info.pkl │ ├── ns1830653_0_ILEval_info.pkl │ ├── ns1830653_1_ILEval_info.pkl │ ├── ns1830653_2_ILEval_info.pkl │ ├── ns1830653_3_ILEval_info.pkl │ ├── ns1830653_4_ILEval_info.pkl │ ├── nu25-pr12_0_ILEval_info.pkl │ ├── nu25-pr12_1_ILEval_info.pkl │ ├── nu25-pr12_2_ILEval_info.pkl │ ├── nu25-pr12_3_ILEval_info.pkl │ ├── nu25-pr12_4_ILEval_info.pkl │ ├── pp08aCUTS_0_ILEval_info.pkl │ ├── pp08aCUTS_1_ILEval_info.pkl │ ├── pp08aCUTS_2_ILEval_info.pkl │ ├── pp08aCUTS_3_ILEval_info.pkl │ ├── pp08aCUTS_4_ILEval_info.pkl │ ├── rail507_0_ILEval_info.pkl │ ├── rail507_1_ILEval_info.pkl │ ├── rail507_2_ILEval_info.pkl │ ├── rail507_3_ILEval_info.pkl │ ├── rail507_4_ILEval_info.pkl │ ├── seymour1_0_ILEval_info.pkl │ ├── seymour1_1_ILEval_info.pkl │ ├── seymour1_2_ILEval_info.pkl │ ├── seymour1_3_ILEval_info.pkl │ ├── seymour1_4_ILEval_info.pkl │ ├── stein27_0_ILEval_info.pkl │ ├── stein27_1_ILEval_info.pkl │ ├── stein27_2_ILEval_info.pkl │ ├── stein27_3_ILEval_info.pkl │ ├── stein27_4_ILEval_info.pkl │ ├── mine-166-5_0_ILEval_info.pkl │ ├── mine-166-5_1_ILEval_info.pkl │ ├── mine-166-5_2_ILEval_info.pkl │ ├── mine-166-5_3_ILEval_info.pkl │ ├── mine-166-5_4_ILEval_info.pkl │ ├── neos-476283_0_ILEval_info.pkl │ ├── neos-476283_1_ILEval_info.pkl │ ├── neos-476283_2_ILEval_info.pkl │ ├── neos-476283_3_ILEval_info.pkl │ ├── neos-476283_4_ILEval_info.pkl │ ├── neos648910_0_ILEval_info.pkl │ ├── neos648910_1_ILEval_info.pkl │ ├── neos648910_2_ILEval_info.pkl │ ├── neos648910_3_ILEval_info.pkl │ ├── neos648910_4_ILEval_info.pkl │ ├── rmatr100-p5_0_ILEval_info.pkl │ ├── rmatr100-p5_1_ILEval_info.pkl │ ├── rmatr100-p5_2_ILEval_info.pkl │ ├── rmatr100-p5_3_ILEval_info.pkl │ ├── rmatr100-p5_4_ILEval_info.pkl │ ├── sp150x300d_0_ILEval_info.pkl │ ├── sp150x300d_1_ILEval_info.pkl │ ├── sp150x300d_2_ILEval_info.pkl │ ├── sp150x300d_3_ILEval_info.pkl │ ├── sp150x300d_4_ILEval_info.pkl │ ├── rmatr100-p10_0_ILEval_info.pkl │ ├── rmatr100-p10_1_ILEval_info.pkl │ ├── rmatr100-p10_2_ILEval_info.pkl │ ├── rmatr100-p10_3_ILEval_info.pkl │ ├── rmatr100-p10_4_ILEval_info.pkl │ ├── istanbul-no-cutoff_0_ILEval_info.pkl │ ├── istanbul-no-cutoff_1_ILEval_info.pkl │ ├── istanbul-no-cutoff_2_ILEval_info.pkl │ ├── istanbul-no-cutoff_3_ILEval_info.pkl │ └── istanbul-no-cutoff_4_ILEval_info.pkl ├── requirements.txt ├── LICENSE ├── utilities ├── hdf5_dataloader.py └── convert_multi_instance_pickle_to_hdf5.py ├── models ├── modules.py └── feedforward.py ├── evaluate_SCIP.py ├── collect.py ├── src ├── utilities.py ├── branchers.py └── environments.py ├── evaluate_IL.py ├── README.md └── train_test_IL.py /graphics/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/graphics/architecture.png -------------------------------------------------------------------------------- /graphics/full-results.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/graphics/full-results.jpg -------------------------------------------------------------------------------- /graphics/AAAI21-Poster-GZarpellon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/graphics/AAAI21-Poster-GZarpellon.pdf -------------------------------------------------------------------------------- /graphics/HO-SCIPWorkshop-GZarpellon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/graphics/HO-SCIPWorkshop-GZarpellon.pdf -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn/0/best_params.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/gcnn/gcnn/0/best_params.pkl -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn/1/best_params.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/gcnn/gcnn/1/best_params.pkl -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn/2/best_params.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/gcnn/gcnn/2/best_params.pkl -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn/3/best_params.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/gcnn/gcnn/3/best_params.pkl -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn/4/best_params.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/gcnn/gcnn/4/best_params.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/final_checkpoint.pth.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/final_checkpoint.pth.tar -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/final_checkpoint.pth.tar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/final_checkpoint.pth.tar -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air04_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/air05_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/lseu_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/map18_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/misc03_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos11_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos18_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos20_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos21_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/swath1_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/vpm2_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/dcmulti_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/eil33-2_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/l152lav_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rail507_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/seymour1_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/stein27_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/mine-166-5_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos-476283_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/neos648910_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/ns1830653_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/nu25-pr12_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/pp08aCUTS_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p5_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/sp150x300d_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/lseu_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/vpm2_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/rmatr100-p10_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air04_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/air05_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/map18_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/misc03_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos11_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos18_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos20_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos21_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/swath1_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/dcmulti_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/eil33-2_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/l152lav_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/ns1830653_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/nu25-pr12_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/pp08aCUTS_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rail507_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/seymour1_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/stein27_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/NoTreePolicy_hidden128_lr0.001/SCIP_Evals/istanbul-no-cutoff_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/mine-166-5_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos-476283_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/neos648910_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p5_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/sp150x300d_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/rmatr100-p10_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_0_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_0_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_1_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_1_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_2_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_2_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_3_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_3_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_4_ILEval_info.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ds4dm/branch-search-trees/HEAD/trained-models/TreeGatePolicy_hidden64_depth5_lr0.01/SCIP_Evals/istanbul-no-cutoff_4_ILEval_info.pkl -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn_test_20200501-100822.csv: -------------------------------------------------------------------------------- 1 | policy,seed,acc@1,acc@3,acc@5,acc@10 2 | gcnn:baseline,0,0.1327,0.2928,0.38285,0.51005 3 | gcnn:baseline,1,0.15775,0.35185,0.4738,0.6317 4 | gcnn:baseline,2,0.1575,0.37785,0.50685,0.6382 5 | gcnn:baseline,3,0.2206,0.41285,0.5004,0.62005 6 | gcnn:baseline,4,0.0954,0.2354,0.34435,0.53855 7 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | backcall==0.1.0 2 | certifi==2019.11.28 3 | cffi==1.13.2 4 | cycler==0.10.0 5 | Cython==0.29.14 6 | decorator==4.4.1 7 | h5py==2.10.0 8 | ipython==7.10.1 9 | ipython-genutils==0.2.0 10 | jedi==0.15.1 11 | kiwisolver==1.1.0 12 | matplotlib==3.1.2 13 | mkl-fft==1.0.15 14 | mkl-random==1.1.0 15 | mkl-service==2.3.0 16 | numpy==1.17.4 17 | olefile==0.46 18 | pandas==0.25.3 19 | parso==0.5.1 20 | pexpect==4.7.0 21 | pickleshare==0.7.5 22 | Pillow==6.2.1 23 | prompt-toolkit==3.0.2 24 | ptyprocess==0.6.0 25 | pycparser==2.19 26 | Pygments==2.5.2 27 | pyparsing==2.4.5 28 | PySCIPOpt==1.4.9 29 | python-dateutil==2.8.1 30 | pytz==2019.3 31 | PyYAML==5.2 32 | scipy==1.3.3 33 | six==1.13.0 34 | torch==1.3.1 35 | torchvision==0.4.2 36 | traitlets==4.3.3 37 | wcwidth==0.1.7 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 CERC Data Science For Decision Making 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /utilities/hdf5_dataloader.py: -------------------------------------------------------------------------------- 1 | """ Data loader definition. """ 2 | 3 | import h5py 4 | import torch 5 | from torch.utils.data import Dataset, DataLoader 6 | import numpy as np 7 | 8 | 9 | class dataset_h5(Dataset): 10 | def __init__(self, h5_file, node_dim, mip_dim, var_dim): 11 | """ 12 | :param h5_file: str, pathway to the data H5 file 13 | :param node_dim: int, dimension of node state 14 | :param mip_dim: int, dimension of mip state 15 | :param var_dim: int, dimension of variable state 16 | """ 17 | super(dataset_h5, self).__init__() 18 | 19 | # load the h5 file 20 | self.h5_file = h5py.File(h5_file, 'r') 21 | 22 | # define the dimensions of each feature 23 | self.node_dim = node_dim 24 | self.mip_dim = mip_dim 25 | self.var_dim = var_dim 26 | 27 | # define the number of data points 28 | self.n_data = len(self.h5_file['dataset']) 29 | 30 | def __getitem__(self, index): 31 | x = self.h5_file['dataset'][index] 32 | return [torch.LongTensor([x[0]]), 33 | torch.FloatTensor(x[1:1 + self.node_dim]), 34 | torch.FloatTensor(x[1 + self.node_dim:1 + self.node_dim + self.mip_dim]), 35 | torch.FloatTensor(x[1 + self.node_dim + self.mip_dim:].reshape(-1, self.var_dim)) 36 | ] 37 | 38 | def __len__(self): 39 | return self.n_data 40 | 41 | 42 | def collate_fn(batch): 43 | batch_list = [item for item in batch] 44 | return batch_list 45 | -------------------------------------------------------------------------------- /utilities/convert_multi_instance_pickle_to_hdf5.py: -------------------------------------------------------------------------------- 1 | """ Converter to transform collected pickle data files to IL inputs. """ 2 | 3 | import h5py 4 | import numpy as np 5 | import pickle 6 | import argparse 7 | import os 8 | import glob 9 | import torch 10 | 11 | # state dimensions 12 | state_dims = { 13 | 'var_dim': 25, 14 | 'node_dim': 8, 15 | 'mip_dim': 53 16 | } 17 | 18 | 19 | if __name__ == '__main__': 20 | 21 | parser = argparse.ArgumentParser(description='') 22 | parser.add_argument( 23 | '--pkl_file_dir', 24 | type=str, 25 | help='Pathway to the directory containing all the pkl data collect files.' 26 | ) 27 | parser.add_argument( 28 | '--dataset_mode', 29 | type=str, 30 | default='train', 31 | help='Denotes train or val/test data.' 32 | ) 33 | parser.add_argument( 34 | '--eps', 35 | type=float, 36 | default=1e-8, 37 | help='Numerical stability factor.' 38 | ) 39 | parser.add_argument( 40 | '--out_dir', 41 | type=str, 42 | help='Directory to save the h5 and pkl files.' 43 | ) 44 | args = parser.parse_args() 45 | 46 | # set the NumPy random seed 47 | np.random.seed(0) 48 | 49 | # stack all the state_vectors into a single matrix 50 | pkl_paths = sorted(glob.glob(args.pkl_file_dir + '/**/*_data.pkl', recursive=True)) 51 | state_vectors = np.zeros((0, state_dims.node_dim + state_dims.mip_dim)).astype('float32') 52 | num_data = 0 53 | for index, pkl in enumerate(pkl_paths): 54 | with open(pkl, 'rb') as f: 55 | print('\tProcessing {:s}, {:d} of {:d}...'.format(pkl.split('/')[-1], index + 1, len(pkl_paths))) 56 | D = pickle.load(f) 57 | if len(D) > 0: # We only collect data with more than 1 candidate 58 | non_trivial_cands_keys = [key for key in D if D[key]['cands_state_mat'].shape[0] > 1] 59 | num_data += len(non_trivial_cands_keys) 60 | print('Processed {:d} datapoints...'.format(num_data)) 61 | 62 | # create an h5 file 63 | print('Creating an h5 file...') 64 | f = h5py.File(os.path.join(args.out_dir, '{}.h5'.format(args.dataset_mode)), 'w') 65 | dt = h5py.special_dtype(vlen=np.dtype('float32')) 66 | dataset = f.create_dataset('dataset', (num_data,), dtype=dt) 67 | counter = 0 68 | 69 | for index, pkl in enumerate(pkl_paths): 70 | with open(pkl, 'rb') as f: 71 | print('\tProcessing {:s}, {:d} of {:d}...'.format(pkl.split('/')[-1], index + 1, len(pkl_paths))) 72 | D = pickle.load(f) 73 | for idx in D: 74 | if D[idx]['cands_state_mat'].shape[0] > 1: # We only collect data with more than 1 candidate 75 | # flat_vector is always [target, node, mip, grid_flattened] 76 | flat_vector = np.hstack([D[idx]['varRELpos'], D[idx]['node_state'], D[idx]['mip_state'], 77 | D[idx]['cands_state_mat'].flatten()]).astype('float32') 78 | dataset[counter] = flat_vector 79 | counter += 1 80 | print('Processed {:d} datapoints.'.format(counter)) 81 | -------------------------------------------------------------------------------- /models/modules.py: -------------------------------------------------------------------------------- 1 | """ Definitions of the IL modules. """ 2 | 3 | import torch 4 | import torch.nn as nn 5 | from torch.nn import functional as F 6 | import functools 7 | 8 | 9 | def get_norm_layer(norm_type='none'): 10 | """ 11 | :param norm_type: str, the name of the normalization layer: batch | instance | layer | none 12 | :return: 13 | norm_layer, a normalization layer 14 | For BatchNorm, we use learnable affine parameters and track running statistics (mean/stddev). 15 | For InstanceNorm, we do not use learnable affine parameters. We do not track running statistics. 16 | """ 17 | if norm_type == 'batch': 18 | norm_layer = functools.partial(nn.BatchNorm1d, affine=True, track_running_stats=True) 19 | elif norm_type == 'instance': 20 | norm_layer = functools.partial(nn.InstanceNorm1d, affine=False, track_running_stats=False) 21 | elif norm_type == 'layer': 22 | norm_layer = functools.partial(nn.LayerNorm) 23 | elif norm_type == 'none': 24 | norm_layer = functools.partial(nn.Identity) 25 | else: 26 | raise NotImplementedError('normalization layer [%s] is not found' % norm_type) 27 | return norm_layer 28 | 29 | 30 | # TreeGate 31 | class TreeGateBranchingNet(nn.Module): 32 | """ 33 | TreeGate specific network. 34 | """ 35 | def __init__(self, branch_size, tree_state_size, dim_reduce_factor, infimum=8, norm='none', depth=2, 36 | hidden_size=128): 37 | super(TreeGateBranchingNet, self).__init__() 38 | norm_layer = get_norm_layer(norm) 39 | self.norm = norm 40 | self.branch_size = branch_size 41 | self.tree_state_size = tree_state_size 42 | self.dim_reduce_factor = dim_reduce_factor 43 | self.infimum = infimum 44 | self.n_layers = 0 45 | self.depth = depth 46 | self.hidden_size = hidden_size 47 | unit_count = infimum 48 | while unit_count < branch_size: 49 | unit_count *= dim_reduce_factor 50 | self.n_layers += 1 51 | self.n_units_dict = dict.fromkeys(range(self.n_layers)) 52 | self.BranchingNet = nn.ModuleList() 53 | input_dim = hidden_size 54 | for i in range(self.n_layers): 55 | output_dim = int(input_dim / dim_reduce_factor) 56 | self.n_units_dict[i] = input_dim 57 | if i < self.n_layers - 1: 58 | layer = [nn.Linear(input_dim, output_dim), 59 | norm_layer(output_dim), 60 | nn.ReLU(True)] 61 | elif i == self.n_layers - 1: 62 | layer = [nn.Linear(input_dim, output_dim)] # Dense output 63 | input_dim = output_dim 64 | self.BranchingNet.append(nn.Sequential(*layer)) 65 | 66 | # define the GatingNet 67 | self.GatingNet = [] 68 | self.n_attentional_units = sum(self.n_units_dict.values()) 69 | if depth == 1: 70 | self.GatingNet += [nn.Linear(tree_state_size, self.n_attentional_units), 71 | nn.Sigmoid()] 72 | else: 73 | self.GatingNet += [nn.Linear(tree_state_size, hidden_size), 74 | nn.ReLU(True)] 75 | for i in range(depth - 2): 76 | self.GatingNet += [nn.Linear(hidden_size, hidden_size), 77 | nn.ReLU(True)] 78 | self.GatingNet += [nn.Linear(hidden_size, self.n_attentional_units), 79 | nn.Sigmoid()] 80 | self.GatingNet = nn.Sequential(*self.GatingNet) 81 | 82 | def forward(self, cands_state_mat, node_state, mip_state): 83 | tree_state = torch.cat([node_state, mip_state]) 84 | attn_weights = self.GatingNet(tree_state) 85 | start_slice_idx = 0 86 | for index, layer in enumerate(self.BranchingNet): 87 | end_slice_idx = start_slice_idx + self.n_units_dict[index] 88 | attn_slice = attn_weights[start_slice_idx:end_slice_idx] 89 | cands_state_mat = cands_state_mat * attn_slice # No in-place operations, bad for .backward() 90 | cands_state_mat = layer(cands_state_mat) 91 | start_slice_idx = end_slice_idx 92 | cands_prob = cands_state_mat.mean(dim=1, keepdim=True) # Keep the axis 93 | return cands_prob 94 | -------------------------------------------------------------------------------- /evaluate_SCIP.py: -------------------------------------------------------------------------------- 1 | """ Pure-SCIP evaluations (no learning involved). """ 2 | 3 | import sys 4 | import time 5 | import os 6 | from collections import OrderedDict 7 | import yaml 8 | import random 9 | import argparse 10 | 11 | import numpy as np 12 | import pyscipopt as scip 13 | import pickle 14 | 15 | from src.environments import * 16 | 17 | import faulthandler 18 | faulthandler.enable() 19 | 20 | # system-specific paths, key 'MYSYSTEM' to be specified in argparse --system 21 | paths = { 22 | 'MYSYSTEM': { 23 | 'out_dir': '', # path to output directory 24 | 'instances_dir': '', # path to MILP instances 25 | 'cutoff_dict': '', # path to pickled dictionary containing cutoff values 26 | }, 27 | } 28 | 29 | # solver parametric setting, key ('sandbox' or 'default') to be specified in argparse --setting 30 | settings = { 31 | 'sandbox': { 32 | 'heuristics': False, # enable primal heuristics 33 | 'cutoff': True, # provide cutoff (value needs to be passed to the environment) 34 | 'conflict_usesb': False, # use SB conflict analysis 35 | 'probing_bounds': False, # use probing bounds identified during SB 36 | 'checksol': False, # check LP solutions found during strong branching with propagation 37 | 'reevalage': 0, # number of intermediate LPs solved to trigger reevaluation of SB value 38 | }, 39 | 'default': { 40 | 'heuristics': True, 41 | 'cutoff': False, 42 | 'conflict_usesb': True, 43 | 'probing_bounds': True, 44 | 'checksol': True, 45 | 'reevalage': 10, 46 | }, 47 | } 48 | 49 | # limits in solvers 50 | limits = { 51 | 'node_limit': -1, 52 | 'time_limit': 3600., 53 | } 54 | 55 | if __name__ == '__main__': 56 | 57 | # parser definition 58 | parser = argparse.ArgumentParser(description='Parser for evaluation of SCIP branching policies.') 59 | parser.add_argument( 60 | '-n', 61 | '--name', 62 | type=str, 63 | help='Name of the MILP instance.mps.gz (containing extension) to be processed.' 64 | ) 65 | parser.add_argument( 66 | '-s', 67 | '--seed', 68 | type=int, 69 | default=0, 70 | help='Random seed for SCIP solver.' 71 | ) 72 | parser.add_argument( 73 | '-p', 74 | '--policy', 75 | type=str, 76 | default='relpscost', 77 | help='Name of SCIP branching rule to be used.' 78 | ) 79 | parser.add_argument( 80 | '--setting', 81 | type=str, 82 | default='sandbox', 83 | help='Solver parameters setting.' 84 | ) 85 | parser.add_argument( 86 | '--system', 87 | type=str, 88 | default='gz_local', 89 | help='System on which script is run.' 90 | ) 91 | parser.add_argument( 92 | '-v', 93 | '--verbose', 94 | action='store_true', 95 | default=False, 96 | help='Flag on verbosity.' 97 | ) 98 | args = parser.parse_args() 99 | 100 | # setup output directory and path to instance 101 | outfile_dir = os.path.join(paths[args.system]['out_dir'], 'SCIPEval_{}_{}_{}_{}'.format( 102 | args.system, args.setting, args.seed, args.policy 103 | )) 104 | if not os.path.exists(outfile_dir): 105 | os.makedirs(outfile_dir, exist_ok=True) 106 | instance_file_path = os.path.join(paths[args.system]['instances_dir'], args.name) # name contains extension mps.gz 107 | name = args.name.split('.')[0] 108 | 109 | # get cutoff 110 | cutoff_dict = pickle.load(open(paths[args.system]['cutoff_dict'], 'rb')) 111 | assert name in cutoff_dict 112 | 113 | # setup the environment and collect data 114 | env = SCIPEvalEnv() 115 | exp_dict = env.run_episode( 116 | instance=instance_file_path, 117 | name=name, 118 | policy=args.policy, 119 | scip_seed=args.seed, 120 | cutoff_value=cutoff_dict[name], 121 | scip_limits=limits, 122 | scip_params=settings[args.setting], 123 | verbose=args.verbose, 124 | ) 125 | 126 | # dump the dictionary 127 | f = open(os.path.join(outfile_dir, '{}_{}_{}_info.pkl'.format(name, args.seed, args.policy)), 'wb') 128 | pickle.dump(exp_dict, f) 129 | f.close() 130 | -------------------------------------------------------------------------------- /collect.py: -------------------------------------------------------------------------------- 1 | """ Collect MILP data for Imitation Learning (IL), by performing SCIP roll-outs. """ 2 | 3 | import os 4 | import yaml 5 | import random 6 | import argparse 7 | import pickle 8 | from collections import OrderedDict 9 | import numpy as np 10 | import pyscipopt as scip 11 | 12 | from src.environments import * 13 | 14 | import faulthandler 15 | faulthandler.enable() 16 | 17 | 18 | # system-specific paths, key 'MYSYSTEM' to be specified in argparse --system 19 | paths = { 20 | 'MYSYSTEM': { 21 | 'out_dir': '', # path to output directory 22 | 'instances_dir': '', # path to MILP instances 23 | 'cutoff_dict': '', # path to pickled dictionary containing cutoff values 24 | }, 25 | } 26 | 27 | # solver parametric setting, key ('sandbox' or 'default') to be specified in argparse --setting 28 | settings = { 29 | 'sandbox': { 30 | 'heuristics': False, # enable primal heuristics 31 | 'cutoff': True, # provide cutoff (value needs to be passed to the environment) 32 | 'conflict_usesb': False, # use SB conflict analysis 33 | 'probing_bounds': False, # use probing bounds identified during SB 34 | 'checksol': False, # check LP solutions found during strong branching with propagation 35 | 'reevalage': 0, # number of intermediate LPs solved to trigger reevaluation of SB value 36 | }, 37 | 'default': { 38 | 'heuristics': True, 39 | 'cutoff': False, 40 | 'conflict_usesb': True, 41 | 'probing_bounds': True, 42 | 'checksol': True, 43 | 'reevalage': 10, 44 | }, 45 | } 46 | 47 | # limits in solvers 48 | limits = { 49 | 'node_limit': -1, 50 | 'time_limit': 3600., 51 | } 52 | 53 | # collection branching rules 54 | collectors = { 55 | 'explorer': 'random', 56 | 'expert': 'relpscost', 57 | } 58 | 59 | # state dimensions 60 | # var_dim is the dimension of each candidate variable's input, i.e., the fixed dimension of matrix C_t 61 | # Tree_t is given by concatenation of two states, for a total dimension node_dim + mip_dim 62 | state_dims = { 63 | 'var_dim': 25, 64 | 'node_dim': 8, 65 | 'mip_dim': 53 66 | } 67 | 68 | 69 | if __name__ == '__main__': 70 | 71 | # parser definition 72 | parser = argparse.ArgumentParser(description='Parser for SCIP data collection.') 73 | parser.add_argument( 74 | '-n', 75 | '--name', 76 | type=str, 77 | help='Name of the MILP instance.mps.gz (containing extension) to be processed.' 78 | ) 79 | parser.add_argument( 80 | '-s', 81 | '--seed', 82 | type=int, 83 | default=0, 84 | help='Random seed for SCIP solver.' 85 | ) 86 | parser.add_argument( 87 | '-k', 88 | '--k_nodes', 89 | type=int, 90 | default=10, 91 | help='Number of initial nodes to be explored randomly, before starting data collection.' 92 | ) 93 | parser.add_argument( 94 | '--setting', 95 | type=str, 96 | default='sandbox', 97 | help='Solver parameters setting.' 98 | ) 99 | parser.add_argument( 100 | '--system', 101 | type=str, 102 | default='gz_local', 103 | help='System on which script is run.' 104 | ) 105 | parser.add_argument( 106 | '-v', 107 | '--verbose', 108 | action='store_true', 109 | default=False, 110 | help='Flag on verbosity.' 111 | ) 112 | args = parser.parse_args() 113 | 114 | # setup output directory and path to instance 115 | outfile_dir = os.path.join(paths[args.system]['out_dir'], 'SCIPCollect_{}_{}_{}_{}'.format( 116 | args.system, args.setting, args.seed, args.k_nodes 117 | )) 118 | if not os.path.exists(outfile_dir): 119 | os.makedirs(outfile_dir, exist_ok=True) 120 | instance_file_path = os.path.join(paths[args.system]['instances_dir'], args.name) # name contains extension mps.gz 121 | name = args.name.split('.')[0] 122 | 123 | # get cutoff 124 | cutoff_dict = pickle.load(open(paths[args.system]['cutoff_dict'], 'rb')) 125 | assert name in cutoff_dict 126 | 127 | # setup the environment and collect data 128 | env = SCIPCollectEnv() 129 | exp_dict, collect_dict = env.run_episode( 130 | instance=instance_file_path, 131 | name=name, 132 | explorer=collectors['explorer'], 133 | expert=collectors['expert'], 134 | k=args.k_nodes, 135 | state_dims=state_dims, 136 | scip_seed=args.seed, 137 | cutoff_value=cutoff_dict[name], 138 | scip_limits=limits, 139 | scip_params=settings[args.setting], 140 | verbose=args.verbose, 141 | ) 142 | 143 | # dump the dictionaries 144 | f = open(os.path.join(outfile_dir, '{}_{}_{}_info.pkl'.format(name, args.seed, args.k_nodes)), 'wb') 145 | pickle.dump(exp_dict, f) 146 | f.close() 147 | 148 | ff = open(os.path.join(outfile_dir, '{}_{}_{}_data.pkl'.format(name, args.seed, args.k_nodes)), 'wb') 149 | pickle.dump(collect_dict, ff) 150 | ff.close() 151 | -------------------------------------------------------------------------------- /src/utilities.py: -------------------------------------------------------------------------------- 1 | """ Utilities. """ 2 | 3 | 4 | def init_params(model, scip_limits, scip_params): 5 | """ 6 | :param model: scip.Model(), model instantiation 7 | :param scip_limits: dict, specifying SCIP parameter limits 8 | :param scip_params: dict, specifying SCIP parameter setting 9 | :return: - 10 | Initialize SCIP parameters for the model. 11 | """ 12 | 13 | model.setIntParam('display/verblevel', 0) 14 | 15 | # limits 16 | model.setLongintParam('limits/nodes', scip_limits['node_limit']) 17 | model.setRealParam('limits/time', scip_limits['time_limit']) 18 | 19 | # enable presolve and cuts (as in default) 20 | model.setIntParam('presolving/maxrounds', -1) # 0: off, -1: unlimited 21 | model.setIntParam('separating/maxrounds', -1) # 0 to disable local separation 22 | model.setIntParam('separating/maxroundsroot', -1) # 0 to disable root separation 23 | 24 | # disable reoptimization (as in default) 25 | model.setBoolParam('reoptimization/enable', False) 26 | 27 | # cutoff value is eventually set in env.run_episode 28 | # other parameters to be disabled in 'sandbox' setting 29 | model.setBoolParam('conflict/usesb', scip_params['conflict_usesb']) 30 | model.setBoolParam('branching/fullstrong/probingbounds', scip_params['probing_bounds']) 31 | model.setBoolParam('branching/relpscost/probingbounds', scip_params['probing_bounds']) 32 | model.setBoolParam('branching/checksol', scip_params['checksol']) 33 | model.setLongintParam('branching/fullstrong/reevalage', scip_params['reevalage']) 34 | 35 | # primal heuristics (54 total, 14 of which are disabled in default setting as well) 36 | if not scip_params['heuristics']: 37 | model.setIntParam('heuristics/actconsdiving/freq', -1) # disabled at default 38 | model.setIntParam('heuristics/bound/freq', -1) # disabled at default 39 | model.setIntParam('heuristics/clique/freq', -1) 40 | model.setIntParam('heuristics/coefdiving/freq', -1) 41 | model.setIntParam('heuristics/completesol/freq', -1) 42 | model.setIntParam('heuristics/conflictdiving/freq', -1) # disabled at default 43 | model.setIntParam('heuristics/crossover/freq', -1) 44 | model.setIntParam('heuristics/dins/freq', -1) # disabled at default 45 | model.setIntParam('heuristics/distributiondiving/freq', -1) 46 | model.setIntParam('heuristics/dualval/freq', -1) # disabled at default 47 | model.setIntParam('heuristics/farkasdiving/freq', -1) 48 | model.setIntParam('heuristics/feaspump/freq', -1) 49 | model.setIntParam('heuristics/fixandinfer/freq', -1) # disabled at default 50 | model.setIntParam('heuristics/fracdiving/freq', -1) 51 | model.setIntParam('heuristics/gins/freq', -1) 52 | model.setIntParam('heuristics/guideddiving/freq', -1) 53 | model.setIntParam('heuristics/zeroobj/freq', -1) # disabled at default 54 | model.setIntParam('heuristics/indicator/freq', -1) 55 | model.setIntParam('heuristics/intdiving/freq', -1) # disabled at default 56 | model.setIntParam('heuristics/intshifting/freq', -1) 57 | model.setIntParam('heuristics/linesearchdiving/freq', -1) 58 | model.setIntParam('heuristics/localbranching/freq', -1) # disabled at default 59 | model.setIntParam('heuristics/locks/freq', -1) 60 | model.setIntParam('heuristics/lpface/freq', -1) 61 | model.setIntParam('heuristics/alns/freq', -1) 62 | model.setIntParam('heuristics/nlpdiving/freq', -1) 63 | model.setIntParam('heuristics/mutation/freq', -1) # disabled at default 64 | model.setIntParam('heuristics/multistart/freq', -1) 65 | model.setIntParam('heuristics/mpec/freq', -1) 66 | model.setIntParam('heuristics/objpscostdiving/freq', -1) 67 | model.setIntParam('heuristics/octane/freq', -1) # disabled at default 68 | model.setIntParam('heuristics/ofins/freq', -1) 69 | model.setIntParam('heuristics/oneopt/freq', -1) 70 | model.setIntParam('heuristics/proximity/freq', -1) # disabled at default 71 | model.setIntParam('heuristics/pscostdiving/freq', -1) 72 | model.setIntParam('heuristics/randrounding/freq', -1) 73 | model.setIntParam('heuristics/rens/freq', -1) 74 | model.setIntParam('heuristics/reoptsols/freq', -1) 75 | model.setIntParam('heuristics/repair/freq', -1) # disabled at default 76 | model.setIntParam('heuristics/rins/freq', -1) 77 | model.setIntParam('heuristics/rootsoldiving/freq', -1) 78 | model.setIntParam('heuristics/rounding/freq', -1) 79 | model.setIntParam('heuristics/shiftandpropagate/freq', -1) 80 | model.setIntParam('heuristics/shifting/freq', -1) 81 | model.setIntParam('heuristics/simplerounding/freq', -1) 82 | model.setIntParam('heuristics/subnlp/freq', -1) 83 | model.setIntParam('heuristics/trivial/freq', -1) 84 | model.setIntParam('heuristics/trivialnegation/freq', -1) 85 | model.setIntParam('heuristics/trysol/freq', -1) 86 | model.setIntParam('heuristics/twoopt/freq', -1) # disabled at default 87 | model.setIntParam('heuristics/undercover/freq', -1) 88 | model.setIntParam('heuristics/vbounds/freq', -1) 89 | model.setIntParam('heuristics/veclendiving/freq', -1) 90 | model.setIntParam('heuristics/zirounding/freq', -1) 91 | -------------------------------------------------------------------------------- /models/feedforward.py: -------------------------------------------------------------------------------- 1 | """ Definitions of the IL models NoTree and TreeGate. """ 2 | 3 | import torch 4 | import torch.nn as nn 5 | from torch.nn import functional as F 6 | from models.modules import * 7 | 8 | 9 | class NoTreePolicy(nn.Module): 10 | """ 11 | NoTree policy. 12 | """ 13 | def __init__(self, var_dim, node_dim, mip_dim, hidden_size, depth=2, dropout=0.0, dim_reduce_factor=2, infimum=8, 14 | norm='none'): 15 | """ 16 | :param var_dim: int, dimension of variable state 17 | :param node_dim: int, dimension of node state 18 | :param mip_dim: int, dimension of mip state 19 | :param hidden_size: int, hidden size parameter for the branching policy network 20 | :param depth: int, depth parameter for the branching policy network 21 | :param dropout: float, dropout parameter for the branching policy network 22 | :param dim_reduce_factor: int, Dimension reduce factor of the branching policy network 23 | :param infimum: int, infimum parameter of the branching policy network 24 | :param norm: str, normalization type of the branching policy network 25 | """ 26 | super(NoTreePolicy, self).__init__() 27 | self.dropout = dropout 28 | self.norm = norm 29 | norm_layer = get_norm_layer(norm) 30 | 31 | # define the dimensionality of the features and the hidden states 32 | self.var_dim = var_dim 33 | self.node_dim = node_dim 34 | self.mip_dim = mip_dim 35 | self.hidden_size = hidden_size 36 | self.depth = depth 37 | 38 | # define CandidateEmbeddingNet 39 | self.CandidateEmbeddingNet = [nn.Linear(var_dim, hidden_size)] 40 | self.CandidateEmbeddingNet = nn.Sequential(*self.CandidateEmbeddingNet) 41 | 42 | # define the BranchingNet: 43 | unit_count = infimum 44 | input_dim = hidden_size 45 | self.n_layers = 1 46 | while unit_count < hidden_size: 47 | unit_count *= dim_reduce_factor 48 | self.n_layers += 1 49 | self.BranchingNet = [] 50 | for i in range(self.n_layers): 51 | output_dim = int(input_dim / dim_reduce_factor) 52 | if i < self.n_layers - 1: 53 | self.BranchingNet += [nn.Linear(input_dim, output_dim), 54 | norm_layer(output_dim), 55 | nn.ReLU(True)] 56 | elif i == self.n_layers - 1: 57 | self.BranchingNet += [nn.Linear(input_dim, output_dim)] 58 | input_dim = output_dim 59 | self.BranchingNet = nn.Sequential(*self.BranchingNet) 60 | 61 | # do the Xavier initialization for the linear layers 62 | for m in self.modules(): 63 | if isinstance(m, nn.Linear): 64 | nn.init.xavier_uniform_(tensor=m.weight, gain=nn.init.calculate_gain('relu')) 65 | 66 | elif isinstance(m, nn.LayerNorm): 67 | nn.init.constant_(m.weight, 1) 68 | nn.init.constant_(m.bias, 0) 69 | 70 | elif isinstance(m, nn.BatchNorm1d): 71 | nn.init.constant_(m.weight, 1) 72 | nn.init.constant_(m.bias, 0) 73 | 74 | def forward(self, cands_state_mat, node_state=None, mip_state=None): 75 | # go through the CandidateEmbeddingNet 76 | cands_state_mat = self.CandidateEmbeddingNet(cands_state_mat) 77 | 78 | # go through the BranchingNet 79 | cands_state_mat = self.BranchingNet(cands_state_mat) # No TreeState input to BranchingNet 80 | cands_prob = cands_state_mat.mean(dim=1, keepdim=True) # Keep the axis 81 | 82 | return cands_prob 83 | 84 | 85 | class TreeGatePolicy(nn.Module): 86 | """ 87 | TreeGate policy. 88 | """ 89 | def __init__(self, var_dim, node_dim, mip_dim, hidden_size, depth=2, dropout=0.0, dim_reduce_factor=2, infimum=8, 90 | norm='none'): 91 | """ 92 | :param var_dim: int, dimension of variable state 93 | :param node_dim: int, dimension of node state 94 | :param mip_dim: int, dimension of mip state 95 | :param hidden_size: int, hidden size parameter for the network 96 | :param depth: int, depth parameter for the network 97 | :param dropout: float, dropout parameter for the network 98 | :param dim_reduce_factor: int, Dimension reduce factor of the network 99 | :param infimum: int, infimum parameter of the network 100 | :param norm: str, normalization type of the network 101 | """ 102 | super(TreeGatePolicy, self).__init__() 103 | self.dropout = dropout 104 | self.norm = norm 105 | 106 | # define the dimensionality of the features and the hidden states 107 | self.var_dim = var_dim 108 | self.node_dim = node_dim 109 | self.mip_dim = mip_dim 110 | self.hidden_size = hidden_size 111 | self.depth = depth 112 | 113 | # define CandidateEmbeddingNet 114 | self.CandidateEmbeddingNet = [nn.Linear(var_dim, hidden_size)] 115 | self.CandidateEmbeddingNet = nn.Sequential(*self.CandidateEmbeddingNet) 116 | 117 | # define the TreeGateBranchingNet 118 | self.TreeGateBranchingNet = TreeGateBranchingNet(hidden_size, node_dim + mip_dim, dim_reduce_factor, 119 | infimum, norm, depth, hidden_size) 120 | 121 | # do the Xavier initialization for the linear layers 122 | for m in self.modules(): 123 | if isinstance(m, nn.Linear): 124 | nn.init.xavier_uniform_(tensor=m.weight, gain=nn.init.calculate_gain('relu')) 125 | 126 | elif isinstance(m, nn.LayerNorm): 127 | nn.init.constant_(m.weight, 1) 128 | nn.init.constant_(m.bias, 0) 129 | 130 | elif isinstance(m, nn.BatchNorm1d): 131 | nn.init.constant_(m.weight, 1) 132 | nn.init.constant_(m.bias, 0) 133 | 134 | def forward(self, cands_state_mat, node_state, mip_state): 135 | # go through the CandidateEmbeddingNet 136 | cands_state_mat = self.CandidateEmbeddingNet(cands_state_mat) 137 | 138 | # go through the TreeGateBranchingNet 139 | cands_prob = self.TreeGateBranchingNet(cands_state_mat, node_state, mip_state) 140 | 141 | return cands_prob 142 | -------------------------------------------------------------------------------- /evaluate_IL.py: -------------------------------------------------------------------------------- 1 | """ Imitation Learning (IL) evaluations, using SCIP. """ 2 | 3 | import sys 4 | import time 5 | import os 6 | import yaml 7 | import random 8 | import argparse 9 | import pickle 10 | from collections import OrderedDict 11 | 12 | import numpy as np 13 | import torch 14 | import pyscipopt as scip 15 | 16 | from src.environments import * 17 | from models.feedforward import * 18 | 19 | import faulthandler 20 | faulthandler.enable() 21 | 22 | # solver parametric setting, key ('sandbox' or 'default') to be specified in argparse --setting 23 | settings = { 24 | 'sandbox': { 25 | 'heuristics': False, # enable primal heuristics 26 | 'cutoff': True, # provide cutoff (value needs to be passed to the environment) 27 | 'conflict_usesb': False, # use SB conflict analysis 28 | 'probing_bounds': False, # use probing bounds identified during SB 29 | 'checksol': False, 30 | 'reevalage': 0, 31 | }, 32 | 'default': { 33 | 'heuristics': True, 34 | 'cutoff': False, 35 | 'conflict_usesb': True, 36 | 'probing_bounds': True, 37 | 'checksol': True, 38 | 'reevalage': 10, 39 | }, 40 | } 41 | 42 | # limits in solvers 43 | limits = { 44 | 'node_limit': -1, 45 | 'time_limit': 3600., 46 | } 47 | 48 | # state dimensions 49 | # var_dim is the dimension of each candidate variable's input, i.e., the fixed dimension of matrix C_t 50 | # Tree_t is given by concatenation of two states, for a total dimension node_dim + mip_dim 51 | state_dims = { 52 | 'var_dim': 25, 53 | 'node_dim': 8, 54 | 'mip_dim': 53 55 | } 56 | 57 | 58 | if __name__ == '__main__': 59 | 60 | # parser definition 61 | parser = argparse.ArgumentParser(description='Parser for IL evaluation experiments.') 62 | parser.add_argument( 63 | '-c', 64 | '--checkpoint', 65 | type=str, 66 | help='Pathway to torch checkpoint to be loaded.' 67 | ) 68 | parser.add_argument( 69 | '--cutoff_dict', 70 | type=str, 71 | help='Pathway to pickled dictionary containing cutoff values.' 72 | ) 73 | parser.add_argument( 74 | '--instances_dir', 75 | type=str, 76 | help='Pathway to the MILP instances.' 77 | ) 78 | parser.add_argument( 79 | '--out_dir', 80 | type=str, 81 | help='Pathway to save all the SCIP eval pickle files.' 82 | ) 83 | parser.add_argument( 84 | '-n', 85 | '--name', 86 | type=str, 87 | help='Name of the MILP instance.mps.gz (containing extension) to be processed.' 88 | ) 89 | parser.add_argument( 90 | '-s', 91 | '--seed', 92 | type=int, 93 | default=0, 94 | help='Random seed for SCIP solver.' 95 | ) 96 | parser.add_argument( 97 | '--setting', 98 | type=str, 99 | default='sandbox', 100 | help='Solver parameters setting.' 101 | ) 102 | parser.add_argument( 103 | '-v', 104 | '--verbose', 105 | action='store_true', 106 | default=False, 107 | help='Flag on verbosity.' 108 | ) 109 | args = parser.parse_args() 110 | 111 | # load a checkpoint path (cpu load of a gpu checkpoint) 112 | chkpnt = torch.load(args.checkpoint, map_location='cpu') 113 | print('Checkpoint loaded from path {}...'.format(args.checkpoint)) 114 | 115 | # read config from checkpoint: the policy parameters are inferred from the checkpoint args 116 | checkpoint_args = chkpnt['args'] 117 | 118 | # set all random seeds 119 | scip_seed = args.seed 120 | 121 | instance_file_path = os.path.join(args.instances_dir, args.name) # name contains extension mps.gz 122 | name = args.name.split('.')[0] 123 | 124 | # set device (cpu for eval) 125 | device = torch.device('cpu') 126 | 127 | # get cutoff 128 | cutoff_dict = pickle.load(open(args.cutoff_dict, 'rb')) 129 | assert name in cutoff_dict 130 | 131 | # setup the environment and a policy within it 132 | env = ILEvalEnv(device=device) 133 | 134 | if checkpoint_args.policy_type == 'TreeGatePolicy': 135 | policy = TreeGatePolicy( 136 | var_dim=state_dims['var_dim'], 137 | node_dim=state_dims['node_dim'], 138 | mip_dim=state_dims['mip_dim'], 139 | hidden_size=checkpoint_args.hidden_size, 140 | depth=checkpoint_args.depth, 141 | dropout=checkpoint_args.dropout, 142 | dim_reduce_factor=checkpoint_args.dim_reduce_factor, 143 | infimum=checkpoint_args.infimum, 144 | norm=checkpoint_args.norm, 145 | ) 146 | # set the policy into eval mode 147 | policy.eval() 148 | # load the policy parameters 149 | policy.load_state_dict(chkpnt['state_dict']) 150 | policy = policy.to(device) 151 | policy_name = 'TreeGatePolicy' 152 | elif checkpoint_args.policy_type == 'NoTreePolicy': 153 | policy = NoTreePolicy( 154 | var_dim=state_dims['var_dim'], 155 | node_dim=state_dims['node_dim'], 156 | mip_dim=state_dims['mip_dim'], 157 | hidden_size=checkpoint_args.hidden_size, 158 | depth=checkpoint_args.depth, 159 | dropout=checkpoint_args.dropout, 160 | dim_reduce_factor=checkpoint_args.dim_reduce_factor, 161 | infimum=checkpoint_args.infimum, 162 | norm=checkpoint_args.norm, 163 | ) 164 | # set the policy into eval mode 165 | policy.eval() 166 | # load the policy parameters 167 | policy.load_state_dict(chkpnt['state_dict']) 168 | policy = policy.to(device) 169 | policy_name = 'NoTreePolicy' 170 | else: 171 | raise ValueError('A valid policy should be set.') 172 | 173 | # main evaluation 174 | eps = np.finfo(np.float32).eps.item() 175 | with torch.no_grad(): 176 | exp_dict = env.run_episode( 177 | instance=instance_file_path, 178 | name=args.name.split('.')[0], 179 | policy=policy, 180 | policy_name=policy_name, 181 | state_dims=state_dims, 182 | scip_seed=args.seed, 183 | cutoff_value=cutoff_dict[name], 184 | scip_limits=limits, 185 | scip_params=settings[args.setting], 186 | verbose=args.verbose, 187 | ) 188 | 189 | # dump the exp_dict 190 | f = open(os.path.join(args.out_dir, '{}_{}_ILEval_info.pkl'.format(name, args.seed)), 'wb') 191 | pickle.dump(exp_dict, f) 192 | f.close() 193 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Parameterizing Branch-and-Bound Search Trees to Learn Branching Policies 2 | 3 | Giulia Zarpellon, Jason Jo, Andrea Lodi and Yoshua Bengio 4 | 5 | --- 6 | 7 | This is the code for our paper ***Parameterizing Branch-and-Bound Search Trees to Learn Branching Policies***, accepted at AAAI 2021. 8 | 9 | In this project, we 10 | + tackle the problem of _branching variable selection_ in Branch-and-Bound (B&B) for Mixed-Integer Linear Programming (MILP) problems; 11 | + seek to learn branching policies that _generalize across **heterogeneous MILPs**_, regardless of the instances’ structure and formulation size. 12 | 13 | To achieve this broader generalization scope, we 14 | + develop parameterizations of the _candidate variables_ and of the _search trees_ (_C_t, _Tree_t), and 15 | + design two DNN architectures (NoTree and TreeGate) that handle candidate sets of varying size. 16 | 17 | 18 | 19 | Our results on MILP benchmark instances show that 20 | + incorporating a search-tree context to modulate branching aids generalization (with better test accuracy and smaller B&B trees); 21 | + the GCNN paradigm alone ([Gasse et al. 2019](https://arxiv.org/abs/1906.01629)) does not allow to generalize to new instances across different classes. 22 | 23 | Here are our MILP evaluation results using the solver SCIP: 24 | 25 | 26 | 27 | Below we provide links and instructions to our paper, source code, dataset, trained models and supplementary materials (SM). 28 | 29 | --- 30 | 31 | ## Paper and supplementary materials 32 | 33 | * [AAAI-21 Official version](https://ojs.aaai.org/index.php/AAAI/article/view/16512) - does not include SM. 34 | * [arXiv version](https://arxiv.org/abs/2002.05120) - full version with SM. 35 | 36 | Please use the following BibTeX to cite our paper and/or dataset: 37 | 38 | ``` 39 | @article{Zarpellon_Jo_Lodi_Bengio_2021, 40 | title={Parameterizing Branch-and-Bound Search Trees to Learn Branching Policies}, 41 | volume={35}, 42 | url={https://ojs.aaai.org/index.php/AAAI/article/view/16512}, 43 | number={5}, 44 | journal={Proceedings of the AAAI Conference on Artificial Intelligence}, 45 | author={Zarpellon, Giulia and Jo, Jason and Lodi, Andrea and Bengio, Yoshua}, 46 | year={2021}, 47 | month={May}, 48 | pages={3931-3939} 49 | } 50 | ``` 51 | 52 | ## Talks and presentations 53 | 54 | * February 2-9, 2021 - Poster at the [35th AAAI Conference on Artificial Intelligence](https://aaai.org/Conferences/AAAI-21/) by Giulia 55 | Zarpellon. [[Poster]](graphics/AAAI21-Poster-GZarpellon.pdf). 56 | 57 | * June 4, 2020 - Presentation at the [SCIP Online Workshop 2020](https://scipopt.org/workshop2020/) by Giulia Zarpellon. 58 | [[Youtube video]](https://www.youtube.com/watch?v=9iIiA-wKZ2w) | [[Slides]](graphics/HO-SCIPWorkshop-GZarpellon.pdf). 59 | 60 | ## Installation and dependencies 61 | 62 | We use [SCIP 6.0.1](https://scip.zib.de/index.php#download) and we use a customized version of PySCIPOpt, which we provide here: 63 | https://github.com/ds4dm/PySCIPOpt/tree/branch-search-trees. 64 | 65 | Once SCIP 6.0.1 has been installed, our `branch-search-trees` customized version of PySCIPOpt can be installed via `pip`: 66 | 67 | ``` 68 | pip install git+https://github.com/ds4dm/PySCIPOpt.git@branch-search-trees 69 | ``` 70 | 71 | All other requirements are in `requirements.txt`. 72 | 73 | ## Dataset 74 | 75 | The `branch-search-trees` dataset is hosted at the Open Science Framework (OSF): 76 | https://osf.io/uvg5f/. 77 | 78 | Our dataset consists of the following files: 79 | * `train.h5`: a H5 file containing all the train data. 80 | * `val.h5`: a H5 file containing all the validation data. 81 | * `test.h5`: a H5 containing all the test data. 82 | * `train_instances/`: a directory containing the 19 train MILP instances. 83 | * `test_instances/`: a directory containing 8 test MILP instances. 84 | * `cutoff_dict.pkl`: a pickle file containing all the cutoff values for the instances. 85 | * `instance_dict.pkl`: a pickle file containing the names of instances and if they belong to the `train` or `test` split. 86 | 87 | ### How to create the dataset 88 | 89 | We share how we produced the above dataset. 90 | Note that exact replication of our dataset collection may be dependent on the machine hardware. 91 | Nonetheless, we provide the code for transparency and in case others want to produce their own data. 92 | 93 | #### Data collection from SCIP 94 | 95 | Specify system-specific paths in `collect.py`: 96 | ``` 97 | paths = { 98 | 'MYSYSTEM': { 99 | 'out_dir': '', # path to output directory 100 | 'instances_dir': '', # path to MILP instances 101 | 'cutoff_dict': '', # path to pickled dictionary containing cutoff values 102 | }, 103 | } 104 | ``` 105 | Data collection runs instance-wise, as: 106 | ```buildoutcfg 107 | python collect.py -n INSTANCE_NAME \ 108 | -s SCIP_SEED \ 109 | -k K_RANDOM_PAR \ 110 | --setting SCIP_SETTING \ 111 | --system MYSYSTEM \ 112 | -v 113 | ``` 114 | Note that `INSTANCE_NAME` contains file extension, but not path to files (e.g., `air05.mps.gz`). 115 | All MILP instances should be contained in `paths['MYSYSTEM']['instances_dir]`. 116 | For each roll-out a pickle file is saved in `paths['MYSYSTEM']['out_dir]`. 117 | 118 | #### HDF5 creation 119 | 120 | Once we have all the SCIP collect files, we use `utilities/convert_multi_instance_pickle_to_hdf5.py` to convert all 121 | the collect pickle files into a single H5 file. We refer to the main paper for the exact train/val/test split and leave 122 | to the user to partition the collected files in the appropriate manner. 123 | 124 | #### Note on PySCIPOpt states 125 | 126 | Our custom SCIP functions and input parameterizations are defined in `src/pyscipopt/scip.pyx` of the PySCIPOpt branch `branch-search-trees` 127 | (see link above). 128 | In particular, the parameterization of the search tree _Tree_t is given by concatenation of 129 | `getNodeState` and `getMIPState`, while the candidate variables representation _C_t is defined in `getCandsState`. 130 | 131 | ## Experiments 132 | 133 | ### Imitation Learning (IL) 134 | 135 | To train a policy using our optimization settings: 136 | ```buildoutcfg 137 | 138 | python train_test_IL.py --policy_type POLICY_TYPE \ 139 | --hidden_size HIDDEN \ 140 | --depth DEPTH \ 141 | --train_h5_path PATH_TO_TRAIN_H5 \ 142 | --val_h5_path PATH_TO_VAL_H5 \ 143 | --test_h5_path PATH_TO_TEST_H5 \ 144 | --out_dir OUT_DIR_PATH \ 145 | --use_gpu \ 146 | --lr LR 147 | ``` 148 | 149 | For the `NoTree` policies, depth is not a relevant hyper-parameter, so you can use `DEPTH=1`. 150 | 151 | To evaluate a trained policy: 152 | ```buildoutcfg 153 | 154 | python evaluate_IL.py --checkpoint PATH_TO_PYTORCH_CHECKPOINT \ 155 | --cutoff_dict PATH_TO_CUTOFF_DICT \ 156 | --instances_dir PATH_TO_RELEVANT_INSTANCE_DIR \ 157 | --out_dir PATH_TO_SAVE_SCIP_EVAL_DATA \ 158 | --name INSTANCE_NAME \ 159 | --seed SCIP_SEED 160 | ``` 161 | 162 | In the `trained-models/` directory we provide the trained `NoTree` and `TreeGate` models and their SCIP evaluations from our paper. 163 | Best parameters and results from the GCNN models obtained by running the code of [Gasse at al.](https://github.com/ds4dm/learn2branch) are also included. 164 | 165 | ### SCIP evaluations 166 | 167 | Similarly to what is done in data collection, specify system-specific paths in `evaluate_SCIP.py`: 168 | ``` 169 | paths = { 170 | 'MYSYSTEM': { 171 | 'out_dir': '', # path to output directory 172 | 'instances_dir': '', # path to MILP instances 173 | 'cutoff_dict': '', # path to pickled dictionary containing cutoff values 174 | }, 175 | } 176 | ``` 177 | Then specify instance, seed, SCIP branching policy (e.g., `relpscost`, `pscost`, `random`) and settings as: 178 | ```buildoutcfg 179 | python evaluate_SCIP.py -n INSTANCE_NAME \ 180 | -s SCIP_SEED \ 181 | -p SCIP_POLICY 182 | --setting SCIP_SETTING 183 | --system MYSTSTEM 184 | ``` 185 | 186 | ## Questions? 187 | 188 | Please feel free to submit a GitHub issue if you have any questions or find any bugs. 189 | We do not guarantee any support, but will do our best if we can help. 190 | -------------------------------------------------------------------------------- /src/branchers.py: -------------------------------------------------------------------------------- 1 | """ Brancher classes. """ 2 | 3 | from collections import OrderedDict 4 | import pyscipopt as scip 5 | import numpy as np 6 | 7 | import torch 8 | from torch.distributions import Categorical 9 | import torch.nn.functional as F 10 | 11 | 12 | class Brancher(scip.Branchrule): 13 | """ 14 | Base class for scip.Branchrule subclasses. 15 | Callback method branchexeclp is customized in each subclass. 16 | """ 17 | def initialize(self): 18 | pass 19 | 20 | def branchinit(self): 21 | pass 22 | 23 | 24 | """ IL branchers """ 25 | 26 | 27 | class ILEvalBrancher(Brancher): 28 | """ 29 | Brancher using trained Imitation Learning policy and ILEvalEnv. 30 | Evaluation mode is deterministic. 31 | """ 32 | 33 | def __init__(self, model, device, policy, state_dims, verbose): 34 | super(ILEvalBrancher, self).__init__() 35 | 36 | self.model = model 37 | self.device = device 38 | self.policy = policy.to(device) 39 | self.var_dim = state_dims['var_dim'] 40 | self.node_dim = state_dims['node_dim'] 41 | self.mip_dim = state_dims['mip_dim'] 42 | self.verbose = verbose 43 | 44 | self.branch_count = 0 45 | self.branchexec_count = 0 46 | self.episode_rewards = [] 47 | 48 | def choose(self, probs): 49 | if len(probs.size()) == 0: 50 | probs = probs.unsqueeze(0) 51 | confidence_score, branch_decision = probs.max(0) 52 | return confidence_score, branch_decision 53 | 54 | def branchexeclp(self, allowaddcons): 55 | 56 | self.branchexec_count += 1 57 | 58 | # get state representations 59 | cands, cands_pos, cands_state_mat = self.model.getCandsState(self.var_dim, self.branchexec_count) 60 | node_state = self.model.getNodeState(self.node_dim) 61 | mip_state = self.model.getMIPState(self.mip_dim) 62 | 63 | # torchify states 64 | cands_state_mat = torch.from_numpy(cands_state_mat.astype('float32')).to(self.device) 65 | node_state = torch.from_numpy(node_state.astype('float32')).to(self.device) 66 | mip_state = torch.from_numpy(mip_state.astype('float32')).to(self.device) 67 | 68 | # select action from the policy probs 69 | probs = self.policy(cands_state_mat, node_state, mip_state) 70 | probs = probs.squeeze() 71 | confidence_score, action = self.choose(probs) # the chosen variable 72 | 73 | # define the SCIP branch var 74 | var = cands[action.item()] 75 | # branch on the selected variable (SCIP Variable object) 76 | self.model.branchVar(var) 77 | self.branch_count += 1 78 | 79 | if self.verbose: 80 | print('\tBranch count: {}. Selected var: {}.'.format( 81 | self.branch_count, cands_pos[action.item()])) 82 | 83 | result = scip.SCIP_RESULT.BRANCHED 84 | if result == scip.SCIP_RESULT.BRANCHED: 85 | _, chosen_variable, *_ = self.model.getChildren()[0].getBranchInfos() 86 | assert chosen_variable is not None 87 | assert chosen_variable.isInLP() 88 | 89 | return {'result': result} 90 | 91 | def finalize(self): 92 | pass 93 | 94 | def finalize_zero_branch(self): 95 | pass 96 | 97 | 98 | """ SCIP branchers """ 99 | 100 | 101 | class SCIPCollectBrancher(Brancher): 102 | """ 103 | Brancher to run SCIP data collection for imitation learning, with SCIPCollectEnv class. 104 | Instead of a single policy, 'explorer' and 'expert' rules are specified 105 | (each should be a string corresponding to a SCIP branching rule). 106 | The explorer policy runs for the top k branching decisions, then the expert takes over. 107 | Data is collected from expert decisions only. 108 | """ 109 | def __init__(self, model, explorer, expert, k, state_dims, verbose): 110 | super(SCIPCollectBrancher, self).__init__() 111 | 112 | self.model = model 113 | self.explorer = explorer 114 | self.expert = expert 115 | self.k = k 116 | self.var_dim = state_dims['var_dim'] 117 | self.node_dim = state_dims['node_dim'] 118 | self.mip_dim = state_dims['mip_dim'] 119 | self.verbose = verbose 120 | 121 | # counters and data structures 122 | self.branchexec_count = 0 123 | self.branch_count = 0 124 | self.explore = True 125 | self.explorer_count = 0 126 | self.collect_count = 0 # data collect counter 127 | self.collect_dict = OrderedDict() # data dictionary to be filled with states and labels 128 | self.nnodes_list = [] 129 | self.nnodesleft_list = [] 130 | 131 | def branchexeclp(self, allowaddcons): 132 | 133 | # determine whether explorer or expert should be run 134 | if self.branch_count < self.k: 135 | self.explore = True 136 | else: 137 | self.explore = False 138 | 139 | if self.explore: 140 | # branch with explorer 141 | assert isinstance(self.explorer, str) 142 | self.branchexec_count += 1 143 | self.nnodes_list.append(self.model.getNNodes()) 144 | self.nnodesleft_list.append(self.model.getNNodesLeft()) 145 | result = self.model.executeBranchRule(self.explorer, allowaddcons) 146 | if result == scip.SCIP_RESULT.BRANCHED: 147 | self.explorer_count += 1 148 | self.branch_count += 1 149 | if self.verbose: 150 | print('\tExplore count: {} (exec. {}).'.format(self.explorer_count, self.branchexec_count)) 151 | else: 152 | 153 | # get state representations 154 | cands, cands_pos, cands_state_mat = self.model.getCandsState(self.var_dim, self.branchexec_count) 155 | cands_state_mat.astype('float32') 156 | node_state = self.model.getNodeState(self.node_dim).astype('float32') 157 | mip_state = self.model.getMIPState(self.mip_dim).astype('float32') 158 | 159 | # branch with expert 160 | assert isinstance(self.expert, str) 161 | self.branchexec_count += 1 162 | self.nnodes_list.append(self.model.getNNodes()) 163 | self.nnodesleft_list.append(self.model.getNNodesLeft()) 164 | result = self.model.executeBranchRule(self.expert, allowaddcons) 165 | if result == scip.SCIP_RESULT.BRANCHED: 166 | self.collect_count += 1 167 | self.branch_count += 1 168 | _, chosen_variable, *_ = self.model.getChildren()[0].getBranchInfos() 169 | # chosen_variable is a SCIP Variable object 170 | assert chosen_variable is not None 171 | assert chosen_variable.isInLP() 172 | 173 | self.collect_dict[self.collect_count] = { 174 | 'cands_state_mat': cands_state_mat, 175 | 'mip_state': mip_state, 176 | 'node_state': node_state, 177 | 'varLPpos': chosen_variable.getCol().getLPPos(), 178 | 'varRELpos': cands_pos.index(chosen_variable.getCol().getLPPos()), 179 | } 180 | if self.verbose: 181 | print('\tBranch count: {} (exec. {}). ' 182 | 'Selected varLPpos: {}. ' 183 | 'Selected varRELpos: {}. ' 184 | 'Num cands: {}'.format(self.branch_count, self.branchexec_count, 185 | chosen_variable.getCol().getLPPos(), 186 | cands_pos.index(chosen_variable.getCol().getLPPos()), 187 | len(cands), 188 | )) 189 | 190 | return {'result': result} 191 | 192 | def finalize(self): 193 | pass 194 | 195 | 196 | class SCIPEvalBrancher(Brancher): 197 | """ 198 | Brancher for SCIP evaluation run, with SCIPEvalEnv class. 199 | A single branching policy is specified (a string corresponding to a SCIP branching rule). 200 | """ 201 | def __init__(self, model, policy, verbose): 202 | super(SCIPEvalBrancher, self).__init__() 203 | 204 | self.model = model 205 | self.policy = policy 206 | self.verbose = verbose 207 | 208 | # counters and data structures 209 | self.branchexec_count = 0 210 | self.branch_count = 0 211 | self.nnodes_list = [] 212 | self.nnodesleft_list = [] 213 | 214 | def branchexeclp(self, allowaddcons): 215 | 216 | # SCIP branching rule 217 | assert isinstance(self.policy, str) 218 | self.branchexec_count += 1 219 | self.nnodes_list.append(self.model.getNNodes()) 220 | self.nnodesleft_list.append(self.model.getNNodesLeft()) 221 | result = self.model.executeBranchRule(self.policy, allowaddcons) 222 | if result == scip.SCIP_RESULT.BRANCHED: 223 | self.branch_count += 1 224 | _, chosen_variable, *_ = self.model.getChildren()[0].getBranchInfos() 225 | assert chosen_variable is not None 226 | assert chosen_variable.isInLP() 227 | 228 | if self.verbose: 229 | print('\tBranch count: {} (exec. {}).'.format(self.branch_count, self.branchexec_count)) 230 | 231 | return {'result': result} 232 | 233 | def finalize(self): 234 | pass 235 | -------------------------------------------------------------------------------- /trained-models/gcnn/gcnn_20200501-101957-testset.csv: -------------------------------------------------------------------------------- 1 | policy,seed,type,instance,nnodes,nlps,stime,gap,status,ndomchgs,ncutoffs,walltime,proctime 2 | internal:relpscost,0,big,data/instances/ilbb/test_instances/seymour1.mps.gz,861,1106,41.47,0.0,infeasible,50,0,43.923085095360875,43.908114595 3 | internal:relpscost,1,big,data/instances/ilbb/test_instances/seymour1.mps.gz,941,1322,53.47,0.0,infeasible,79,0,56.352909073233604,56.367393289999995 4 | internal:relpscost,2,big,data/instances/ilbb/test_instances/seymour1.mps.gz,811,1084,42.03,0.0,infeasible,68,0,44.332558393478394,44.343557112 5 | internal:relpscost,3,big,data/instances/ilbb/test_instances/seymour1.mps.gz,933,1203,46.67,0.0,infeasible,53,0,49.31708409264684,49.32956211000001 6 | internal:relpscost,4,big,data/instances/ilbb/test_instances/seymour1.mps.gz,795,1059,43.24,0.0,infeasible,60,0,45.6530096642673,45.663205229 7 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/seymour1.mps.gz,237202,144517,3600.0,0.009011067277760203,timelimit,0,0,3818.3772245701402,3837.1532521440004 8 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/seymour1.mps.gz,365424,201451,3600.0,0.0028472529298778602,timelimit,0,0,3856.79994966276,3884.871513478 9 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/seymour1.mps.gz,376867,212840,3600.0,0.001411864430882775,timelimit,0,0,3860.7051893360913,3885.7253891480004 10 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/seymour1.mps.gz,351686,204750,3600.0,0.0014475487607647508,timelimit,0,0,3856.857204871252,3885.114365667001 11 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/seymour1.mps.gz,287738,166911,3600.0,0.004509375541617447,timelimit,0,0,3833.387283243239,3855.970981921999 12 | internal:relpscost,0,big,data/instances/ilbb/test_instances/map18.mps.gz,269,327,164.44,0.0,infeasible,38,0,170.58635290712118,170.65609277800104 13 | internal:relpscost,1,big,data/instances/ilbb/test_instances/map18.mps.gz,307,369,145.05,0.0,infeasible,40,0,150.60329265892506,150.66493767700013 14 | internal:relpscost,2,big,data/instances/ilbb/test_instances/map18.mps.gz,273,334,169.99,0.0,infeasible,38,0,175.73993356525898,175.79857570699824 15 | internal:relpscost,3,big,data/instances/ilbb/test_instances/map18.mps.gz,273,345,177.95,0.0,infeasible,41,0,183.97514869831502,184.02854589399794 16 | internal:relpscost,4,big,data/instances/ilbb/test_instances/map18.mps.gz,233,292,144.83,0.0,infeasible,41,0,150.63554762490094,150.68788358700112 17 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/map18.mps.gz,6071,6145,858.73,0.0,infeasible,0,0,881.2338130008429,880.3903609110021 18 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/map18.mps.gz,1613,1608,220.38,0.0,infeasible,0,0,227.95192024484277,227.67267335499855 19 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/map18.mps.gz,15540,17737,3600.0,0.032047616996222696,timelimit,0,0,3674.9474390726537,3672.501769118997 20 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/map18.mps.gz,2101,2004,266.49,0.0,infeasible,0,0,274.94811912998557,274.5715702319976 21 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/map18.mps.gz,2741,2570,281.55,0.0,infeasible,0,0,290.9049463067204,290.6089696679992 22 | internal:relpscost,0,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,284,488,37.6,0.0,infeasible,110,0,39.545258302241564,39.553873531000136 23 | internal:relpscost,1,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,543,703,35.05,0.0,infeasible,135,0,36.8899605050683,36.897792438998295 24 | internal:relpscost,2,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,305,554,35.41,0.0,infeasible,114,0,37.31504974514246,37.32352231600089 25 | internal:relpscost,3,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,56,310,31.78,0.0,infeasible,45,0,33.65487418696284,33.66291720499794 26 | internal:relpscost,4,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,1,311,39.59,0.0,infeasible,0,0,41.827799102291465,41.83699070000148 27 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,388188,315603,3600.0,0.040637691851540696,timelimit,0,0,3870.8640618976206,3893.5858709709973 28 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,224336,211330,1852.7,0.0,infeasible,0,0,1992.8302508853376,2009.7966513409992 29 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,133893,120870,3600.0,0.10883682018554787,timelimit,0,0,3745.6581891756505,3754.9326559760048 30 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,224842,180728,3600.0,0.15036081183337158,timelimit,0,0,3790.554162234068,3802.897454727994 31 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/mine-166-5.mps.gz,262707,230733,3600.0,0.023944220344141655,timelimit,0,0,3804.150127943605,3819.286633771 32 | internal:relpscost,0,big,data/instances/ilbb/test_instances/neos18.mps.gz,931,1824,24.91,0.0,infeasible,487,0,27.799392614513636,27.812974029999168 33 | internal:relpscost,1,big,data/instances/ilbb/test_instances/neos18.mps.gz,1911,3272,33.87,0.0,infeasible,687,0,37.96118732355535,37.97590703300375 34 | internal:relpscost,2,big,data/instances/ilbb/test_instances/neos18.mps.gz,4161,5498,41.58,0.0,infeasible,844,0,47.009601106867194,47.03152877599496 35 | internal:relpscost,3,big,data/instances/ilbb/test_instances/neos18.mps.gz,4376,5917,44.34,0.0,infeasible,1179,0,49.82344737648964,49.84783333600353 36 | internal:relpscost,4,big,data/instances/ilbb/test_instances/neos18.mps.gz,7137,9630,68.99,0.0,infeasible,1804,0,77.79626215994358,77.83281290100422 37 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/neos18.mps.gz,25498,21726,213.27,0.0,infeasible,0,0,231.37037949077785,235.19713878900075 38 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/neos18.mps.gz,28371,20808,181.13,0.0,infeasible,0,0,197.77174206264317,201.8167106059991 39 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/neos18.mps.gz,12261,10025,86.24,0.0,infeasible,0,0,93.99803196825087,95.71575555400341 40 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/neos18.mps.gz,36036,30373,230.25,0.0,infeasible,0,0,252.14773767255247,257.0083563169974 41 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/neos18.mps.gz,351246,274413,1829.23,0.0,infeasible,0,0,2008.138923747465,2051.4392423460013 42 | internal:relpscost,0,big,data/instances/ilbb/test_instances/neos11.mps.gz,1983,2812,166.45,0.0,infeasible,207,0,176.16720720939338,176.2477753589992 43 | internal:relpscost,1,big,data/instances/ilbb/test_instances/neos11.mps.gz,2138,3173,172.36,0.0,infeasible,299,0,182.0746031086892,182.16184669700306 44 | internal:relpscost,2,big,data/instances/ilbb/test_instances/neos11.mps.gz,2951,4225,221.52,0.0,infeasible,460,0,234.59480214491487,234.7058869090033 45 | internal:relpscost,3,big,data/instances/ilbb/test_instances/neos11.mps.gz,2321,3615,196.92,0.0,infeasible,397,0,208.30049264617264,208.40137046799646 46 | internal:relpscost,4,big,data/instances/ilbb/test_instances/neos11.mps.gz,4210,6446,312.34,0.0,infeasible,769,0,331.1065186429769,331.26296570300474 47 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/neos11.mps.gz,4232,3939,153.87,0.0,infeasible,0,0,162.78150269575417,163.39797871200426 48 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/neos11.mps.gz,2361,2508,140.91,0.0,infeasible,0,0,148.20928032137454,148.57761167200078 49 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/neos11.mps.gz,1672,1825,101.81,0.0,infeasible,0,0,107.15635891072452,107.38926374800212 50 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/neos11.mps.gz,702,810,30.45,0.0,infeasible,0,0,32.06921677105129,32.17143176000536 51 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/neos11.mps.gz,959,1062,53.4,0.0,infeasible,0,0,56.22076442837715,56.37782027000503 52 | internal:relpscost,0,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,3671,4700,105.65,0.0,infeasible,138,0,112.68157890625298,112.72865225499845 53 | internal:relpscost,1,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,3232,4120,99.72,0.0,infeasible,129,0,106.08625801838934,106.13632520400279 54 | internal:relpscost,2,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,4026,5336,125.9,0.0,infeasible,259,0,133.89843938313425,133.96509013399918 55 | internal:relpscost,3,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,3381,4256,100.63,0.0,infeasible,88,0,107.05476379580796,107.10694062499533 56 | internal:relpscost,4,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,3200,3924,81.03,0.0,infeasible,111,0,86.56201627478004,86.60332819500036 57 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,267838,250779,3600.0,0.27912169705991813,timelimit,0,0,3871.4299139212817,3904.146188323997 58 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,12485,12247,154.68,0.0,infeasible,0,0,166.53144459985197,168.0001594830028 59 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,13331,12585,143.2,0.0,infeasible,0,0,154.88619865477085,156.48333238000487 60 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,24768,24368,292.57,0.0,infeasible,0,0,315.8231510464102,318.5908534609989 61 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/ns1830653.mps.gz,5654,5549,70.41,0.0,infeasible,0,0,75.94821078702807,76.60044347299845 62 | internal:relpscost,0,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,25,154,5.42,0.0,infeasible,40,0,5.820739151909947,5.824017368999193 63 | internal:relpscost,1,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,7,80,5.01,0.0,infeasible,10,0,5.3296333607286215,5.332673052005703 64 | internal:relpscost,2,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,79,193,5.44,0.0,infeasible,31,0,5.813483413308859,5.816749518002325 65 | internal:relpscost,3,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,9,114,6.04,0.0,infeasible,9,0,6.381810754537582,6.38542260399845 66 | internal:relpscost,4,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,1,34,2.13,0.0,infeasible,0,0,2.3159931674599648,2.3172904009988997 67 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,10222,7310,100.58,0.0,infeasible,0,0,106.30533783324063,107.27759106300073 68 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,621781,320403,3600.0,0.0006814732166809869,timelimit,0,0,3917.357445580885,3969.815120228006 69 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,486304,241638,3600.0,0.0020069305909350453,timelimit,0,0,3866.099672984332,3901.8105680709996 70 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,658896,403163,3600.0,0.0002880478100167589,timelimit,0,0,3953.3417012710124,3999.246789589997 71 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/nu25-pr12.mps.gz,1,98,3.53,0.0,infeasible,0,0,3.8463060799986124,3.849305526993703 72 | internal:relpscost,0,big,data/instances/ilbb/test_instances/rail507.mps.gz,471,557,138.24,0.0,infeasible,33,0,140.64998492226005,140.6555565219969 73 | internal:relpscost,1,big,data/instances/ilbb/test_instances/rail507.mps.gz,579,675,162.73,0.0,infeasible,33,0,165.21226185560226,165.27093162600067 74 | internal:relpscost,2,big,data/instances/ilbb/test_instances/rail507.mps.gz,595,670,173.48,0.0,infeasible,29,0,176.14313868246973,176.03945759499766 75 | internal:relpscost,3,big,data/instances/ilbb/test_instances/rail507.mps.gz,561,643,165.23,0.0,infeasible,33,0,167.7851420789957,167.7841955400072 76 | internal:relpscost,4,big,data/instances/ilbb/test_instances/rail507.mps.gz,519,636,173.42,0.0,infeasible,44,0,176.0132389701903,176.01393506101158 77 | gcnn:baseline,0,big,data/instances/ilbb/test_instances/rail507.mps.gz,82200,49441,3600.01,0.008927949726950355,timelimit,0,0,3761.5085901357234,3752.5548983680055 78 | gcnn:baseline,1,big,data/instances/ilbb/test_instances/rail507.mps.gz,64969,42118,3600.01,0.009818279227331606,timelimit,0,0,3749.254914075136,3739.468535729 79 | gcnn:baseline,2,big,data/instances/ilbb/test_instances/rail507.mps.gz,71559,37205,3600.01,0.010150503603810035,timelimit,0,0,3764.1079667024314,3752.393205497996 80 | gcnn:baseline,3,big,data/instances/ilbb/test_instances/rail507.mps.gz,90873,45925,3600.01,0.0100976976785241,timelimit,0,0,3774.8614564668387,3763.8450244429987 81 | gcnn:baseline,4,big,data/instances/ilbb/test_instances/rail507.mps.gz,71406,45297,3600.0,0.00935069778947764,timelimit,0,0,3765.0695672053844,3756.1066225230024 82 | -------------------------------------------------------------------------------- /src/environments.py: -------------------------------------------------------------------------------- 1 | """ Environment classes, to manage the interface between learning and solver. """ 2 | 3 | import numpy as np 4 | import os 5 | import time 6 | import torch 7 | import pyscipopt as scip 8 | from collections import OrderedDict 9 | 10 | import src.utilities as utilities 11 | from .branchers import * 12 | 13 | 14 | class ILEvalEnv: 15 | """ 16 | Environment to evaluate a trained Imitation Learning policy, using ILEvalBrancher. 17 | The specified branching policy is a trained IL policy. 18 | """ 19 | def __init__(self, device): 20 | self.device = device 21 | 22 | def run_episode(self, instance, name, policy, policy_name, state_dims, 23 | scip_seed, cutoff_value, scip_limits, scip_params, verbose, brancher_name='ILEvalBrancher'): 24 | """ 25 | :param instance: str, pathway to instance.mps.gz 26 | :param name: str, name of the instance (w/o extension) 27 | :param policy: a trained IL policy 28 | :param policy_name: str, name of the policy 29 | :param state_dims: dict, of state dimensionalities 30 | :param scip_seed: int, SCIP solver seed 31 | :param cutoff_value: float, cutoff 32 | :param scip_limits: dict, specifying SCIP parameter limits 33 | :param scip_params: dict, specifying SCIP parameter setting 34 | :param verbose: bool, verbosity 35 | :param brancher_name: str, name of the brancher to be defined 36 | :return: 37 | exp_dict: dict, containing basic statistics on the experiment (run) 38 | """ 39 | 40 | print("\nRunning IL evaluation on instance {}".format(name)) 41 | m = scip.Model() 42 | 43 | # set static solver setting (scip seed and cutoff are set below) 44 | utilities.init_params(m, scip_limits, scip_params) 45 | 46 | # set scip parameters as needed (wrt the current episode setting) 47 | m.setBoolParam('randomization/permutevars', True) 48 | m.setIntParam('randomization/permutationseed', scip_seed) # SCIP default at 0 49 | 50 | m.readProblem(instance) 51 | 52 | if scip_params['cutoff']: 53 | assert cutoff_value is not None 54 | m.setObjlimit(cutoff_value) 55 | 56 | # define brancher 57 | brancher = ILEvalBrancher( 58 | model=m, 59 | device=self.device, 60 | policy=policy, 61 | state_dims=state_dims, 62 | verbose=verbose, 63 | ) 64 | m.includeBranchrule( 65 | brancher, 66 | name=brancher_name, 67 | desc="bla", 68 | priority=999999, 69 | maxdepth=-1, 70 | maxbounddist=1 71 | ) 72 | 73 | # perform the episode 74 | try: 75 | t0 = time.time() 76 | t0_process = time.process_time() 77 | m.optimize() 78 | t1_process = time.process_time() 79 | t1 = time.time() 80 | print("\tInstance: {}. Nnodes: {}. Branch count: {}. Status: {}. Gap: {:.4f}".format( 81 | name, 82 | m.getNNodes(), 83 | brancher.branch_count, 84 | m.getStatus(), 85 | m.getGap()) 86 | ) 87 | except: 88 | print("\tSCIP exception or error.") 89 | t0 = time.time() 90 | t0_process = time.process_time() 91 | t1 = t0 92 | t1_process = t0_process 93 | 94 | # update exp_dict 95 | exp_dict = { 96 | 'name': name, 97 | 'policy': policy_name, 98 | 'seed': scip_seed, 99 | 'nnodes': m.getNNodes(), 100 | 'fair_nnodes': m.getFairNNodes(bytes(brancher_name, 'utf-8')), # needs bytes encoding 101 | 'nnodes_left': m.getNNodesLeft(), 102 | 'nLP_iterations': m.getNLPIterations(), 103 | 'max_depth': m.getMaxDepth(), 104 | 'status': m.getStatus(), 105 | 'gap': m.getGap(), 106 | 'primal_bound': m.getPrimalbound(), 107 | 'dual_bound': m.getDualbound(), 108 | 'primaldualintegral': m.getPrimalDualIntegral(), 109 | 'scip_solve_time': m.getSolvingTime(), 110 | 'scip_presolve_time': m.getPresolvingTime(), 111 | 'opt_time_process': t1_process - t0_process, 112 | 'opt_time_wallclock': t1 - t0, 113 | } 114 | 115 | m.freeProb() 116 | 117 | return exp_dict 118 | 119 | 120 | class SCIPCollectEnv: 121 | """ 122 | Environment to run SCIP data collection for imitation learning, with SCIPCollectBrancher class. 123 | Instead of a single policy, 'explorer' and 'expert' rules are specified 124 | (each should be a string corresponding to a SCIP branching rule). 125 | The explorer policy runs for the top k branching decisions, then the expert takes over. 126 | Data is collected from expert decisions only. 127 | """ 128 | 129 | def __init__(self): 130 | pass 131 | 132 | def run_episode(self, instance, name, explorer, expert, k, state_dims, 133 | scip_seed, cutoff_value, scip_limits, scip_params, verbose, brancher_name='SCIPCollectBrancher'): 134 | """ 135 | :param instance: str, pathway to instance.mps.gz 136 | :param name: str, name of the instance (w/o extension) 137 | :param explorer: str, SCIP branching rule to be used as explorer 138 | :param expert: str, SCIP branching rule to be used as expert 139 | :param k: int, number of branching decision to be explored before data collection 140 | :param state_dims: dict, of state dimensionalities 141 | :param scip_seed: int, SCIP solver seed 142 | :param cutoff_value: float, cutoff 143 | :param scip_limits: dict, specifying SCIP parameter limits 144 | :param scip_params: dict, specifying SCIP parameter setting 145 | :param verbose: bool, verbosity 146 | :param brancher_name: str, name of the brancher to be defined 147 | :return: 148 | exp_dict: dict, containing basic statistics on the experiment (run) 149 | brancher.collect_dict: dict, of data (states, labels) collected by the expert 150 | """ 151 | 152 | print("\nRunning data collection on instance {}".format(name)) 153 | m = scip.Model() 154 | 155 | # set static solver setting (scip seed and cutoff are set below) 156 | utilities.init_params(m, scip_limits, scip_params) 157 | 158 | # set scip parameters as needed (wrt the current episode setting) 159 | m.setBoolParam('randomization/permutevars', True) 160 | m.setIntParam('randomization/permutationseed', scip_seed) # SCIP default at 0 161 | 162 | m.readProblem(instance) 163 | 164 | if scip_params['cutoff']: 165 | assert cutoff_value is not None 166 | m.setObjlimit(cutoff_value) 167 | 168 | brancher = SCIPCollectBrancher( 169 | model=m, 170 | explorer=explorer, 171 | expert=expert, 172 | k=k, 173 | state_dims=state_dims, 174 | verbose=verbose 175 | ) 176 | m.includeBranchrule( 177 | brancher, 178 | name=brancher_name, 179 | desc="bla", 180 | priority=999999, 181 | maxdepth=-1, 182 | maxbounddist=1 183 | ) 184 | 185 | # optimize, i.e., perform the solve 186 | t0 = time.time() 187 | t0_process = time.process_time() 188 | m.optimize() 189 | t1_process = time.process_time() 190 | t1 = time.time() 191 | 192 | print("\tInstance {}. SCIP time: {} (wall-clock: {}). Nnodes: {}. FairNNodes: {}. Collected: {}".format( 193 | name, m.getSolvingTime(), t1 - t0, m.getNNodes(), 194 | m.getFairNNodes(bytes(brancher_name, 'utf-8')), brancher.collect_count 195 | )) 196 | 197 | # store episode_data 198 | exp_dict = { 199 | 'name': name, 200 | 'explorer': explorer, 201 | 'expert': expert, 202 | 'k': k, 203 | 'seed': scip_seed, 204 | 'nnodes': m.getNNodes(), 205 | 'fair_nnodes': m.getFairNNodes(bytes(brancher_name, 'utf-8')), # needs bytes encoding 206 | 'nnodes_left': m.getNNodesLeft(), 207 | 'nLP_iterations': m.getNLPIterations(), 208 | 'max_depth': m.getMaxDepth(), 209 | 'status': m.getStatus(), 210 | 'gap': m.getGap(), 211 | 'primal_bound': m.getPrimalbound(), 212 | 'dual_bound': m.getDualbound(), 213 | 'primaldualintegral': m.getPrimalDualIntegral(), 214 | 'scip_solve_time': m.getSolvingTime(), 215 | 'scip_presolve_time': m.getPresolvingTime(), 216 | 'opt_time_process': t1_process - t0_process, 217 | 'opt_time_wallclock': t1 - t0, 218 | 'nnodes_list': brancher.nnodes_list, 219 | 'nnodesleft_list': brancher.nnodesleft_list, 220 | } 221 | 222 | m.freeProb() 223 | 224 | return exp_dict, brancher.collect_dict 225 | 226 | 227 | class SCIPEvalEnv: 228 | """ 229 | Environment for SCIP evaluation runs, with SCIPEvalBrancher class. 230 | A single branching policy is specified (a string corresponding to a SCIP branching rule). 231 | """ 232 | 233 | def __init__(self): 234 | pass 235 | 236 | def run_episode(self, instance, name, policy, 237 | scip_seed, cutoff_value, scip_limits, scip_params, verbose, brancher_name='SCIPEvalBrancher'): 238 | """ 239 | :param instance: str, pathway to instance.mps.gz 240 | :param name: str, name of the instance (w/o extension) 241 | :param policy: str, SCIP branching rule to be used 242 | :param scip_seed: int, SCIP solver seed 243 | :param cutoff_value: float, cutoff 244 | :param scip_limits: dict, specifying SCIP parameter limits 245 | :param scip_params: dict, specifying SCIP parameter setting 246 | :param verbose: bool, verbosity 247 | :param brancher_name: str, name of the brancher to be defined 248 | :return: 249 | exp_dict: dict, containing basic statistics on the experiment (run) 250 | """ 251 | print("\nRunning SCIP evaluation on instance {}".format(name)) 252 | m = scip.Model() 253 | 254 | # set static solver setting (scip seed and cutoff are set below) 255 | utilities.init_params(m, scip_limits, scip_params) 256 | 257 | # set scip parameters as needed (wrt the current episode setting) 258 | m.setBoolParam('randomization/permutevars', True) 259 | m.setIntParam('randomization/permutationseed', scip_seed) # SCIP default at 0 260 | 261 | m.readProblem(instance) 262 | 263 | if scip_params['cutoff']: 264 | assert cutoff_value is not None 265 | m.setObjlimit(cutoff_value) 266 | 267 | brancher = SCIPEvalBrancher( 268 | model=m, 269 | policy=policy, 270 | verbose=verbose 271 | ) 272 | m.includeBranchrule( 273 | brancher, 274 | name=brancher_name, 275 | desc="bla", 276 | priority=999999, 277 | maxdepth=-1, 278 | maxbounddist=1 279 | ) 280 | 281 | # optimize, i.e., perform the solve 282 | t0 = time.time() 283 | t0_process = time.process_time() 284 | m.optimize() 285 | t1_process = time.process_time() 286 | t1 = time.time() 287 | 288 | print("\tInstance {}. SCIP time: {} (wall-clock: {}). Nnodes: {}. FairNNodes: {}".format( 289 | name, m.getSolvingTime(), t1 - t0, m.getNNodes(), m.getFairNNodes(bytes(brancher_name, 'utf-8')) 290 | )) 291 | 292 | # store episode_data 293 | exp_dict = { 294 | 'name': name, 295 | 'policy': policy, 296 | 'seed': scip_seed, 297 | 'nnodes': m.getNNodes(), 298 | 'fair_nnodes': m.getFairNNodes(bytes(brancher_name, 'utf-8')), # needs bytes encoding 299 | 'nnodes_left': m.getNNodesLeft(), 300 | 'nLP_iterations': m.getNLPIterations(), 301 | 'max_depth': m.getMaxDepth(), 302 | 'status': m.getStatus(), 303 | 'gap': m.getGap(), 304 | 'primal_bound': m.getPrimalbound(), 305 | 'dual_bound': m.getDualbound(), 306 | 'primaldualintegral': m.getPrimalDualIntegral(), 307 | 'scip_solve_time': m.getSolvingTime(), 308 | 'scip_presolve_time': m.getPresolvingTime(), 309 | 'opt_time_process': t1_process - t0_process, 310 | 'opt_time_wallclock': t1 - t0, 311 | 'nnodes_list': brancher.nnodes_list, 312 | 'nnodesleft_list': brancher.nnodesleft_list, 313 | } 314 | 315 | m.freeProb() 316 | 317 | return exp_dict 318 | -------------------------------------------------------------------------------- /train_test_IL.py: -------------------------------------------------------------------------------- 1 | """ Imitation Learning (IL) training. """ 2 | 3 | import time 4 | import os 5 | import random 6 | import argparse 7 | import pickle 8 | from collections import OrderedDict 9 | 10 | import numpy as np 11 | import torch 12 | import torch.optim as optim 13 | import math 14 | 15 | from src.environments import * 16 | from models.feedforward import * 17 | from utilities.hdf5_dataloader import * 18 | 19 | 20 | # state dimensions 21 | # var_dim is the dimension of each candidate variable's input, i.e., the fixed dimension of matrix C_t 22 | # Tree_t is given by concatenation of two states, for a total dimension node_dim + mip_dim 23 | state_dims = { 24 | 'var_dim': 25, 25 | 'node_dim': 8, 26 | 'mip_dim': 53 27 | } 28 | 29 | 30 | if __name__ == '__main__': 31 | 32 | # parser definition 33 | parser = argparse.ArgumentParser(description='Parser for IL training experiments.') 34 | parser.add_argument( 35 | '--seed', 36 | type=int, 37 | default=0, 38 | help='Random seed for IL training experiment.' 39 | ) 40 | parser.add_argument( 41 | '--policy_type', 42 | type=str, 43 | choices=['NoTreePolicy', 'TreeGatePolicy'], 44 | help='Type of policy to use.' 45 | ) 46 | parser.add_argument( 47 | '--hidden_size', 48 | type=int, 49 | help='Hidden size of the branching policy network.' 50 | ) 51 | parser.add_argument( 52 | '--depth', 53 | type=int, 54 | help='Depth of the branching policy network.' 55 | ) 56 | parser.add_argument( 57 | '--dropout', 58 | type=float, 59 | default=0.0, 60 | help='Dropout parameter for the branching policy network.' 61 | ) 62 | parser.add_argument( 63 | '--dim_reduce_factor', 64 | type=int, 65 | default=2, 66 | help='Dimension reduce factor of the branching policy network.' 67 | ) 68 | parser.add_argument( 69 | '--infimum', 70 | type=int, 71 | default=8, 72 | help='Infimum parameter of the branching policy network.' 73 | ) 74 | parser.add_argument( 75 | '--norm', 76 | type=str, 77 | default='none', 78 | help='Normalization type of the branching policy network.' 79 | ) 80 | parser.add_argument( 81 | '--train_h5_path', 82 | type=str, 83 | help='Pathway to the train H5 file.' 84 | ) 85 | parser.add_argument( 86 | '--val_h5_path', 87 | type=str, 88 | help='Pathway to the val H5 file.' 89 | ) 90 | parser.add_argument( 91 | '--test_h5_path', 92 | type=str, 93 | help='Pathway to the test H5 file.' 94 | ) 95 | parser.add_argument( 96 | '--out_dir', 97 | type=str, 98 | help='Directory to save the experimental results.' 99 | ) 100 | parser.add_argument( 101 | '--use_gpu', 102 | default=False, 103 | action='store_true', 104 | help='Use gpu or not.' 105 | ) 106 | parser.add_argument( 107 | '--opt', 108 | default='adam', 109 | type=str, 110 | help='Type of optimizer to use.' 111 | ) 112 | parser.add_argument( 113 | '--lr', 114 | type=float, 115 | help='Learning rate.' 116 | ) 117 | parser.add_argument( 118 | '--momentum', 119 | default=0.9, 120 | type=float, 121 | help='Momentum optimization parameter.' 122 | ) 123 | parser.add_argument( 124 | '--weight_decay', 125 | default=1e-5, 126 | type=float, 127 | help='Weight decay optimization parameter.' 128 | ) 129 | parser.add_argument( 130 | '--num_epochs', 131 | type=int, 132 | default=40, 133 | help='Number of training epochs.' 134 | ) 135 | parser.add_argument( 136 | '--lr_decay_schedule', 137 | type=int, 138 | nargs='+', 139 | default=[20, 30], 140 | help='Learning rate decay schedule.' 141 | ) 142 | parser.add_argument( 143 | '--lr_decay_factor', 144 | type=float, 145 | default=0.1, 146 | help='LR decay factor.' 147 | ) 148 | parser.add_argument( 149 | '--train_batchsize', 150 | type=int, 151 | default=32, 152 | help='Training batchsize.') 153 | parser.add_argument( 154 | '--eval_batchsize', 155 | type=int, 156 | default=500, 157 | help='Evaluation batchsize.') 158 | parser.add_argument( 159 | '--top_k', 160 | type=int, 161 | nargs='+', 162 | default=[2, 3, 5, 10], 163 | help='In addition to top-1 generalization accuracy, we track top-k.' 164 | ) 165 | args = parser.parse_args() 166 | print(args) 167 | 168 | # set all the random seeds 169 | seed = args.seed 170 | np.random.seed(seed) 171 | torch.manual_seed(seed) 172 | random.seed(seed) 173 | 174 | # setup output directory 175 | if not os.path.exists(args.out_dir): 176 | os.makedirs(args.out_dir, exist_ok=True) 177 | 178 | # use gpu or cpu 179 | if args.use_gpu: 180 | import torch.backends.cudnn as cudnn 181 | 182 | device = torch.device('cuda') 183 | cudnn.benchmark = True 184 | else: 185 | device = torch.device('cpu') 186 | 187 | # if final checkpoint exists exit the script 188 | chkpnt_path = os.path.join(args.out_dir, 'final_checkpoint.pth.tar') 189 | if os.path.isfile(chkpnt_path): 190 | print('Final checkpoint exists, experiment has already been run, exiting...') 191 | exit() 192 | elif os.path.isfile(os.path.join(args.out_dir, 'final_job_crashed_checkpoint.pth.tar')): 193 | print('Experiment previously crashed, exiting...') 194 | exit() 195 | 196 | # load a checkpoint path 197 | chkpnt_path = os.path.join(args.out_dir, 'checkpoint.pth.tar') 198 | if os.path.isfile(chkpnt_path): 199 | chkpnt = torch.load(chkpnt_path) 200 | epoch_start = chkpnt['epoch'] 201 | print('Checkpoint loaded from path {}, starting at epoch {}...'.format(chkpnt_path, epoch_start)) 202 | else: 203 | chkpnt = None 204 | epoch_start = 0 205 | 206 | # setup the policy 207 | if args.policy_type == 'NoTreePolicy': 208 | policy = NoTreePolicy( 209 | var_dim=state_dims['var_dim'], 210 | node_dim=state_dims['node_dim'], 211 | mip_dim=state_dims['mip_dim'], 212 | hidden_size=args.hidden_size, 213 | depth=args.depth, 214 | dropout=args.dropout, 215 | dim_reduce_factor=args.dim_reduce_factor, 216 | infimum=args.infimum, 217 | norm=args.norm, 218 | ) 219 | policy_name = 'NoTreePolicy' 220 | elif args.policy_type == 'TreeGatePolicy': 221 | policy = TreeGatePolicy( 222 | var_dim=state_dims['var_dim'], 223 | node_dim=state_dims['node_dim'], 224 | mip_dim=state_dims['mip_dim'], 225 | hidden_size=args.hidden_size, 226 | depth=args.depth, 227 | dropout=args.dropout, 228 | dim_reduce_factor=args.dim_reduce_factor, 229 | infimum=args.infimum, 230 | norm=args.norm, 231 | ) 232 | policy_name = 'TreeGatePolicy' 233 | else: 234 | raise ValueError('A valid policy should be set.') 235 | 236 | # set the policy into train mode 237 | policy.train() 238 | policy = policy.to(device) 239 | 240 | if args.opt == 'adam': 241 | optimizer = optim.Adam( 242 | policy.parameters(), 243 | lr=args.lr, 244 | betas=(args.momentum, 0.999), 245 | weight_decay=args.weight_decay 246 | ) 247 | eps = np.finfo(np.float32).eps.item() 248 | else: 249 | raise ValueError('A valid optimizer should be set.') 250 | 251 | # specify a learning rate scheduler 252 | if args.lr_decay_schedule: 253 | lr_decay_schedule = args.lr_decay_schedule 254 | lr_decay_factor = args.lr_decay_factor 255 | scheduler = optim.lr_scheduler.MultiStepLR(optimizer, lr_decay_schedule, lr_decay_factor) 256 | use_scheduler = True 257 | else: 258 | use_scheduler = False 259 | 260 | # if checkpoint available, load the policy's and the optimizers parameters 261 | if chkpnt: 262 | policy.load_state_dict(chkpnt['state_dict']) 263 | optimizer.load_state_dict(chkpnt['optimizer']) 264 | scheduler.load_state_dict(chkpnt['scheduler']) 265 | exp_dict = chkpnt['exp_dict'] 266 | else: 267 | # setup an experiment log 268 | exp_dict = OrderedDict() 269 | exp_dict['train_loss_epoch_arr'] = np.zeros(args.num_epochs, ) 270 | exp_dict['val_loss_epoch_arr'] = np.zeros(args.num_epochs, ) 271 | exp_dict['val_acc_epoch_arr'] = np.zeros(args.num_epochs, ) 272 | for k in args.top_k: 273 | exp_dict['val_acc_top_{}_epoch_arr'.format(k)] = np.zeros(args.num_epochs, ) 274 | exp_dict['val_nan_counter_epoch_arr'] = np.zeros(args.num_epochs, ) 275 | exp_dict['test_loss'] = 0.0 276 | exp_dict['test_acc'] = 0.0 277 | for k in args.top_k: 278 | exp_dict['test_acc_top_{}'.format(k)] = 0.0 279 | exp_dict['test_nan_counter'] = 0 280 | 281 | # setup a train loader 282 | train_h5 = dataset_h5( 283 | h5_file=args.train_h5_path, 284 | node_dim=state_dims['node_dim'], 285 | mip_dim=state_dims['mip_dim'], 286 | var_dim=state_dims['var_dim'] 287 | ) 288 | num_train_batches = train_h5.__len__() // args.train_batchsize 289 | train_loader = DataLoader( 290 | dataset=train_h5, 291 | batch_size=args.train_batchsize, 292 | shuffle=True, 293 | collate_fn=collate_fn 294 | ) 295 | 296 | # setup a val loader 297 | val_h5 = dataset_h5( 298 | h5_file=args.val_h5_path, 299 | node_dim=state_dims['node_dim'], 300 | mip_dim=state_dims['mip_dim'], 301 | var_dim=state_dims['var_dim'] 302 | ) 303 | num_val_batches = val_h5.__len__() // args.eval_batchsize 304 | val_loader = DataLoader( 305 | dataset=val_h5, 306 | batch_size=args.eval_batchsize, 307 | shuffle=False, 308 | collate_fn=collate_fn 309 | ) 310 | 311 | # setup a test loader 312 | test_h5 = dataset_h5( 313 | h5_file=args.test_h5_path, 314 | node_dim=state_dims['node_dim'], 315 | mip_dim=state_dims['mip_dim'], 316 | var_dim=state_dims['var_dim'] 317 | ) 318 | num_test_batches = test_h5.__len__() // args.eval_batchsize 319 | test_loader = DataLoader( 320 | dataset=test_h5, 321 | batch_size=args.eval_batchsize, 322 | shuffle=False, 323 | collate_fn=collate_fn 324 | ) 325 | 326 | # setup the loss 327 | criterion = nn.CrossEntropyLoss().to(device) 328 | 329 | # main training loop 330 | print('Starting training loop...\n') 331 | for i in range(epoch_start, args.num_epochs): 332 | # set the policy into train mode 333 | policy.train() 334 | start_time = time.time() 335 | start_time_process = time.process_time() 336 | 337 | running_loss = 0.0 338 | for batch in train_loader: 339 | optimizer.zero_grad() 340 | batch_loss = 0.0 341 | for idx, data_tuple in enumerate(batch): 342 | target, node, mip, grid = data_tuple 343 | target, node, mip, grid = target.to(device), node.to(device), mip.to(device), grid.to(device) 344 | logits = policy(grid, node, mip) 345 | logits = logits.transpose(1, 0) 346 | batch_loss += criterion(logits, target) 347 | batch_loss /= float(args.train_batchsize) 348 | batch_loss.backward() 349 | optimizer.step() 350 | running_loss += batch_loss.item() 351 | running_loss /= float(num_train_batches) 352 | 353 | if use_scheduler: 354 | scheduler.step() 355 | 356 | train_time = time.time() - start_time 357 | train_time_process = time.process_time() - start_time_process 358 | exp_dict['train_loss_epoch_arr'][i] = running_loss 359 | 360 | # set the policy into eval mode 361 | policy.eval() 362 | eval_start = time.time() 363 | eval_start_process = time.process_time() 364 | 365 | total_correct = 0 366 | top_k_correct = dict.fromkeys(args.top_k) 367 | for k in args.top_k: 368 | top_k_correct[k] = 0 369 | val_acc_top_k = dict.fromkeys(args.top_k) 370 | total_loss = 0.0 371 | nan_counter = 0 372 | 373 | with torch.no_grad(): 374 | for batch in val_loader: 375 | for idx, data_tuple in enumerate(batch): 376 | target, node, mip, grid = data_tuple 377 | target, node, mip, grid = target.to(device), node.to(device), mip.to(device), grid.to(device) 378 | logits = policy(grid, node, mip) 379 | logits = logits.transpose(1, 0) 380 | _loss = criterion(logits, target).item() 381 | if math.isnan(_loss): 382 | nan_counter += 1 383 | else: 384 | total_loss += _loss 385 | _, predicted = torch.max(logits, 1) 386 | total_correct += predicted.eq(target.item()).cpu().item() 387 | grid_size = grid.size(0) 388 | for k in args.top_k: 389 | max_k = min(k, grid_size) # Accounts for when grid_size is smaller than top_k 390 | top_k_correct[k] += int(target.item() in logits.topk(max_k, dim=1).indices) 391 | if nan_counter < val_h5.n_data: 392 | val_loss = total_loss / float(val_h5.n_data - nan_counter) 393 | val_acc = total_correct / float(val_h5.n_data - nan_counter) 394 | for k in args.top_k: 395 | val_acc_top_k[k] = top_k_correct[k] / float(val_h5.n_data - nan_counter) 396 | else: 397 | val_loss = np.nan 398 | val_acc = np.nan 399 | for k in args.top_k: 400 | val_acc_top_k[k] = np.nan 401 | 402 | print('Model overflow on entire val set, hyperparameter configuration is ill-posed, killing the job.') 403 | 404 | # save the final checkpoint 405 | torch.save( 406 | {'state_dict': policy.state_dict(), 407 | 'optimizer': optimizer.state_dict(), 408 | 'scheduler': scheduler.state_dict(), 409 | 'exp_dict': exp_dict, 410 | 'args': args, 411 | 'state_dims': state_dims 412 | }, 413 | os.path.join(args.out_dir, 'final_job_crashed_checkpoint.pth.tar') 414 | ) 415 | 416 | # exit 417 | exit() 418 | 419 | eval_time = time.time() - eval_start 420 | eval_time_process = time.process_time() - eval_start_process 421 | exp_dict['val_loss_epoch_arr'][i] = val_loss 422 | exp_dict['val_acc_epoch_arr'][i] = val_acc 423 | for k in args.top_k: 424 | exp_dict['val_acc_top_{}_epoch_arr'.format(k)][i] = val_acc_top_k[k] 425 | exp_dict['val_nan_counter_epoch_arr'][i] = nan_counter 426 | 427 | print( 428 | "[Epoch {:d}] Train loss: {:.4f}. Train time: {:.2f}sec. " 429 | "Val loss: {:.4f}. Val acc: {:.2f}%, Val acc top-{}: {:.2f}%, Val acc top-{}: {:.2f}%. Val time: {:.2f}sec.".format( 430 | i + 1, running_loss, train_time, val_loss, 100 * val_acc, args.top_k[0], 431 | 100 * val_acc_top_k[args.top_k[0]], 432 | args.top_k[1], 100 * val_acc_top_k[args.top_k[1]], eval_time)) 433 | 434 | # checkpoint 435 | torch.save( 436 | {'epoch': i + 1, 437 | 'state_dict': policy.state_dict(), 438 | 'optimizer': optimizer.state_dict(), 439 | 'scheduler': scheduler.state_dict(), 440 | 'exp_dict': exp_dict, 441 | 'args': args, 442 | 'state_dims': state_dims 443 | }, 444 | os.path.join(args.out_dir, 'checkpoint.pth.tar') 445 | ) 446 | 447 | # create per epoch save 448 | torch.save( 449 | {'epoch': i + 1, 450 | 'state_dict': policy.state_dict(), 451 | 'optimizer': optimizer.state_dict(), 452 | 'scheduler': scheduler.state_dict(), 453 | 'exp_dict': exp_dict, 454 | 'args': args, 455 | 'state_dims': state_dims 456 | }, 457 | os.path.join(args.out_dir, 'epoch_{}_checkpoint.pth.tar'.format(i + 1)) 458 | ) 459 | 460 | # put the policy into eval/validation mode 461 | print('\nEvaluating on the test set...\n') 462 | policy.eval() 463 | 464 | total_correct = 0 465 | top_k_correct = dict.fromkeys(args.top_k) 466 | for k in args.top_k: 467 | top_k_correct[k] = 0 468 | test_acc_top_k = dict.fromkeys(args.top_k) 469 | total_loss = 0.0 470 | nan_counter = 0 471 | 472 | with torch.no_grad(): 473 | for batch in test_loader: 474 | for idx, data_tuple in enumerate(batch): 475 | target, node, mip, grid = data_tuple 476 | target, node, mip, grid = target.to(device), node.to(device), mip.to(device), grid.to(device) 477 | logits = policy(grid, node, mip) 478 | logits = logits.transpose(1, 0) 479 | _loss = criterion(logits, target).item() 480 | if math.isnan(_loss): 481 | nan_counter += 1 482 | else: 483 | total_loss += _loss 484 | _, predicted = torch.max(logits, 1) 485 | total_correct += predicted.eq(target.item()).cpu().item() 486 | grid_size = grid.size(0) 487 | for k in args.top_k: 488 | max_k = min(k, grid_size) # Accounts for when grid_size is smaller than top_k 489 | top_k_correct[k] += int(target.item() in logits.topk(max_k, dim=1).indices) 490 | if nan_counter < test_h5.n_data: 491 | test_loss = total_loss / float(test_h5.n_data - nan_counter) 492 | test_acc = total_correct / float(test_h5.n_data - nan_counter) 493 | for k in args.top_k: 494 | test_acc_top_k[k] = top_k_correct[k] / float(test_h5.n_data - nan_counter) 495 | else: 496 | test_loss = np.nan 497 | test_acc = np.nan 498 | for k in args.top_k: 499 | test_acc_top_k[k] = np.nan 500 | 501 | exp_dict['test_loss'] = test_loss 502 | exp_dict['test_acc'] = test_acc 503 | for k in args.top_k: 504 | exp_dict['test_acc_top_{}'.format(k)] = test_acc_top_k[k] 505 | exp_dict['test_nan_counter'] = nan_counter 506 | 507 | print('Test loss: {:.6f}, Test acc: {:.2f}%, Test acc top-{}: {:.2f}%, Test acc top-{}: {:.2f}%'.format( 508 | test_loss, 100 * test_acc, args.top_k[0], 100 * test_acc_top_k[args.top_k[0]], args.top_k[1], 509 | 100 * test_acc_top_k[args.top_k[1]])) 510 | 511 | # save the final checkpoint 512 | torch.save( 513 | {'state_dict': policy.state_dict(), 514 | 'optimizer': optimizer.state_dict(), 515 | 'scheduler': scheduler.state_dict(), 516 | 'exp_dict': exp_dict, 517 | 'args': args, 518 | 'state_dims': state_dims 519 | }, 520 | os.path.join(args.out_dir, 'final_checkpoint.pth.tar') 521 | ) 522 | --------------------------------------------------------------------------------