handling request based on connection

This commit is contained in:
2023-03-16 16:08:45 +08:00
parent 082864814b
commit 1072d4e2b0
9 changed files with 34 additions and 14 deletions

40
firm.py
View File

@@ -107,15 +107,37 @@ class FirmAgent(ap.Agent):
self.accept_request(lst_firm[0], product)
elif len(lst_firm) > 1:
# handling based on connection
# TBC
# handling based on size
lst_firm_size = [firm.revenue_log for firm in lst_firm]
lst_prob = [
size / sum(lst_firm_size) for size in lst_firm_size
]
select_customer = self.model.nprandom.choice(lst_firm,
p=lst_prob)
self.accept_request(select_customer, product)
lst_firm_connect = []
for firm in lst_firm:
out_edges = self.model.firm_network.graph.out_edges(
self.model.firm_network.positions[firm], keys=True)
in_edges = self.model.firm_network.graph.in_edges(
self.model.firm_network.positions[firm], keys=True)
lst_adj_firm = []
lst_adj_firm += [ap.AgentIter(self.model, edge[1]).to_list()[0].code for edge in out_edges]
lst_adj_firm += [ap.AgentIter(self.model, edge[0]).to_list()[0].code for edge in in_edges]
if self.code in lst_adj_firm:
lst_firm_connect += firm
if len(lst_firm_connect) == 0:
# handling based on size
lst_firm_size = [firm.revenue_log for firm in lst_firm]
lst_prob = [
size / sum(lst_firm_size) for size in lst_firm_size
]
select_customer = self.model.nprandom.choice(lst_firm,
p=lst_prob)
self.accept_request(select_customer, product)
elif len(lst_firm_connect) == 1:
self.accept_request(lst_firm_connect[0], product)
elif len(lst_firm_connect) > 1:
# handling based on size of firm that has connection
lst_firm_size = [firm.revenue_log for firm in lst_firm_connect]
lst_prob = [
size / sum(lst_firm_size) for size in lst_firm_size
]
select_customer = self.model.nprandom.choice(lst_firm_connect,
p=lst_prob)
self.accept_request(select_customer, product)
def accept_request(self, down_firm, product):
lst_firm_size = [