remove crit_supplier
This commit is contained in:
30
model.py
30
model.py
@@ -228,7 +228,7 @@ class Model(ap.Model):
|
||||
assert product in firm.dct_prod_up_prod_stat.keys(), \
|
||||
f"product {product.code} not in firm {firm.code}"
|
||||
firm.dct_prod_up_prod_stat[
|
||||
product]['status'].append(('D', self.t))
|
||||
product]['p_stat'].append(('D', self.t))
|
||||
# print(f"initial disruption {firm.name} {product.code}")
|
||||
|
||||
# proactive strategy
|
||||
@@ -349,7 +349,7 @@ class Model(ap.Model):
|
||||
# reduce the size of disrupted firm
|
||||
for firm in self.a_lst_total_firms:
|
||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||
status, ts = firm.dct_prod_up_prod_stat[prod]['status'][-1]
|
||||
status, ts = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1]
|
||||
if status == 'D':
|
||||
size = firm.size_stat[-1][0] - \
|
||||
firm.size_stat[0][0] \
|
||||
@@ -360,19 +360,19 @@ class Model(ap.Model):
|
||||
# f'to {firm.size_stat[-1][0]} due to {prod.code}')
|
||||
lst_is_disrupt = \
|
||||
[stat == 'D' for stat, _ in
|
||||
firm.dct_prod_up_prod_stat[prod]['status']
|
||||
firm.dct_prod_up_prod_stat[prod]['p_stat']
|
||||
[-1 * self.remove_t:]]
|
||||
if all(lst_is_disrupt):
|
||||
# turn disrupted firm into removed firm
|
||||
# when last self.remove_t times status is all disrupted
|
||||
firm.dct_prod_up_prod_stat[
|
||||
prod]['status'].append(('R', self.t))
|
||||
prod]['p_stat'].append(('R', self.t))
|
||||
|
||||
# stop simulation if any firm still in disrupted except inital removal
|
||||
if self.t > 0:
|
||||
for firm in self.a_lst_total_firms:
|
||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||
status, _ = firm.dct_prod_up_prod_stat[prod]['status'][-1]
|
||||
status, _ = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1]
|
||||
is_init = \
|
||||
firm in self.dct_lst_init_disrupt_firm_prod.keys() \
|
||||
and prod in self.dct_lst_init_disrupt_firm_prod[firm]
|
||||
@@ -397,9 +397,17 @@ class Model(ap.Model):
|
||||
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]['p_stat'][-1]
|
||||
if status == 'D' and ts == self.t-1:
|
||||
firm.remove_edge_to_cus_disrupt_cus_up_prod(prod)
|
||||
firm.remove_edge_to_cus(prod)
|
||||
|
||||
for firm in self.a_lst_total_firms:
|
||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||
for up_prod in firm.dct_prod_up_prod_stat[prod][
|
||||
's_stat'].keys():
|
||||
if firm.dct_prod_up_prod_stat[prod][
|
||||
's_stat'][up_prod]['lst_disrupt_firm']:
|
||||
firm.disrupt_cus_prod(prod, up_prod)
|
||||
|
||||
for n_trial in range(self.int_n_max_trial):
|
||||
# print('=' * 10, 'trial', n_trial, '=' * 10)
|
||||
@@ -410,7 +418,7 @@ class Model(ap.Model):
|
||||
for firm in self.a_lst_total_firms:
|
||||
lst_seek_prod = []
|
||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||
status = firm.dct_prod_up_prod_stat[prod]['status'][-1][0]
|
||||
status = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1][0]
|
||||
if status == 'D':
|
||||
for supply in firm.dct_prod_up_prod_stat[
|
||||
prod]['supply'].keys():
|
||||
@@ -448,11 +456,11 @@ class Model(ap.Model):
|
||||
for prod, dct_status_supply in \
|
||||
firm.dct_prod_up_prod_stat.items():
|
||||
lst_is_normal = [stat == 'N' for stat, _
|
||||
in dct_status_supply['status']]
|
||||
in dct_status_supply['p_stat']]
|
||||
if not all(lst_is_normal):
|
||||
# print(f"{firm.name} {prod.code}:")
|
||||
# print(dct_status_supply['status'])
|
||||
for status, ts in dct_status_supply['status']:
|
||||
# print(dct_status_supply['p_stat'])
|
||||
for status, ts in dct_status_supply['p_stat']:
|
||||
db_r = Result(s_id=self.sample.id,
|
||||
id_firm=firm.code,
|
||||
id_product=prod.code,
|
||||
|
||||
Reference in New Issue
Block a user