diff --git a/.vscode/launch.json b/.vscode/launch.json index 92afbfc..fa990d4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "name": "Python: Current File", "type": "python", "request": "launch", - "program": "C:\\Users\\ASUS\\OneDrive\\Project\\ScrAbm\\Dissertation\\IIabm\\model.py", + // "program": "C:\\Users\\ASUS\\OneDrive\\Project\\ScrAbm\\Dissertation\\IIabm\\model.py", "console": "integratedTerminal", "justMyCode": true } diff --git a/__pycache__/firm.cpython-38.pyc b/__pycache__/firm.cpython-38.pyc index a00e0e1..3b52083 100644 Binary files a/__pycache__/firm.cpython-38.pyc and b/__pycache__/firm.cpython-38.pyc differ diff --git a/firm.py b/firm.py index 071743d..e24eb33 100644 --- a/firm.py +++ b/firm.py @@ -41,7 +41,7 @@ class FirmAgent(ap.Agent): ] # print(select_edges) if len(select_edges) == 0: - print('affect', customer.name, remove_product.code) + print(self.name, remove_product.code, 'affect', customer.name) if remove_product not in \ customer.a_list_up_product_removed: customer.a_list_up_product_removed.append( @@ -136,3 +136,7 @@ class FirmAgent(ap.Agent): def clean_before_trial(self): self.dct_request_prod_from_firm = {} + + def clean_before_time_step(self): + self.dct_num_trial_up_product_removed = {} + self.a_list_up_product_removed = ap.AgentList(self.model, []) diff --git a/main.py b/main.py new file mode 100644 index 0000000..178df55 --- /dev/null +++ b/main.py @@ -0,0 +1,52 @@ +import os +import random +import time +from multiprocessing import Process +import argparse +from computation import Computation +from sqlalchemy.orm import close_all_sessions + +import yaml + + +def do_computation(c_db): + exp = Computation(c_db) + + while 1: + time.sleep(random.uniform(0, 10)) + is_all_done = exp.run() + if is_all_done: + break + + +# if __name__ == '__main__': + # parser = argparse.ArgumentParser(description='setting') + # parser.add_argument('--exp', type=str, default='test') + # parser.add_argument('--job', type=int, default='3') + # parser.add_argument('--reset', type=int, default='0') + + # args = parser.parse_args() + # assert args.job >= 1, 'Number of jobs should >= 1' + + # prefix_file_name = 'conf_db_prefix.yaml' + # if os.path.exists(prefix_file_name): + # os.remove(prefix_file_name) + # with open(prefix_file_name, 'w', encoding='utf-8') as file: + # yaml.dump({'db_name_prefix': args.exp}, file) + + # from controller_db import ControllerDB + # controller_db = ControllerDB(args.exp, reset_flag=args.reset) + # controller_db.reset_db() + + # controller_db.prepare_list_sample() + + # close_all_sessions() + + # process_list = [] + # for i in range(int(args.job)): + # p = Process(target=do_computation, args=(controller_db,)) + # p.start() + # process_list.append(p) + + # for i in process_list: + # i.join() diff --git a/model.py b/model.py index d83fdb6..e59a18f 100644 --- a/model.py +++ b/model.py @@ -8,9 +8,15 @@ from product import ProductAgent sample = 0 seed = 0 -n_iter = 3 +n_iter = 10 # dct_list_init_remove_firm_prod = {133: ['1.4.4.1'], 2: ['1.1.3']} +# dct_list_init_remove_firm_prod = { +# 135: ['1.3.2.1'], +# 133: ['1.4.4.1'], +# 2: ['1.1.3'] +# } dct_list_init_remove_firm_prod = { + 140: ['1.4.5.1'], 135: ['1.3.2.1'], 133: ['1.4.4.1'], 2: ['1.1.3'] @@ -177,6 +183,7 @@ class Model(ap.Model): self.draw_network() def update(self): + self.a_list_total_firms.clean_before_time_step() # stop simulation if reached terminal number of iteration if self.t == self.int_n_iter or len( self.dct_list_remove_firm_prod) == 0: @@ -232,6 +239,7 @@ class Model(ap.Model): self.dct_list_remove_firm_prod = {} for firm in self.a_list_total_firms: if len(firm.a_list_up_product_removed) > 0: + print(firm.name, 'a_list_up_product_removed', [product.code for product in firm.a_list_up_product_removed]) for product in firm.a_list_product: n_up_product_removed = 0 for up_product_removed in firm.a_list_up_product_removed: @@ -251,8 +259,9 @@ class Model(ap.Model): 1) / (max(list_revenue_log) - min(list_revenue_log) + 1) p_remove = 1 - std_size * (1 - lost_percent) - flag = self.nprandom.choice([1, 0], - p=[p_remove, 1 - p_remove]) + # flag = self.nprandom.choice([1, 0], + # p=[p_remove, 1 - p_remove]) + flag = 1 if flag == 1: firm.a_list_product_removed.append(product) # if firm in