debug
This commit is contained in:
parent
7255c3b046
commit
bf82aa62ff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -72,9 +72,10 @@ class ControllerDB:
|
||||||
# list_dct = [{'133': ['1.4.4.1']}]
|
# list_dct = [{'133': ['1.4.4.1']}]
|
||||||
# list_dct = [{'2': ['1.1.3']}]
|
# list_dct = [{'2': ['1.1.3']}]
|
||||||
# list_dct = [{'135': ['1.3.2.1']}]
|
# list_dct = [{'135': ['1.3.2.1']}]
|
||||||
list_dct = [{'79': ['2.1.3.4']}]
|
# list_dct = [{'79': ['2.1.3.4']}]
|
||||||
# list_dct = [{'99': ['1.3.3']}]
|
# list_dct = [{'99': ['1.3.3']}]
|
||||||
# list_dct = [{'41': ['1.4.5']}]
|
# list_dct = [{'41': ['1.4.5']}]
|
||||||
|
# list_dct = [{'168': ['1.1.2']}]
|
||||||
|
|
||||||
# fill g_bom
|
# fill g_bom
|
||||||
BomNodes = pd.read_csv('BomNodes.csv', index_col=0)
|
BomNodes = pd.read_csv('BomNodes.csv', index_col=0)
|
||||||
|
|
37
firm.py
37
firm.py
|
@ -35,13 +35,12 @@ class FirmAgent(ap.Agent):
|
||||||
self.dct_prod_up_prod_stat[prod] = {
|
self.dct_prod_up_prod_stat[prod] = {
|
||||||
# (Normal / Disrupted / Removed, time step)
|
# (Normal / Disrupted / Removed, time step)
|
||||||
'p_stat': [('N', 0)],
|
'p_stat': [('N', 0)],
|
||||||
# have or have no supply
|
|
||||||
'supply': dict.fromkeys(prod.a_predecessors(), True),
|
|
||||||
# supply for each component and respective disrupted supplier
|
# supply for each component and respective disrupted supplier
|
||||||
# lst_disrupt_firm is refreshed to [] at each update
|
# set_disrupt_firm is refreshed to empty at each update
|
||||||
's_stat': dict.fromkeys(prod.a_predecessors(),
|
's_stat': {up_prod: {'stat': True,
|
||||||
{'stat': True,
|
'set_disrupt_firm': set()}
|
||||||
'lst_disrupt_firm': []})
|
for up_prod in prod.a_predecessors()}
|
||||||
|
# Note: do not use fromkeys as it's a shallow copy
|
||||||
}
|
}
|
||||||
|
|
||||||
# init extra capacity (self para)
|
# init extra capacity (self para)
|
||||||
|
@ -76,14 +75,11 @@ class FirmAgent(ap.Agent):
|
||||||
if disrupted_prod in \
|
if disrupted_prod in \
|
||||||
customer.dct_prod_up_prod_stat[
|
customer.dct_prod_up_prod_stat[
|
||||||
prod]['s_stat'].keys():
|
prod]['s_stat'].keys():
|
||||||
if self not in customer.dct_prod_up_prod_stat[
|
customer.dct_prod_up_prod_stat[
|
||||||
prod]['s_stat'][disrupted_prod][
|
prod]['s_stat'][disrupted_prod][
|
||||||
'lst_disrupt_firm']:
|
'set_disrupt_firm'].add(self)
|
||||||
customer.dct_prod_up_prod_stat[
|
print(f"{self.name} disrupt {customer.name}'s "
|
||||||
prod]['s_stat'][disrupted_prod][
|
f"{prod.code} due to {disrupted_prod.code}")
|
||||||
'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
|
# remove edge to customer
|
||||||
self.firm_network.graph.remove_edge(n1, n2, key)
|
self.firm_network.graph.remove_edge(n1, n2, key)
|
||||||
|
|
||||||
|
@ -93,7 +89,7 @@ class FirmAgent(ap.Agent):
|
||||||
# self's component exists disrupted supplier
|
# self's component exists disrupted supplier
|
||||||
num_lost = \
|
num_lost = \
|
||||||
len(self.dct_prod_up_prod_stat[prod]['s_stat']
|
len(self.dct_prod_up_prod_stat[prod]['s_stat']
|
||||||
[disrupted_up_prod]['lst_disrupt_firm'])
|
[disrupted_up_prod]['set_disrupt_firm'])
|
||||||
num_remain = \
|
num_remain = \
|
||||||
len([u for u, _, _, d in
|
len([u for u, _, _, d in
|
||||||
self.firm_network.graph.in_edges(self.get_firm_network_node(),
|
self.firm_network.graph.in_edges(self.get_firm_network_node(),
|
||||||
|
@ -117,7 +113,8 @@ class FirmAgent(ap.Agent):
|
||||||
if status != 'D':
|
if status != 'D':
|
||||||
self.dct_prod_up_prod_stat[
|
self.dct_prod_up_prod_stat[
|
||||||
prod]['p_stat'].append(('D', self.model.t))
|
prod]['p_stat'].append(('D', self.model.t))
|
||||||
print(f"{self.name}'s {prod.code} turn to D status")
|
print(f"{self.name}'s {prod.code} turn to D status due to "
|
||||||
|
f"disrupted supplier of {disrupted_up_prod.code}")
|
||||||
|
|
||||||
def seek_alt_supply(self, product):
|
def seek_alt_supply(self, product):
|
||||||
# para product is the product that self is seeking
|
# para product is the product that self is seeking
|
||||||
|
@ -283,9 +280,9 @@ class FirmAgent(ap.Agent):
|
||||||
|
|
||||||
for prod in down_firm.dct_prod_up_prod_stat.keys():
|
for prod in down_firm.dct_prod_up_prod_stat.keys():
|
||||||
if product in down_firm.dct_prod_up_prod_stat[
|
if product in down_firm.dct_prod_up_prod_stat[
|
||||||
prod]['supply'].keys():
|
prod]['s_stat'].keys():
|
||||||
down_firm.dct_prod_up_prod_stat[
|
down_firm.dct_prod_up_prod_stat[
|
||||||
prod]['supply'][product] = True
|
prod]['s_stat'][product]['stat'] = True
|
||||||
down_firm.dct_prod_up_prod_stat[
|
down_firm.dct_prod_up_prod_stat[
|
||||||
prod]['p_stat'].append(('N', self.model.t))
|
prod]['p_stat'].append(('N', self.model.t))
|
||||||
del down_firm.dct_n_trial_up_prod_disrupted[product]
|
del down_firm.dct_n_trial_up_prod_disrupted[product]
|
||||||
|
@ -317,10 +314,10 @@ class FirmAgent(ap.Agent):
|
||||||
if ts != self.model.t:
|
if ts != self.model.t:
|
||||||
self.dct_prod_up_prod_stat[prod]['p_stat'].append(
|
self.dct_prod_up_prod_stat[prod]['p_stat'].append(
|
||||||
(status, self.model.t))
|
(status, self.model.t))
|
||||||
# refresh lst_disrupt_firm
|
# refresh set_disrupt_firm
|
||||||
for up_prod in self.dct_prod_up_prod_stat[prod]['s_stat'].keys():
|
for up_prod in self.dct_prod_up_prod_stat[prod]['s_stat'].keys():
|
||||||
self.dct_prod_up_prod_stat[prod][
|
self.dct_prod_up_prod_stat[prod][
|
||||||
's_stat'][up_prod]['lst_disrupt_firm'] = []
|
's_stat'][up_prod]['set_disrupt_firm'] = set()
|
||||||
|
|
||||||
def get_firm_network_node(self):
|
def get_firm_network_node(self):
|
||||||
return self.firm_network.positions[self]
|
return self.firm_network.positions[self]
|
||||||
|
|
6
model.py
6
model.py
|
@ -406,7 +406,7 @@ class Model(ap.Model):
|
||||||
for up_prod in firm.dct_prod_up_prod_stat[prod][
|
for up_prod in firm.dct_prod_up_prod_stat[prod][
|
||||||
's_stat'].keys():
|
's_stat'].keys():
|
||||||
if firm.dct_prod_up_prod_stat[prod][
|
if firm.dct_prod_up_prod_stat[prod][
|
||||||
's_stat'][up_prod]['lst_disrupt_firm']:
|
's_stat'][up_prod]['set_disrupt_firm']:
|
||||||
firm.disrupt_cus_prod(prod, up_prod)
|
firm.disrupt_cus_prod(prod, up_prod)
|
||||||
|
|
||||||
for n_trial in range(self.int_n_max_trial):
|
for n_trial in range(self.int_n_max_trial):
|
||||||
|
@ -421,9 +421,9 @@ class Model(ap.Model):
|
||||||
status = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1][0]
|
status = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1][0]
|
||||||
if status == 'D':
|
if status == 'D':
|
||||||
for supply in firm.dct_prod_up_prod_stat[
|
for supply in firm.dct_prod_up_prod_stat[
|
||||||
prod]['supply'].keys():
|
prod]['s_stat'].keys():
|
||||||
if not firm.dct_prod_up_prod_stat[
|
if not firm.dct_prod_up_prod_stat[
|
||||||
prod]['supply'][supply]:
|
prod]['s_stat'][supply]['stat']:
|
||||||
lst_seek_prod.append(supply)
|
lst_seek_prod.append(supply)
|
||||||
# commmon supply only seek once
|
# commmon supply only seek once
|
||||||
lst_seek_prod = list(set(lst_seek_prod))
|
lst_seek_prod = list(set(lst_seek_prod))
|
||||||
|
|
23
test.ipynb
23
test.ipynb
|
@ -553,6 +553,29 @@
|
||||||
"G.has_edge(1, 2, 1)"
|
"G.has_edge(1, 2, 1)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 17,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"1\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"s = set()\n",
|
||||||
|
"s.add(1)\n",
|
||||||
|
"s.add(2)\n",
|
||||||
|
"s.add(1)\n",
|
||||||
|
"len(s)\n",
|
||||||
|
"if s:\n",
|
||||||
|
" print(1)"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
|
|
Loading…
Reference in New Issue