add comments
This commit is contained in:
29
model.py
29
model.py
@@ -10,7 +10,7 @@ import json
|
||||
|
||||
class Model(ap.Model):
|
||||
def setup(self):
|
||||
# self para
|
||||
# self parameter
|
||||
self.sample = self.p.sample
|
||||
self.int_stop_ts = 0
|
||||
self.int_n_iter = int(self.p.n_iter)
|
||||
@@ -27,11 +27,11 @@ class Model(ap.Model):
|
||||
self.remove_t = int(self.p.remove_t)
|
||||
self.int_netw_prf_n = int(self.p.netw_prf_n)
|
||||
|
||||
# init graph bom
|
||||
# initialize graph bom
|
||||
G_bom = nx.adjacency_graph(json.loads(self.p.g_bom))
|
||||
self.product_network = ap.Network(self, G_bom)
|
||||
|
||||
# init graph firm
|
||||
# initialize graph firm
|
||||
Firm = pd.read_csv("Firm_amended.csv")
|
||||
Firm['Code'] = Firm['Code'].astype('string')
|
||||
Firm.fillna(0, inplace=True)
|
||||
@@ -49,7 +49,7 @@ class Model(ap.Model):
|
||||
firm_labels_dict[code] = Firm_attr.loc[code].to_dict()
|
||||
nx.set_node_attributes(G_Firm, firm_labels_dict)
|
||||
|
||||
# init graph firm prod
|
||||
# initialize graph firm prod
|
||||
Firm_Prod = pd.read_csv("Firm_amended.csv")
|
||||
Firm_Prod.fillna(0, inplace=True)
|
||||
firm_prod = pd.DataFrame({'bool': Firm_Prod.loc[:, '1':].stack()})
|
||||
@@ -122,11 +122,12 @@ class Model(ap.Model):
|
||||
# nx.to_pandas_adjacency(G_Firm).to_csv('adj_g_firm.csv')
|
||||
# nx.to_pandas_adjacency(G_FirmProd).to_csv('adj_g_firm_prod.csv')
|
||||
|
||||
# unconnected node
|
||||
# connect unconnected nodes
|
||||
for node in nx.nodes(G_Firm):
|
||||
if G_Firm.degree(node) == 0:
|
||||
for product_code in G_Firm.nodes[node]['Product_Code']:
|
||||
# unconnect node does not have possible suppliers
|
||||
# unconnected node does not have possible suppliers,
|
||||
# therefore find possible customer instead
|
||||
# current node in graph firm prod
|
||||
current_node = \
|
||||
[n for n, v in G_FirmProd.nodes(data=True)
|
||||
@@ -135,10 +136,10 @@ class Model(ap.Model):
|
||||
|
||||
lst_succ_product_code = list(
|
||||
G_bom.successors(product_code))
|
||||
# different from for different types of product,
|
||||
# different from: for different types of product,
|
||||
# finding a common supplier (the logic above),
|
||||
# for different types of product,
|
||||
# finding a custormer for each product
|
||||
# instead: for different types of product,
|
||||
# finding a customer for each product
|
||||
for succ_product_code in lst_succ_product_code:
|
||||
# for each product successor (finished product)
|
||||
# the firm sells to,
|
||||
@@ -187,14 +188,14 @@ class Model(ap.Model):
|
||||
# nx.draw(G_FirmProd)
|
||||
# plt.show()
|
||||
|
||||
# init product
|
||||
# initialize product
|
||||
for ag_node, attr in self.product_network.graph.nodes(data=True):
|
||||
product = ProductAgent(self, code=ag_node.label, name=attr['Name'])
|
||||
self.product_network.add_agents([product], [ag_node])
|
||||
self.a_lst_total_products = ap.AgentList(self,
|
||||
self.product_network.agents)
|
||||
|
||||
# init firm
|
||||
# initialize firm
|
||||
for ag_node, attr in self.firm_network.graph.nodes(data=True):
|
||||
firm_agent = FirmAgent(
|
||||
self,
|
||||
@@ -210,7 +211,7 @@ class Model(ap.Model):
|
||||
self.firm_network.add_agents([firm_agent], [ag_node])
|
||||
self.a_lst_total_firms = ap.AgentList(self, self.firm_network.agents)
|
||||
|
||||
# init dct_lst_init_disrupt_firm_prod (from string to agent)
|
||||
# initialize dct_lst_init_disrupt_firm_prod (from string to agent)
|
||||
t_dct = {}
|
||||
for firm_code, lst_product in \
|
||||
self.dct_lst_init_disrupt_firm_prod.items():
|
||||
@@ -368,7 +369,7 @@ class Model(ap.Model):
|
||||
firm.dct_prod_up_prod_stat[
|
||||
prod]['p_stat'].append(('R', self.t))
|
||||
|
||||
# stop simulation if any firm still in disrupted except inital removal
|
||||
# stop simulation if any firm still in disrupted except initial removal
|
||||
if self.t > 0:
|
||||
for firm in self.a_lst_total_firms:
|
||||
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||
@@ -443,8 +444,6 @@ class Model(ap.Model):
|
||||
|
||||
# reset dct_request_prod_from_firm
|
||||
self.a_lst_total_firms.clean_before_trial()
|
||||
# do not use:
|
||||
# self.a_lst_total_firms.dct_request_prod_from_firm = {} why?
|
||||
|
||||
def end(self):
|
||||
# print('/' * 20, 'output', '/' * 20)
|
||||
|
||||
Reference in New Issue
Block a user