filiprydin commited on
Commit
ca2a583
·
1 Parent(s): deebdbd

add FIX2 20 MGMOTSP EB

Browse files
MGMOTSP/models/FIX2_20_EB.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a46e792fba7dc1ac03915f16a0d29215da87ee289bb1970a4a915a40e7cef628
3
+ size 26391351
MGMOTSP/test_fix2_20_eb.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##########################################################################################
2
+ # Machine Environment Config
3
+ DEBUG_MODE = False
4
+ USE_CUDA = not DEBUG_MODE
5
+ CUDA_DEVICE_NUM = 0
6
+
7
+ ##########################################################################################
8
+ # Path Config
9
+ import os
10
+ import sys
11
+ import torch
12
+ import numpy as np
13
+
14
+ os.chdir(os.path.dirname(os.path.abspath(__file__)))
15
+ sys.path.insert(0, "..") # for problem_def
16
+ sys.path.insert(0, "../..") # for utils
17
+
18
+ ##########################################################################################
19
+ # import
20
+ import logging
21
+ from utils.utils import create_logger, copy_all_src
22
+
23
+
24
+ from eb_MGMOTSP.MGMOTSPTester import TSPTester
25
+ from MGMOTSPProblemDef import get_random_problems
26
+
27
+ ##########################################################################################
28
+ import time
29
+ import hvwfg
30
+
31
+ ##########################################################################################
32
+ # parameters
33
+ env_params = {
34
+ 'distribution': "FIX", # FIX or FLEX
35
+ 'problem_size': 20,
36
+ 'pomo_size': 20,
37
+ 'emax': 2
38
+ }
39
+
40
+ training_method = "Chb" # Linear or Chb
41
+
42
+ encoder_params = {
43
+ 'embedding_dim': 128,
44
+ 'encoder_layer_num': 6,
45
+ 'qkv_dim': 16,
46
+ 'head_num': 8,
47
+ 'ff_hidden_dim': 512,
48
+ "dropout": 0.1,
49
+ }
50
+
51
+ decoder_params = {
52
+ 'embedding_dim': 128,
53
+ 'qkv_dim': 16,
54
+ 'head_num': 8,
55
+ 'logit_clipping': 10,
56
+ 'eval_type': 'argmax',
57
+ }
58
+ decoder_params["training_method"] = training_method
59
+
60
+ tester_params = {
61
+ 'use_cuda': USE_CUDA,
62
+ 'cuda_device_num': CUDA_DEVICE_NUM,
63
+ 'model_load_path': './result/FIX2_20.pt', # path of pre-trained model
64
+ 'data_load_path': './data/FIX2_20', # path of test data. If None, random problems will be generated.
65
+ 'reference': [20, 20],
66
+ 'test_episodes': 200,
67
+ 'test_batch_size': 200,
68
+ 'augmentation_enable': False,
69
+ 'aug_factor': 8,
70
+ 'aug_batch_size': 50
71
+ }
72
+ if tester_params['augmentation_enable']:
73
+ tester_params['test_batch_size'] = tester_params['aug_batch_size']
74
+
75
+ logger_params = {
76
+ 'log_file': {
77
+ 'desc': 'test__tsp',
78
+ 'filename': 'run_log'
79
+ }
80
+ }
81
+
82
+ ### Config end
83
+
84
+ ##########################################################################################
85
+ def _set_debug_mode():
86
+ global tester_params
87
+ tester_params['test_episodes'] = 100
88
+
89
+ def _print_config():
90
+ logger = logging.getLogger('root')
91
+ logger.info('DEBUG_MODE: {}'.format(DEBUG_MODE))
92
+ logger.info('USE_CUDA: {}, CUDA_DEVICE_NUM: {}'.format(USE_CUDA, CUDA_DEVICE_NUM))
93
+ [logger.info(key + ": {}".format(env_params[key])) for key in env_params.keys()]
94
+ logger.info('Training Method: {}'.format(training_method))
95
+ [logger.info(key + ": {}".format(encoder_params[key])) for key in encoder_params.keys()]
96
+ [logger.info(key + ": {}".format(decoder_params[key])) for key in decoder_params.keys()]
97
+ [logger.info(key + ": {}".format(tester_params[key])) for key in tester_params.keys()]
98
+
99
+ def load_problems(path):
100
+ edge_dists = torch.load(os.path.join(path, "dists"), weights_only=True)
101
+ edge_to_node = torch.load(os.path.join(path, "edge_to_node"), weights_only=True)
102
+
103
+ return edge_dists, edge_to_node
104
+
105
+ ##########################################################################################
106
+ def main(n_sols = 101):
107
+
108
+ if DEBUG_MODE:
109
+ _set_debug_mode()
110
+
111
+ create_logger(**logger_params)
112
+ _print_config()
113
+
114
+ tester = TSPTester(
115
+ training_method=training_method,
116
+ env_params=env_params,
117
+ encoder_params=encoder_params,
118
+ decoder_params=decoder_params,
119
+ tester_params=tester_params)
120
+
121
+ if tester_params['data_load_path'] is not None:
122
+ shared_problem, edge_to_node = load_problems(tester_params['data_load_path'])
123
+ shared_problem = shared_problem.to(tester.device)
124
+ edge_to_node = edge_to_node.to(tester.device)
125
+ else:
126
+ shared_problem, edge_to_node = get_random_problems(env_params['distribution'], tester_params['test_episodes'], env_params['problem_size'], env_params['emax'])
127
+
128
+ prefs = torch.zeros((n_sols, 2))
129
+ for i in range(n_sols):
130
+ prefs[i, 0] = 1 - 0.01 * i
131
+ prefs[i, 1] = 0.01 * i
132
+
133
+ timer_start = time.time()
134
+
135
+ sols = tester.run(shared_problem, prefs, edge_to_node)
136
+
137
+ timer_end = time.time()
138
+
139
+ total_time = timer_end - timer_start
140
+
141
+ ref = np.asarray(tester_params['reference'])
142
+ hv = hvwfg.wfg(sols.astype(float), ref.astype(float))
143
+ hv_ratio = hv / (ref[0] * ref[1])
144
+
145
+ print('Run Time(s): {:.4f}'.format(total_time))
146
+ print('HV Ratio: {:.4f}'.format(hv_ratio))
147
+
148
+ ##########################################################################################
149
+ if __name__ == "__main__":
150
+ main()
MGMOTSP/train_fix2_20_eb.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##########################################################################################
2
+ # Machine Environment Config
3
+ DEBUG_MODE = False
4
+ USE_CUDA = not DEBUG_MODE
5
+ CUDA_DEVICE_NUM = 0
6
+
7
+ ##########################################################################################
8
+ # Path Config
9
+ import os
10
+ import sys
11
+
12
+ os.chdir(os.path.dirname(os.path.abspath(__file__)))
13
+ sys.path.insert(0, "..") # for problem_def
14
+ sys.path.insert(0, "../..") # for utils
15
+
16
+ ##########################################################################################
17
+ # import
18
+ import logging
19
+ from utils.utils import create_logger, copy_all_src
20
+
21
+ from MGMOTSPTrainer import TSPTrainer
22
+
23
+ ##########################################################################################
24
+ # parameters
25
+ env_params = {
26
+ 'distribution': "FIX", # FIX or FLEX
27
+ 'problem_size': 20,
28
+ 'pomo_size': 20,
29
+ 'emax': 2
30
+ }
31
+
32
+ training_method = "Chb" # Linear or Chb
33
+ curriculum_learning = False
34
+
35
+ encoder_params = {
36
+ 'embedding_dim': 128,
37
+ 'encoder_layer_num': 6,
38
+ 'qkv_dim': 16,
39
+ 'head_num': 8,
40
+ 'ff_hidden_dim': 512,
41
+ "dropout": 0.1,
42
+ }
43
+
44
+ decoder_params = {
45
+ 'embedding_dim': 128,
46
+ 'qkv_dim': 16,
47
+ 'head_num': 8,
48
+ 'logit_clipping': 10,
49
+ 'eval_type': 'argmax',
50
+ }
51
+ decoder_params["training_method"] = training_method
52
+
53
+ optimizer_params = {
54
+ 'optimizer': {
55
+ 'lr': 1e-4,
56
+ 'weight_decay': 1e-6
57
+ },
58
+ 'scheduler': {
59
+ 'milestones': [180,],
60
+ 'gamma': 0.1
61
+ }
62
+ }
63
+
64
+ trainer_params = {
65
+ 'use_cuda': USE_CUDA,
66
+ 'cuda_device_num': CUDA_DEVICE_NUM,
67
+ 'epochs': 200,
68
+ 'train_episodes': 100*1000,
69
+ 'train_batch_size': 64,
70
+ 'logging': {
71
+ 'model_save_interval': 5,
72
+ },
73
+ 'model_load': {
74
+ 'enable': False, # enable loading pre-trained model
75
+ 'path': './Final_result/edge_50', # directory path of pre-trained model and log files saved.
76
+ 'epoch': 20, # epoch version of pre-trained model to laod.
77
+ }
78
+ }
79
+
80
+ logger_params = {
81
+ 'log_file': {
82
+ 'desc': 'train__tsp',
83
+ 'filename': 'run_log'
84
+ }
85
+ }
86
+
87
+ def curriculum_function(epoch):
88
+
89
+ problem_size = 20
90
+ pomo_size = problem_size
91
+ fwd_batch_size = 64
92
+ batch_size = 64
93
+ emax = 2
94
+
95
+ return problem_size, pomo_size, batch_size, fwd_batch_size, emax
96
+
97
+ ##########################################################################################
98
+ # main
99
+ def main():
100
+ if DEBUG_MODE:
101
+ _set_debug_mode()
102
+
103
+ create_logger(**logger_params)
104
+
105
+ _print_config()
106
+
107
+ trainer = TSPTrainer(
108
+ training_method=training_method,
109
+ curriculum_learning=curriculum_learning,
110
+ curriculum_function=curriculum_function,
111
+ env_params=env_params,
112
+ encoder_params=encoder_params,
113
+ decoder_params=decoder_params,
114
+ optimizer_params=optimizer_params,
115
+ trainer_params=trainer_params)
116
+
117
+ copy_all_src(trainer.result_folder)
118
+
119
+ trainer.run()
120
+
121
+ def _set_debug_mode():
122
+ global trainer_params
123
+ trainer_params['epochs'] = 1
124
+ trainer_params['train_episodes'] = 10
125
+ trainer_params['train_batch_size'] = 10
126
+
127
+ def _print_config():
128
+ logger = logging.getLogger('root')
129
+ logger.info('DEBUG_MODE: {}'.format(DEBUG_MODE))
130
+ logger.info('USE_CUDA: {}, CUDA_DEVICE_NUM: {}'.format(USE_CUDA, CUDA_DEVICE_NUM))
131
+ [logger.info(key + ": {}".format(env_params[key])) for key in env_params.keys()]
132
+ [logger.info("Curriculum Learning: {}".format(curriculum_learning))]
133
+ [logger.info("Training Method: {}".format(training_method))]
134
+ [logger.info(key + ": {}".format(encoder_params[key])) for key in encoder_params.keys()]
135
+ [logger.info(key + ": {}".format(decoder_params[key])) for key in decoder_params.keys()]
136
+ [logger.info(key + ": {}".format(optimizer_params[key])) for key in optimizer_params.keys()]
137
+ [logger.info(key + ": {}".format(trainer_params[key])) for key in trainer_params.keys()]
138
+
139
+ ##########################################################################################
140
+
141
+ if __name__ == "__main__":
142
+ main()