`+eOBQ@1o!_B{sK;kMn
zJuJ0`c3L`OLx&t0I7vpP!{}Zfm}|OY!9A@oL^gR>d2K&fEC#=cLwn!yZ=4LBRVC(etXXRVy`H(@~z!;O8Eoo@(
zUMBs7!|uKOBh;1mY3ur<{_|5D|BN>~Y2?Ne6nOq+O!Ltr{2Is|2*h!@t29p`28a^`
zhc1G`>c&FFef{#WQR1)}Q6VUn=$EJj1?js*RH}s7
zJ+Ycn(!?w&cp1}d9ub1{4{#+HK{Sd#^!lf^S<_AC=<`rn^oLr5+H=XvKmYUje7#AV
z9RCQ@6dx#Te-{OXWuO^YR*{K9u%7DV;BjNud{+yMjLGML6Eo8ZfA4B-L*9bJkG{4I
z>{$i&Fal0L)8eO7r(JHl=?sDdHJ%(%!YwaNKcSpJXXF0|DzQQV^(@6ALwYrQXKAK-
z+h`*OU)2iODi%`mB}qe>CKTnW094XebB6+1@-TC|h>{w*?4ZLhlQC6I@(ZY+fLfCE
z`FmUmIUYbWt9;sTO!2wMIv{kM@YRlCtX#EAuSAhoyb!(;`qsUTt``FuUfT84^U84o
zB3|@zwhqxUH{rGPzcle+D23PFPg1XN+PDWGEAI-*9a^2A%+RPx67YN$f?I4#rAZQ*
zp;exxt}6VrrU=tqQxp6QKpKY8>p(2$rkhmznOEb75-;tz*AS9mxX&4In
zxqC8wUM0+{&6B(ooK-ybXc`!kV(Py`EukijV(U+Bs|Ew@&XZZLJTh%}r3Qpk`LURL
z{QPIIO;URWSMn1Ovc^C$+l7t}$R;!Sqf{RP&j`Tu{#JiEHQQDjx;oRhAp;cBA{Y3S
zsih8bfxpgxTBae(_hqz{(Q@aw=P%3G96}PoL
zWHX^@?F|*t0E-W>RQcN=eft)L{$78{Yb72XQ*ZKw`^MVZ8tm!ufy#Y61Vg*iZ8gQj
zDLLwd$7hr~UlWH#dWPZ{@*K&M7plvo9FYRS=oIB2V2oc1M{=R`{IRl^zlYBM#FY@9
zG**Kqa&cmC%|KB@u0&^xj~uIidP-VOkO4eR$va_-giIaUzo7sIA}6q1@
zv!qSF_*`R7<;;`=CJ$(OWxy!Dq9`dvOI{@_jQ~a}%>a)u3R9d+CpRg;$=z>-(Y{bf
z$*pF09|*N!?B-Y`ZC_}S!Ye&FLkf{g(h7=)pcgs8Rgx34Bqjv#2#ak|n-%?CD
z=}dVq5t^LBlP`$_(ImuBR9@H$J3(q9l!f)6+^uqu8dd=T11DbiPq(S-Pl-(HkbD6t
zUId9k1@WVGEMX(cE!7aTtw4X&;rAd^dt?F$ICpRA+&^c6snaIQL?^Cv$~!1P1;a5X
zy&>@l>83`~Ot~DKu~wJ^xF_b&O5tt~OR3$4t{~H~tE24V8vtn#xI~m;gj1wTWa}xs
zyQ%HLd4^n@gglLsbG<q3xFCjm)^InD?PR
zvV`Sdz#ig^91heXJ4kfiqIUxMTn_~~h@3BP=&%ZnrZE9xW_E&qnd2@6!oqqYhN
zeO5}I1|dUXs*vBo5xVn^>Ac~rILq!U&VsY-Ea=RgaqBu$Ptm?RAwCiX{foEoAqL&EA?_D)1BSFXNCHLS
zjgj=I++~p_QQISv>erCM3!~2MB!3p%M6y87|*u
zPxMXK6mgy9+PW?0=JB?Ag}&oDy3Ott`z5#3FS})3&h;w&s$13he6QADa2IsG(5v?s
z-9?>udX4^)yCjVF3|W+=2Zk*9&V9>Wmf{1WS^gL+F*ceaDg-yjo0~l!+1&d>>Gzsu
zRD6Hj3p?+rj*QA1et2i7Zn1za)r+mLbz#`+`R#D1P*K0q8pvV)op#u{-3mLy0qTmE
zI;#K9mOltls9aV;q-Z@#2
z4&M2g9=9ONvVyWBtFnf7Q7*_j-X*yx8+e!Hl3d2SB2R$gm8kIkJxySnlg|E_xA0uR
z6Z|`p(3pw?V`6w_Xibc+d0!xJhdC~)Bc%0+<$PF}7`nyTV&9@pOA{gORhG*#hqMw_
zQIlVdd)AOI=+*^Y??7F+q;!b(W9}QLLt02k;t^TOzD*H$j~wOqhqrw%
zbV~yW68dg>gXR|^b8y!!T!e_VMmM7>n;>J}7K)e
z=Ega5wBhKqiSa*&i&rnab?w6dGH~tA
zojcbq-)rA&ss3d(>_XdvYkfaxUF*|CtdH(Rju(r9SI3tDte#=mC97hZBL9hFl|)|T
zby^c8vnFc#L7m8(CE@7*oqD2>>$9Pr(oF8Z*34Itp=O5W)PlB%RpS6s4{flaqq%7w
zsogD552Oh>w|2g<_U)9%YvE0QE#cN$!sj)Zt+kevYn^Z{9O@o1X=`q7%eyh`Z!{f6
z(x4x*+iLrR_Ptm>BfA?62T`s!Y{@`9k1lEvNmRpVo-eojz}r;AzMIo|^(*W^?#9WN
zm^+Q+ES`YCV3;dn=fxQ-G8=Yef7{f@*&jcop3rm!KSe_3NU&sAfIa4_F*T(H1|fgW
zn20VcDXr)uU=2z(ENS6SO=(I;7PqWT^xp?Q$nt}1YlVH-Hq9Lv7h%M9&55}OMkila
zH!(KKd5n{c9TujJHl9UnNO4Moi0`>A4~*_ma
zk8T~+;M4c*7tePFqcLm~ti_iv(J;Zj4WuvE+rjO~z5v06X@h|pY-!VW^$EZapY*V~
z8&Ub{y^-%-@wcEKQTd90+aHX5?{|h{wn32im>UOF&2_MvyHOz=dc95%Hm%59e?1bOYpLO#BO(%&&an?o+xd4m882>>Mi
zNRy-23HxDT7MG;RPCI;JDvEPtw=wn;;c5rKYlWdY6nap^u9~86aVF|^-Z1h1d1y+<
zXjUV0BndDr>2Zhitsul6M)}Q7uQzC^a~R)s2wq@s;1&a);DsH~Y8_RykCQ-6PtqO#s)vpSGTUWqu09O_X5qHmQY?vz+8X>DGFfZTrJh6osr#t6;F{0^
zGs4oetnC4{yfUrgyV|@pU`=dW(075oCMInG+?jgfzAS3@C9iG6`QvQE
zYoFP+t6u|iV(nL7X7(hK4fPFXzk;M`x_0X>oEzd8j<-QE$bKg&qt;&wJfXGH2iwX+!A0Zx$z5w=h6U6+Q{thxFTRF;+n2*aSeoD%Li|O(Jj+i^J>L0!Iz-S^
zSZgcQ+RA~kYh$eHZf=qbYZLpvxMizbrhvMlYqx%LjcLG826972j+>UZ2|
z1-@Jx4pK+*-S57?z7`vl*B}|%5@byaO@=lqbAm+kKrBzeR(lWtTNpy43&_P58mmU^
zJ3JBU*U=a7N_aE0hZD9V_NucJ7^lQ<0k*f(b~|4fa{n2FSFcxvIP
zmq4?r7hb2A5CRYGi|3O?>xIC#vVw6xbqsiVLNK7g6J)w_eMCI6Zk1g({0wm`D%|lq
zTQ|c1g#H0qpIQ|i3C&I_zFt)$_Fbg0Cpu!&N|{+khj_j#$iXGE3G30KUeU~M(uX;+
zsN3kBGIMTz+JkgE2`+m6mu3zjw{j0Ip|ar`Vr%z=&WmJ4ruq&((cltu&5HdfF^I(N
zrl~$)>qkuV0YaNOZtfrA322Vs5sHdY`2_5?>G%Hf)}~tNv^S8$Vm!Q}#yH@S6{1IW
z;ZXh*ul@wx=GL~+T*;t~h7Ceaj2#r|*!i+4cKSHwRycv*_Jd%EaD)W}g5%EMgj8>`
zKld39s6SAv%;l91K}Ci3&0z;$sb6JnDHyktAv8Ee&P?{3wOC=kjc)FVR3fwcA7Ke`
z5P=lB)wB~8j@hxT5VHZGb0apHF
zAC7VYtaOLV+8vI8)j9&KKTCnt>MlGMss`W^vcehXptY*kFoRYr1Ff|LTGKkYkU%Tf
zUe_bdpp{f7(5j*G?7scbP5|&(G?GHV?ZliE699a7`!BYyrSSLq+J)F7Tg!N4Yx)4R
z)*0ydNEQx175U~i{r_bpk60o=3N4W$z#TD*KSb4>={dx`XS$om;hyq2HqQfdRD3Sz
zR+l-(?;@FDU{R|$nW(O^ZQi8+7*)qZ45$6bcWwawA!G^v0i#6m{3)pPBX=HR>J{y)EBG?gw}Rx~zw=z>`yK?CSu8
z88A3Uf#Db^c&4_^$rXi~aKL>J{tij(0`sDU#`*eJV=pQ+8Ha-Z#M6xpGijlpHMMz0
z(vb*;e{lw)S=+9mtkQGS%i*(sjG
z&dgyab6k-XoEWM*>)BXD9B@yg%7{4kXUB*nu6$LS71!R-*Dk68f|Wivyulp({5kH-
zS(~iC9dn5Xh1iRXH`-Kmf!%z(4joN6&dmG-ol@=Fd2NQ>nW%F-z_DhL;(@@|c}`Sj
ztPPh&jF&P@5XVb{r9TbI_etqWbBmXLV2izHUA&wAMJToz6e;r88
z#bUd?vRz7UDqhKoQRb3n2D{0H1rV3~-+)Rp7=dVV==X!egCPSmylO)nbTmTTJBd&x
z0VVCmmJ?T%w__RnJOrW_G4Ma&(FW0g@8^gWYv=SaJj$%|sY@H`vt|?pB?Q@_xNoYH
zWDGBFs8NFzU2mg)9rd|cJ@Rnq;y(JqQs5dUDs_U+00F5%+gFqgwakQvpjeU&jFdPAV*$nqb5n9KD>jh?DKj?eB#gw{Sm>Ks9#r
zA#Y)DX6K#DF0QimoPWE^$P_GPO3C*#^Cpx?TwBvY)|C7_JAbmOS9Xip+6gYUdAa>q
z1aMgq*(#D!#9kWPKMzZYW;r^t<%AXH5OcQSK3|h1tjYl&>KtuaO~3kR`(Gyo^!Ot^
z#!nCFNN6~{D=?Di*3z*a06v?HjuJKv%kT9_+F=;#YMT2v@B5rHr7wG!rHy*`r
zHb?d?|6UM@&}}3)<%~di2$#0Ufm@%Aih}+o%HgcL<*Vl)go+3eYk~GZIxN!Ra2EpK
zzvZ=hxbYs3M!kFPDbB6@?Xj=JFF3gKhEg9=-P%o@o_jRqy4h{Cdwy%+-S9Vu3Jc+V
zer&Npjz3C#mdMrzT$}XpQmqw^gUAd6w~!F$76!?00jjt^k1yW!PXqK(TCb1af`@vA
zN3>M!fsB8~qit;*%Uyvt!rPG=-Z1G_9rwyMwAR)&FjVkRa6m=LhS{pq$m9MQw<$Qf
z;w!5rb}BRNCM6rVK*Ak1W7(b;l{^nHjh_=BU-7){aSK;SY*DX}twa)ahRGTeo}(4L
zCPl1KG@I&=nQ+}1T2iy4XgL<}1TS1l1uR=ilSvZ68)f*AkKqf3`VkLC{AQqqL8FRpfTL;rAC^^
zx@T5=C_)0z$SFd6@GTHP9);wmSP>#QC(SR-z-X53<}xXs$ezZ`Yq2{vK$N;DaFSvQ_yQ^t0q
zGx0Q=HhMLhVKZ`8cn9{MSJ<4KIh>bsM>abv&x+cd#TMj(`Wti~`nkk|RwwOO)_c~c
z)@|$87GfKSogIr^l#8MXuk)u~qII|=&x!V&1=%rj!pKP@yK~l2g}o+i`I?*-Q%@Xr
zL0&j~{m5c(NJm~cu-TikB)=ohtXZ;hV6lsGN?s7tPi%JSBTLMP+0QL8D=!|D*fQ)n
zF%Ns**l)o;D;8ic82fGcjyU(g`NCFzk{9p4d$@9B*_P2RlP0QntmVaHI;-W9ZuXQ6
za>-?~9VSv&!z3HXUao653MEy`w(bboivkto;X}!{f=n*^+P#)W!#L5^8%Zv=rP9?8
zKD>70mp}W3cJJgWOt!UuJykN?PCk}<+P@lZzi{+Ez=RuNEVX|t>^+F@+xkUrp0U
z28k|j$lV;1mixn`x9sSKk`ZQ3lk8qN(A7IK%V5C4yE%-aTZp>3-{_@DpNp-PyTs
zJD2SdJR^r{lfsvuO45?vp|^y4
zV2|wfm|q9_#Hf98Oz%RU64jHKGq9(HCu#@I$b060T4vGWj(X?D^m!tgsEdYZ;!74p
zOSC@+(L@J;oY4MDb&XO6B9&=IIT{s35N2E#lJ69AWduRjA45+EVi
zisZja*ug*i^dG-3S;t69*0D#T3;|RI@gM@`PDj>Nv4>+1dzhiM74#nPK{^-$Y!ZhV
z1^atFq^^@6=`{Q`yjcrE*uS&xTR0`>X$fCYy1Cz6JN<^$rRVnhSep|H$Z{s5{xeH`
zA92qwU0dC}3nXQmJ3Bj@xAuDX0u|p<>3t9{+l*xvY^Ew+8SH6~b0r6gb2F)fV9Va`
zo=&pzqW|XdA~_onbM12;r(zgM&UJ(H&xS!%^r#t(pqrfMv|FP#7j3Fa;=9z_2*obX
zdgxVQsyk$bNtk0Har!Wbu-QB-w$e>_m`kOa6t*aOIghfua28>vhJ&2qUZ+E-Ci)@Q5a(Z7-oy-$Q6oCRku%j
zBKc58x+%hbpC@vMQ@Hlbf+f$jpU8X%;pkKo6zUcqpnd?u9Lbn?kJ=U?F5%7If$(hK
zZaEFRQ7YaJ>3BN!BpzsvV>=d}uiTP}>>=oDKib@NyxHF&z74^pC(4I4lL9JFog*9c
zb43-TDX2}l!wPB_I#Js-J`QU^Z_{multF$4wH;A=V#~?H?vW*Yv`(3b!lNK{{Um~J
zOOO=fwJ_%#tTwEUn1D4eCPf#tJu9XF`ZH=7pQNiJNNlJjn9nPZ92>znn=>qWH=BYn|c$SX5-WiXwMw=F8*{C$ur7Hq
zAZfP`E(f_TOCAdC8*&-?s5*5cF-QT
z!>V}^z}zfP2VfG>i@Do|a0cY+Epo=SXZG%;NT=ib2yaI22I)Y%_f^>@G!wQ7=hOJ_
zoTA)mIp)}3j`J@u*#C|5y1{UP?*`C1ZhsT+bzDdVM;z9c9dpgNq5-^40J$yTbyBo}
z*N*xWO9NhueJSv&K1Q4RIm8I9ba2OXE1S<$zai}th*t$(a}8Nt414*vMP7tSPLNl?
zehhitS3;h;jlqB~z|J6wRYPIm!2m*&ld&-E<|hJ;!WXS@-dEIxOVR?r@ErmE3Q7r6@OxTtNrJYFVx@6sm6Rz9_!w-lF2$A1SDF
z)dDT0&3TX{DUONiVBG5EtEj@Yk6JS;>fs`P5}VE58>DD2mU(~_8)#1`qzSAOV;2QK
zt@$+f8I2O4_STBh;e9%#>?(v~P2pItm`u>HJ;$dEVV7;+nKU{{w|M?j_TT{sxQ<`y
LobSwbCdm8069$-_
literal 0
HcmV?d00001
diff --git a/computation.py b/computation.py
index 8712c49..679f87d 100644
--- a/computation.py
+++ b/computation.py
@@ -1,7 +1,7 @@
import os
import datetime
+from mesa import Model
-from model import Model
from typing import TYPE_CHECKING
if TYPE_CHECKING:
@@ -35,6 +35,6 @@ class Computation:
'seed': sample_random.seed,
**dct_exp}
model = Model(dct_sample_para)
-
- model.run(display=False)
+ for i in range(100):
+ model.step()
return False
diff --git a/controller_db.py b/controller_db.py
index 3314ab7..2ed557b 100644
--- a/controller_db.py
+++ b/controller_db.py
@@ -101,10 +101,15 @@ class ControllerDB:
index_col=None)
# .shape[1] 列数 .iloc 访问特定的值 而不是标签
df_oa = df_oa.iloc[:, 0:df_xv.shape[1]]
+
# idx_scenario 是 0 指行 idx_init_removal 指 索引 0.. dct_init_removal 键 code 公司 g_product_js 图的json数据 dct_exp_para 解码 全局参数xv-
for idx_scenario, row in df_oa.iterrows():
dct_exp_para = {}
for idx_col, para_level in enumerate(row):
+ # 处理 NaN 值,替换为默认值(如 0 或其他合适的值)
+ para_level = para_level if not pd.isna(para_level) else 0
+ # 转换为整数
+ para_level = int(para_level)
dct_exp_para[df_xv.columns[idx_col]] = \
df_xv.iloc[para_level, idx_col]
# different initial removal 只会得到 键 和 值
diff --git a/firm.py b/firm.py
index 241aa3c..643a719 100644
--- a/firm.py
+++ b/firm.py
@@ -1,6 +1,5 @@
from mesa import Agent
-
class FirmAgent(Agent):
def __init__(self, unique_id, model, code, type_region, revenue_log, a_lst_product):
# 调用超类的 __init__ 方法
diff --git a/input_data/BomCateNet.csv b/input_data/BomCateNet.csv
new file mode 100644
index 0000000..565c59d
--- /dev/null
+++ b/input_data/BomCateNet.csv
@@ -0,0 +1,108 @@
+Code,1,1.1,1.1.1,1.1.2,1.1.3,1.2,1.2.1,1.2.2,1.2.3,1.3,1.3.1,1.3.1.1,1.3.1.2,1.3.1.3,1.3.1.4,1.3.1.5,1.3.1.6,1.3.1.7,1.3.2,1.3.2.1,1.3.3,1.3.3.1,1.3.3.2,1.3.3.3,1.3.3.4,1.3.3.5,1.3.3.6,1.3.3.7,1.3.4,1.3.4.1,1.3.4.2,1.3.4.3,1.3.5,1.3.5.1,1.4,1.4.1,1.4.1.1,1.4.1.2,1.4.1.3,1.4.1.4,1.4.1.5,1.4.2,1.4.2.1,1.4.2.2,1.4.2.3,1.4.2.4,1.4.2.5,1.4.2.6,1.4.2.7,1.4.3,1.4.3.1,1.4.3.2,1.4.3.3,1.4.3.4,1.4.3.5,1.4.3.6,1.4.4,1.4.4.1,1.4.4.2,1.4.4.3,1.4.4.4,1.4.4.5,1.4.5,1.4.5.1,1.4.5.2,1.4.5.3,1.4.5.4,1.4.5.5,1.4.5.6,1.4.5.7,1.4.5.8,1.4.5.9,2,2.1,2.1.1,2.1.1.1,2.1.1.2,2.1.1.3,2.1.1.4,2.1.1.5,2.1.2,2.1.2.1,2.1.2.2,2.1.2.3,2.1.2.4,2.1.3,2.1.3.1,2.1.3.2,2.1.3.3,2.1.3.4,2.1.3.5,2.1.3.6,2.1.3.7,2.1.4,2.1.4.1,2.1.4.1.1,2.1.4.1.2,2.1.4.1.3,2.1.4.1.4,2.1.4.2,2.1.4.2.1,2.1.4.2.2,2.2,2.3,2.3.1,2.3.2,2.3.3
+1,,1,,,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.1,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.2,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.2.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.2.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3,,,,,,,,,,,1,,,,,,,,1,,1,,,,,,,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.1.7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.2,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.3.7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.4.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.4.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.4.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.3.5.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,1,,,,,,,,1,,,,,,,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.1.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.2.7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.3.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.4.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1.4.5.9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,
+2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,1,,,,,1,,,,,,,,1,,,,,,,,,,,,,
+2.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.1.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+2.1.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.2.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.2.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.2.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,,,,,
+2.1.3.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.3.7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,,,,,,,
+2.1.4.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,
+2.1.4.1.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4.1.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4.1.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4.1.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,
+2.1.4.2.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.1.4.2.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1
+2.3.1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.3.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2.3.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
diff --git a/input_data/BomNodes.csv b/input_data/BomNodes.csv
new file mode 100644
index 0000000..e3c410b
--- /dev/null
+++ b/input_data/BomNodes.csv
@@ -0,0 +1,108 @@
+Index,Code,Level,Name
+0,1,0,工业互联网
+1,1.1,1,工业自动化硬件
+2,1.1.1,2,工业计算芯片
+3,1.1.2,2,工业控制器
+4,1.1.3,2,工业服务器
+5,1.2,1,工业互联网网络
+6,1.2.1,2,网络互联服务
+7,1.2.2,2,标识解析服务
+8,1.2.3,2,数据互通服务
+9,1.3,1,工业软件
+10,1.3.1,2,设计研发软件
+11,1.3.1.1,3,计算机辅助设计CAD
+12,1.3.1.2,3,计算机辅助工程CAE
+13,1.3.1.3,3,计算机辅助制造CAM
+14,1.3.1.4,3,计算机辅助工艺过程设计CAPP
+15,1.3.1.5,3,产品数据管理PDM
+16,1.3.1.6,3,产品生命周期管理PLM
+17,1.3.1.7,3,电子设计自动化EDA
+18,1.3.2,2,采购供应软件
+19,1.3.2.1,3,供应链管理SCM
+20,1.3.3,2,生产制造软件
+21,1.3.3.1,3,制造执行系统MES
+22,1.3.3.2,3,分布式控制系统DCS
+23,1.3.3.3,3,数据采集与监视控制系统SCADA
+24,1.3.3.4,3,可编程逻揖控制系统PLC
+25,1.3.3.5,3,企业资产管理系统EAM
+26,1.3.3.6,3,运维保障系统MRO
+27,1.3.3.7,3,故障预测与健康管理PHM
+28,1.3.4,2,企业运营管理软件
+29,1.3.4.1,3,企业资源计划ERP
+30,1.3.4.2,3,客户关系管理CRM
+31,1.3.4.3,3,人力资源管理HRM
+32,1.3.5,2,仓储物流软件
+33,1.3.5.1,3,仓储物流管理WMS
+34,1.4,1,工业互联网安全管理
+35,1.4.1,2,设备安全
+36,1.4.1.1,3,工业防火墙
+37,1.4.1.2,3,下一代防火墙
+38,1.4.1.3,3,防毒墙
+39,1.4.1.4,3,入侵检测系统
+40,1.4.1.5,3,统一威胁管理系统
+41,1.4.2,2,控制安全
+42,1.4.2.1,3,工控安全监测与审计
+43,1.4.2.2,3,工控主机卫士
+44,1.4.2.3,3,工控漏洞扫描
+45,1.4.2.4,3,安全隔离与信息交换系统
+46,1.4.2.5,3,安全日志与审计
+47,1.4.2.6,3,隐私计算
+48,1.4.2.7,3,工控原生安全
+49,1.4.3,2,网络安全
+50,1.4.3.1,3,网络漏洞扫描和补丁管理
+51,1.4.3.2,3,流量检测
+52,1.4.3.3,3,APT检测
+53,1.4.3.4,3,攻击溯源
+54,1.4.3.5,3,负载均衡
+55,1.4.3.6,3,沙箱类设备
+56,1.4.4,2,平台安全
+57,1.4.4.1,3,身份鉴别与访问控制
+58,1.4.4.2,3,密钥管理
+59,1.4.4.3,3,接入认证
+60,1.4.4.4,3,工业应用行为监控
+61,1.4.4.5,3,安全态势感知
+62,1.4.5,2,数据安全
+63,1.4.5.1,3,恶意代码检测系统
+64,1.4.5.2,3,数据防泄漏系统
+65,1.4.5.3,3,数据审计系统
+66,1.4.5.4,3,数据脱敏
+67,1.4.5.5,3,敏感数据发现与监控
+68,1.4.5.6,3,数据容灾备份
+69,1.4.5.7,3,数据恢复
+70,1.4.5.8,3,数据加密
+71,1.4.5.9,3,数据防火墙
+72,2,0,工业互联网平台
+73,2.1,1,PaaS
+74,2.1.1,2,开发工具
+75,2.1.1.1,3,算法建模工具
+76,2.1.1.2,3,低代码开发工具
+77,2.1.1.3,3,流程开发工具
+78,2.1.1.4,3,组态建模工具
+79,2.1.1.5,3,数字孪生建模工具
+80,2.1.2,2,工业模型库
+81,2.1.2.1,3,数据算法模型
+82,2.1.2.2,3,业务流程模型
+83,2.1.2.3,3,研发仿真模型
+84,2.1.2.4,3,行业机理模型
+85,2.1.3,2,工业物联网
+86,2.1.3.1,3,物联网服务
+87,2.1.3.2,3,平台基础服务
+88,2.1.3.3,3,工业引擎服务
+89,2.1.3.4,3,应用管理服务
+90,2.1.3.5,3,容器服务
+91,2.1.3.6,3,微服务
+92,2.1.3.7,3,制造类API
+93,2.1.4,2,工业大数据
+94,2.1.4.1,3,工业大数据存储
+95,2.1.4.1.1,4,关系型数据库
+96,2.1.4.1.2,4,分布式数据库
+97,2.1.4.1.3,4,实时数据库
+98,2.1.4.1.4,4,时序数据库
+99,2.1.4.2,3,工业大数据管理
+100,2.1.4.2.1,4,数据质量管理
+101,2.1.4.2.2,4,数据安全管理
+102,2.2,1,IaaS
+103,2.3,1,边缘层
+104,2.3.1,2,工业数据接入
+105,2.3.2,2,边缘数据处理
+106,2.3.3,2,协议转换
diff --git a/input_data/Firm_amended.csv b/input_data/Firm_amended.csv
new file mode 100644
index 0000000..9561f52
--- /dev/null
+++ b/input_data/Firm_amended.csv
@@ -0,0 +1,172 @@
+Code,Stock_Region,Report_Year,Assets,Revenue_Log,Revenue,Size,Num_Employ_Log,Num_Employ,Source,Type_Region,1,1.1,1.1.1,1.1.2,1.1.3,1.2,1.2.1,1.2.2,1.2.3,1.3,1.3.1,1.3.1.1,1.3.1.2,1.3.1.3,1.3.1.4,1.3.1.5,1.3.1.6,1.3.1.7,1.3.2,1.3.2.1,1.3.3,1.3.3.1,1.3.3.2,1.3.3.3,1.3.3.4,1.3.3.5,1.3.3.6,1.3.3.7,1.3.4,1.3.4.1,1.3.4.2,1.3.4.3,1.3.5,1.3.5.1,1.4,1.4.1,1.4.1.1,1.4.1.2,1.4.1.3,1.4.1.4,1.4.1.5,1.4.2,1.4.2.1,1.4.2.2,1.4.2.3,1.4.2.4,1.4.2.5,1.4.2.6,1.4.2.7,1.4.3,1.4.3.1,1.4.3.2,1.4.3.3,1.4.3.4,1.4.3.5,1.4.3.6,1.4.4,1.4.4.1,1.4.4.2,1.4.4.3,1.4.4.4,1.4.4.5,1.4.5,1.4.5.1,1.4.5.2,1.4.5.3,1.4.5.4,1.4.5.5,1.4.5.6,1.4.5.7,1.4.5.8,1.4.5.9,2,2.1,2.1.1,2.1.1.1,2.1.1.2,2.1.1.3,2.1.1.4,2.1.1.5,2.1.2,2.1.2.1,2.1.2.2,2.1.2.3,2.1.2.4,2.1.3,2.1.3.1,2.1.3.2,2.1.3.3,2.1.3.4,2.1.3.5,2.1.3.6,2.1.3.7,2.1.4,2.1.4.1,2.1.4.1.1,2.1.4.1.2,2.1.4.1.3,2.1.4.1.4,2.1.4.2,2.1.4.2.1,2.1.4.2.2,2.2,2.3,2.3.1,2.3.2,2.3.3
+0,SH,2021,42040000000,23.11111077,10890000000,L,8.908288886,7393,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+1,,2021,524000000,18.74276424,138000000,M,5.141663557,171,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+2,,,,18.91495248,,M,4.727387819,113,qichacha,Beijing,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+3,,,,17.40772217,,S,3.17805383,24,qichacha,Beijing,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+4,,,,19.65580702,,M,5.488937726,242,qichacha,Beijing,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+5,,,,18.5031337,,S,4.304065093,74,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+6,,2017,902000000,18.88441476,159000000,M,5.117993812,167,qichacha,Beijing,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+7,,,,20.22851329,,L,6.077642243,436,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,
+8,,,,20.02307783,,M,5.866468057,353,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+9,,,,20.12502381,,L,5.97126184,392,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+10,,,,18.99744465,,M,4.812184355,123,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+11,SZ,2021,2831000000,20.33022325,675000000,L,7.437795122,1699,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+12,,,,19.4654905,,M,5.293304825,199,qichacha,Beijing,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+13,SZ,2021,8632000000,21.62748399,2470000000,L,9.069698042,8688,qichacha,Beijing,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,,,1,1,1
+14,SZ,2021,21070000000,23.11019208,10880000000,L,9.372969295,11766,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+15,SH,2021,18310000000,22.89060378,8735000000,L,9.793616881,17919,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+16,SZ,2021,2357000000,20.6624537,941000000,L,7.398174093,1633,qichacha,Beijing,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1
+17,,,,17.68758638,,S,3.465735903,32,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+18,,,,19.78721596,,M,5.624017506,277,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+19,,,,18.19661508,,S,3.988984047,54,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+20,,,,16.33896504,,XS,2.079441542,8,qichacha,Beijing,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+21,SE,2021,4348926705,21.58399273,2364879075,L,9.998797732,22000,hexagon,Foreign,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+22,,,,18.78627894,,S,4.59511985,99,qichacha,Beijing,,,,,,,1,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,,,1,1,1
+23,US,2021,10365469660,22.30379074,4857504838,S,4.143134726,63,hollysys,Beijing,,,,1,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,1,1,1
+24,HK,2021,2486434448,21.10974082,1471783581,M,5.605802066,272,hkexnews,Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+25,SZ,2021,1802000000,20.17681304,579000000,L,6.492239835,660,qichacha,Beijing,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+26,,,,14.9903437,,XS,0.693147181,2,,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,,,,,
+27,,,,19.43065419,,M,5.257495372,192,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+28,HK,2021,19000334000,22.12943807,4080307000,L,7.181591945,1315,hkexnews,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,
+29,US,2021,4.96507E+11,27.58140221,9.51592E+11,M,5.891644212,362,jd,Beijing,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+30,,,,19.34600737,,M,5.170483995,176,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+31,,,,17.01327571,,S,2.772588722,16,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+32,,,,18.75634351,,S,4.564348191,96,qichacha,Beijing,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+33,,,,18.66057858,,S,4.465908119,87,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+34,,,,19.69132991,,M,5.525452939,251,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+35,,,,18.28276201,,S,4.077537444,59,qichacha,Beijing,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+36,SH,2021,1989000000,20.90642038,1201000000,L,6.711740395,822,qichacha,Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+37,SZ,2021,4765000000,21.68223284,2609000000,L,8.394347361,4422,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,1,,,,1,,,,,,,1,,,,,,,,,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+38,,,,17.12785796,,S,2.890371758,18,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+39,US,2021,50085024000,23.98443519,26080016000,,,,marketwatch,Foreign,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+40,SH,2021,13480000000,22.48267428,5809000000,L,9.17543832,9657,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,1,,,,,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+41,SZ,2021,8936000000,22.20168349,4386000000,L,8.792853289,6587,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,,,,,,,,1,1,,1,1,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+42,,,,20.38102153,,M,6.234410726,510,qichacha,Beijing,,,,,,,,,,,,1,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+43,,2021,3042000000,21.13006339,1502000000,L,6.385194399,593,qichacha,Beijing,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+44,,2021,3049000000,21.52884845,2238000000,M,6.754604099,858,qichacha,Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+45,,,,21.43051418,,M,7.313220387,1500,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+46,,,,17.90466593,,S,3.688879454,40,qichacha,Beijing,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+47,,,,21.33304811,,L,7.21303166,1357,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,1,1,1,1,,,,,,,1,,,,,,,,,,,,,,,
+48,SH,2021,26190000000,23.13917962,11200000000,L,8.319473692,4103,qichacha,Non_Beijing,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+49,,2017,219000000,18.6195316,122000000,M,5.786897381,326,qichacha,Beijing,,,,,,,,,,,,1,,,1,,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+50,,,,20.12502381,,M,5.97126184,392,qichacha,Non_Beijing,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+51,,,,18.79605616,,M,4.605170186,100,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+52,,,,18.36189706,,S,4.158883083,64,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+53,SZ,2021,11600000000,21.93282302,3352000000,L,8.743372131,6269,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,1,1,,,,,,,1,1,1,1,,,,,1,,,,1,1,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+54,,,,21.48044599,,L,7.364547014,1579,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+55,,,,20.09221468,,M,5.937536205,379,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,1,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+56,,2020,439000000,19.01400759,181000000,L,5.897153868,364,qichacha,Beijing,,,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+57,,,,19.12338465,,M,4.941642423,140,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1
+58,SH,2021,17330000000,22.91290617,8932000000,L,10.07255499,23684,qichacha,Beijing,,,,,,,,1,,,,,,,,,1,,1,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,
+59,,,,18.9063051,,M,4.718498871,112,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+60,,,,18.12174548,,S,3.912023005,50,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+61,,2017,629000000,19.3409635,251000000,L,5.811140993,334,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+62,,,,18.64933193,,S,4.454347296,86,qichacha,Beijing,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+63,,,,20.05292974,,M,5.897153868,364,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+64,,,,19.22865749,,M,5.049856007,156,qichacha,Beijing,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+65,SH,2021,7.62234E+11,26.80902186,4.39552E+11,L,12.53868745,278922,qichacha,Beijing,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+66,SH,2021,5.933E+11,26.51597452,3.279E+11,L,12.39942069,242661,qichacha,Beijing,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+67,SH,2021,1.84E+12,27.46645067,8.48258E+11,L,8.430545385,4585,qichacha,Beijing,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+68,SH,2021,3117000000,20.24199902,618000000,L,7.430707083,1687,qichacha,Beijing,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+69,SZ,2021,66430000000,24.93746536,67640000000,L,9.74957851,17147,qichacha,Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+70,US,2021,2.52378E+11,25.92778688,1.82094E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+71,US,2021,8003332000,22.02110911,3661391520,,,,marketwatch,Foreign,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+72,US,2021,43511280320,23.29726635,13118199200,,,,marketwatch,Foreign,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+73,JP,2021,83161023470,24.06291953,28209355790,,,,fanuc,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,
+74,US,2021,4.43554E+11,26.18956307,2.36583E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,
+75,US,2021,9.08167E+11,26.70107477,3.94575E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+76,,2021,,20.06161732,516000000,,,,zippia,Foreign,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+77,US,2021,9.02016E+11,26.35266781,2.78496E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+78,,2021,,21.41879181,2004763250,,,,forbes,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+79,US,2021,31012012800,23.24364049,12433253920,,,,marketwatch,Foreign,,,,,,,,,,,,1,,,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,1,1,1,1,1,1,1,,1,,,,,1,,,,,1,1,1
+80,US,2021,4.56151E+11,25.7083355,1.46214E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+81,US,2021,4.89643E+11,25.97843016,1.91553E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1,,,,,1,,,,,,,
+82,,2021,,18.0265116,67424000,,,,zippia,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+83,US,2021,1.70039E+11,25.55511763,1.25443E+11,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+84,,2021,7.80541E+11,27.07058915,5.70962E+11,,,,bosch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,1,,,,,,,,,,1,,,
+85,FR,2021,1.04402E+12,26.60060295,3.56858E+11,,,,dassault ,Foreign,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+86,US,2021,8.49095E+11,27.11512238,5.96964E+11,,,,marketwatch,Foreign,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+87,US,2021,1.69771E+11,25.56118703,1.26207E+11,,,,marketwatch,Foreign,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+88,US,2021,3.96969E+11,25.97925591,1.91711E+11,,,,marketwatch,Foreign,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+89,US,2021,75779072000,24.59715157,48129040000,,,,marketwatch,Foreign,,,,1,,,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+90,,2023,,22.39969825,5346448000,,,,zoominfo,Foreign,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+91,,2023,,21.2735583,1733760000,,6.913737351,1006,rocketreach,Foreign,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+92,JP,2021,47620285930,24.38782633,39038974590,,,,omron,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+93,US,2021,30177737120,23.74657041,20559118720,,,,marketwatch,Foreign,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+94,JP,2021,1.12124E+12,27.50709063,8.83441E+11,,,,mitsubishi,Foreign,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+95,FR,2021,4.00517E+11,26.08097343,2.12238E+11,,,,schneider,Foreign,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,
+96,US,2021,6.70779E+11,26.56026085,3.42748E+11,,,,marketwatch,Foreign,,,,,,,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+97,US,2021,1.36825E+12,26.95829817,5.10317E+11,,,,marketwatch,Foreign,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,
+98,US,2021,2.2964E+12,27.77637214,1.15645E+12,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+99,XE,2021,1.02335E+12,26.84835831,4.57187E+11,,,,siemens,Foreign,,,,1,,,1,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,
+100,US,2021,60215548800,24.08697187,28896082560,,,,marketwatch,Foreign,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+101,US,2021,3.59976E+11,24.64226064,50349807680,,,,marketwatch,Foreign,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+102,US,2021,2.89338E+12,28.80423839,3.23238E+12,,,,marketwatch,Foreign,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,
+103,US,2021,94016180090,25.03108636,74278423930,,,,marketwatch,Foreign,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+104,XE,2021,1.71332E+11,25.12029384,81209156000,,10.82552176,50288,infineon ,Foreign,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+105,US,2021,1.15863E+12,27.02163609,5.43685E+11,,,,marketwatch,Foreign,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+106,US,2021,1.69022E+12,27.29874466,7.17289E+11,,,,alibaba ,Non_Beijing,,1,,,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,
+107,SH,2021,4852000000,21.32210234,1820000000,L,8.191740021,3611,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+108,HK,2021,3.80034E+11,25.54751533,1.24493E+11,,,,hkexnews,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,
+109,SH,2021,17860000000,23.18796978,11760000000,L,8.567506005,5258,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+110,,,,18.66057858,,S,4.465908119,87,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+111,SZ,2021,2638000000,21.30436351,1788000000,L,8.360305436,4274,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,1,,,,,1,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+112,SZ,2021,545000000,19.36458664,257000000,L,6.376726948,588,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+113,,,,19.49912236,,M,5.327876169,206,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+114,,,,18.79605616,,M,4.605170186,100,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+115,,2021,2.666E+11,26.80913106,4.396E+11,L,12.16509439,191970,qichacha,Non_Beijing,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,
+116,SH,2021,2342000000,19.07820075,193000000,M,5.683579767,294,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+117,,,,14.9903437,,XS,0.693147181,2,,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+118,,,,18.44907397,,S,4.248495242,70,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+119,SZ,2021,10070000000,22.44941955,5619000000,L,9.157572306,9486,qichacha,Non_Beijing,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+120,,,,21.70305471,,M,7.593374193,1985,qichacha,Non_Beijing,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+121,,,,17.97502126,,S,3.761200116,43,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+122,SZ,2021,2668000000,20.74110576,1018000000,L,6.966024187,1060,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+123,SZ,2021,2576000000,21.63595007,2491000000,L,7.028201432,1128,qichacha,Non_Beijing,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+124,SH,2021,2.177E+11,26.15085554,2.276E+11,L,11.56051491,104874,qichacha,Non_Beijing,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,
+125,,,,18.81532064,,M,4.624972813,102,qichacha,Non_Beijing,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+126,,2021,,27.17973246,6.36807E+11,L,9.210340372,10000,qichacha,Non_Beijing,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,1,,,,,,,,,,,,,,,,,1,1,,,
+127,,2021,,23.0573496,10320000000,M,8.853665428,7000,qichacha,Non_Beijing,,,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+128,SZ,2021,3800000000,21.08443069,1435000000,L,7.557472902,1915,qichacha,Non_Beijing,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+129,SZ,2021,3399000000,21.21429683,1634000000,L,7.857093865,2584,qichacha,Non_Beijing,,,,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+130,HK,2021,11087132000,22.15217586,4174147000,,,,hkexnews,Non_Beijing,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+131,,,,16.45354728,,S,2.197224577,9,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+132,SZ,2021,3337000000,20.8542941,1140000000,L,7.543273347,1888,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+133,SZ,2021,6249000000,19.47499277,287000000,L,6.107022888,449,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+134,,2019,446000000,19.52593758,302000000,L,6.415096959,611,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+135,SH,2021,4155000000,21.3275818,1830000000,L,7.276556403,1446,qichacha,Non_Beijing,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,1,1,,,,,,,,,,1,,,,
+136,SZ,2021,3.879E+11,26.56216179,3.434E+11,L,12.01853149,165799,qichacha,Non_Beijing,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+137,NQ,,381000000,19.44672234,279000000,M,6.65544035,777,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+138,SZ,2021,2120000000,20.77300793,1051000000,L,7.329749689,1525,qichacha,Non_Beijing,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+139,SH,2021,772000000,19.79944684,397000000,L,6.244166901,515,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+140,SH,2021,1944000000,20.74990777,1027000000,L,7.499976541,1808,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,1,,,,,,,,,,,,,,,,,,,,,,,1,,1,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+141,,,,19.45071314,,M,5.278114659,196,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+142,SZ,2021,10950000000,22.64092347,6805000000,L,9.09346942,8897,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+143,,,,21.03606772,,L,6.907755279,1000,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,
+144,,2021,1130000000,20.06355343,517000000,L,6.263398263,525,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+145,,,,15.38479015,,S,1.098612289,3,,Non_Beijing,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+146,,2021,297000000,19.27934236,236000000,M,4.997212274,148,qichacha,Non_Beijing,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+147,SZ,2021,9607000000,22.77314983,7767000000,L,9.041329829,8445,qichacha,Non_Beijing,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+148,HK,2021,1.61236E+12,27.05141331,5.60118E+11,,,,hkexnews,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,
+149,,,,18.26613213,,S,4.060443011,58,qichacha,Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+150,SH,2021,2039000000,21.97859693,3509000000,L,5.774551546,322,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+151,,2017,156000000,17.63219378,45453200,S,4.9698133,144,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+152,SZ,2021,7142000000,21.74894895,2789000000,L,7.850493181,2567,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+153,,,,19.12338465,,M,4.941642423,140,qichacha,Non_Beijing,,,,,,,,,,,,1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+154,,,,19.13030869,,S,4.94875989,141,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+155,HK,2021,2.92892E+11,26.51722152,3.28309E+11,,,,xiaomi,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,
+156,,,,14.9903437,,XS,0.693147181,2,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+157,,,,22.72444558,,L,8.643297068,5672,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+158,,2018,425000000,19.54235831,307000000,L,6.240275845,513,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+159,SZ,2021,1.67E+11,25.15800351,84330000000,L,9.647497927,15483,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,
+160,HK,2021,9505464000,22.65401405,6894667000,,,,hkexnews,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+161,,,,21.9929142,,L,7.891330758,2674,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1
+162,,,,17.88978166,58807600,M,5.370638028,215,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+163,,,,18.36189706,,S,4.158883083,64,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,1,1,,,,,
+164,,,,21.83955113,,L,7.733683571,2284,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+165,,,,18.29911239,,S,4.094344562,60,qichacha,Non_Beijing,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,
+166,,,,19.83851913,,M,5.676753802,292,qichacha,Non_Beijing,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+167,SZ,2021,78220000000,24.43927396,41100000000,L,9.500843462,13371,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+168,SH,2021,10350000000,22.23155657,4519000000,L,8.528528701,5057,qichacha,Non_Beijing,,,,1,,,,,,,,,,,,,,,,,,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1
+169,SH,2021,2.30233E+11,24.27012079,34704000000,L,8.55120807,5173,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+170,,,,18.42068074,100000000,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
diff --git a/input_data/oa_with_exp.csv b/input_data/oa_with_exp.csv
new file mode 100644
index 0000000..9bbc6a7
--- /dev/null
+++ b/input_data/oa_with_exp.csv
@@ -0,0 +1,37 @@
+X12,X1,X2,X3,X13,X14,X15,X16,X4,X5,X6,X7,X8,X9,X10,X11,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,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1
+2,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2
+0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2
+1,0,0,0,1,1,1,2,0,0,1,1,1,1,1,1,2,2,2,0,0,0,0
+2,0,0,0,2,2,2,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1
+0,0,0,1,0,1,2,0,1,1,0,0,0,1,1,1,1,2,2,0,1,1,2
+1,0,0,1,1,2,0,1,1,1,0,0,0,1,1,1,2,0,0,1,2,2,0
+2,0,0,1,2,0,1,2,1,1,0,0,0,1,1,1,0,1,1,2,0,0,1
+0,0,1,0,0,2,1,0,1,1,0,1,1,0,0,1,2,1,2,1,0,2,1
+1,0,1,0,1,0,2,1,1,1,0,1,1,0,0,1,0,2,0,2,1,0,2
+2,0,1,0,2,1,0,2,1,1,0,1,1,0,0,1,1,0,1,0,2,1,0
+0,0,1,1,1,2,0,2,0,1,1,0,1,0,1,0,1,0,2,2,1,0,1
+1,0,1,1,2,0,1,0,0,1,1,0,1,0,1,0,2,1,0,0,2,1,2
+2,0,1,1,0,1,2,1,0,1,1,0,1,0,1,0,0,2,1,1,0,2,0
+0,0,1,1,1,2,1,0,1,0,1,1,0,1,0,0,0,2,1,2,2,1,0
+1,0,1,1,2,0,2,1,1,0,1,1,0,1,0,0,1,0,2,0,0,2,1
+2,0,1,1,0,1,0,2,1,0,1,1,0,1,0,0,2,1,0,1,1,0,2
+0,1,0,1,1,0,2,2,1,0,0,1,1,0,1,0,2,0,1,1,0,1,2
+1,1,0,1,2,1,0,0,1,0,0,1,1,0,1,0,0,1,2,2,1,2,0
+2,1,0,1,0,2,1,1,1,0,0,1,1,0,1,0,1,2,0,0,2,0,1
+0,1,0,1,1,1,2,2,0,1,1,1,0,0,0,1,0,1,0,0,2,2,1
+1,1,0,1,2,2,0,0,0,1,1,1,0,0,0,1,1,2,1,1,0,0,2
+2,1,0,1,0,0,1,1,0,1,1,1,0,0,0,1,2,0,2,2,1,1,0
+0,1,0,0,2,1,0,1,1,1,1,0,1,1,0,0,2,2,0,2,0,1,1
+1,1,0,0,0,2,1,2,1,1,1,0,1,1,0,0,0,0,1,0,1,2,2
+2,1,0,0,1,0,2,0,1,1,1,0,1,1,0,0,1,1,2,1,2,0,0
+0,1,1,1,2,1,1,1,0,0,0,0,1,1,0,1,0,0,2,1,2,0,2
+1,1,1,1,0,2,2,2,0,0,0,0,1,1,0,1,1,1,0,2,0,1,0
+2,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,2,2,1,0,1,2,1
+0,1,1,0,2,2,2,1,1,0,1,0,0,0,1,1,2,1,1,0,1,0,0
+1,1,1,0,0,0,0,2,1,0,1,0,0,0,1,1,0,2,2,1,2,1,1
+2,1,1,0,1,1,1,0,1,0,1,0,0,0,1,1,1,0,0,2,0,2,2
+0,1,1,0,2,0,1,2,0,1,0,1,0,1,1,0,1,2,0,1,1,2,0
+1,1,1,0,0,1,2,0,0,1,0,1,0,1,1,0,2,0,1,2,2,0,1
+2,1,1,0,1,2,0,1,0,1,0,1,0,1,1,0,0,1,2,0,0,1,2
diff --git a/input_data/oa_without_exp.csv b/input_data/oa_without_exp.csv
new file mode 100644
index 0000000..dec6a32
--- /dev/null
+++ b/input_data/oa_without_exp.csv
@@ -0,0 +1,3 @@
+X1,X2,X3,X4,X5,X6,X7,X8
+0,0,0,0,0,0,0,0
+,,,,,,,
\ No newline at end of file
diff --git a/input_data/xv_with_exp.csv b/input_data/xv_with_exp.csv
new file mode 100644
index 0000000..0730991
--- /dev/null
+++ b/input_data/xv_with_exp.csv
@@ -0,0 +1,5 @@
+n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,remove_t,netw_prf_n
+7,TRUE,TRUE,uniform,5,0.3,3,3
+5,FALSE,FALSE,normal,10,0.5,5,2
+3,,,,15,0.7,7,1
+,,
\ No newline at end of file
diff --git a/input_data/xv_without_exp.csv b/input_data/xv_without_exp.csv
new file mode 100644
index 0000000..b497255
--- /dev/null
+++ b/input_data/xv_without_exp.csv
@@ -0,0 +1,3 @@
+n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,remove_t,netw_prf_n
+5,TRUE,TRUE,uniform,10,0.5,5,2
+,,,,,,,
\ No newline at end of file
diff --git a/model.py b/model.py
index e12f4f7..9d9467d 100644
--- a/model.py
+++ b/model.py
@@ -1,22 +1,34 @@
import json
+from random import shuffle
import networkx as nx
import pandas as pd
from mesa import Model
-from mesa.time import RandomActivation
-from mesa.space import MultiGrid
+from mesa.space import MultiGrid, NetworkGrid
from mesa.datacollection import DataCollector
+from mesa.time import RandomActivation
from firm import FirmAgent
from product import ProductAgent
-from scheduler import CustomScheduler
class MyModel(Model):
def __init__(self, params):
- self.num_agents = params['N']
- self.grid = MultiGrid(params['width'], params['height'], True)
- self.schedule = CustomScheduler(self)
+ # self.num_agents = N
+
+ # NetworkX 图对象
+ self.t = 0
+ self.network_graph = nx.DiGraph()
+
+ # NetworkGrid 用于管理网格
+ self.grid = NetworkGrid(self.network_graph)
+
+ self.data_collector = DataCollector(
+ agent_reporters={"Product": "name"}
+ )
+ self.schedule = RandomActivation(self)
+ self.company_agents = []
+ self.product_agents = []
# Initialize parameters from `params`
self.sample = params['sample']
@@ -34,101 +46,202 @@ class MyModel(Model):
self.firm_network = None
self.firm_prod_network = None
- # Initialize product network
- G_bom = nx.adjacency_graph(json.loads(params['g_bom']))
- self.product_network = G_bom
-
- # Initialize firm network
+ self.initialize_product_network(params)
self.initialize_firm_network()
-
- # Initialize firm product network
- self.initialize_firm_prod_network()
-
- # Initialize agents
+ self.initialize_firm_product_network()
self.initialize_agents()
+ self.initialize_disruptions()
- # Data collector (if needed)
- self.datacollector = DataCollector(
- agent_reporters={"Product Code": "code"}
- )
+ def initialize_product_network(self, params):
+ """ Initialize the product network and add it to the model. """
+ self.product_network = nx.adjacency_graph(json.loads(params['g_bom']))
+ self.network_graph.add_edges_from(self.product_network.edges)
def initialize_firm_network(self):
- # Read firm data and initialize firm network
- firm = pd.read_csv("input_data/Firm_amended.csv")
- firm['Code'] = firm['Code'].astype('string')
- firm.fillna(0, inplace=True)
- firm_attr = firm[["Code", "Type_Region", "Revenue_Log"]]
- firm_product = []
- for _, row in firm.loc[:, '1':].iterrows():
- firm_product.append(row[row == 1].index.to_list())
- firm_attr['Product_Code'] = firm_product
- firm_attr.set_index('Code', inplace=True)
- G_Firm = nx.MultiDiGraph()
- G_Firm.add_nodes_from(firm["Code"])
+ """ Initialize the firm network and add it to the model. """
+ Firm = pd.read_csv("input_data/Firm_amended.csv")
+ Firm['Code'] = Firm['Code'].astype('string')
+ Firm.fillna(0, inplace=True)
+ Firm_attr = Firm.loc[:, ["Code", "Type_Region", "Revenue_Log"]]
+ firm_product = [row[row == 1].index.to_list() for _, row in Firm.loc[:, '1':].iterrows()]
+ Firm_attr.loc[:, 'Product_Code'] = firm_product
+ Firm_attr.set_index('Code', inplace=True)
- # Add node attributes
- firm_labels_dict = {}
- for code in G_Firm.nodes:
- firm_labels_dict[code] = firm_attr.loc[code].to_dict()
- nx.set_node_attributes(G_Firm, firm_labels_dict)
+ self.firm_network = nx.MultiDiGraph()
+ self.firm_network.add_nodes_from(Firm["Code"])
- # Add edges based on BOM graph
- self.add_edges_based_on_bom(G_Firm)
+ firm_labels_dict = {code: Firm_attr.loc[code].to_dict() for code in self.firm_network.nodes}
+ nx.set_node_attributes(self.firm_network, firm_labels_dict)
- self.firm_network = G_Firm
-
- def initialize_firm_prod_network(self):
- # Read firm product data and initialize firm product network
- firm_prod = pd.read_csv("input_data/Firm_amended.csv")
- firm_prod.fillna(0, inplace=True)
- firm_prod = pd.DataFrame({'bool': firm_prod.loc[:, '1':].stack()})
+ def initialize_firm_product_network(self):
+ """ Initialize the firm-product network and add it to the model. """
+ Firm_Prod = pd.read_csv("input_data/Firm_amended.csv")
+ Firm_Prod.fillna(0, inplace=True)
+ firm_prod = pd.DataFrame({'bool': Firm_Prod.loc[:, '1':].stack()})
firm_prod = firm_prod[firm_prod['bool'] == 1].reset_index()
firm_prod.drop('bool', axis=1, inplace=True)
firm_prod.rename({'level_0': 'Firm_Code', 'level_1': 'Product_Code'}, axis=1, inplace=True)
firm_prod['Firm_Code'] = firm_prod['Firm_Code'].astype('string')
- G_FirmProd = nx.MultiDiGraph()
- G_FirmProd.add_nodes_from(firm_prod.index)
+ self.firm_prod_network = nx.MultiDiGraph()
+ self.firm_prod_network.add_nodes_from(firm_prod.index)
- # Add node attributes
- firm_prod_labels_dict = {}
- for code in firm_prod.index:
- firm_prod_labels_dict[code] = firm_prod.loc[code].to_dict()
- nx.set_node_attributes(G_FirmProd, firm_prod_labels_dict)
+ firm_prod_labels_dict = {code: firm_prod.loc[code].to_dict() for code in firm_prod.index}
+ nx.set_node_attributes(self.firm_prod_network, firm_prod_labels_dict)
- self.firm_prod_network = G_FirmProd
+ self.add_edges_to_firm_network()
+ self.connect_unconnected_nodes()
- def add_edges_based_on_bom(self, G_Firm):
- # Logic to add edges to the G_Firm graph based on BOM
- pass
+ def add_edges_to_firm_network(self):
+ """ Add edges to the firm network based on product BOM. """
+ Firm = pd.read_csv("input_data/Firm_amended.csv")
+ Firm['Code'] = Firm['Code'].astype('string')
+ Firm.fillna(0, inplace=True)
+ for node in nx.nodes(self.firm_network):
+ lst_pred_product_code = []
+ for product_code in self.firm_network.nodes[node]['Product_Code']:
+ lst_pred_product_code += list(self.product_network.predecessors(product_code))
+ lst_pred_product_code = list(set(lst_pred_product_code))
+ lst_pred_product_code = list(sorted(lst_pred_product_code))
+
+ for pred_product_code in lst_pred_product_code:
+ lst_pred_firm = Firm['Code'][Firm[pred_product_code] == 1].to_list()
+ n_pred_firm = self.int_netw_prf_n
+ if n_pred_firm > len(lst_pred_firm):
+ n_pred_firm = len(lst_pred_firm)
+ if self.is_prf_size:
+ lst_pred_firm_size = [self.firm_network.nodes[pred_firm]['Revenue_Log'] for pred_firm in
+ lst_pred_firm]
+ lst_prob = [size / sum(lst_pred_firm_size) for size in lst_pred_firm_size]
+ lst_choose_firm = self.random.choices(lst_pred_firm, k=n_pred_firm, weights=lst_prob)
+ else:
+ lst_choose_firm = self.random.choices(lst_pred_firm, k=n_pred_firm)
+ lst_add_edge = [(pred_firm, node, {'Product': pred_product_code}) for pred_firm in lst_choose_firm]
+ self.firm_network.add_edges_from(lst_add_edge)
+
+ # Add edges to firm-prod network
+ set_node_prod_code = set(self.firm_network.nodes[node]['Product_Code'])
+ set_pred_succ_code = set(self.product_network.successors(pred_product_code))
+ lst_use_pred_prod_code = list(set_node_prod_code & set_pred_succ_code)
+
+ for pred_firm in lst_choose_firm:
+ pred_node = [n for n, v in self.firm_prod_network.nodes(data=True) if
+ v['Firm_Code'] == pred_firm and v['Product_Code'] == pred_product_code][0]
+ for use_pred_prod_code in lst_use_pred_prod_code:
+ current_node = [n for n, v in self.firm_prod_network.nodes(data=True) if
+ v['Firm_Code'] == node and v['Product_Code'] == use_pred_prod_code][0]
+ self.firm_prod_network.add_edge(pred_node, current_node)
+
+ def connect_unconnected_nodes(self):
+ """ Connect unconnected nodes in the firm network. """
+ Firm = pd.read_csv("input_data/Firm_amended.csv")
+ Firm['Code'] = Firm['Code'].astype('string')
+ Firm.fillna(0, inplace=True)
+ for node in nx.nodes(self.firm_network):
+ if self.firm_network.degree(node) == 0:
+ for product_code in self.firm_network.nodes[node]['Product_Code']:
+ current_node = [n for n, v in self.firm_prod_network.nodes(data=True) if
+ v['Firm_Code'] == node and v['Product_Code'] == product_code][0]
+ lst_succ_product_code = list(self.product_network.successors(product_code))
+ for succ_product_code in lst_succ_product_code:
+ lst_succ_firm = Firm['Code'][Firm[succ_product_code] == 1].to_list()
+ n_succ_firm = self.int_netw_prf_n
+ if n_succ_firm > len(lst_succ_firm):
+ n_succ_firm = len(lst_succ_firm)
+ if self.is_prf_size:
+ lst_succ_firm_size = [self.firm_network.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]
+ lst_choose_firm = self.random.choices(lst_succ_firm, k=n_succ_firm, weights=lst_prob)
+ else:
+ lst_choose_firm = self.random.choices(lst_succ_firm, k=n_succ_firm)
+ lst_add_edge = [(node, succ_firm, {'Product': product_code}) for succ_firm in lst_choose_firm]
+ self.firm_network.add_edges_from(lst_add_edge)
+
+ for succ_firm in lst_choose_firm:
+ succ_node = [n for n, v in self.firm_prod_network.nodes(data=True) if
+ v['Firm_Code'] == succ_firm and v['Product_Code'] == succ_product_code][0]
+ self.firm_prod_network.add_edge(current_node, succ_node)
def initialize_agents(self):
- # Initialize product and firm agents
- for node, attr in self.product_network.nodes(data=True):
- product = ProductAgent(node, self, code=node, name=attr['Name'])
+ """ Initialize agents and add them to the model. """
+ for ag_node, attr in self.product_network.nodes(data=True):
+ product = ProductAgent(ag_node, self,code=attr['code'], name=attr['Name'])
self.schedule.add(product)
+ self.grid.place_agent(product, ag_node)
- for node, attr in self.firm_network.nodes(data=True):
+ for ag_node, attr in self.firm_network.nodes(data=True):
firm_agent = FirmAgent(
- node,
- self,
- code=node,
+ ag_node, self,
+ code=attr['Code'],
type_region=attr['Type_Region'],
revenue_log=attr['Revenue_Log'],
- a_lst_product=[] # Populate based on products
+ a_lst_product=[self.schedule.agents[code] for code in attr['Product_Code']]
)
self.schedule.add(firm_agent)
-
- # Initialize disruptions
- self.initialize_disruptions()
+ self.grid.place_agent(firm_agent, ag_node)
def initialize_disruptions(self):
- # Set the initial firm product disruptions
- for firm, products in self.dct_lst_init_disrupt_firm_prod.items():
- for product in products:
- if isinstance(firm, FirmAgent):
- firm.dct_prod_up_prod_stat[product]['p_stat'].append(('D', self.schedule.steps))
+ """ Initialize disruptions in the network. """
+ for firm_code, lst_product in self.dct_lst_init_disrupt_firm_prod.items():
+ for product_code in lst_product:
+ self.firm_network.nodes[firm_code]['Product_Code'].remove(product_code)
+
+ # Log disruptions for visualization
+ self.dct_lst_init_disrupt_firm_prod[firm_code].append(product_code)
+
+ def add_agent(self, agent):
+ if isinstance(agent, FirmAgent):
+ self.company_agents.append(agent)
+ elif isinstance(agent, ProductAgent):
+ self.product_agents.append(agent)
+ self.schedule.add(agent)
def step(self):
- self.schedule.step()
- self.datacollector.collect(self)
+ # 1. Remove edge to customer and disrupt customer up product
+ for firm in self.company_agents:
+ for prod in firm.dct_prod_up_prod_stat.keys():
+ 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(prod)
+
+ for firm in self.company_agents:
+ 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]['set_disrupt_firm']:
+ firm.disrupt_cus_prod(prod, up_prod)
+
+ # 2. Trial Process
+ for n_trial in range(self.int_n_max_trial):
+ shuffle(self.company_agents) # 手动打乱代理顺序
+
+ is_stop_trial = True
+ for firm in self.company_agents:
+ lst_seek_prod = []
+ for prod in firm.dct_prod_up_prod_stat.keys():
+ 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]['s_stat'].keys():
+ if not firm.dct_prod_up_prod_stat[prod]['s_stat'][supply]['stat']:
+ lst_seek_prod.append(supply)
+ lst_seek_prod = list(set(lst_seek_prod))
+ if len(lst_seek_prod) > 0:
+ is_stop_trial = False
+ for supply in lst_seek_prod:
+ firm.seek_alt_supply(supply)
+ if is_stop_trial:
+ break
+
+ # Handle requests
+ shuffle(self.company_agents) # 手动打乱代理顺序
+ for firm in self.company_agents:
+ if len(firm.dct_request_prod_from_firm) > 0:
+ firm.handle_request()
+
+ # Reset dct_request_prod_from_firm
+ for firm in self.company_agents:
+ firm.clean_before_trial()
+
+ # Increment the time step
+ self.t += 1
+ self.schedule.step() # Activate all agents in the scheduler
diff --git a/scheduler.py b/scheduler.py
deleted file mode 100644
index 4ee2611..0000000
--- a/scheduler.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from mesa.time import BaseScheduler
-
-from firm import FirmAgent
-from product import ProductAgent
-
-
-class CustomScheduler(BaseScheduler):
- def __init__(self, model):
- super().__init__(model)
- self.company_agents = []
- self.product_agents = []
-
- def add_agent(self, agent):
- if isinstance(agent, FirmAgent):
- self.company_agents.append(agent)
- elif isinstance(agent, ProductAgent):
- self.product_agents.append(agent)
- super().add_agent(agent)
-
- def step(self):
- # First, activate all company agents
- for agent in self.company_agents:
- agent.step()
-
- # Then, activate all product agents
- for agent in self.product_agents:
- agent.step()