model + firm
This commit is contained in:
parent
bf7bb217af
commit
f8d91df954
Binary file not shown.
5
firm.py
5
firm.py
|
@ -15,3 +15,8 @@ class FirmAgent(ap.Agent):
|
||||||
|
|
||||||
self.dct_product_is_disrupted = dict.fromkeys(list_product, False)
|
self.dct_product_is_disrupted = dict.fromkeys(list_product, False)
|
||||||
self.dct_product_is_removed = dict.fromkeys(list_product, False)
|
self.dct_product_is_removed = dict.fromkeys(list_product, False)
|
||||||
|
|
||||||
|
def remove_edge_to_customer_if_removed(self, remove_product):
|
||||||
|
t = self.firm_network.graph.out_edges(
|
||||||
|
self.firm_network.positions[self], keys=True, data=True)
|
||||||
|
print(t)
|
||||||
|
|
46
model.py
46
model.py
|
@ -86,8 +86,10 @@ class Model(ap.Model):
|
||||||
|
|
||||||
self.firm_network = ap.Network(self, G_Firm)
|
self.firm_network = ap.Network(self, G_Firm)
|
||||||
# print([node.label for node in self.firm_network.nodes])
|
# print([node.label for node in self.firm_network.nodes])
|
||||||
# print([list(self.firm_network.graph.predecessors(node)) for node in self.firm_network.nodes])
|
# print([list(self.firm_network.graph.predecessors(node))
|
||||||
# print([self.firm_network.graph.nodes[node.label]['Name'] for node in self.firm_network.nodes])
|
# for node in self.firm_network.nodes])
|
||||||
|
# print([self.firm_network.graph.nodes[node.label]['Name']
|
||||||
|
# for node in self.firm_network.nodes])
|
||||||
# print([v for v in self.firm_network.graph.nodes(data=True)])
|
# print([v for v in self.firm_network.graph.nodes(data=True)])
|
||||||
|
|
||||||
# init firm
|
# init firm
|
||||||
|
@ -103,9 +105,8 @@ class Model(ap.Model):
|
||||||
capacity=self.firm_network.graph.out_degree(ag_node))
|
capacity=self.firm_network.graph.out_degree(ag_node))
|
||||||
self.firm_network.add_agents([firm_agent], [ag_node])
|
self.firm_network.add_agents([firm_agent], [ag_node])
|
||||||
self.a_list_total_firms = ap.AgentList(self, self.firm_network.agents)
|
self.a_list_total_firms = ap.AgentList(self, self.firm_network.agents)
|
||||||
# print(
|
# print(list(zip(self.a_list_total_firms.code,
|
||||||
# list(
|
# self.a_list_total_firms.name,
|
||||||
# zip(self.a_list_total_firms.code, self.a_list_total_firms.name,
|
|
||||||
# self.a_list_total_firms.capacity)))
|
# self.a_list_total_firms.capacity)))
|
||||||
|
|
||||||
# set the initial firm product that are removed
|
# set the initial firm product that are removed
|
||||||
|
@ -118,17 +119,36 @@ class Model(ap.Model):
|
||||||
firm.dct_product_is_removed[product] = True
|
firm.dct_product_is_removed[product] = True
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
# Update list of unhappy people
|
# Update the firm that is removed
|
||||||
# self.agents.update_happiness()
|
self.dct_list_remove_firm_prod = {}
|
||||||
# self.unhappy = self.agents.select(self.agents.happy == False)
|
for firm in self.a_list_total_firms:
|
||||||
|
for product, flag in firm.dct_product_is_removed.items():
|
||||||
|
if flag is True:
|
||||||
|
if firm.code in self.dct_list_remove_firm_prod.keys():
|
||||||
|
self.dct_list_remove_firm_prod[firm.code].append(
|
||||||
|
product)
|
||||||
|
else:
|
||||||
|
self.dct_list_remove_firm_prod[firm.code] = [product]
|
||||||
|
# print(self.dct_list_remove_firm_prod)
|
||||||
|
|
||||||
# Stop simulation if reached terminal number of iteration
|
# Stop simulation if reached terminal number of iteration
|
||||||
if self.t == self.int_n_iter:
|
if self.t == self.int_n_iter or len(
|
||||||
|
self.dct_list_remove_firm_prod) == 0:
|
||||||
self.stop()
|
self.stop()
|
||||||
|
|
||||||
def step(self):
|
def step(self):
|
||||||
# Move unhappy people to new location
|
# shuffle self.dct_list_remove_firm_prod
|
||||||
self.unhappy.find_new_home()
|
dct_key_list = list(self.dct_list_remove_firm_prod.keys())
|
||||||
|
self.nprandom.shuffle(dct_key_list)
|
||||||
|
self.dct_list_remove_firm_prod = {
|
||||||
|
key: self.dct_list_remove_firm_prod[key]
|
||||||
|
for key in dct_key_list
|
||||||
|
}
|
||||||
|
for firm_code, list_product in self.dct_list_remove_firm_prod.items():
|
||||||
|
firm = self.a_list_total_firms.select(
|
||||||
|
self.a_list_total_firms.code == firm_code)[0]
|
||||||
|
for product in list_product:
|
||||||
|
firm.remove_edge_to_customer_if_removed(product)
|
||||||
|
|
||||||
def end(self):
|
def end(self):
|
||||||
pass
|
pass
|
||||||
|
@ -169,4 +189,6 @@ class Model(ap.Model):
|
||||||
|
|
||||||
model = Model(dct_sample_para)
|
model = Model(dct_sample_para)
|
||||||
model.setup()
|
model.setup()
|
||||||
model.draw_network()
|
model.update()
|
||||||
|
model.step()
|
||||||
|
# model.draw_network()
|
||||||
|
|
Loading…
Reference in New Issue