├── 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 |
--------------------------------------------------------------------------------