From a321df05822e57a4c469295ae4f3820518765677 Mon Sep 17 00:00:00 2001 From: HaoYizhi Date: Fri, 28 Jul 2023 15:14:59 +0800 Subject: [PATCH] remove crit_supplier --- __pycache__/controller_db.cpython-38.pyc | Bin 7560 -> 7536 bytes __pycache__/firm.cpython-38.pyc | Bin 7385 -> 7974 bytes __pycache__/model.cpython-38.pyc | Bin 12726 -> 12880 bytes __pycache__/orm.cpython-38.pyc | Bin 3700 -> 3665 bytes controller_db.py | 3 +- firm.py | 96 ++++++++++++++--------- model.py | 30 ++++--- oa_with_exp.csv | 70 ++++++++--------- oa_with_exp.xlsx | Bin 38847 -> 38513 bytes oa_without_exp.csv | 4 +- orm.py | 1 - xv_with_exp.csv | 8 +- xv_without_exp.csv | 4 +- 13 files changed, 121 insertions(+), 95 deletions(-) diff --git a/__pycache__/controller_db.cpython-38.pyc b/__pycache__/controller_db.cpython-38.pyc index 63207e020e748ba2ee9ea402a906260444d3e613..bf6834881face60daa8f1e12710851693b02229b 100644 GIT binary patch delta 594 zcmeCM{$Rx$%FD~e00bhLhf`uV^4jr8@qxHdzz?Jaf!G;{ivuR7@|g3aF!%D;@|7?z zV5#AoyoyJSk$>_8Jn_x7d<1@-vfDi&#J+&68zCU4*MaOm?tjT4qj3 zYEe=7vuR8jK4!yNIzdF?LM$mQZKBH@R5icvLaS z3?m?+$x{Tktf&hl+6y9>Km^>PqJ9t;WPVX5h$sgUQ-Fjfa}-BTaY=k}d}c~f2S{|@ z}-&j%8>c#2CBOEQyl wQ%f@PQy_LP0!f0xv1rNUQW*784tkV+Jl z2GQCc>>>!pKEQNOaAcmw0K=@V5EONHTda9A`IzyP5n}w?NIv5!uP+xEtBmJ_Qg~*-_2?;Q zg)Q40eTmI<5x(Po`k?$@KU?K12LE6wBD1UmKdTOQGX?mGA2Ma=;O|UjbcgF=a*MOb z@Q<*`%0H^hY7gz~2n^tQwoN~h$c+?VaJWn8Yo4kqQCoD>eBBQA-sL2}quj@d{Bcyd a6OhI2oUnqIZ&a7;swdBK#TF*=H~#=$EuSy| diff --git a/__pycache__/firm.cpython-38.pyc b/__pycache__/firm.cpython-38.pyc index ea365f5668f9e780fa5cdc90bc9db7bbcbbadf13..319af18b43a64cdf1d0e8aa0fb3fffff6abed02e 100644 GIT binary patch delta 3659 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

o+;} z=4tb&xon;>kDHpAGd1>pf6G+$y1eJ*b>3qA#Kf{7b0kA1 zvmOYTgBq@KCuoc?e~dJvCp~{_RLBg|VuT9;HNT+3U#CE9Vb9ptTut)oE07^o znAAMwk(yB_f>?y9so zQw66>7`1>1)B&VtciFpc&}|pS3ao%HtX<8*|lb7`NB8{nV0`qDVOJOUra@CB+-4Wljj#oH}h7W74nu_vZgCe zF8seuI#@_79S`ye#eY`80|l!J)+FTgO4%y&62rYj5+325bQI4dgQ*#rBW*!2eLc_v zCY2T#K=(paA#L6^+KJ=Igs#yr4S~6NH+c)-BmPc}0^;yMOj8nk6|)1sw11L#dGIj2 z+bj+yD11Xabq{{v!J&;q&t>6Hxu2s+Lxa$sMpE>`7lYWu delta 691 zcmYk3PiPZC6vpRmlHDXG+ty%Aij}rRlT>XQ?WM(I^d!A#6hh-#GqEI1Np^NuqwJDH z1fg1~4x->660G3Ci$n_|6cjw`#Y;gD5i1JbJt)pgigaOr`@T2teKT+N16?bq*W8`RcxG!}QpsEH@!T zRv=FtRHUV}iA^*@J&uezL-G$Cm?w^6Lm6698#AXJ36(8H2?g=uSB?_LWxJ?rL1Ih) zSCuH)>KS&t+q1Se+91Zdt+c$hw+%q_b$!Y7nSNVoLK7Ut+<_657u@VG^@_tNV&i@^ zX$5*6E1*ky-IiB?je;0KKev5=t;6qiKsZ4;*z*##lfpr56Ce%IGTCkEL#fYFa*`x{ zGu^9VGvdD3G$J5yihN_DMar;4ag&_ZDI`wDwV>I@6r>e}IFIHGYB-lg# oej*GX`L~JXUCWrbg}8@!hKTTyScu*h`_i!6B=1<DhNmj2y!uUF#-UW Csx-j> delta 279 zcmca8^F@X?l$V!_0SHp_7N%U<$Q!`SC^b2b`Hrnv3P%cOGgAsn3TrP@lvFBfDjSq7 zjl`Bol}+JF;ZEU6;q7IPl1t%B;csDxlHZ)lV$I0tK6xRlBBR3Q!>j^~e7wm;nI-YX zr3D2!nW;sSFR_I)8cfz=SKjQ+?$5~RJb5-pD`Wg*Mb7t(-jfBn-dK79-E@mRz9_Z0 zG^Zq_NCwC)as?4CK*Fs^4oJQPIs7FnNKget1cC^U$$L4BCuedSG8Rmp&F#bJHTea% vDbRd59$8k9naPtKc$67EH>dE3GXf=RcnUY0? diff --git a/controller_db.py b/controller_db.py index a9646ff..1e1b50d 100644 --- a/controller_db.py +++ b/controller_db.py @@ -117,7 +117,7 @@ class ControllerDB: dct_lst_init_disrupt_firm_prod, g_bom, n_max_trial, prf_size, prf_conn, cap_limit_prob_type, cap_limit_level, - diff_new_conn, crit_supplier, + diff_new_conn, proactive_ratio, remove_t, netw_prf_n): e = Experiment( idx_scenario=idx_scenario, @@ -132,7 +132,6 @@ class ControllerDB: cap_limit_prob_type=cap_limit_prob_type, cap_limit_level=cap_limit_level, diff_new_conn=diff_new_conn, - crit_supplier=crit_supplier, proactive_ratio=proactive_ratio, remove_t=remove_t, netw_prf_n=netw_prf_n diff --git a/firm.py b/firm.py index 692bea7..c5e273b 100644 --- a/firm.py +++ b/firm.py @@ -1,5 +1,4 @@ import agentpy as ap -import math class FirmAgent(ap.Agent): @@ -26,7 +25,6 @@ class FirmAgent(ap.Agent): self.str_cap_limit_prob_type = str(self.p.cap_limit_prob_type) self.flt_cap_limit_level = float(self.p.cap_limit_level) self.flt_diff_new_conn = float(self.p.diff_new_conn) - self.flt_crit_supplier = float(self.p.crit_supplier) # init size_stat (self para) # (size, time step) @@ -36,9 +34,14 @@ class FirmAgent(ap.Agent): for prod in a_lst_product: self.dct_prod_up_prod_stat[prod] = { # (Normal / Disrupted / Removed, time step) - 'status': [('N', 0)], + 'p_stat': [('N', 0)], # have or have no supply - 'supply': dict.fromkeys(prod.a_predecessors(), True) + 'supply': dict.fromkeys(prod.a_predecessors(), True), + # supply for each component and respective disrupted supplier + # lst_disrupt_firm is refreshed to [] at each update + 's_stat': dict.fromkeys(prod.a_predecessors(), + {'stat': True, + 'lst_disrupt_firm': []}) } # init extra capacity (self para) @@ -62,45 +65,58 @@ class FirmAgent(ap.Agent): # print(firm_agent.name, extra_cap) self.dct_prod_capacity[product] = extra_cap - def remove_edge_to_cus_disrupt_cus_up_prod(self, disrupted_prod): + def remove_edge_to_cus(self, disrupted_prod): # para disrupted_prod is the product that self got disrupted lst_out_edge = list( self.firm_network.graph.out_edges( self.firm_network.positions[self], keys=True, data='Product')) for n1, n2, key, product_code in lst_out_edge: if product_code == disrupted_prod.code: + # update customer up product supplier status + customer = ap.AgentIter(self.model, n2).to_list()[0] + for prod in customer.dct_prod_up_prod_stat.keys(): + if disrupted_prod in \ + customer.dct_prod_up_prod_stat[ + prod]['s_stat'].keys(): + if self not in customer.dct_prod_up_prod_stat[ + prod]['s_stat'][disrupted_prod][ + 'lst_disrupt_firm']: + customer.dct_prod_up_prod_stat[ + prod]['s_stat'][disrupted_prod][ + 'lst_disrupt_firm'].append(self) # remove edge to customer self.firm_network.graph.remove_edge(n1, n2, key) - # customer up product affected conditionally - customer = ap.AgentIter(self.model, n2).to_list()[0] - lst_in_edge = list( - self.firm_network.graph.in_edges(n2, - keys=True, - data='Product')) - lst_select_in_edge = [ - edge for edge in lst_in_edge - if edge[-1] == disrupted_prod.code - ] - prob_lost_supp = math.exp(-1 * self.flt_crit_supplier * - len(lst_select_in_edge)) - if self.model.nprandom.choice([True, False], - p=[prob_lost_supp, - 1 - prob_lost_supp]): - customer.dct_n_trial_up_prod_disrupted[disrupted_prod] = 0 - for prod in customer.dct_prod_up_prod_stat.keys(): - if disrupted_prod in \ - customer.dct_prod_up_prod_stat[ - prod]['supply'].keys(): - customer.dct_prod_up_prod_stat[ - prod]['supply'][disrupted_prod] = False - status, _ = customer.dct_prod_up_prod_stat[ - prod]['status'][-1] - if status != 'D': - customer.dct_prod_up_prod_stat[ - prod]['status'].append(('D', self.model.t)) - # print(self.name, disrupted_prod.code, 'disrupt', - # customer.name, prod.code) + def disrupt_cus_prod(self, prod, disrupted_up_prod): + # para prod is the product that has disrupted_up_prod + # para disrupted_up_prod is the product that + # self's component exists disrupted supplier + num_lost = \ + len(self.dct_prod_up_prod_stat[prod]['s_stat'] + [disrupted_up_prod]['lst_disrupt_firm']) + num_remain = \ + len([u for u, _, _, d in + self.firm_network.graph.in_edges(self.get_firm_network_node(), + keys=True, + data='Product') + if d == disrupted_up_prod.code]) + lost_percent = num_lost / (num_lost + num_remain) + lst_size = \ + [firm.size_stat[-1][0] for firm in self.model.a_lst_total_firms] + std_size = (self.size_stat[-1][0] - min(lst_size) + 1) \ + / (max(lst_size) - min(lst_size) + 1) + prob_disrupt = 1 - std_size * (1 - lost_percent) + if self.model.nprandom.choice([True, False], + p=[prob_disrupt, + 1 - prob_disrupt]): + self.dct_n_trial_up_prod_disrupted[disrupted_up_prod] = 0 + self.dct_prod_up_prod_stat[ + prod]['s_stat'][disrupted_up_prod]['stat'] = False + status, _ = self.dct_prod_up_prod_stat[ + prod]['p_stat'][-1] + if status != 'D': + self.dct_prod_up_prod_stat[ + prod]['p_stat'].append(('D', self.model.t)) def seek_alt_supply(self, product): # para product is the product that self is seeking @@ -270,7 +286,7 @@ class FirmAgent(ap.Agent): down_firm.dct_prod_up_prod_stat[ prod]['supply'][product] = True down_firm.dct_prod_up_prod_stat[ - prod]['status'].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_cand_alt_supp_up_prod_disrupted[product] @@ -296,17 +312,21 @@ class FirmAgent(ap.Agent): # update the status of firm for prod in self.dct_prod_up_prod_stat.keys(): - status, ts = self.dct_prod_up_prod_stat[prod]['status'][-1] + status, ts = self.dct_prod_up_prod_stat[prod]['p_stat'][-1] if ts != self.model.t: - self.dct_prod_up_prod_stat[prod]['status'].append( + self.dct_prod_up_prod_stat[prod]['p_stat'].append( (status, self.model.t)) + # refresh lst_disrupt_firm + for up_prod in self.dct_prod_up_prod_stat[prod]['s_stat'].keys(): + self.dct_prod_up_prod_stat[prod][ + 's_stat'][up_prod]['lst_disrupt_firm'] = [] def get_firm_network_node(self): return self.firm_network.positions[self] def is_prod_in_current_normal(self, prod): if prod in self.dct_prod_up_prod_stat.keys(): - if self.dct_prod_up_prod_stat[prod]['status'][-1][0] == 'N': + if self.dct_prod_up_prod_stat[prod]['p_stat'][-1][0] == 'N': return True else: return False diff --git a/model.py b/model.py index b4e9118..9f086c1 100644 --- a/model.py +++ b/model.py @@ -228,7 +228,7 @@ class Model(ap.Model): assert product in firm.dct_prod_up_prod_stat.keys(), \ f"product {product.code} not in firm {firm.code}" firm.dct_prod_up_prod_stat[ - product]['status'].append(('D', self.t)) + product]['p_stat'].append(('D', self.t)) # print(f"initial disruption {firm.name} {product.code}") # proactive strategy @@ -349,7 +349,7 @@ class Model(ap.Model): # reduce the size of disrupted firm for firm in self.a_lst_total_firms: for prod in firm.dct_prod_up_prod_stat.keys(): - status, ts = firm.dct_prod_up_prod_stat[prod]['status'][-1] + status, ts = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1] if status == 'D': size = firm.size_stat[-1][0] - \ firm.size_stat[0][0] \ @@ -360,19 +360,19 @@ class Model(ap.Model): # f'to {firm.size_stat[-1][0]} due to {prod.code}') lst_is_disrupt = \ [stat == 'D' for stat, _ in - firm.dct_prod_up_prod_stat[prod]['status'] + firm.dct_prod_up_prod_stat[prod]['p_stat'] [-1 * self.remove_t:]] if all(lst_is_disrupt): # turn disrupted firm into removed firm # when last self.remove_t times status is all disrupted firm.dct_prod_up_prod_stat[ - prod]['status'].append(('R', self.t)) + prod]['p_stat'].append(('R', self.t)) # stop simulation if any firm still in disrupted except inital removal if self.t > 0: for firm in self.a_lst_total_firms: for prod in firm.dct_prod_up_prod_stat.keys(): - status, _ = firm.dct_prod_up_prod_stat[prod]['status'][-1] + status, _ = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1] is_init = \ firm in self.dct_lst_init_disrupt_firm_prod.keys() \ and prod in self.dct_lst_init_disrupt_firm_prod[firm] @@ -397,9 +397,17 @@ class Model(ap.Model): for prod in firm.dct_prod_up_prod_stat.keys(): # repetition of disrupted firm that last for multiple ts is ok, # as their edge has already been removed - status, ts = firm.dct_prod_up_prod_stat[prod]['status'][-1] + status, ts = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1] if status == 'D' and ts == self.t-1: - firm.remove_edge_to_cus_disrupt_cus_up_prod(prod) + firm.remove_edge_to_cus(prod) + + for firm in self.a_lst_total_firms: + for prod in firm.dct_prod_up_prod_stat.keys(): + for up_prod in firm.dct_prod_up_prod_stat[prod][ + 's_stat'].keys(): + if firm.dct_prod_up_prod_stat[prod][ + 's_stat'][up_prod]['lst_disrupt_firm']: + firm.disrupt_cus_prod(prod, up_prod) for n_trial in range(self.int_n_max_trial): # print('=' * 10, 'trial', n_trial, '=' * 10) @@ -410,7 +418,7 @@ class Model(ap.Model): for firm in self.a_lst_total_firms: lst_seek_prod = [] for prod in firm.dct_prod_up_prod_stat.keys(): - status = firm.dct_prod_up_prod_stat[prod]['status'][-1][0] + status = firm.dct_prod_up_prod_stat[prod]['p_stat'][-1][0] if status == 'D': for supply in firm.dct_prod_up_prod_stat[ prod]['supply'].keys(): @@ -448,11 +456,11 @@ class Model(ap.Model): for prod, dct_status_supply in \ firm.dct_prod_up_prod_stat.items(): lst_is_normal = [stat == 'N' for stat, _ - in dct_status_supply['status']] + in dct_status_supply['p_stat']] if not all(lst_is_normal): # print(f"{firm.name} {prod.code}:") - # print(dct_status_supply['status']) - for status, ts in dct_status_supply['status']: + # print(dct_status_supply['p_stat']) + for status, ts in dct_status_supply['p_stat']: db_r = Result(s_id=self.sample.id, id_firm=firm.code, id_product=prod.code, diff --git a/oa_with_exp.csv b/oa_with_exp.csv index 5ee736e..6797bc2 100644 --- a/oa_with_exp.csv +++ b/oa_with_exp.csv @@ -1,37 +1,37 @@ X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19,X20,X21,X22,X23 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1 -2,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2 -0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,2,2,2,2 -1,0,0,0,1,1,1,2,2,2,0,0,1,1,1,1,1,1,2,0,0,0,0 -2,0,0,0,2,2,2,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1 -0,0,0,1,0,1,2,0,1,2,1,1,0,0,0,1,1,1,2,0,1,1,2 -1,0,0,1,1,2,0,1,2,0,1,1,0,0,0,1,1,1,0,1,2,2,0 -2,0,0,1,2,0,1,2,0,1,1,1,0,0,0,1,1,1,1,2,0,0,1 -0,0,1,0,0,2,1,0,2,1,1,1,0,1,1,0,0,1,2,1,0,2,1 -1,0,1,0,1,0,2,1,0,2,1,1,0,1,1,0,0,1,0,2,1,0,2 -2,0,1,0,2,1,0,2,1,0,1,1,0,1,1,0,0,1,1,0,2,1,0 -0,0,1,1,1,2,0,2,1,0,0,1,1,0,1,0,1,0,2,2,1,0,1 -1,0,1,1,2,0,1,0,2,1,0,1,1,0,1,0,1,0,0,0,2,1,2 -2,0,1,1,0,1,2,1,0,2,0,1,1,0,1,0,1,0,1,1,0,2,0 -0,0,1,1,1,2,1,0,0,2,1,0,1,1,0,1,0,0,1,2,2,1,0 -1,0,1,1,2,0,2,1,1,0,1,0,1,1,0,1,0,0,2,0,0,2,1 -2,0,1,1,0,1,0,2,2,1,1,0,1,1,0,1,0,0,0,1,1,0,2 -0,1,0,1,1,0,2,2,2,0,1,0,0,1,1,0,1,0,1,1,0,1,2 -1,1,0,1,2,1,0,0,0,1,1,0,0,1,1,0,1,0,2,2,1,2,0 -2,1,0,1,0,2,1,1,1,2,1,0,0,1,1,0,1,0,0,0,2,0,1 -0,1,0,1,1,1,2,2,0,1,0,1,1,1,0,0,0,1,0,0,2,2,1 -1,1,0,1,2,2,0,0,1,2,0,1,1,1,0,0,0,1,1,1,0,0,2 -2,1,0,1,0,0,1,1,2,0,0,1,1,1,0,0,0,1,2,2,1,1,0 -0,1,0,0,2,1,0,1,2,2,1,1,1,0,1,1,0,0,0,2,0,1,1 -1,1,0,0,0,2,1,2,0,0,1,1,1,0,1,1,0,0,1,0,1,2,2 -2,1,0,0,1,0,2,0,1,1,1,1,1,0,1,1,0,0,2,1,2,0,0 -0,1,1,1,2,1,1,1,0,0,0,0,0,0,1,1,0,1,2,1,2,0,2 -1,1,1,1,0,2,2,2,1,1,0,0,0,0,1,1,0,1,0,2,0,1,0 -2,1,1,1,1,0,0,0,2,2,0,0,0,0,1,1,0,1,1,0,1,2,1 -0,1,1,0,2,2,2,1,2,1,1,0,1,0,0,0,1,1,1,0,1,0,0 -1,1,1,0,0,0,0,2,0,2,1,0,1,0,0,0,1,1,2,1,2,1,1 -2,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,1,0,2,0,2,2 -0,1,1,0,2,0,1,2,1,2,0,1,0,1,0,1,1,0,0,1,1,2,0 -1,1,1,0,0,1,2,0,2,0,0,1,0,1,0,1,1,0,1,2,2,0,1 -2,1,1,0,1,2,0,1,0,1,0,1,0,1,0,1,1,0,2,0,0,1,2 +1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 +2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2 +0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,2,2,2,2 +1,0,0,0,1,1,1,2,2,0,0,1,1,1,1,1,1,2,2,0,0,0,0 +2,0,0,0,2,2,2,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1 +0,0,0,1,0,1,2,0,1,1,1,0,0,0,1,1,1,2,2,0,1,1,2 +1,0,0,1,1,2,0,1,2,1,1,0,0,0,1,1,1,0,0,1,2,2,0 +2,0,0,1,2,0,1,2,0,1,1,0,0,0,1,1,1,1,1,2,0,0,1 +0,0,1,0,0,2,1,0,2,1,1,0,1,1,0,0,1,1,2,1,0,2,1 +1,0,1,0,1,0,2,1,0,1,1,0,1,1,0,0,1,2,0,2,1,0,2 +2,0,1,0,2,1,0,2,1,1,1,0,1,1,0,0,1,0,1,0,2,1,0 +0,0,1,1,1,2,0,2,1,0,1,1,0,1,0,1,0,0,2,2,1,0,1 +1,0,1,1,2,0,1,0,2,0,1,1,0,1,0,1,0,1,0,0,2,1,2 +2,0,1,1,0,1,2,1,0,0,1,1,0,1,0,1,0,2,1,1,0,2,0 +0,0,1,1,1,2,1,0,0,1,0,1,1,0,1,0,0,2,1,2,2,1,0 +1,0,1,1,2,0,2,1,1,1,0,1,1,0,1,0,0,0,2,0,0,2,1 +2,0,1,1,0,1,0,2,2,1,0,1,1,0,1,0,0,1,0,1,1,0,2 +0,1,0,1,1,0,2,2,2,1,0,0,1,1,0,1,0,0,1,1,0,1,2 +1,1,0,1,2,1,0,0,0,1,0,0,1,1,0,1,0,1,2,2,1,2,0 +2,1,0,1,0,2,1,1,1,1,0,0,1,1,0,1,0,2,0,0,2,0,1 +0,1,0,1,1,1,2,2,0,0,1,1,1,0,0,0,1,1,0,0,2,2,1 +1,1,0,1,2,2,0,0,1,0,1,1,1,0,0,0,1,2,1,1,0,0,2 +2,1,0,1,0,0,1,1,2,0,1,1,1,0,0,0,1,0,2,2,1,1,0 +0,1,0,0,2,1,0,1,2,1,1,1,0,1,1,0,0,2,0,2,0,1,1 +1,1,0,0,0,2,1,2,0,1,1,1,0,1,1,0,0,0,1,0,1,2,2 +2,1,0,0,1,0,2,0,1,1,1,1,0,1,1,0,0,1,2,1,2,0,0 +0,1,1,1,2,1,1,1,0,0,0,0,0,1,1,0,1,0,2,1,2,0,2 +1,1,1,1,0,2,2,2,1,0,0,0,0,1,1,0,1,1,0,2,0,1,0 +2,1,1,1,1,0,0,0,2,0,0,0,0,1,1,0,1,2,1,0,1,2,1 +0,1,1,0,2,2,2,1,2,1,0,1,0,0,0,1,1,1,1,0,1,0,0 +1,1,1,0,0,0,0,2,0,1,0,1,0,0,0,1,1,2,2,1,2,1,1 +2,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,2,0,2,2 +0,1,1,0,2,0,1,2,1,0,1,0,1,0,1,1,0,2,0,1,1,2,0 +1,1,1,0,0,1,2,0,2,0,1,0,1,0,1,1,0,0,1,2,2,0,1 +2,1,1,0,1,2,0,1,0,0,1,0,1,0,1,1,0,1,2,0,0,1,2 diff --git a/oa_with_exp.xlsx b/oa_with_exp.xlsx index b89df293e6dc3336607a4284ef4058649577be3f..4c2a58305ade5725b1b6950684125c7259a93f8a 100644 GIT binary patch delta 13380 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 OMFHh$55*dg9 delta 13811 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 Y*Hl9XKU78x24W