Download Code/data_partition.py from THUIAR/GNN-GBDT-Guided-Fast-Optimizing-Framework: direct link, hf CLI and curl.
- Browser
- Download file 3.83 kB
-
https://huggingface.co/THUIAR/GNN-GBDT-Guided-Fast-Optimizing-Framework/resolve/main/Code/data_partition.py
- Command line
-
hf download hf://THUIAR/GNN-GBDT-Guided-Fast-Optimizing-Framework/Code/data_partition.py
-
curl -L -o data_partition.py https://huggingface.co/THUIAR/GNN-GBDT-Guided-Fast-Optimizing-Framework/resolve/main/Code/data_partition.py
3.83 kB
| from functools import cmp_to_key | |
| import numpy as np | |
| import argparse | |
| import pickle | |
| import random | |
| import time | |
| import os | |
| class pair: | |
| def __init__(self): | |
| self.x = 0 | |
| self.y = 0 | |
| self.val = 0 | |
| def cmp(a, b): | |
| if a.val > b.val: | |
| return -1 | |
| else: | |
| return 1 | |
| def FENNEL(n, m, k, site): | |
| ''' | |
| Function Description: | |
| Use the FENNEL algorithm to partition the bipartite representation of the problem instance. | |
| Parameters: | |
| - n: Number of decision variables in the problem instance. | |
| - m: Number of constraints in the problem instance. | |
| - k: k[i] represents the number of decision variables in the i-th constraint. | |
| - site: site[i][j] represents which decision variable the j-th decision variable of the i-th constraint corresponds to. | |
| Return: | |
| The result of the graph partitioning. | |
| ''' | |
| raise NotImplementedError('FENNEL method should be implemented') | |
| def generate_pair( | |
| number : int | |
| ): | |
| ''' | |
| Function Description: | |
| Partition the problem based on the given problem instances and generate training data. | |
| Parameters: | |
| - number: Number of problem instances. | |
| Return: | |
| The training data is generated and packaged as data.pickle. The function does not have a return value. | |
| ''' | |
| for turn in range(number): | |
| print("=====", turn) | |
| # Check if data.pickle exists and read it if it exists. | |
| if(os.path.exists('./example/data' + str(turn) + '.pickle') == False): | |
| print("No problem file!") | |
| return | |
| with open('./example/data' + str(turn) + '.pickle', "rb") as f: | |
| problem = pickle.load(f) | |
| # Check if solution.pickle exists and read it if it exists. | |
| if(os.path.exists('./example/sample' + str(turn) + '.pickle') == False): | |
| print("No solutuion file!") | |
| return | |
| with open('./example/sample' + str(turn) + '.pickle', "rb") as f: | |
| solution = pickle.load(f) | |
| # obj_type represents the problem type (maximization/minimization). | |
| # n represents the number of decision variables. | |
| # m represents the number of constraints. | |
| # k[i] represents the number of decision variables in the i-th constraint. | |
| # site[i][j] represents which decision variable the j-th decision variable of the i-th constraint corresponds to. | |
| # value[i][j] represents the coefficient of the j-th decision variable in the i-th constraint. | |
| # constraint[i] represents the right-hand side value of the i-th constraint. | |
| # constraint_type[i] represents the type of the i-th constraint, where 1 represents <=, 2 represents >=, and 3 represents =. | |
| # coefficient[i] represents the coefficient of the i-th decision variable in the objective function. | |
| obj_type = problem[0] | |
| n = problem[1] | |
| m = problem[2] | |
| k = problem[3] | |
| site = problem[4] | |
| value = problem[5] | |
| constraint = problem[6] | |
| constraint_type = problem[7] | |
| coefficient = problem[8] | |
| variable_features = solution[0] | |
| constraint_features = solution[1] | |
| edge_indices = solution[2] | |
| edge_features = solution[3] | |
| optX = solution[4] | |
| # Get the graph partitioning result. | |
| new_color = FENNEL(n, m, k, site) | |
| with open('./example/pair' + str(turn) + '.pickle', 'wb') as f: | |
| pickle.dump([variable_features, constraint_features, edge_indices, edge_features, new_color, optX], f) | |
| def parse_args(): | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--number", type = int, default = 10, help = 'The number of instances.') | |
| return parser.parse_args() | |
| if __name__ == '__main__': | |
| args = parse_args() | |
| #print(vars(args)) | |
| generate_pair(**vars(args)) |