The official repository of the paper `unsupervised learning for combinatorial optimization needs meta learning' Haoyu Wang, Pan Li.
The repository contains the code and datasets contained in the max clique (MC), the minimum vertex covering (MVC), the max independent set (MIS) problems.
The environment requires Pytorch, Pytorch Geometric and some of the following key packages:
torch 1.9.0
torch-cluster 1.5.9
torch-geometric 1.7.2
torch-scatter 2.0.8
torch-sparse 0.6.11
torch-spline-conv 1.2.1
tqdm 4.62.2
networkx 2.5.1
numpy 1.20.3
ogb 1.3.5
pandas 1.3.0
scikit-learn 0.24.2
scipy 1.6.3
PyYAML 5.4.1
To run the Gurobi9.5 baseline, you may also need to install Gurobi package and require the Gurobi permit
gurobipy 9.5.1
for twitter dataset, go to /max_clique/twitter/dataset/configs/config.yaml
enter the path to the folder that you would like to save the PyG form dataset in this yaml file, an example of the config.yaml file is shown as follows:
train:
target_path: /...[your path].../meta_CO/max_clique/twitter/dataset/trainset
data_dir: /...[your path].../meta_CO/max_clique/twitter/dataset/trainset
val:
target_path: /...[your path].../meta_CO/max_clique/twitter/dataset/valset
data_dir: /...[your path].../meta_CO/max_clique/twitter/dataset/valset
test:
target_path: /...[your path].../meta_CO/max_clique/twitter/dataset/testset
data_dir: /...[your path].../meta_CO/max_clique/twitter/dataset/testset
split and transform the original twitter dataset (which is shuffled and saved in /max_clique/twitter/dataset/raw_dataset, it needs unzip first), go to /max_clique/twitter/dataset and run:
python twitter_test.py
python twitter_train.py
python twitter_val.py
for RB dataset, the data generation is adopted from the github repository of RUN-CSP.
here we use RB200 as an example: go to /max_clique/rb200/dataset/configs/config.yaml
enter the path to the folder that you would like to save the PyG form dataset in this yaml file, an example of the config.yaml file is shown as follows:
train:
target_path: /...[your path].../meta_CO/max_clique/rb200/dataset/trainset
data_dir: /...[your path].../meta_CO/max_clique/rb200/dataset/trainset
val:
target_path: /...[your path].../meta_CO/max_clique/rb200/dataset/valset
data_dir: /...[your path].../meta_CO/max_clique/rb200/dataset/valset
test:
target_path: /...[your path].../meta_CO/max_clique/rb200/dataset/testset
data_dir: /...[your path].../meta_CO/max_clique/rb200/dataset/testset
go to /max_clique/rb200/dataset to generate the training,val / testing data:
sh rb200_test.sh
sh rb200_train.sh
sh rb200_val.sh
go to /max_clique/[dataset] folder, edit the maml.sh doc as you may want to, fill in the GPU number in utils.py (it should align with the gpu number in maml.sh) you are going to use, then run
sh maml.sh
To tun the Erdos goes neural (EGN) baseline, run
sh erdos.sh
go to /max_clique/[dataset] folder, open test.py, fill in the path to the model that you would like to test, then edit test.sh file, run
sh test.sh
for the problems, we provide our pre-trained model, in /max_clique/[dataset]/train_files/maml(erdos)/demo/best_model.pth, which could be used to directly solve the problems.
go to /max_clique/[dataset] folder, open finetune.py, fill in the path to the model that you would like to fine-tune, then edit finetune.sh file, run
sh finetune.sh
for twitter dataset, go to /vertex_cover/twitter/dataset/configs/config.yaml
enter the path to the folder that you would like to save the PyG form dataset in this yaml file, an example of the config.yaml file is shown as follows:
train:
target_path: /...[your path].../meta_CO/vertex_cover/twitter/dataset/trainset
data_dir: /...[your path].../meta_CO/vertex_cover/twitter/dataset/trainset
val:
target_path: /...[your path].../meta_CO/vertex_cover/twitter/dataset/valset
data_dir: /...[your path].../meta_CO/vertex_cover/twitter/dataset/valset
test:
target_path: /...[your path].../meta_CO/vertex_cover/twitter/dataset/testset
data_dir: /...[your path].../meta_CO/vertex_cover/twitter/dataset/testset
split and transform the original twitter dataset (which is shuffled and saved in /vertex_cover/twitter/dataset/raw_dataset, it needs unzip first), go to /vertex_cover/twitter/dataset and run:
python twitter_test.py
python twitter_train.py
python twitter_val.py
for RB dataset, the data generation is adopted from the github repository of RUN-CSP.
here we use RB200 as an example: go to /vertex_cover/rb200/dataset/configs/config.yaml
enter the path to the folder that you would like to save the PyG form dataset in this yaml file, an example of the config.yaml file is shown as follows:
train:
target_path: /...[your path].../meta_CO/vertex_cover/rb200/dataset/trainset
data_dir: /...[your path].../meta_CO/vertex_cover/rb200/dataset/trainset
val:
target_path: /...[your path].../meta_CO/vertex_cover/rb200/dataset/valset
data_dir: /...[your path].../meta_CO/vertex_cover/rb200/dataset/valset
test:
target_path: /...[your path].../meta_CO/vertex_cover/rb200/dataset/testset
data_dir: /...[your path].../meta_CO/vertex_cover/rb200/dataset/testset
go to /vertex_cover/rb200/dataset to generate the training,val / testing data:
sh rb200_test.sh
sh rb200_train.sh
sh rb200_val.sh
go to /vertex_cover/[dataset] folder, edit the maml.sh doc as you may want to, fill in the GPU number in utils.py (it should align with the gpu number in maml.sh) you are going to use, then run
sh maml.sh
To tun the Erdos goes neural (EGN) baseline, run
sh erdos.sh
go to /vertex_cover/[dataset] folder, open test.py, fill in the path to the model that you would like to test, then edit test.sh file, run
sh test.sh
for the problems, we provide our pre-trained model, in /vertex_cover/[dataset]/train_files/erdos(maml)/demo/best_model.pth, which could be used to directly solve the problems.
go to /vertex_cover/[dataset] folder, open finetune.py, fill in the path to the model that you would like to fine-tune, then edit finetune.sh file, run
sh finetune.sh
Code is coming soon
If you find our paper or repo useful, please cite our paper:
@article{wang2023unsupervised,
title={Unsupervised Learning for Combinatorial Optimization Needs Meta-Learning},
author={Wang, Haoyu and Li, Pan},
journal={International Conference on Learning Representations},
year={2023}
}