update the status of firm in clean_before_time_step + remove_edge_to_cus_disrupt_cus_up_prod update disrupted status instead of append + proactive find candidate that is not a current supplier for the same product
This commit is contained in:
parent
84828272e2
commit
098680f3aa
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -82,8 +82,8 @@ class ControllerDB:
|
||||||
# list_dct = [{'140': ['1.4.5.1']}]
|
# list_dct = [{'140': ['1.4.5.1']}]
|
||||||
# list_dct = [{'133': ['1.4.4.1']}]
|
# list_dct = [{'133': ['1.4.4.1']}]
|
||||||
# list_dct = [{'2': ['1.1.3']}]
|
# list_dct = [{'2': ['1.1.3']}]
|
||||||
# list_dct = [{'135': ['1.3.2.1']}]
|
list_dct = [{'135': ['1.3.2.1']}]
|
||||||
list_dct = [{'79': ['2.1.3.4']}]
|
# list_dct = [{'79': ['2.1.3.4']}]
|
||||||
# list_dct = [{'99': ['1.3.3']}]
|
# list_dct = [{'99': ['1.3.3']}]
|
||||||
# list_dct = [{'41': ['1.4.5']}]
|
# list_dct = [{'41': ['1.4.5']}]
|
||||||
|
|
||||||
|
|
19
firm.py
19
firm.py
|
@ -94,8 +94,11 @@ class FirmAgent(ap.Agent):
|
||||||
prod]['supply'].keys():
|
prod]['supply'].keys():
|
||||||
customer.dct_prod_up_prod_stat[
|
customer.dct_prod_up_prod_stat[
|
||||||
prod]['supply'][disrupted_prod] = False
|
prod]['supply'][disrupted_prod] = False
|
||||||
customer.dct_prod_up_prod_stat[
|
status, _ = customer.dct_prod_up_prod_stat[
|
||||||
prod]['status'].append(('D', self.model.t))
|
prod]['status'][-1]
|
||||||
|
if status != 'D':
|
||||||
|
customer.dct_prod_up_prod_stat[
|
||||||
|
prod]['status'].append(('D', self.model.t))
|
||||||
print(self.name, disrupted_prod.code, 'disrupt',
|
print(self.name, disrupted_prod.code, 'disrupt',
|
||||||
customer.name, prod.code)
|
customer.name, prod.code)
|
||||||
|
|
||||||
|
@ -294,17 +297,19 @@ class FirmAgent(ap.Agent):
|
||||||
|
|
||||||
def clean_before_trial(self):
|
def clean_before_trial(self):
|
||||||
self.dct_request_prod_from_firm = {}
|
self.dct_request_prod_from_firm = {}
|
||||||
for prod in self.dct_prod_up_prod_stat.keys():
|
|
||||||
status, ts = self.dct_prod_up_prod_stat[prod]['status'][-1]
|
|
||||||
if ts != self.model.t:
|
|
||||||
self.dct_prod_up_prod_stat[prod]['status'].append(
|
|
||||||
(status, self.model.t))
|
|
||||||
|
|
||||||
def clean_before_time_step(self):
|
def clean_before_time_step(self):
|
||||||
self.dct_n_trial_up_prod_disrupted = \
|
self.dct_n_trial_up_prod_disrupted = \
|
||||||
dict.fromkeys(self.dct_n_trial_up_prod_disrupted.keys(), 0)
|
dict.fromkeys(self.dct_n_trial_up_prod_disrupted.keys(), 0)
|
||||||
self.dct_cand_alt_supp_up_prod_disrupted = {}
|
self.dct_cand_alt_supp_up_prod_disrupted = {}
|
||||||
|
|
||||||
|
# update the status of firm
|
||||||
|
for prod in self.dct_prod_up_prod_stat.keys():
|
||||||
|
status, ts = self.dct_prod_up_prod_stat[prod]['status'][-1]
|
||||||
|
if ts != self.model.t:
|
||||||
|
self.dct_prod_up_prod_stat[prod]['status'].append(
|
||||||
|
(status, self.model.t))
|
||||||
|
|
||||||
def get_firm_network_node(self):
|
def get_firm_network_node(self):
|
||||||
return self.firm_network.positions[self]
|
return self.firm_network.positions[self]
|
||||||
|
|
||||||
|
|
11
model.py
11
model.py
|
@ -311,9 +311,16 @@ class Model(ap.Model):
|
||||||
[product.code == di_supp_node['Product_Code']
|
[product.code == di_supp_node['Product_Code']
|
||||||
for product in self.a_lst_total_products])[0]
|
for product in self.a_lst_total_products])[0]
|
||||||
# find a dfferent firm can produce the same product
|
# find a dfferent firm can produce the same product
|
||||||
|
# and is not a current supplier for the same product
|
||||||
|
lst_current_supp_code = \
|
||||||
|
[self.firm_prod_network.nodes[code]['Firm_Code']
|
||||||
|
for code in self.firm_prod_network.predecessors(
|
||||||
|
pro_firm_prod_code)
|
||||||
|
if self.firm_prod_network.nodes[code][
|
||||||
|
'Product_Code'] == di_supp_prod.code]
|
||||||
lst_cand = self.model.a_lst_total_firms.select([
|
lst_cand = self.model.a_lst_total_firms.select([
|
||||||
firm.is_prod_in_current_normal(di_supp_prod)
|
firm.is_prod_in_current_normal(di_supp_prod)
|
||||||
and firm.code != di_supp_node['Firm_Code']
|
and firm.code not in lst_current_supp_code
|
||||||
for firm in self.model.a_lst_total_firms
|
for firm in self.model.a_lst_total_firms
|
||||||
])
|
])
|
||||||
if len(lst_cand) > 0:
|
if len(lst_cand) > 0:
|
||||||
|
@ -388,6 +395,8 @@ class Model(ap.Model):
|
||||||
# remove edge to customer and disrupt customer up product
|
# remove edge to customer and disrupt customer up product
|
||||||
for firm in self.a_lst_total_firms:
|
for firm in self.a_lst_total_firms:
|
||||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||||
|
# repetition of disrupted firm that last for multiple ts is ok,
|
||||||
|
# as their edge has already been removed
|
||||||
status, ts = firm.dct_prod_up_prod_stat[prod]['status'][-1]
|
status, ts = firm.dct_prod_up_prod_stat[prod]['status'][-1]
|
||||||
if status == 'D' and ts == self.t-1:
|
if status == 'D' and ts == self.t-1:
|
||||||
firm.remove_edge_to_cus_disrupt_cus_up_prod(prod)
|
firm.remove_edge_to_cus_disrupt_cus_up_prod(prod)
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,crit_supplier,proactive_ratio,remove_t,netw_prf_n
|
n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,crit_supplier,proactive_ratio,remove_t,netw_prf_n
|
||||||
10,TRUE,TRUE,uniform,10,0.5,0.1,1,5,2
|
10,TRUE,TRUE,uniform,10,0.5,0.01,1,5,2
|
||||||
|
|
|
Loading…
Reference in New Issue