This commit is contained in:
2023-07-28 15:29:16 +08:00
parent a321df0582
commit 7255c3b046
5 changed files with 41 additions and 40 deletions

53
firm.py
View File

@@ -55,14 +55,12 @@ class FirmAgent(ap.Agent):
extra_cap = self.model.nprandom.integers(extra_cap_mean-2,
extra_cap_mean+2)
extra_cap = 0 if round(extra_cap) < 0 else round(extra_cap)
# print(firm_agent.name, extra_cap)
self.dct_prod_capacity[product] = extra_cap
elif self.str_cap_limit_prob_type == 'normal':
extra_cap_mean = \
self.size_stat[0][0] / self.flt_cap_limit_level
extra_cap = self.model.nprandom.normal(extra_cap_mean, 1)
extra_cap = 0 if round(extra_cap) < 0 else round(extra_cap)
# print(firm_agent.name, extra_cap)
self.dct_prod_capacity[product] = extra_cap
def remove_edge_to_cus(self, disrupted_prod):
@@ -84,6 +82,8 @@ class FirmAgent(ap.Agent):
customer.dct_prod_up_prod_stat[
prod]['s_stat'][disrupted_prod][
'lst_disrupt_firm'].append(self)
print(f"{self.name} disrupt {customer.name}'s "
f"{prod.code} due to {disrupted_prod.code}")
# remove edge to customer
self.firm_network.graph.remove_edge(n1, n2, key)
@@ -117,10 +117,11 @@ class FirmAgent(ap.Agent):
if status != 'D':
self.dct_prod_up_prod_stat[
prod]['p_stat'].append(('D', self.model.t))
print(f"{self.name}'s {prod.code} turn to D status")
def seek_alt_supply(self, product):
# para product is the product that self is seeking
# print(f"{self.name} seek alt supply for {product.code}")
print(f"{self.name} seek alt supply for {product.code}")
if self.dct_n_trial_up_prod_disrupted[
product] <= self.model.int_n_max_trial:
if self.dct_n_trial_up_prod_disrupted[product] == 0:
@@ -173,10 +174,10 @@ class FirmAgent(ap.Agent):
else:
select_alt_supply = \
self.model.nprandom.choice(lst_firm_connect)
# print(
# f"{self.name} selct alt supply for {product.code} "
# f"from {select_alt_supply.name}"
# )
print(
f"{self.name} selct alt supply for {product.code} "
f"from {select_alt_supply.name}"
)
assert select_alt_supply.is_prod_in_current_normal(product), \
f"{select_alt_supply} \
does not produce requested product {product}"
@@ -189,17 +190,17 @@ class FirmAgent(ap.Agent):
select_alt_supply.dct_request_prod_from_firm[product] = [
self
]
# print(
# select_alt_supply.name, 'dct_request_prod_from_firm', {
# key.code: [v.name for v in value]
# for key, value in
# select_alt_supply.dct_request_prod_from_firm.items()
# })
print(
select_alt_supply.name, 'dct_request_prod_from_firm', {
key.code: [v.name for v in value]
for key, value in
select_alt_supply.dct_request_prod_from_firm.items()
})
self.dct_n_trial_up_prod_disrupted[product] += 1
def handle_request(self):
# print(self.name, 'handle_request')
print(self.name, 'handle_request')
for product, lst_firm in self.dct_request_prod_from_firm.items():
if self.dct_prod_capacity[product] > 0:
if len(lst_firm) == 0:
@@ -254,10 +255,10 @@ class FirmAgent(ap.Agent):
down_firm.dct_cand_alt_supp_up_prod_disrupted[
product].remove(self)
# print(
# f"{self.name} denied {product.code} request "
# f"from {down_firm.name} for lack of capacity"
# )
print(
f"{self.name} denied {product.code} request "
f"from {down_firm.name} for lack of capacity"
)
def accept_request(self, down_firm, product):
# para product is the product that self is selling
@@ -290,17 +291,17 @@ class FirmAgent(ap.Agent):
del down_firm.dct_n_trial_up_prod_disrupted[product]
del down_firm.dct_cand_alt_supp_up_prod_disrupted[product]
# print(
# f"{self.name} accept {product.code} request "
# f"from {down_firm.name}"
# )
print(
f"{self.name} accept {product.code} request "
f"from {down_firm.name}"
)
else:
down_firm.dct_cand_alt_supp_up_prod_disrupted[product].remove(self)
# print(
# f"{self.name} denied {product.code} request "
# f"from {down_firm.name}"
# )
print(
f"{self.name} denied {product.code} request "
f"from {down_firm.name}"
)
def clean_before_trial(self):
self.dct_request_prod_from_firm = {}