From 839e47cf0b4249733160853c39b497bf79ddf158 Mon Sep 17 00:00:00 2001 From: HaoYizhi Date: Mon, 15 May 2023 18:18:41 +0800 Subject: [PATCH] experiments in model and firm py --- __pycache__/controller_db.cpython-38.pyc | Bin 6884 -> 7076 bytes __pycache__/firm.cpython-38.pyc | Bin 5736 -> 6174 bytes __pycache__/model.cpython-38.pyc | Bin 7897 -> 8199 bytes __pycache__/orm.cpython-38.pyc | Bin 3398 -> 3715 bytes controller_db.py | 19 ++++++++-- firm.py | 46 ++++++++++++++--------- model.py | 43 ++++++++++++++------- oa.csv | 5 +-- orm.py | 11 +++++- xv.csv | 7 ++-- 10 files changed, 90 insertions(+), 41 deletions(-) diff --git a/__pycache__/controller_db.cpython-38.pyc b/__pycache__/controller_db.cpython-38.pyc index 526c82db299f8926f85d5e25b37225f6fdc6a4ad..77f8a4b0b8451ab570c5ce7f55071d46ed1f5e50 100644 GIT binary patch delta 1112 zcmZ{i$#2t85Qp=U;HF8O#7WvTp=<>TkvMPwfe;d95mc0|EsI)FjIm#Yi?ej>wk$6M z!2tmU3L~+I3kSpG_E)7BT;QYTb3 z9+KB{cFr0sze;5l#&C_YYB(>VH`u<=MBnLfQ)_00I@u+%LaT&}A(4?@x6q2AouPR) zb;QeyaFDx2=H{At5t=NBw8)9PNLHdEbC0o**Mkp~&#Z{8j<*YgvB#{GqHX_NY5COT z+AEiP48M17=oO0S5HZmy;vylELbW1y)6J9@c^(xh+!XK6reRQK!$HCj;SgH!wXFlv z^b<9`YFyMkunosoO|U)Poo+N7n}e@aY^drD;1wPC)HHWJKl4{IOp`aHQsdriJIS1O zJ-z1V{!v`}GWR=8qoF%?)%JYVvMUw6mglp&S+CXnMBoFj)@L|AiLYy=p+H^!ZTc{| z)Giz$93>nh3=>8OqlDvx6NHlzKI2d%CqRj;0f`B@+Vt*#~e8eu5Mc}L+Ttt z_eS;}pLH+p_-{Rx!aV{_c{$o1gLXZsH}O%SkA1{9g&piBek%<0-={nUS`@uT2wJ#G zR?zAgSr2f$XD$1JS9@+9qCWkoW4j(Kr`Re&FJXW{{{?Ol?n?Mc*E2lZta9&s-D-C> zPeD3wc!;CL?W}}z#l>9v?=*~>Ww=nLXbaDlR-}>M61L94ZPM=GT8n-5DEYQ delta 918 zcmZ`%%}>-o6z_CPcVV{+ZDGFvLB6>eqGE^|2n01Qh)cw<0-Hj+Vb{XSvzm(uzj<%o^hN)dBjF2@RKu~c z^-a@%biE8KBB_UiV$1mkN7y7I+-%znUy@6TBjqEG;>cM(&N+2#7j@(~cbt1nR>tiH zhxcL+vskrM?{N8;Q|qWsy%Wj`PTeCyI6Dqc#P1{l>;AXZ0cvP^CcBy~p9nl92@wnU zJN)ch&DJnm)*$?>?hfg`hyIdi`<@Ao2z@nOil3fgUV0WGi7*EFns)g#Gu_~FW=UJi z*fgh^&>HNR^wTJY{8NnM7Gvo-6cB^PapOS(tsw@pY*`To9M2P+AvQhhml!C22#yjm z3=yf7n9wf`kt7tQeA5IAr#u6S$Q^DBUm(#-$*urpO|^QhP|L{7L;yf?h92P+Wko4c+85 z$dPyHG!h*QdP8(SEnPv@M!*Zx{gm_?ZZQ+}+A)XLbq2k@bilOijFrjhw1Dhw=!^D{ z_i!n?JMdpUO6e9tEgm9NUbCV{b_1qjZR8^qV*_LZc4C8FcQH<+Yv?T^cqOc&<&~O3 z>mDTH?c_6@jBh8gPFFBL?HZL!1o6& Cvdo+S diff --git a/__pycache__/firm.cpython-38.pyc b/__pycache__/firm.cpython-38.pyc index 46f7a845d240e154809fe3213ab7f11befc10c7f..544c94f9ee57983dd5b24c8e81d0a3d8996042f6 100644 GIT binary patch delta 2562 zcmah~O>7fK6rNe{uGedOW5-TPLJ}MlPz)}lrHHhm5rOd2Do{bfPpzbu@ve;>|7CVl zMC3GW1Hwo}g-)d&C^TG(B91*4A%UtM+hZkPdaIy4pq66~^u5`{U<$2Q{$}3Kym|B9 zn>P;c%6P~EH4 zdO`J=WP+^FBk|tv9J-S(Hk53!l6D%jnha)G-bvYW)oL+su|_ysbW$y>WH_5=rBsz! z*%Y&8=PcW4bfDJ1*vZgSRyvchs!k)?s_1f){XsLI&8EuM*;J-dF1wqyu=t8JK>PSl z(os6VW1bCO)nicj_=qP#AMhE^Aic}K^c2S-97dElZ8hH#jgp&mK?jbn5GsUCYHB&D zrklQ+zK-N1Q@<>+fjX&q3+*#rHh|-Dqz-E+F=e2l{D90m`yl9S13*LHUCi4~rc$bo zY~zpQ$;be34?LuRE0nE+A>P3!m6F1`V9xI;3AGm{EY2S*R!GTO0 zUm_O?h*V(&+*+awXh13W3xPEQHEMbw3HcqF|} z-2;6JhXYyLa%j&@GNWFhEQ%!hwj8cYn3XbYmJ>>=p2PVS(nU=FF5)4($*hWH9S`u6 z+SD+{J1#LlMmz$rBC*XdG-RyF725DtS;d^oIINjqwgu#e_#fJl2^nU%$nFHlks6sc z7HEyuNdeebrCE7`h;?zwxac$fAc?)Vmq`lSdQU1u-H;z2m+hfm_*8K6|nv|I? zRpYb~EZT7Q))>#ZHi-_QXDXGRumu0!cbabHefpF-3{3VW|5)z}Zp7(Z0C5lN<+t_z z*F+#ZY#asq5rlW52-|GSnn|VM?uz?ft^9X?lmx z`+MjO{+0is|BxsxpXoiX@r!|j^bG$w(5DM#KrkN%PWrZj%}I#UMn0=W`8H$AIApXS zyFrA&p`3|3q_8%ezm9;%WIGVN2%8WNBD6;J0{=DmS>N&hQmOMxM*mbZp?FP2LPMC) z0)dp$mXtzXu+g&h2zwD;uEC(ZS2}B{5pi{?*c%M+cA}*|Gg}qUp#9B@;R&Z zj{mQF>;&%dGQYll)+GA1qt!2V5?8mz@SA7X#KY_`9|?8SUHtt}-_SNx-;OYZ@CJfN z2v!(#%MNC7-7Tv9{8lJ7u@7Zp5$Y!c7>Kl45W!%_kOg&Dv@-Cn%-K$*WHI+HN$eD^ zY?dbz1rIFyL*5-8OF&6tLAvFLW9W$_;VaNi1JBF&N8z_=gWm}cF3Ru#$Pu!DBf(aQ z%@7^}*;Hz>cnDN@2z~^qx1cTi#0ZZ@7u;^xfiWWHc{sQ39p?0P|YReOY7kMr`$sj%8V;6pKgPtMwkLiaLJ>XFUkb zbTS1=%zeX1n`X)~bC#XL^=ydWj>HxZqg+Gi0EjChXGxz~Ia_wKjD034npyJ(B>mWM zQ?6g`8N_L@5wRq|xA3=dQ$lro3l&4sA-OudiW+br`2>;6}$|s^{Ehw-cBRWfWOLVb!Y0jIh0d IAL;D=2efEHmjD0& delta 2039 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 diff --git a/__pycache__/orm.cpython-38.pyc b/__pycache__/orm.cpython-38.pyc index 2005766c736a73967a28f86f216e3cd1a6139b10..a1ab659c7db410384e47c4cf2f8b5f6360ae13da 100644 GIT binary patch delta 1644 zcma)6OK%%h6rMZw%-G|xJ+b4&&%B(Zq$z3Bv``5N5duk5wUk#?Gz&(q?@bt(SMH1n zP>_+_1)B(}%L0i_A|xavc9ptd#fmlS5kG*iL2TKSbFXRBCLnc2{`8&i+;bn_x#M5z zgI3{2KCesg+?H?Qzs$RZCi>>?;%46~SOp|u38&qnXIiGirhs{O=jOey}x)M!9tv!VLzc48+xLy1#Zvt6K&Iv$u^;h_R6bko7Yya z-qYoEBsUSW)Oq$%>PBB7BUl3`Wt_$eY_dd-E9Dc)=n18ALKy=^{ddms6WQuRW&Y8^ zHQqd|;~X~jQdR@!ap4X$4Hw^%7EJbg>hpOlX&k@E>jvfWN-yN>6?Ngg{}TeeSj?QY=vNsfnoSiuWE zB-G^lP@|3)x`dvCfG#}=XL(o$I1RsuCo@P#1=&DGYWOpOmma->%QBKBcps=KQQL*G zCmwcP{cWZVQli(`Yf41ac+5o;zC)hP@x-~pQ6&T)C3 zeXFgu7dYknqh~lAoj`1!pXy!qK$~1x=GpTcRyb5RT;QN^P&q7e$g+*hM4$gHB~|M7c&P?02Zab24lAoOgut%t z&c+8o$OpITDQd!Su98X|da01OS3UKN;8gzw<=jif1>TIMrXW?Y)_(kbGw;oN^JaEb zeOhuhY&(VEx$?Y2Q|UdYf`8m=T^?dY5se2mJn%~h#ooTE- z!epMsM~F0-%j$Gy2a|lpta_KYQQC$>?}QiCR` zNmDy9;?gN<-9}`Z+8?2&BZl$o;#vGIZi!CfDqa&mC+avSeoHI@UnZ(}Sk>BVDdIM1;jb;5qY_)#!;>z`ParUzJoH<}gi8M!pJG!1JAet+pP?upM+Rk3UQ zK3@ZuvEffv`;C@b4UDYmey=Jt#A5YZ1IrGj`6x0;gdq&*tQyY zofk`~ 1: # handling based on size of firm that has connection - lst_firm_size = [ - firm.revenue_log for firm in lst_firm_connect] - lst_prob = [ - size / sum(lst_firm_size) for size in lst_firm_size - ] + lst_firm_size_damp = \ + [firm.revenue_log ** self.flt_firm_pref_accept + for firm in lst_firm_connect] + lst_prob = \ + [size_damp / sum(lst_firm_size_damp) + for size_damp in lst_firm_size_damp] select_customer = \ self.model.nprandom.choice(lst_firm_connect, p=lst_prob) @@ -160,6 +170,8 @@ class FirmAgent(ap.Agent): and product not in firm.a_lst_product_removed ] prod_accept = self.revenue_log / sum(lst_firm_size) + # damp prod + prod_accept = prod_accept ** self.flt_diff_new_conn if self.model.nprandom.choice([True, False], p=[prod_accept, 1 - prod_accept]): self.firm_network.graph.add_edges_from([ diff --git a/model.py b/model.py index 1c47f75..1c53064 100644 --- a/model.py +++ b/model.py @@ -17,9 +17,15 @@ class Model(ap.Model): self.random = random.Random(self.p.seed) self.nprandom = np.random.default_rng(self.p.seed) self.int_n_iter = int(self.p.n_iter) - self.int_n_max_trial = int(self.p.n_max_trial) + self.dct_lst_remove_firm_prod = self.p.dct_lst_init_remove_firm_prod + self.int_n_max_trial = int(self.p.n_max_trial) + self.flt_netw_pref_cust_n = float(self.p.netw_pref_cust_n) + self.flt_netw_pref_cust_size = float(self.p.netw_pref_cust_size) + self.flt_cap_limit = int(self.p.cap_limit) + self.flt_diff_remove = float(self.p.diff_remove) + # init graph bom G_bom = nx.adjacency_graph(json.loads(self.p.g_bom)) self.product_network = ap.Network(self, G_bom) @@ -51,15 +57,16 @@ class Model(ap.Model): # get a list of firm producing this successor lst_succ_firm = Firm['Code'][Firm[succ_product_code] == 1].to_list() - lst_succ_firm_size = [ - G_Firm.nodes[succ_firm]['Revenue_Log'] - for succ_firm in lst_succ_firm - ] - lst_prob = [ - size / sum(lst_succ_firm_size) - for size in lst_succ_firm_size - ] - # select multiple successors + lst_succ_firm_size_damp = \ + [G_Firm.nodes[succ_firm]['Revenue_Log'] ** + self.flt_netw_pref_cust_size + for succ_firm in lst_succ_firm + ] + lst_prob = \ + [size_damp / sum(lst_succ_firm_size_damp) + for size_damp in lst_succ_firm_size_damp + ] + # select multiple customer # based on relative size of this firm lst_same_prod_firm = Firm['Code'][Firm[product_code] == 1].to_list() @@ -69,6 +76,8 @@ class Model(ap.Model): ] share = G_Firm.nodes[node]['Revenue_Log'] / sum( lst_same_prod_firm_size) + # damp share + share = share ** self.flt_netw_pref_cust_n n_succ_firm = round(share * len(lst_succ_firm)) if round( share * len(lst_succ_firm)) > 0 else 1 # at least one lst_choose_firm = self.nprandom.choice(lst_succ_firm, @@ -106,8 +115,10 @@ class Model(ap.Model): ])) # init extra capacity based on discrete uniform distribution for product in firm_agent.a_lst_product: - firm_agent.dct_prod_capacity[product] = self.nprandom.integers( - firm_agent.revenue_log / 5, firm_agent.revenue_log / 5 + 2) + firm_agent.dct_prod_capacity[product] = \ + self.nprandom.integers(firm_agent.revenue_log / 5, + firm_agent.revenue_log / 5 + + self.flt_cap_limit) self.firm_network.add_agents([firm_agent], [ag_node]) self.a_lst_total_firms = ap.AgentList(self, self.firm_network.agents) @@ -220,13 +231,17 @@ class Model(ap.Model): lost_percent = n_up_product_removed / len( product.a_predecessors()) lst_size = self.a_lst_total_firms.revenue_log - lst_size = [firm.revenue_log for firm in self.a_lst_total_firms + lst_size = [firm.revenue_log for firm + in self.a_lst_total_firms if product in firm.a_lst_product - and product not in firm.a_lst_product_removed + and product + not in firm.a_lst_product_removed ] std_size = (firm.revenue_log - min(lst_size) + 1) / (max(lst_size) - min(lst_size) + 1) prod_remove = 1 - std_size * (1 - lost_percent) + # damp prod + prod_remove = prod_remove ** self.flt_diff_remove if self.nprandom.choice([True, False], p=[prod_remove, 1 - prod_remove]): diff --git a/oa.csv b/oa.csv index f2b804b..f139061 100644 --- a/oa.csv +++ b/oa.csv @@ -1,3 +1,2 @@ -X1 -0 -1 +X1,X2,X3,X4,X5,X6,X7,X8,X9 +1,1,1,1,1,1,1,1,1 diff --git a/orm.py b/orm.py index 3b90e57..6fd6b44 100644 --- a/orm.py +++ b/orm.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from sqlalchemy import create_engine, inspect from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy import (Column, Integer, String, ForeignKey, BigInteger, +from sqlalchemy import (Column, Integer, DECIMAL, String, ForeignKey, BigInteger, DateTime, PickleType, Boolean, Text) from sqlalchemy.sql import func from sqlalchemy.orm import relationship, Session @@ -53,7 +53,16 @@ class Experiment(Base): # variables dct_lst_init_remove_firm_prod = Column(PickleType, nullable=False) g_bom = Column(Text(4294000000), nullable=False) + n_max_trial = Column(Integer, nullable=False) + crit_supplier = Column(DECIMAL(8, 4), nullable=False) + firm_pref_request = Column(DECIMAL(8, 4), nullable=False) + firm_pref_accept = Column(DECIMAL(8, 4), nullable=False) + netw_pref_cust_n = Column(DECIMAL(8, 4), nullable=False) + netw_pref_cust_size = Column(DECIMAL(8, 4), nullable=False) + cap_limit = Column(Integer, nullable=False) + diff_new_conn = Column(DECIMAL(8, 4), nullable=False) + diff_remove = Column(DECIMAL(8, 4), nullable=False) sample = relationship( 'Sample', back_populates='experiment', lazy='dynamic') diff --git a/xv.csv b/xv.csv index 1459667..564a51d 100644 --- a/xv.csv +++ b/xv.csv @@ -1,3 +1,4 @@ -n_max_trial -5 -10 +n_max_trial,crit_supplier,firm_pref_request,firm_pref_accept,netw_pref_cust_n,netw_pref_cust_size,cap_limit,diff_new_conn,diff_remove +12,2,2,2,0.5,2,4,0.5,0.5 +8,1,1,1,1,1,2,1,1 +4,0.5,0.5,0.5,2,0.5,0,2,2