capacity init network
This commit is contained in:
parent
c29a75177c
commit
cf11c0c9bb
Binary file not shown.
21
firm.py
21
firm.py
|
@ -29,12 +29,23 @@ class FirmAgent(ap.Agent):
|
||||||
# remove edge
|
# remove edge
|
||||||
# print(n1, n2, key, product_code)
|
# print(n1, n2, key, product_code)
|
||||||
self.firm_network.graph.remove_edge(n1, n2, key)
|
self.firm_network.graph.remove_edge(n1, n2, key)
|
||||||
# remove customer up product
|
# remove customer up product if does not have alternative
|
||||||
customer = ap.AgentIter(self.model, n2).to_list()[0]
|
customer = ap.AgentIter(self.model, n2).to_list()[0]
|
||||||
if remove_product not in customer.a_list_up_product_removed:
|
list_in_edges = list(
|
||||||
customer.a_list_up_product_removed.append(remove_product)
|
self.firm_network.graph.in_edges(n2,
|
||||||
customer.dct_num_trial_up_product_removed[
|
keys=True,
|
||||||
remove_product] = 0
|
data='Product'))
|
||||||
|
select_edges = [
|
||||||
|
edge for edge in list_in_edges
|
||||||
|
if edge[-1] == remove_product.code
|
||||||
|
]
|
||||||
|
if len(select_edges) == 0:
|
||||||
|
if remove_product not in \
|
||||||
|
customer.a_list_up_product_removed:
|
||||||
|
customer.a_list_up_product_removed.append(
|
||||||
|
remove_product)
|
||||||
|
customer.dct_num_trial_up_product_removed[
|
||||||
|
remove_product] = 0
|
||||||
|
|
||||||
# # disrupt customer
|
# # disrupt customer
|
||||||
# customer = ap.AgentIter(self.model, n2).to_list()[0]
|
# customer = ap.AgentIter(self.model, n2).to_list()[0]
|
||||||
|
|
54
model.py
54
model.py
|
@ -71,20 +71,29 @@ class Model(ap.Model):
|
||||||
G_Firm.nodes[succ_firm]['Revenue_Log']
|
G_Firm.nodes[succ_firm]['Revenue_Log']
|
||||||
for succ_firm in list_succ_firms
|
for succ_firm in list_succ_firms
|
||||||
]
|
]
|
||||||
|
# list_prob = [
|
||||||
|
# (v - min(list_revenue_log) + 1) /
|
||||||
|
# (max(list_revenue_log) - min(list_revenue_log) + 1)
|
||||||
|
# for v in list_revenue_log
|
||||||
|
# ]
|
||||||
|
# list_flag = [
|
||||||
|
# self.nprandom.choice([1, 0], p=[prob, 1 - prob])
|
||||||
|
# for prob in list_prob
|
||||||
|
# ]
|
||||||
|
# # print(list(zip(list_succ_firms,list_flag,list_prob)))
|
||||||
|
# list_added_edges = [(node, succ_firm, {
|
||||||
|
# 'Product': product_code
|
||||||
|
# }) for succ_firm, flag in zip(list_succ_firms, list_flag)
|
||||||
|
# if flag == 1]
|
||||||
list_prob = [
|
list_prob = [
|
||||||
(v - min(list_revenue_log) + 1) /
|
size / sum(list_revenue_log)
|
||||||
(max(list_revenue_log) - min(list_revenue_log) + 1)
|
for size in list_revenue_log
|
||||||
for v in list_revenue_log
|
|
||||||
]
|
]
|
||||||
list_flag = [
|
succ_firm = self.nprandom.choice(list_succ_firms,
|
||||||
self.nprandom.choice([1, 0], p=[prob, 1 - prob])
|
p=list_prob)
|
||||||
for prob in list_prob
|
|
||||||
]
|
|
||||||
# print(list(zip(list_succ_firms,list_flag,list_prob)))
|
|
||||||
list_added_edges = [(node, succ_firm, {
|
list_added_edges = [(node, succ_firm, {
|
||||||
'Product': product_code
|
'Product': product_code
|
||||||
}) for succ_firm, flag in zip(list_succ_firms, list_flag)
|
})]
|
||||||
if flag == 1]
|
|
||||||
G_Firm.add_edges_from(list_added_edges)
|
G_Firm.add_edges_from(list_added_edges)
|
||||||
# print('-' * 20)
|
# print('-' * 20)
|
||||||
|
|
||||||
|
@ -118,16 +127,19 @@ class Model(ap.Model):
|
||||||
code in attr['Product_Code']
|
code in attr['Product_Code']
|
||||||
for code in self.a_list_total_products.code
|
for code in self.a_list_total_products.code
|
||||||
]))
|
]))
|
||||||
# init capacity as the degree of out edges of a specific product
|
# init capacity based on discrete uniform distribution
|
||||||
list_out_edges = list(
|
# list_out_edges = list(
|
||||||
self.firm_network.graph.out_edges(ag_node,
|
# self.firm_network.graph.out_edges(ag_node,
|
||||||
keys=True,
|
# keys=True,
|
||||||
data='Product'))
|
# data='Product'))
|
||||||
|
# for product in firm_agent.a_list_product:
|
||||||
|
# capacity = len([
|
||||||
|
# edge for edge in list_out_edges if edge[-1] ==
|
||||||
|
# product.code])
|
||||||
|
# firm_agent.dct_prod_capacity[product] = capacity
|
||||||
for product in firm_agent.a_list_product:
|
for product in firm_agent.a_list_product:
|
||||||
capacity = len([
|
firm_agent.dct_prod_capacity[product] = self.nprandom.integers(
|
||||||
edge for edge in list_out_edges if edge[-1] == product.code
|
firm_agent.revenue_log / 5, firm_agent.revenue_log / 5 + 2)
|
||||||
])
|
|
||||||
firm_agent.dct_prod_capacity[product] = capacity
|
|
||||||
# print(firm_agent.name, firm_agent.dct_prod_capacity)
|
# print(firm_agent.name, firm_agent.dct_prod_capacity)
|
||||||
|
|
||||||
self.firm_network.add_agents([firm_agent], [ag_node])
|
self.firm_network.add_agents([firm_agent], [ag_node])
|
||||||
|
@ -184,7 +196,7 @@ class Model(ap.Model):
|
||||||
firm.remove_edge_to_cus_and_cus_up_prod(product)
|
firm.remove_edge_to_cus_and_cus_up_prod(product)
|
||||||
|
|
||||||
for n_trial in range(self.int_n_max_trial):
|
for n_trial in range(self.int_n_max_trial):
|
||||||
print('='*20, n_trial, '='*20)
|
print('=' * 20, n_trial, '=' * 20)
|
||||||
# seek_alt_supply
|
# seek_alt_supply
|
||||||
for firm in self.a_list_total_firms:
|
for firm in self.a_list_total_firms:
|
||||||
if len(firm.a_list_up_product_removed) > 0:
|
if len(firm.a_list_up_product_removed) > 0:
|
||||||
|
@ -241,6 +253,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.update()
|
||||||
model.step()
|
model.step()
|
||||||
# model.draw_network()
|
|
||||||
|
|
BIN
network.png
BIN
network.png
Binary file not shown.
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 2.7 MiB |
22
test.ipynb
22
test.ipynb
|
@ -1,5 +1,27 @@
|
||||||
{
|
{
|
||||||
"cells": [
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 11,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import numpy as np\n",
|
||||||
|
"\n",
|
||||||
|
"np.random.randint(0.5, 3.5)"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
|
|
Loading…
Reference in New Issue