Skip to content

Commit 3d5d8c1

Browse files
committed
Computing time divided by 2.5
1 parent 0f04446 commit 3d5d8c1

File tree

6 files changed

+128
-89
lines changed

6 files changed

+128
-89
lines changed

gns_solver.py

+107-62
Large diffs are not rendered by default.

model/graph.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ def __init__(self):
3232
'is_possible': 8
3333
}
3434
self.resource = {
35-
'utilization_ratio': 0,
36-
'available_time': 1,
37-
'remaining_operations': 2,
38-
'similar_resources': 3
35+
'available_time': 0,
36+
'remaining_operations': 1,
37+
'similar_resources': 2
3938
}
4039
self.material = {
4140
'remaining_init_quantity': 0,
@@ -70,7 +69,7 @@ def __init__(self):
7069
FC: FeatureConfiguration = FeatureConfiguration()
7170

7271
class State:
73-
def __init__(self, items: Tensor, operations: Tensor, resources: Tensor, materials: Tensor, need_for_materials: EdgeStorage, need_for_resources: EdgeStorage, operation_assembly: EdgeStorage, item_assembly: EdgeStorage, precedences: EdgeStorage, same_types: EdgeStorage, device: str="", should_std: bool=True):
72+
def __init__(self, items: Tensor, operations: Tensor, resources: Tensor, materials: Tensor, need_for_materials: EdgeStorage, need_for_resources: EdgeStorage, operation_assembly: EdgeStorage, item_assembly: EdgeStorage, precedences: EdgeStorage, same_types: EdgeStorage, device: str="", should_std: bool=False):
7473
self.items: Tensor = items.clone().to(device)
7574
self.operations: Tensor = operations.clone().to(device)
7675
self.resources: Tensor = resources.clone().to(device)
@@ -118,14 +117,13 @@ def to_tensor_features(self, device: str):
118117
return features2tensor([self.sync, self.large_timescale, self.successors, self.remaining_time, self.remaining_resources, self.remaining_materials, self.available_time, self.end_time, self.is_possible], device)
119118

120119
class ResourceFeatures:
121-
def __init__(self, utilization_ratio: num_feature, available_time: num_feature, remaining_operations: num_feature, similar_resources: num_feature):
122-
self.utilization_ratio = utilization_ratio
120+
def __init__(self, available_time: num_feature, remaining_operations: num_feature, similar_resources: num_feature):
123121
self.available_time = available_time
124122
self.remaining_operations = remaining_operations
125123
self.similar_resources = similar_resources
126124

127125
def to_tensor_features(self, device: str):
128-
return features2tensor([self.utilization_ratio, self.available_time, self.remaining_operations, self.similar_resources], device)
126+
return features2tensor([self.available_time, self.remaining_operations, self.similar_resources], device)
129127

130128
class MaterialFeatures:
131129
def __init__(self, remaining_init_quantity: num_feature, arrival_time: num_feature, remaining_demand: num_feature):

multi_stage_ppo_tuning.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from typing import Callable
1111
from model.agent import MultiAgents_Batch, MAPPO_Loss, MAPPO_Losses, MultiAgent_OneInstance
1212
import time as systime
13-
from tools.common import load_instance, objective_value, freeze, unfreeze, unfreeze_all, freeze_several
13+
from tools.common import load_instance, objective_value, freeze, unfreeze, unfreeze_all, freeze_several_and_unfreeze_others
1414
from translators.graph2solution_translator import translate_solution
1515
from debug.loss_tracker import LossTracker
1616
import math
@@ -34,7 +34,7 @@
3434
"discount_factor": 1.0,
3535
"bias_variance_tradeoff": 1.0
3636
}
37-
LEARNING_RATE = 2e-4
37+
LEARNING_RATE = 5e-4
3838
AGENTS = ["outsourcing", "scheduling", "material_use"]
3939
AGENT = 0
4040
OUTSOURCING = 0
@@ -266,31 +266,28 @@ def multi_stage_fine_tuning(agents: list[(Module, str)], embedding_stack: Module
266266
agent.train()
267267

268268
print("I. FINE TUNING STAGE 1: scheduling agent")
269-
freeze_several(agents, [AGENTS[OUTSOURCING], AGENTS[MATERIAL_USE]])
269+
freeze_several_and_unfreeze_others(agents, [AGENTS[OUTSOURCING], AGENTS[MATERIAL_USE]])
270270
agents = scheduling_stage(_instance, agents, solve_function, path, _epochs, _itrs[0], _batch_size, device, id, size, interactive)
271271

272272
print("II. FINE TUNING STAGE 2: material use agent with freezed embedding and critic layers")
273-
unfreeze_all(agents)
274-
freeze_several(agents, [AGENTS[SCHEDULING], AGENTS[OUTSOURCING]])
273+
freeze_several_and_unfreeze_others(agents, [AGENTS[SCHEDULING], AGENTS[OUTSOURCING]])
275274
freeze(embedding_stack)
276275
freeze(shared_critic)
277276
agents = material_use_stage(_instance, agents, solve_function, path, _epochs, _itrs[1], _batch_size, device, id, size, interactive)
278277

279278
print("III. FINE TUNING STAGE 3.1: outsourcing agent with freezed embedding and critic layers")
280-
unfreeze_all(agents)
281-
freeze_several(agents, [AGENTS[SCHEDULING], AGENTS[MATERIAL_USE]])
279+
freeze_several_and_unfreeze_others(agents, [AGENTS[SCHEDULING], AGENTS[MATERIAL_USE]])
282280
freeze(embedding_stack)
283281
freeze(shared_critic)
284282
agents = outsourcing_stage(_instance, agents, solve_function, path, _epochs, _itrs[2], _batch_size, device, id, size, 1, interactive)
285283

286284
print("III. FINE TUNING STAGE 3.2: outsourcing agent and all layers")
287285
unfreeze(embedding_stack)
286+
unfreeze(shared_critic)
288287
agents = outsourcing_stage(_instance, agents, solve_function, path, _epochs, _itrs[3], _batch_size, device, id, size, 2, interactive)
289288

290289
print("IV. FINE TUNING STAGE 4: multi-agent with all layers")
291290
unfreeze_all(agents)
292-
unfreeze(embedding_stack)
293-
unfreeze(shared_critic)
294291
_best_obj, _best_episode, _time_to_best = multi_agent_stage(_instance, agents, solve_function, path, _epochs, _itrs[4], _batch_size, device, id, size, _start_time, interactive)
295292
final_metrics = pd.DataFrame({
296293
'index': [_instance.id],

multi_stage_pre_training.py

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pickle
22
import os
33
from model.instance import Instance
4-
from tools.common import directory, freeze, unfreeze, unfreeze_all, freeze_several
4+
from tools.common import directory, freeze, unfreeze, unfreeze_all, freeze_several_and_unfreeze_others
55
import torch
66
torch.autograd.set_detect_anomaly(True)
77
import random
@@ -263,7 +263,7 @@ def multi_stage_pre_train(agents: list[(Module, str)], embedding_stack: Module,
263263

264264
if run_number ==1:
265265
print("I. TRAINING STAGE 1: scheduling agent")
266-
freeze_several(agents, [AGENTS[OUTSOURCING], AGENTS[MATERIAL_USE]])
266+
freeze_several_and_unfreeze_others(agents, [AGENTS[OUTSOURCING], AGENTS[MATERIAL_USE]])
267267
agents = scheduling_stage(train_data=train_data,
268268
val_data=val_data,
269269
agents=agents,
@@ -282,8 +282,7 @@ def multi_stage_pre_train(agents: list[(Module, str)], embedding_stack: Module,
282282

283283
elif run_number ==2:
284284
print("II. TRAINING STAGE 2: material use agent with freezed embedding and critic layers")
285-
unfreeze_all(agents)
286-
freeze_several(agents, [AGENTS[SCHEDULING], AGENTS[OUTSOURCING]])
285+
freeze_several_and_unfreeze_others(agents, [AGENTS[SCHEDULING], AGENTS[OUTSOURCING]])
287286
freeze(embedding_stack)
288287
freeze(shared_critic)
289288
agents = material_use_stage(train_data=train_data,
@@ -304,8 +303,7 @@ def multi_stage_pre_train(agents: list[(Module, str)], embedding_stack: Module,
304303

305304
elif run_number ==3:
306305
print("III. TRAINING STAGE 3.1: outsourcing agent with freezed embedding and critic layers")
307-
unfreeze_all(agents)
308-
freeze_several(agents, [AGENTS[SCHEDULING], AGENTS[MATERIAL_USE]])
306+
freeze_several_and_unfreeze_others(agents, [AGENTS[SCHEDULING], AGENTS[MATERIAL_USE]])
309307
freeze(embedding_stack)
310308
freeze(shared_critic)
311309
agents = outsourcing_stage(train_data=train_data,
@@ -327,6 +325,7 @@ def multi_stage_pre_train(agents: list[(Module, str)], embedding_stack: Module,
327325
elif run_number ==4:
328326
print("III. TRAINING STAGE 3.2: outsourcing agent and all layers")
329327
unfreeze(embedding_stack)
328+
unfreeze(shared_critic)
330329
agents = outsourcing_stage(train_data=train_data,
331330
val_data=val_data,
332331
agents=agents,
@@ -346,8 +345,6 @@ def multi_stage_pre_train(agents: list[(Module, str)], embedding_stack: Module,
346345
elif run_number ==5:
347346
print("IV. TRAINING STAGE 4: multi-agent with all layers")
348347
unfreeze_all(agents)
349-
unfreeze(embedding_stack)
350-
unfreeze(shared_critic)
351348
agents = multi_agent_stage(train_data=train_data,
352349
val_data=val_data,
353350
agents=agents,

tools/common.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,13 @@ def unfreeze(agent: Module):
8787
for param in agent.parameters():
8888
param.requires_grad = True
8989

90-
def freeze_several(agents: list[(Module, str)], to_freeze: list[str]):
90+
def freeze_several_and_unfreeze_others(agents: list[(Module, str)], to_freeze: list[str]):
9191
for agent, name in agents:
9292
if name in to_freeze:
9393
freeze(agent)
94+
for agent, name in agents:
95+
if name not in to_freeze:
96+
unfreeze(agent)
9497

9598
def unfreeze_all(agents: list[(Module, str)]):
9699
for agent, _ in agents:

translators/instance2graph_translator.py

-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ def translate(i: Instance, device: str):
147147
for r in resources:
148148
if i.finite_capacity[r]:
149149
res_id = graph.add_resource(r, i.nb_settings, ResourceFeatures(
150-
utilization_ratio = 0,
151150
available_time = 0,
152151
remaining_operations = len(operations),
153152
similar_resources = len(resources)))

0 commit comments

Comments
 (0)