| | 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) |
| | |
| | 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) |
| | |
| | |
| | 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 = 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] |
| | |
| | |
| | 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() |
| | |
| | generate_pair(**vars(args)) |