10.09添加git
|
|
@ -0,0 +1,3 @@
|
||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
|
@ -0,0 +1,219 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CsvFileAttributes">
|
||||||
|
<option name="attributeMap">
|
||||||
|
<map>
|
||||||
|
<entry key="C:\Users\www\Desktop\python项目\数据\抽样第3次数据\firm_amended.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\device_salvage_values.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\firm_industry_relation.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_firm_data\Firm_amended.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_firm_data\firm_amended.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_firm_data\firms_devices.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_firm_data\firms_materials.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_firm_data\firms_products.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\BomCateNet.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\BomNodes.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\products_consumed_materials.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\products_materials_equipment.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\products_produced_products.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\input_product_data\合成结点.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\material_device_product_ids.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\oa_with_exp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\oa_without_exp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\xv_with_exp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\xv_without_exp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\input_data\产品消耗制造比例.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\resilience\Result_3.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\resilience\anova.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\resilience\anova_visualization.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\resilience\experiment_result.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count_dcp.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count_dcp_prod.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count_firm.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count_firm_prod.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="\output_result\risk\count_prod.csv">
|
||||||
|
<value>
|
||||||
|
<Attribute>
|
||||||
|
<option name="separator" value="," />
|
||||||
|
</Attribute>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="dataSourceStorageLocal" created-in="PY-242.23726.102">
|
||||||
|
<data-source name="iiabmdb_20250925@localhost" uuid="753dde79-ca3d-42e1-8fb4-13124f46b86d">
|
||||||
|
<database-info product="MySQL" version="8.0.36" jdbc-version="4.2" driver-name="Amazon Web Services (AWS) Advanced JDBC Wrapper" driver-version="Amazon Web Services (AWS) Advanced JDBC Wrapper 2.3.7 ( Revision: 7591851e8da4e1c705ba232a8bd07824a5cfd276 )" dbms="MYSQL" exact-version="8.0.36" exact-driver-version="2.3">
|
||||||
|
<extra-name-characters>#@</extra-name-characters>
|
||||||
|
<identifier-quote-string>`</identifier-quote-string>
|
||||||
|
</database-info>
|
||||||
|
<case-sensitivity plain-identifiers="lower" quoted-identifiers="lower" />
|
||||||
|
<secret-storage>master_key</secret-storage>
|
||||||
|
<user-name>iiabm_user</user-name>
|
||||||
|
<schema-mapping>
|
||||||
|
<introspection-scope>
|
||||||
|
<node kind="schema" qname="@" />
|
||||||
|
</introspection-scope>
|
||||||
|
</schema-mapping>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
|
<data-source source="LOCAL" name="iiabmdb_20250925@localhost" uuid="753dde79-ca3d-42e1-8fb4-13124f46b86d">
|
||||||
|
<driver-ref>mysql_aurora.aws_wrapper</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>software.amazon.jdbc.Driver</jdbc-driver>
|
||||||
|
<jdbc-url>jdbc:aws-wrapper:mysql://localhost:3306/iiabmdb_20250925</jdbc-url>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
#n:iiabmdb_20250925
|
||||||
|
!<md> [0, 0, null, null, -2147483648, -2147483648]
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DeveloperToolsToolWindowSettingsV1" lastSelectedContentNodeId="base64-encoder-decoder">
|
||||||
|
<developerToolsConfigurations />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/input_data/input_firm_data/firm_amended.csv" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/output_result/resilience/anova_visualization.csv" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/查看进度.py" charset="GBK" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.8" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/mesa.iml" filepath="$PROJECT_DIR$/.idea/mesa.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="SqlDialectMappings">
|
||||||
|
<file url="file://$PROJECT_DIR$/SQL_analysis_experiment.sql" dialect="MySQL" />
|
||||||
|
<file url="file://$PROJECT_DIR$/SQL_analysis_risk.sql" dialect="MySQL" />
|
||||||
|
<file url="file://$PROJECT_DIR$/SQL_db_user_create.sql" dialect="MySQL" />
|
||||||
|
<file url="file://$PROJECT_DIR$/SQL_export_high_risk_setting.sql" dialect="MySQL" />
|
||||||
|
<file url="file://$PROJECT_DIR$/SQL_migrate_db.sql" dialect="MySQL" />
|
||||||
|
<file url="file://$PROJECT_DIR$/iiabmdb_basic_info.sql" dialect="MySQL" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import pickle
|
||||||
|
import os
|
||||||
|
|
||||||
|
from 查看进度 import visualize_progress
|
||||||
|
|
||||||
|
|
||||||
|
def load_cached_data(file_path):
|
||||||
|
"""
|
||||||
|
从指定的缓存文件加载数据。
|
||||||
|
如果文件不存在或加载失败,则返回空字典。
|
||||||
|
"""
|
||||||
|
if not os.path.exists(file_path):
|
||||||
|
print(f"Warning: Cache file '{file_path}' does not exist.")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file_path, 'rb') as f:
|
||||||
|
data = pickle.load(f)
|
||||||
|
print(f"Successfully loaded cache from '{file_path}'.")
|
||||||
|
return data
|
||||||
|
except (pickle.UnpicklingError, FileNotFoundError, EOFError) as e:
|
||||||
|
print(f"Error loading cache from '{file_path}': {e}")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
# 示例用法
|
||||||
|
# data_dct = load_cached_data("G_Firm_add_edges.pkl")
|
||||||
|
|
||||||
|
visualize_progress()
|
||||||
|
|
@ -0,0 +1,329 @@
|
||||||
|
# -*- coding: utf-8 -*- # 文件的编码格式设置为 UTF-8
|
||||||
|
from __future__ import division # 为了兼容 Python 2 和 3,保证除法始终返回浮点数
|
||||||
|
|
||||||
|
import random # 导入 random 库,用于生成随机数
|
||||||
|
|
||||||
|
from deap import base # 从 DEAP 库导入 base 模块,提供一些遗传算法相关的功能
|
||||||
|
from deap import creator # 从 DEAP 库导入 creator 模块,用于定义个体和适应度
|
||||||
|
from deap import tools # 从 DEAP 库导入 tools 模块,提供常用的遗传算法工具(如交叉、变异等)
|
||||||
|
|
||||||
|
from my_model import MyModel
|
||||||
|
from sqlalchemy import text
|
||||||
|
import pandas as pd
|
||||||
|
from orm import connection
|
||||||
|
# 目标函数(适应度函数),用于评估个体的适应度
|
||||||
|
def fitness(individual):
|
||||||
|
"""
|
||||||
|
GA 适应度函数:用于评估个体(模型参数)的效果。
|
||||||
|
|
||||||
|
目标:
|
||||||
|
- individual: 遗传算法中的个体参数列表
|
||||||
|
[n_max_trial, prf_size, prf_conn, cap_limit_prob_type, cap_limit_level,
|
||||||
|
diff_new_conn, netw_prf_n, s_r, S_r, x, k, production_increase_ratio]
|
||||||
|
- target_chain_set: 美国打击的产业链编号集合(整数集合)
|
||||||
|
|
||||||
|
适应度定义:
|
||||||
|
- fitness = -error
|
||||||
|
- error = 脆弱产业集合与 target_chain_set 的差集大小
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 1 将 GA 生成的个体参数传入 ABM 模型
|
||||||
|
"""
|
||||||
|
n_iter
|
||||||
|
g_bom
|
||||||
|
seed
|
||||||
|
sample
|
||||||
|
dct_lst_init_disrupt_firm_prod
|
||||||
|
remove_t
|
||||||
|
"""
|
||||||
|
dct_exp = {
|
||||||
|
'n_max_trial': individual[0],
|
||||||
|
'prf_size': individual[1],
|
||||||
|
'prf_conn': individual[2],
|
||||||
|
'cap_limit_prob_type': individual[3],
|
||||||
|
'cap_limit_level': individual[4],
|
||||||
|
'diff_new_conn': individual[5],
|
||||||
|
'netw_prf_n': individual[6],
|
||||||
|
's_r': individual[7],
|
||||||
|
'S_r': individual[8],
|
||||||
|
'x': individual[9],
|
||||||
|
'k': individual[10],
|
||||||
|
'production_increase_ratio': individual[11]
|
||||||
|
}
|
||||||
|
|
||||||
|
abm_model = MyModel(**dct_exp)
|
||||||
|
|
||||||
|
# 2 运行 ABM,获取模拟结果的“脆弱产业集合”
|
||||||
|
abm_model.step()
|
||||||
|
abm_model.end()
|
||||||
|
|
||||||
|
simulated_vulnerable_industries=get_vulnerable100_code(connection)
|
||||||
|
# 3 获取目标集合(美国打击我们的产业集合)
|
||||||
|
target_vulnerable_industries = get_target_vulnerable_industries() # list / set
|
||||||
|
|
||||||
|
# 4 计算误差(集合差异度)
|
||||||
|
# 这里可以用 Jaccard 距离、集合交并比、或者简单的匹配数差
|
||||||
|
set_sim = set(simulated_vulnerable_industries)
|
||||||
|
set_target = set(target_vulnerable_industries)
|
||||||
|
|
||||||
|
error = len(set_sim.symmetric_difference(set_target)) # 差异元素个数
|
||||||
|
|
||||||
|
# 5 返回 fitness(GA 目标是最大化)
|
||||||
|
# 因为我们希望误差越小越好,所以 fitness = -error
|
||||||
|
return -error,
|
||||||
|
|
||||||
|
def creating():
|
||||||
|
"""
|
||||||
|
创建遗传算法工具箱,用于优化 ABM 模型参数,使生成的脆弱产业集合
|
||||||
|
与目标产业集合误差最小化(fitness 最大化)。
|
||||||
|
"""
|
||||||
|
# 定义最大化适应度
|
||||||
|
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
|
||||||
|
# 定义个体类
|
||||||
|
creator.create("Individual", list, fitness=creator.FitnessMax)
|
||||||
|
|
||||||
|
toolbox = base.Toolbox()
|
||||||
|
|
||||||
|
# 定义每个基因的取值范围 / 类型及默认值
|
||||||
|
toolbox.register("n_max_trial", random.randint, 50, 500) # 最大尝试次数 [50,500]
|
||||||
|
toolbox.register("prf_size", random.uniform, 0.0, 1.0) # 是否规模偏好参数 [0,1]
|
||||||
|
toolbox.register("prf_conn", random.uniform, 0.0, 1.0) # 是否已有连接偏好 [0,1]
|
||||||
|
toolbox.register("cap_limit_prob_type", random.randint, 0, 2) # 额外产能分布类型 {0:正态,1:均匀,2:指数}
|
||||||
|
toolbox.register("cap_limit_level", random.uniform, 0.5, 2.0) # 额外产能均值放缩因子 [0.5,2.0]
|
||||||
|
toolbox.register("diff_new_conn", random.uniform, 0.0, 1.0) # 新供应关系构成概率 [0,1]
|
||||||
|
toolbox.register("netw_prf_n", random.randint, 1, 10) # 在网络中选择供应商目标数量 [1,10]
|
||||||
|
toolbox.register("s_r", random.uniform, 0.1, 0.5) # 补货下阈值 [0.1,0.5]
|
||||||
|
toolbox.register("S_r", random.uniform, 0.5, 1.0) # 补货上阈值 [0.5,1.0]
|
||||||
|
toolbox.register("x", random.uniform, 0.0, 0.1) # 每周期减少残值 [0.0,0.1]
|
||||||
|
toolbox.register("k", random.uniform, 0.1, 1.0) # 资源消耗比例 [0.1,1.0]
|
||||||
|
toolbox.register("production_increase_ratio", random.uniform, 0.5, 2.0) # 产品生产比例 [0.5,2.0]
|
||||||
|
|
||||||
|
# 个体由上述基因组成
|
||||||
|
toolbox.register(
|
||||||
|
"individual",
|
||||||
|
tools.initCycle,
|
||||||
|
creator.Individual,
|
||||||
|
(
|
||||||
|
toolbox.n_max_trial,
|
||||||
|
toolbox.prf_size,
|
||||||
|
toolbox.prf_conn,
|
||||||
|
toolbox.cap_limit_prob_type,
|
||||||
|
toolbox.cap_limit_level,
|
||||||
|
toolbox.diff_new_conn,
|
||||||
|
toolbox.netw_prf_n,
|
||||||
|
toolbox.s_r,
|
||||||
|
toolbox.S_r,
|
||||||
|
toolbox.x,
|
||||||
|
toolbox.k,
|
||||||
|
toolbox.production_increase_ratio
|
||||||
|
),
|
||||||
|
n=1
|
||||||
|
)
|
||||||
|
|
||||||
|
# 种群初始化
|
||||||
|
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
|
||||||
|
|
||||||
|
# 注册 fitness 函数(需要在调用时传入目标产业集合)
|
||||||
|
# toolbox.register("evaluate", fitness) # 可以在 main 中使用 lambda 包装 target_chain_set
|
||||||
|
|
||||||
|
# 交叉、变异和选择操作
|
||||||
|
toolbox.register("mate", tools.cxTwoPoint)
|
||||||
|
toolbox.register("mutate", tools.mutShuffleIndexes, indpb=0.1)
|
||||||
|
toolbox.register("select", tools.selTournament, tournsize=3)
|
||||||
|
|
||||||
|
return toolbox
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# 创建遗传算法的工具箱
|
||||||
|
ga = creating()
|
||||||
|
|
||||||
|
# 初始化种群大小为 50
|
||||||
|
pop = ga.population(n=50)
|
||||||
|
|
||||||
|
# 交叉概率、变异概率和代数
|
||||||
|
CXPB, MUTPB, NGEN = 0.5, 0.2, 500
|
||||||
|
|
||||||
|
print("Start of evolution")
|
||||||
|
|
||||||
|
# 评估整个种群的适应度
|
||||||
|
fitnesses = list(map(ga.evaluate, pop))
|
||||||
|
for ind, fit in zip(pop, fitnesses):
|
||||||
|
ind.fitness.values = fit
|
||||||
|
|
||||||
|
print(" Evaluated %i individuals" % len(pop))
|
||||||
|
# my_sql = Sql() # 创建 Sql 类的实例,用于与数据库交互
|
||||||
|
|
||||||
|
# 开始演化
|
||||||
|
for g in range(NGEN):
|
||||||
|
print("-- Generation %i --" % g)
|
||||||
|
|
||||||
|
# 选择下一代的个体
|
||||||
|
offspring = ga.select(pop, len(pop))
|
||||||
|
# 克隆选择的个体
|
||||||
|
offspring = list(map(ga.clone, offspring))
|
||||||
|
|
||||||
|
# 对后代进行交叉和变异
|
||||||
|
for child1, child2 in zip(offspring[::2], offspring[1::2]):
|
||||||
|
# 以 CXPB 的概率交叉两个个体
|
||||||
|
if random.random() < CXPB:
|
||||||
|
ga.mate(child1, child2)
|
||||||
|
|
||||||
|
# 交叉后的适应度值需要重新计算
|
||||||
|
del child1.fitness.values
|
||||||
|
del child2.fitness.values
|
||||||
|
|
||||||
|
for mutant in offspring:
|
||||||
|
# 以 MUTPB 的概率变异个体
|
||||||
|
if random.random() < MUTPB:
|
||||||
|
ga.mutate(mutant)
|
||||||
|
del mutant.fitness.values
|
||||||
|
|
||||||
|
# 评估适应度无效的个体
|
||||||
|
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
|
||||||
|
fitnesses = map(ga.evaluate, invalid_ind)
|
||||||
|
for ind, fit in zip(invalid_ind, fitnesses):
|
||||||
|
ind.fitness.values = fit
|
||||||
|
|
||||||
|
print(" Evaluated %i individuals" % len(invalid_ind))
|
||||||
|
|
||||||
|
# 将种群完全替换为后代
|
||||||
|
pop[:] = offspring
|
||||||
|
|
||||||
|
# 收集所有个体的适应度并打印统计信息
|
||||||
|
fits = [ind.fitness.values[0] for ind in pop]
|
||||||
|
|
||||||
|
# 获取当前最好的个体并打印
|
||||||
|
best_ind = tools.selBest(pop, 1)[0]
|
||||||
|
print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values))
|
||||||
|
|
||||||
|
# 将最优个体的信息插入数据库
|
||||||
|
result_string = '''INSERT INTO ga (generation, stu_beta, stu_nmb, gtu_mgf, gtu_discount, fitness, remark)
|
||||||
|
VALUES ({}, {}, {}, {}, {}, {}, 'Random2')'''.format(g, best_ind[0], best_ind[1], best_ind[2], best_ind[3], best_ind.fitness.values[0])
|
||||||
|
# my_sql.insert_one_row_and_return_new_id(result_string)
|
||||||
|
|
||||||
|
print("-- End of (successful) evolution --")
|
||||||
|
|
||||||
|
def get_target_vulnerable_industries():
|
||||||
|
"""
|
||||||
|
获取行业列表中所有产业链编号的集合(整数形式)。
|
||||||
|
说明:
|
||||||
|
- 输入的 industry_list 是一个字典列表,每个字典包含:
|
||||||
|
{"product": 产品名称, "category": 产品类别, "chain_id": 产业链编号}
|
||||||
|
- 某些 chain_id 可能是复合编号,例如 "11 / 513742",需要拆分成单独整数。
|
||||||
|
- 输出是一个 set,包含所有 chain_id(去重、整数形式)。
|
||||||
|
|
||||||
|
参数:
|
||||||
|
industry_list : list of dict
|
||||||
|
行业字典列表,每个字典必须包含 "chain_id" 键。
|
||||||
|
|
||||||
|
返回:
|
||||||
|
set
|
||||||
|
所有产业链编号的整数集合。
|
||||||
|
"""
|
||||||
|
industry_list = [
|
||||||
|
# ① 半导体设备类
|
||||||
|
{"product": "离子注入机", "category": "离子注入设备", "chain_id": 34538},
|
||||||
|
{"product": "刻蚀设备 / 湿法刻蚀设备", "category": "刻蚀机", "chain_id": 34529},
|
||||||
|
{"product": "沉积设备", "category": "薄膜生长设备(CVD/PVD)", "chain_id": 34539},
|
||||||
|
{"product": "CVD", "category": "薄膜生长设备", "chain_id": 34539},
|
||||||
|
{"product": "PVD", "category": "薄膜生长设备", "chain_id": 34539},
|
||||||
|
{"product": "CMP", "category": "化学机械抛光设备", "chain_id": 34530},
|
||||||
|
{"product": "光刻机", "category": "光刻机", "chain_id": 34533},
|
||||||
|
{"product": "涂胶显影机", "category": "涂胶显影设备", "chain_id": 34535},
|
||||||
|
{"product": "晶圆清洗设备", "category": "晶圆清洗机", "chain_id": 34531},
|
||||||
|
{"product": "测试设备", "category": "测试机", "chain_id": 34554},
|
||||||
|
{"product": "外延生长设备", "category": "薄膜生长设备", "chain_id": 34539},
|
||||||
|
|
||||||
|
# ② 半导体材料与化学品类
|
||||||
|
{"product": "三氯乙烯", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438},
|
||||||
|
{"product": "丙酮", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438},
|
||||||
|
{"product": "异丙醇", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438},
|
||||||
|
{"product": "其他醇类", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438},
|
||||||
|
{"product": "光刻胶", "category": "光刻胶及配套试剂", "chain_id": 32445},
|
||||||
|
{"product": "显影液", "category": "显影液", "chain_id": 46504},
|
||||||
|
{"product": "蚀刻液", "category": "蚀刻液", "chain_id": 56341},
|
||||||
|
{"product": "光阻去除剂", "category": "光阻去除剂", "chain_id": 32442},
|
||||||
|
|
||||||
|
# ③ 晶圆制造类
|
||||||
|
{"product": "晶圆", "category": "单晶硅片 / 多晶硅片", "chain_id": 32338},
|
||||||
|
{"product": "硅衬底", "category": "硅衬底", "chain_id": 36914},
|
||||||
|
{"product": "外延片", "category": "硅外延片 / GaN外延片 / SiC外延片等", "chain_id": 32338},
|
||||||
|
|
||||||
|
# ④ 封装与测试类
|
||||||
|
{"product": "封装", "category": "IC封装", "chain_id": 10},
|
||||||
|
{"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 513742},
|
||||||
|
{"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 11},
|
||||||
|
|
||||||
|
# ⑤ 芯片与设计EDA类
|
||||||
|
{"product": "芯片(通用)", "category": "集成电路制造", "chain_id": 317589},
|
||||||
|
{"product": "DRAM", "category": "存储芯片 → 集成电路制造", "chain_id": 317589},
|
||||||
|
{"product": "GPU", "category": "图形芯片 → 集成电路制造", "chain_id": 317589},
|
||||||
|
{"product": "处理器(CPU/SoC)", "category": "芯片设计", "chain_id": 9},
|
||||||
|
{"product": "高频芯片", "category": "芯片设计", "chain_id": 9},
|
||||||
|
{"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 9},
|
||||||
|
{"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 2717},
|
||||||
|
{"product": "先进节点制造设备", "category": "集成电路制造", "chain_id": 317589},
|
||||||
|
{"product": "EDA及IP服务", "category": "设计辅助", "chain_id": 2515},
|
||||||
|
{"product": "MPW服务", "category": "多项目晶圆流片", "chain_id": 2514},
|
||||||
|
{"product": "芯片设计验证", "category": "设计验证", "chain_id": 513738},
|
||||||
|
{"product": "过程工艺检测", "category": "制程检测", "chain_id": 513740}
|
||||||
|
]
|
||||||
|
# 提取所有 chain_id,并去重
|
||||||
|
chain_ids = set()
|
||||||
|
for item in industry_list:
|
||||||
|
# 如果 chain_id 是字符串包含多个编号,用逗号或斜杠拆分
|
||||||
|
if isinstance(item["chain_id"], str):
|
||||||
|
for cid in item["chain_id"].replace("/", ",").split(","):
|
||||||
|
chain_ids.add(cid.strip())
|
||||||
|
else:
|
||||||
|
chain_ids.add(str(item["chain_id"]))
|
||||||
|
|
||||||
|
return chain_ids
|
||||||
|
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
from sqlalchemy import text # 用于 SQL 查询
|
||||||
|
|
||||||
|
|
||||||
|
def get_vulnerable100_code(connection):
|
||||||
|
"""
|
||||||
|
计算最脆弱前100产品的 Code 列表(去重)。
|
||||||
|
参数:
|
||||||
|
connection: 数据库连接对象,用于执行 SQL
|
||||||
|
返回:
|
||||||
|
List[int]: 最脆弱前100产品对应的 Code 列表
|
||||||
|
"""
|
||||||
|
# 读取映射表
|
||||||
|
bom_file = r"../input_data/input_product_data/BomNodes.csv" # 直接给出路径
|
||||||
|
mapping_df = pd.read_csv(bom_file)
|
||||||
|
|
||||||
|
# 执行 SQL 获取结果
|
||||||
|
with open("../SQL_analysis_risk.sql", "r", encoding="utf-8") as f:
|
||||||
|
str_sql = text(f.read())
|
||||||
|
|
||||||
|
result = pd.read_sql(sql=str_sql, con=connection)
|
||||||
|
|
||||||
|
# 统计每个 (id_firm, id_product) 出现次数
|
||||||
|
count_firm_prod = result.value_counts(subset=['id_firm', 'id_product'])
|
||||||
|
count_firm_prod.name = 'count'
|
||||||
|
count_firm_prod = count_firm_prod.to_frame().reset_index()
|
||||||
|
|
||||||
|
# 统计每个 id_product 的总 count
|
||||||
|
count_prod = (
|
||||||
|
count_firm_prod
|
||||||
|
.groupby("id_product")["count"]
|
||||||
|
.sum()
|
||||||
|
.reset_index()
|
||||||
|
)
|
||||||
|
|
||||||
|
# 按 count 升序取最脆弱前100 id_product
|
||||||
|
vulnerable100_index = count_prod.nsmallest(100, "count")["id_product"].tolist()
|
||||||
|
|
||||||
|
# 映射 Index -> Code 并去重
|
||||||
|
index_to_code = dict(zip(mapping_df["Index"], mapping_df["Code"]))
|
||||||
|
vulnerable100_code = list({index_to_code[i] for i in vulnerable100_index if i in index_to_code})
|
||||||
|
|
||||||
|
return vulnerable100_code
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
import numpy as np # 引入NumPy库,用于高效的数值计算
|
||||||
|
from pySOT.utils import round_vars # 引入用于四舍五入的函数
|
||||||
|
from typing import TYPE_CHECKING # 引入类型检查工具
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from policy import Policy
|
||||||
|
|
||||||
|
class GeneticAlgorithm: # 定义一个遗传算法类
|
||||||
|
def __init__(self, the_policy: 'Policy'): # 初始化方法,接收一个 Policy 对象
|
||||||
|
self.n_variables = the_policy.dim # 从 policy 中获取问题的维度
|
||||||
|
self.lower_boundary = the_policy.lb # 获取决策变量的下界
|
||||||
|
self.upper_boundary = the_policy.ub # 获取决策变量的上界
|
||||||
|
self.integer_variables = the_policy.int_var # 获取整数变量的索引
|
||||||
|
|
||||||
|
self.sigma = 0.2 # 设置变异操作的标准差
|
||||||
|
self.p_mutation = 1.0 / the_policy.dim # 设置变异概率
|
||||||
|
self.tournament_size = 5 # 设置锦标赛选择的大小
|
||||||
|
self.p_cross = 0.9 # 设置交叉概率
|
||||||
|
|
||||||
|
pop_size = the_policy.arr_init_doe_points.shape[0] # 获取种群大小
|
||||||
|
self.lst_value = the_policy.lst_y_init_doe_points # 初始化每个个体的适应度值
|
||||||
|
|
||||||
|
# 如果种群大小是奇数,生成一个随机个体来确保种群大小是偶数
|
||||||
|
if pop_size % 2 == 1:
|
||||||
|
arr_random = np.random.rand(1, self.n_variables) # 生成一个随机的个体
|
||||||
|
arr_one_random = self.lower_boundary + arr_random * (self.upper_boundary - self.lower_boundary) # 将随机个体约束在边界内
|
||||||
|
self.lst_value.append(the_policy.eval(arr_one_random[0, :], is_init_points=True)) # 评估该个体的适应度
|
||||||
|
self.population = np.vstack((the_policy.arr_init_doe_points, arr_one_random)) # 将该个体加入到种群中
|
||||||
|
else:
|
||||||
|
self.population = np.copy(the_policy.arr_init_doe_points) # 直接使用初始种群
|
||||||
|
|
||||||
|
self.n_individuals = self.population.shape[0] # 获取种群中个体的数量
|
||||||
|
assert self.n_individuals == pop_size or self.n_individuals == pop_size + 1, 'Wrong pop size' # 确保种群大小正确
|
||||||
|
|
||||||
|
# 如果有整数变量,需要进行位置四舍五入
|
||||||
|
if len(self.integer_variables) > 0:
|
||||||
|
self.population[:, self.integer_variables] = np.round(self.population[:, self.integer_variables]) # 对整数变量四舍五入
|
||||||
|
for i in self.integer_variables:
|
||||||
|
ind = np.where(self.population[:, i] < self.lower_boundary[i]) # 如果超出了下界,修正为下界
|
||||||
|
self.population[ind, i] += 1
|
||||||
|
ind = np.where(self.population[:, i] > self.upper_boundary[i]) # 如果超出了上界,修正为上界
|
||||||
|
self.population[ind, i] -= 1
|
||||||
|
|
||||||
|
self.ind, self.best_individual, self.best_value = None, None, None # 初始化最优个体和最优值
|
||||||
|
self.pop_next, self.lst_pop_next_is_evaluated = None, None # 初始化下一代种群和评估标志
|
||||||
|
self.update_info() # 更新最优解信息
|
||||||
|
|
||||||
|
def update_info(self):
|
||||||
|
# 更新最优个体和适应度值
|
||||||
|
self.ind = np.argmin(self.lst_value) # 获取适应度最小的个体(假设目标是最小化)
|
||||||
|
self.best_individual = np.copy(self.population[self.ind, :]) # 复制最优个体
|
||||||
|
self.best_value = self.lst_value[self.ind] # 记录最优值
|
||||||
|
|
||||||
|
self.pop_next, self.lst_pop_next_is_evaluated = self._generate_next_population() # 生成下一代种群
|
||||||
|
self.lst_value = [] # 清空当前种群的适应度值
|
||||||
|
|
||||||
|
def _generate_next_population(self):
|
||||||
|
# 生成下一代种群
|
||||||
|
competitors = np.random.randint(0, self.n_individuals, (self.n_individuals, self.tournament_size)) # 随机选择竞赛个体
|
||||||
|
ind = np.argmin(np.array(self.lst_value)[competitors], axis=1) # 选择每轮锦标赛中的最优个体
|
||||||
|
winner_indices = np.zeros(self.n_individuals, dtype=int) # 用于存储胜利个体的索引
|
||||||
|
for i in range(self.tournament_size): # 进行锦标赛选择
|
||||||
|
winner_indices[np.where(ind == i)] = competitors[np.where(ind == i), i]
|
||||||
|
|
||||||
|
# 按照锦标赛结果将种群分为父母
|
||||||
|
parent1 = self.population[winner_indices[0: self.n_individuals // 2], :]
|
||||||
|
parent2 = self.population[winner_indices[self.n_individuals // 2: self.n_individuals], :]
|
||||||
|
|
||||||
|
# 交叉操作:对父母个体进行交叉
|
||||||
|
cross = np.where(np.random.rand(self.n_individuals // 2) < self.p_cross)[0] # 按照概率决定哪些个体进行交叉
|
||||||
|
nn = len(cross) # 计算交叉个体的数量
|
||||||
|
alpha = np.random.rand(nn, 1) # 生成交叉系数
|
||||||
|
|
||||||
|
# 创建新的染色体
|
||||||
|
parent1_new = np.multiply(alpha, parent1[cross, :]) + np.multiply(1 - alpha, parent2[cross, :])
|
||||||
|
parent2_new = np.multiply(alpha, parent2[cross, :]) + np.multiply(1 - alpha, parent1[cross, :])
|
||||||
|
parent1[cross, :] = parent1_new
|
||||||
|
parent2[cross, :] = parent2_new
|
||||||
|
arr_new_population = np.concatenate((parent1, parent2)) # 合并两个父代得到新的种群
|
||||||
|
|
||||||
|
# 变异操作
|
||||||
|
scale_factors = self.sigma * (self.upper_boundary - self.lower_boundary) # 计算变异的尺度
|
||||||
|
perturbation = np.random.randn(self.n_individuals, self.n_variables) # 生成扰动
|
||||||
|
perturbation = np.multiply(perturbation, scale_factors) # 根据尺度调整扰动
|
||||||
|
perturbation = np.multiply(
|
||||||
|
perturbation, (np.random.rand(self.n_individuals, self.n_variables) < self.p_mutation)
|
||||||
|
) # 根据变异概率决定哪些位置进行扰动
|
||||||
|
|
||||||
|
arr_new_population += perturbation # 将扰动添加到新种群
|
||||||
|
arr_new_population = np.maximum(np.reshape(self.lower_boundary, (1, self.n_variables)), arr_new_population) # 确保不超过下界
|
||||||
|
arr_new_population = np.minimum(np.reshape(self.upper_boundary, (1, self.n_variables)), arr_new_population) # 确保不超过上界
|
||||||
|
|
||||||
|
# 如果有整数变量,进行四舍五入
|
||||||
|
if len(self.integer_variables) > 0:
|
||||||
|
arr_new_population = round_vars(arr_new_population, self.integer_variables, self.lower_boundary,
|
||||||
|
self.upper_boundary)
|
||||||
|
|
||||||
|
assert arr_new_population.shape[0] == self.n_individuals, 'Wrong arr_new_population shape' # 确保新种群的大小正确
|
||||||
|
return arr_new_population, [False] * self.n_individuals # 返回新种群和评估标志(都设为未评估)
|
||||||
|
|
||||||
|
def select_next_point(self):
|
||||||
|
# 选择下一个要评估的个体
|
||||||
|
for idx_ind, is_evaluated in enumerate(self.lst_pop_next_is_evaluated):
|
||||||
|
if not is_evaluated: # 如果该个体没有被评估
|
||||||
|
return self.pop_next[idx_ind, :] # 返回该个体
|
||||||
|
|
||||||
|
def receive_sim_value(self, the_value):
|
||||||
|
# 接收评估结果,并更新适应度信息
|
||||||
|
self.lst_value.append(the_value) # 将评估值添加到适应度列表
|
||||||
|
idx_ind = 0
|
||||||
|
for idx_ind, is_evaluated in enumerate(self.lst_pop_next_is_evaluated):
|
||||||
|
if not is_evaluated: # 找到未评估的个体
|
||||||
|
self.lst_pop_next_is_evaluated[idx_ind] = True # 标记该个体为已评估
|
||||||
|
break
|
||||||
|
if idx_ind == len(self.lst_pop_next_is_evaluated) - 1:
|
||||||
|
assert idx_ind == self.n_individuals - 1, 'Wrong index' # 确保所有个体都已评估
|
||||||
|
self.update_info() # 更新最优解信息
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
## 通过现实的产业制裁矫正仿真模型的参数研究 (研究初始阶段)
|
||||||
|
- 1将现有制裁与产业链节点关联,当作仿真模型验证的benchmark。
|
||||||
|
- 2找出现有ABM模型中武断设置的参数有哪些,对这些参数设计多个可行取值。
|
||||||
|
- 3参考老师提供的ABM+GA代码优化模型的输出(产业节点的风险等级),将风险等级较高的节点视为制裁打击的先选产业(**更优**)
|
||||||
|
优化目标就是将这些风险等级较高的先选产业与现实打击的产业匹配上(不考虑先后顺序)
|
||||||
|
GA(找到模型的参数作为遗传的gene),maximize fitness = -error(ABM生成的脆弱产业集合 - 美国打击我们的产业集合)
|
||||||
|
## 研究进度与研究计划
|
||||||
|
### 第一阶段
|
||||||
|
1. ~~弄清楚目标方向和基础内容~~
|
||||||
|
2. ~~遗传算法内容学习 以及一些基础 demo的构建 同时阅读代码 ga GA_random~~
|
||||||
|
3. ~~研究老师提供的ABM+GA代码优化模型的输出~~
|
||||||
|
|
||||||
|
### 第二阶段
|
||||||
|
1. ~~分析和查看制裁表以及对比目前的产业结点~~
|
||||||
|
2. ~~统计整理参数并制作excle和说明内容~~
|
||||||
|
3. ~~找出参数并设定参数范围,给出多个可行取值~~
|
||||||
|
|
||||||
|
### 第三阶段
|
||||||
|
1. ~~整理参数作为遗传算法的gene 开始遗传算法的构建~~
|
||||||
|
2. ~~增加函数的返回结果调用函数----ABM生成的脆弱产业集合~~
|
||||||
|
3. ~~实现 maximize fitness = -error(ABM生成的脆弱产业集合 - 美国打击我们的产业集合)最大化最小值~~
|
||||||
|
1. ~~修改部分 my_model 和 firm 参数~~
|
||||||
|
2. ~~修改部分 step 逻辑~~
|
||||||
|
### 第四阶段
|
||||||
|
1. 运行GA代码
|
||||||
|
## 目标分析
|
||||||
|
1. **将现有制裁与产业链节点关联**,当作仿真模型验证的**benchmark**
|
||||||
|
1. 查看制裁表 对比 现在的产业结点
|
||||||
|
2. 作为调参方向
|
||||||
|
2. 找出现有ABM模型中**武断设置**的参数有哪些,对这些参数设计多个可行取值。
|
||||||
|
1. 找出参数 整理参数 以及给出多个可行取值
|
||||||
|
2. 作为遗传算法的gene
|
||||||
|
3. **实现 maximize fitness = -error(ABM生成的脆弱产业集合 - 美国打击我们的产业集合)最大化最小值**
|
||||||
|
|
||||||
|
## 研究中出现的问题
|
||||||
|
1. ~~Q2.1 在于 min_stu_profit, total_payment, total_stu_waste, gtu_waste, gtu_profit = abm.run() 这些参数作为基因吗?~~
|
||||||
|
2. ~~Q2.2 这些参数输出什么内容来作为**评估准则** 是通过计算这个 ABM生成的脆弱产业集合 - 美国打击我们的产业集合?来判断适应度吗?~~
|
||||||
|
3. 参数的传递和确认 n_iter g_bom seed sample dct_lst_init_disrupt_firm_prod remove_t
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
from sqlalchemy import text
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
from orm import connection
|
||||||
|
|
||||||
|
# SQL query
|
||||||
|
with open("../SQL_analysis_risk.sql", "r", encoding="utf-8") as f:
|
||||||
|
str_sql = text(f.read())
|
||||||
|
|
||||||
|
result = pd.read_sql(sql=str_sql, con=connection)
|
||||||
|
# Count firm product
|
||||||
|
count_firm_prod = result.value_counts(subset=['id_firm', 'id_product'])
|
||||||
|
count_firm_prod.name = 'count'
|
||||||
|
count_firm_prod = count_firm_prod.to_frame().reset_index()
|
||||||
|
|
||||||
|
# Count product
|
||||||
|
count_prod = count_firm_prod.groupby('id_product')['count'].sum()
|
||||||
|
count_prod = count_prod.to_frame().reset_index()
|
||||||
|
count_prod.sort_values('count', inplace=True, ascending=False)
|
||||||
|
print(count_prod)
|
||||||
|
top100 = count_prod.head(100)['id_product'].tolist()
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
## 安装内容
|
||||||
|
1. 数据库,推荐使用mysql 8.0以上版本
|
||||||
|
2. Python 3.8
|
||||||
|
3. 通过pip等方法安装*requirements_manual_selected_20230304.txt*文件中的包
|
||||||
|
|
||||||
|
## 前期准备工作
|
||||||
|
1. 复制整个代码到本地
|
||||||
|
2. 用root及密码登录mysql,在本地数据库中创建一个数据库,命名为*iiabmdb*
|
||||||
|
3. 在mysql中运行*SQL_db_user_create.sql*里的sql命令,创建数据库用户。如果创建用户报错,需打开该文件,并运行第三行被注释掉的代码。该文件后面的sql命令也需要运行,将数据库用户的权限赋予*iiabmdb*数据库
|
||||||
|
4. 之后直接运行controller.py文件,如果没有报错,则说明前期准备工作完成
|
||||||
|
|
||||||
|
## 运行程序
|
||||||
|
1. 将*conf_db_prefix.yaml*文件中的*db_prefix*改为*db_name_prefix: without_exp*
|
||||||
|
2. 打开命令行,进入代码所在目录,运行
|
||||||
|
```shell
|
||||||
|
python main.py --exp without_exp --job 6 --reset_db True
|
||||||
|
```
|
||||||
|
3. 等待运行完成(1.2万个样本)。结束后,将*db_name_prefix: without_exp*改为*db_name_prefix: with_exp*,并运行
|
||||||
|
```shell
|
||||||
|
python main.py --exp with_exp --job 6 --reset_db True
|
||||||
|
```
|
||||||
|
4. 漫长的等待(3.4万个样本),直到运行完成
|
||||||
|
|
||||||
|
## 获得结果,绘制图表
|
||||||
|
|
||||||
|
### 风险节点分析
|
||||||
|
1. 运行*risk_analysis_sum_result.py*文件,该程序自动产生风险节点分析统计数据并放置到output_result/risk文件夹中
|
||||||
|
2. 依次运行*risk_analysis_prod_network.py*,*risk_analysis_firm_network.py*文件,将自动产生相关结果放置到output_result/risk文件夹中
|
||||||
|
|
||||||
|
### 韧性影响因素分析
|
||||||
|
1. 运行*SQL_analysis_experiment.sql*文件,将汇总结果手工复制至output_result/resilience文件夹*experiment_result.csv*文件中
|
||||||
|
2. 使用Minitab进行田口设计分析
|
||||||
|
3. 新建田口设计(统计——DOE——田口——创建田口设计——混合水平设计),因子数选项设置为8,设计选项设置为L36,水平^列为2^3,3^5,因子选项中将列名依次修改为:is_prf_size,is_prf_conn,ex_cap_type,n_max_trial,ex_cap_para,prob_new_conn,t_max_trial,n_sourcing
|
||||||
|
4. 将output_result/resilience文件夹*experiment_result.csv*文件中结果复制入田口设计表格右侧列
|
||||||
|
5. 依次对各个韧性指标进行田口设计分析(统计——DOE——田口——分析田口设计),从mean_count_firm_prod,mean_max_ts_firm_prod,mean_n_remove_firm_prod,mean_end_ts中选择一个韧性指标,图形选项勾选均值,分析选项中显示响应表勾选均值,拟合线性模型勾选均值,点击确定
|
||||||
|
6. 手工汇总方差分析结果至output_result/resilience文件夹*anova.csv*文件中,汇总响应表结果至*anova_visualization.csv*文件中
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
select distinct experiment.idx_scenario,
|
||||||
|
n_max_trial, prf_size, prf_conn, cap_limit_prob_type, cap_limit_level, diff_new_conn, remove_t, netw_prf_n,
|
||||||
|
mean_count_firm_prod, mean_count_firm, mean_count_prod,
|
||||||
|
mean_max_ts_firm_prod, mean_max_ts_firm, mean_max_ts_prod,
|
||||||
|
mean_n_remove_firm_prod, mean_n_all_prod_remove_firm, mean_end_ts
|
||||||
|
from iiabmdb_20250925.with_exp_experiment as experiment
|
||||||
|
left join
|
||||||
|
(
|
||||||
|
select
|
||||||
|
idx_scenario,
|
||||||
|
sum(count_firm_prod) / count(*) as mean_count_firm_prod, # Note to use count(*), to include NULL
|
||||||
|
sum(count_firm) / count(*) as mean_count_firm,
|
||||||
|
sum(count_prod) / count(*) as mean_count_prod,
|
||||||
|
sum(max_ts_firm_prod) / count(*) as mean_max_ts_firm_prod,
|
||||||
|
sum(max_ts_firm) / count(*) as mean_max_ts_firm,
|
||||||
|
sum(max_ts_prod) / count(*) as mean_max_ts_prod,
|
||||||
|
sum(n_remove_firm_prod) / count(*) as mean_n_remove_firm_prod,
|
||||||
|
sum(n_all_prod_remove_firm) / count(*) as mean_n_all_prod_remove_firm,
|
||||||
|
sum(end_ts) / count(*) as mean_end_ts
|
||||||
|
from (
|
||||||
|
select sample.id, idx_scenario,
|
||||||
|
count_firm_prod, count_firm, count_prod,
|
||||||
|
max_ts_firm_prod, max_ts_firm, max_ts_prod,
|
||||||
|
n_remove_firm_prod, n_all_prod_remove_firm, end_ts
|
||||||
|
from iiabmdb_20250925.with_exp_sample as sample
|
||||||
|
# 1 2 3 + 9
|
||||||
|
left join iiabmdb_20250925.with_exp_experiment as experiment
|
||||||
|
on sample.e_id = experiment.id
|
||||||
|
left join (select s_id,
|
||||||
|
count(distinct id_firm, id_product) as count_firm_prod,
|
||||||
|
count(distinct id_firm) as count_firm,
|
||||||
|
count(distinct id_product) as count_prod,
|
||||||
|
max(ts) as end_ts
|
||||||
|
from iiabmdb_20250925.with_exp_result group by s_id) as s_count
|
||||||
|
on sample.id = s_count.s_id
|
||||||
|
# 4
|
||||||
|
left join # firm prod
|
||||||
|
(select s_id, max(ts) as max_ts_firm_prod from
|
||||||
|
(select s_id, id_firm, id_product, min(ts) as ts
|
||||||
|
from iiabmdb_20250925.with_exp_result
|
||||||
|
where `status` = "D"
|
||||||
|
group by s_id, id_firm, id_product) as ts
|
||||||
|
group by s_id) as s_max_ts_firm_prod
|
||||||
|
on sample.id = s_max_ts_firm_prod.s_id
|
||||||
|
# 5
|
||||||
|
left join # firm
|
||||||
|
(select s_id, max(ts) as max_ts_firm from
|
||||||
|
(select s_id, id_firm, min(ts) as ts
|
||||||
|
from iiabmdb_20250925.with_exp_result
|
||||||
|
where `status` = "D"
|
||||||
|
group by s_id, id_firm) as ts
|
||||||
|
group by s_id) as s_max_ts_firm
|
||||||
|
on sample.id = s_max_ts_firm.s_id
|
||||||
|
# 6
|
||||||
|
left join # prod
|
||||||
|
(select s_id, max(ts) as max_ts_prod from
|
||||||
|
(select s_id, id_product, min(ts) as ts
|
||||||
|
from iiabmdb_20250925.with_exp_result
|
||||||
|
where `status` = "D"
|
||||||
|
group by s_id, id_product) as ts
|
||||||
|
group by s_id) as s_max_ts_prod
|
||||||
|
on sample.id = s_max_ts_prod.s_id
|
||||||
|
# 7
|
||||||
|
left join
|
||||||
|
(select s_id, count(distinct id_firm, id_product) as n_remove_firm_prod
|
||||||
|
from iiabmdb_20250925.with_exp_result
|
||||||
|
where `status` = "R"
|
||||||
|
group by s_id) as s_n_remove_firm_prod
|
||||||
|
on sample.id = s_n_remove_firm_prod.s_id
|
||||||
|
# 8
|
||||||
|
left join
|
||||||
|
(select s_id, count(distinct id_firm) as n_all_prod_remove_firm from
|
||||||
|
(select s_id, id_firm, count(distinct id_product) as n_remove_prod
|
||||||
|
from iiabmdb_20250925.with_exp_result
|
||||||
|
where `status` = "R"
|
||||||
|
group by s_id, id_firm) as s_n_remove_prod
|
||||||
|
left join iiabmdb_20250925.firm_n_prod as firm_n_prod
|
||||||
|
on s_n_remove_prod.id_firm = firm_n_prod.code
|
||||||
|
where n_remove_prod = n_prod
|
||||||
|
group by s_id) as s_n_all_prod_remove_firm
|
||||||
|
on sample.id = s_n_all_prod_remove_firm.s_id
|
||||||
|
) as secnario_count
|
||||||
|
group by idx_scenario
|
||||||
|
) as secnario_mean
|
||||||
|
on experiment.idx_scenario = secnario_mean.idx_scenario;
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
select * from
|
||||||
|
(select s_id, id_firm, id_product, min(ts) as ts from iiabmdb_20250925.without_exp_result
|
||||||
|
where `status` = 'D'
|
||||||
|
group by s_id, id_firm, id_product) as s_disrupt
|
||||||
|
where s_id in
|
||||||
|
(select s_id from
|
||||||
|
(select s_id, id_firm, id_product, min(ts) as ts from iiabmdb_20250925.without_exp_result
|
||||||
|
where `status` = 'D'
|
||||||
|
group by s_id, id_firm, id_product) as t
|
||||||
|
group by s_id
|
||||||
|
having count(*) > 1)
|
||||||
|
order by s_id;
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
CREATE USER 'iiabm_user'@'localhost' IDENTIFIED WITH authentication_plugin BY 'iiabm_pwd';
|
||||||
|
|
||||||
|
-- CREATE USER 'iiabm_user'@'localhost' IDENTIFIED BY 'iiabm_pwd';
|
||||||
|
|
||||||
|
GRANT ALL PRIVILEGES ON iiabmdb_20250925.* TO 'iiabm_user'@'localhost';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
select e_id, n_disrupt_sample, total_n_disrupt_firm_prod_experiment, dct_lst_init_disrupt_firm_prod from iiabmdb_20250925.without_exp_experiment as experiment
|
||||||
|
inner join (
|
||||||
|
select e_id, count(id) as n_disrupt_sample, sum(n_disrupt_firm_prod_sample) as total_n_disrupt_firm_prod_experiment from iiabmdb_20250925.without_exp_sample as sample
|
||||||
|
inner join (
|
||||||
|
select * from
|
||||||
|
(select s_id, COUNT(DISTINCT id_firm, id_product) as n_disrupt_firm_prod_sample from iiabmdb_20250925.without_exp_result group by s_id
|
||||||
|
) as count_disrupt_firm_prod_sample
|
||||||
|
where n_disrupt_firm_prod_sample > 1
|
||||||
|
) as disrupt_sample
|
||||||
|
on sample.id = disrupt_sample.s_id
|
||||||
|
group by e_id
|
||||||
|
) as disrupt_experiment
|
||||||
|
on experiment.id = disrupt_experiment.e_id
|
||||||
|
order by n_disrupt_sample desc, total_n_disrupt_firm_prod_experiment desc
|
||||||
|
limit 0, 95;
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
-- 创建新的数据库
|
||||||
|
CREATE DATABASE iiabmdb2025211;
|
||||||
|
|
||||||
|
-- 重命名表到新数据库
|
||||||
|
RENAME TABLE
|
||||||
|
iiabmdb.test_experiment TO iiabmdb2025211.test_experiment,
|
||||||
|
iiabmdb.test_result TO iiabmdb2025211.test_result,
|
||||||
|
iiabmdb.test_sample TO iiabmdb2025211.test_sample;
|
||||||
|
|
||||||
|
RENAME TABLE
|
||||||
|
iiabmdb.with_exp_experiment TO iiabmdb2025211.with_exp_experiment,
|
||||||
|
iiabmdb.with_exp_result TO iiabmdb2025211.with_exp_result,
|
||||||
|
iiabmdb.with_exp_sample TO iiabmdb2025211.with_exp_sample,
|
||||||
|
iiabmdb.without_exp_experiment TO iiabmdb2025211.without_exp_experiment,
|
||||||
|
iiabmdb.without_exp_result TO iiabmdb2025211.without_exp_result,
|
||||||
|
iiabmdb.without_exp_sample TO iiabmdb2025211.without_exp_sample;
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
import time
|
||||||
|
|
||||||
|
import networkx as nx
|
||||||
|
import pandas as pd
|
||||||
|
from mesa import Model
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from my_model import MyModel
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from controller_db import ControllerDB
|
||||||
|
|
||||||
|
|
||||||
|
class Computation:
|
||||||
|
|
||||||
|
def __init__(self, c_db: 'ControllerDB'):
|
||||||
|
# 控制不同进程 计算不同的样本 但使用同一个 数据库 c_db
|
||||||
|
self.c_db = c_db
|
||||||
|
self.pid = os.getpid()
|
||||||
|
|
||||||
|
def run(self, str_code='0', s_id=None):
|
||||||
|
sample_random = self.c_db.fetch_a_sample(s_id)
|
||||||
|
if sample_random is None:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# lock this row by update is_done_flag to 0 将运行后的样本设置为 flag 0
|
||||||
|
self.c_db.lock_the_sample(sample_random)
|
||||||
|
print(
|
||||||
|
f"Pid {self.pid} ({str_code}) is running "
|
||||||
|
f"sample {sample_random.id} at {datetime.datetime.now()}")
|
||||||
|
# 将sample 对应的 experiment 的一系列值 和 参数值 传入 模型 中 包括列名 和 值
|
||||||
|
dct_exp = {column: getattr(sample_random.experiment, column)
|
||||||
|
for column in sample_random.experiment.__table__.c.keys()}
|
||||||
|
# 删除不需要的 主键
|
||||||
|
del dct_exp['id']
|
||||||
|
|
||||||
|
dct_sample_para = {'sample': sample_random,
|
||||||
|
'seed': sample_random.seed,
|
||||||
|
**dct_exp}
|
||||||
|
|
||||||
|
model = MyModel(dct_sample_para)
|
||||||
|
|
||||||
|
model.step() # 运行仿真一步
|
||||||
|
model.end() # 汇总结果
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# read by orm
|
||||||
|
is_local_db: True
|
||||||
|
|
||||||
|
local:
|
||||||
|
user_name: iiabm_user
|
||||||
|
password: iiabm_pwd
|
||||||
|
db_name: iiabmdb_20250925
|
||||||
|
address: 'localhost'
|
||||||
|
port: 3306
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
db_name_prefix: without_exp
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
# read by ControllerDB
|
||||||
|
|
||||||
|
# run settings
|
||||||
|
meta_seed: 2
|
||||||
|
|
||||||
|
test: # only for test scenarios
|
||||||
|
n_sample: 1
|
||||||
|
n_iter: 100
|
||||||
|
|
||||||
|
not_test: # normal scenarios
|
||||||
|
n_sample: 50
|
||||||
|
n_iter: 100
|
||||||
|
|
@ -0,0 +1,383 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from orm import db_session, engine, Base, ins, connection
|
||||||
|
from orm import Experiment, Sample, Result
|
||||||
|
from sqlalchemy.exc import OperationalError
|
||||||
|
from sqlalchemy import text
|
||||||
|
import yaml
|
||||||
|
import random
|
||||||
|
import pandas as pd
|
||||||
|
import platform
|
||||||
|
import networkx as nx
|
||||||
|
import json
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
|
||||||
|
class ControllerDB:
|
||||||
|
is_with_exp: bool
|
||||||
|
dct_parameter = None
|
||||||
|
is_test: bool = None
|
||||||
|
db_name_prefix: str = None
|
||||||
|
reset_flag: int
|
||||||
|
|
||||||
|
lst_saved_s_id: list
|
||||||
|
|
||||||
|
def __init__(self, prefix, reset_flag=0):
|
||||||
|
with open('conf_experiment.yaml') as yaml_file:
|
||||||
|
dct_conf_experiment = yaml.full_load(yaml_file)
|
||||||
|
assert prefix in ['test', 'without_exp', 'with_exp'], "db name not in test, without_exp, with_exp"
|
||||||
|
|
||||||
|
self.is_test = prefix == 'test'
|
||||||
|
self.is_with_exp = False if prefix == 'test' or prefix == 'without_exp' else True
|
||||||
|
self.db_name_prefix = prefix
|
||||||
|
dct_para_in_test = dct_conf_experiment['test'] if self.is_test else dct_conf_experiment['not_test']
|
||||||
|
self.dct_parameter = {'meta_seed': dct_conf_experiment['meta_seed'], **dct_para_in_test}
|
||||||
|
|
||||||
|
print(self.dct_parameter)
|
||||||
|
# 0, not reset; 1, reset self; 2, reset all
|
||||||
|
self.reset_flag = reset_flag
|
||||||
|
self.is_exist = False
|
||||||
|
self.lst_saved_s_id = []
|
||||||
|
|
||||||
|
self.experiment_data = []
|
||||||
|
self.batch_size = 5000
|
||||||
|
# 根据需求设置每批次的大小
|
||||||
|
|
||||||
|
def init_tables(self):
|
||||||
|
self.fill_experiment_table()
|
||||||
|
self.fill_sample_table()
|
||||||
|
|
||||||
|
def fill_experiment_table(self):
|
||||||
|
firm = pd.read_csv("input_data/input_firm_data/Firm_amended.csv")
|
||||||
|
firm['Code'] = firm['Code'].astype('string')
|
||||||
|
firm.fillna(0, inplace=True)
|
||||||
|
|
||||||
|
# fill dct_lst_init_disrupt_firm_prod
|
||||||
|
# 存储 公司-在供应链结点的位置.. 0 :‘1.1’
|
||||||
|
if self.is_with_exp:
|
||||||
|
# 对于方差分析时候使用
|
||||||
|
with open('SQL_export_high_risk_setting.sql', 'r') as f:
|
||||||
|
str_sql = text(f.read())
|
||||||
|
result = pd.read_sql(sql=str_sql, con=connection)
|
||||||
|
result['dct_lst_init_disrupt_firm_prod'] = \
|
||||||
|
result['dct_lst_init_disrupt_firm_prod'].apply(
|
||||||
|
lambda x: pickle.loads(x))
|
||||||
|
list_dct = result['dct_lst_init_disrupt_firm_prod'].to_list()
|
||||||
|
else:
|
||||||
|
# 行索引 (index):这一行在数据帧中的索引值。
|
||||||
|
# 行数据 (row):这一行的数据,是一个 pandas.Series 对象,包含该行的所有列和值。
|
||||||
|
|
||||||
|
# 读取企业与产品关系数据
|
||||||
|
firm_industry = pd.read_csv("input_data/firm_industry_relation.csv")
|
||||||
|
firm_industry['Firm_Code'] = firm_industry['Firm_Code'].astype('string')
|
||||||
|
|
||||||
|
# 假设已从 BOM 数据构建了 code_to_indices
|
||||||
|
bom_nodes = pd.read_csv("input_data/input_product_data/BomNodes.csv")
|
||||||
|
code_to_indices = bom_nodes.groupby('Code')['Index'].apply(list).to_dict()
|
||||||
|
|
||||||
|
# 初始化存储映射结果的列表
|
||||||
|
list_dct = []
|
||||||
|
|
||||||
|
# 遍历 firm_industry 数据
|
||||||
|
for _, row in firm_industry.iterrows():
|
||||||
|
firm_code = row['Firm_Code'] # 企业代码
|
||||||
|
product_code = row['Product_Code'] # 原始产品代码
|
||||||
|
|
||||||
|
# 使用 code_to_indices 映射 Product_Code 到 Product_Indices
|
||||||
|
mapped_indices = code_to_indices.get(product_code, []) # 如果找不到则返回空列表
|
||||||
|
|
||||||
|
# 构建企业到产品索引的映射
|
||||||
|
dct = {firm_code: mapped_indices}
|
||||||
|
list_dct.append(dct)
|
||||||
|
|
||||||
|
# fill g_bom
|
||||||
|
# 结点属性值 相当于 图上点的 原始 产品名称
|
||||||
|
bom_nodes = pd.read_csv('input_data/input_product_data/BomNodes.csv')
|
||||||
|
bom_nodes['Code'] = bom_nodes['Code'].astype(str)
|
||||||
|
bom_nodes.set_index('Index', inplace=True)
|
||||||
|
|
||||||
|
bom_cate_net = pd.read_csv('input_data/input_product_data/合成结点.csv')
|
||||||
|
g_bom = nx.from_pandas_edgelist(bom_cate_net, source='UPID', target='ID', create_using=nx.MultiDiGraph())
|
||||||
|
# 填充每一个结点 的具体内容 通过 相同的 code 并且通过BomNodes.loc[code].to_dict()字典化 格式类似 格式 { code(0) : {level: 0 ,name: 工业互联网 }}
|
||||||
|
bom_labels_dict = {}
|
||||||
|
for index in g_bom.nodes:
|
||||||
|
try:
|
||||||
|
bom_labels_dict[index] = bom_nodes.loc[index].to_dict()
|
||||||
|
# print(bom_labels_dict[index])
|
||||||
|
except KeyError:
|
||||||
|
print(f"节点 {index} 不存在于 bom_nodes 中")
|
||||||
|
# 分配属性 给每一个结点 获得类似 格式:{1: {'label': 'A', 'value': 10},
|
||||||
|
nx.set_node_attributes(g_bom, bom_labels_dict)
|
||||||
|
# 改为json 格式
|
||||||
|
g_product_js = json.dumps(nx.adjacency_data(g_bom))
|
||||||
|
|
||||||
|
# insert exp
|
||||||
|
df_xv = pd.read_csv(
|
||||||
|
"input_data/"
|
||||||
|
f"xv_{'with_exp' if self.is_with_exp else 'without_exp'}.csv",
|
||||||
|
index_col=None)
|
||||||
|
# read the OA table
|
||||||
|
df_oa = pd.read_csv(
|
||||||
|
"input_data/"
|
||||||
|
f"oa_{'with_exp' if self.is_with_exp else 'without_exp'}.csv",
|
||||||
|
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 只会得到 键 和 值
|
||||||
|
for idx_init_removal, dct_init_removal in enumerate(list_dct):
|
||||||
|
self.add_experiment_1(idx_scenario,
|
||||||
|
idx_init_removal,
|
||||||
|
dct_init_removal,
|
||||||
|
g_product_js,
|
||||||
|
**dct_exp_para)
|
||||||
|
print(f"Inserted experiment for scenario {idx_scenario}, "
|
||||||
|
f"init_removal {idx_init_removal}!")
|
||||||
|
self.finalize_insertion()
|
||||||
|
|
||||||
|
def add_experiment_1(self, idx_scenario, idx_init_removal,
|
||||||
|
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, remove_t, netw_prf_n):
|
||||||
|
e = Experiment(
|
||||||
|
idx_scenario=idx_scenario,
|
||||||
|
idx_init_removal=idx_init_removal,
|
||||||
|
n_sample=int(self.dct_parameter['n_sample']),
|
||||||
|
n_iter=int(self.dct_parameter['n_iter']),
|
||||||
|
dct_lst_init_disrupt_firm_prod=dct_lst_init_disrupt_firm_prod,
|
||||||
|
g_bom=g_bom,
|
||||||
|
n_max_trial=n_max_trial,
|
||||||
|
prf_size=prf_size,
|
||||||
|
prf_conn=prf_conn,
|
||||||
|
cap_limit_prob_type=cap_limit_prob_type,
|
||||||
|
cap_limit_level=cap_limit_level,
|
||||||
|
diff_new_conn=diff_new_conn,
|
||||||
|
remove_t=remove_t,
|
||||||
|
netw_prf_n=netw_prf_n
|
||||||
|
)
|
||||||
|
# 这里我们不立即提交,而是先添加到批量保存的队列中
|
||||||
|
self.experiment_data.append(e)
|
||||||
|
|
||||||
|
# 当批量数据达到一定数量时再提交
|
||||||
|
if len(self.experiment_data) >= self.batch_size:
|
||||||
|
self._commit_batch()
|
||||||
|
|
||||||
|
# 辅助方法:批量提交
|
||||||
|
def _commit_batch(self):
|
||||||
|
db_session.bulk_save_objects(self.experiment_data)
|
||||||
|
db_session.commit()
|
||||||
|
self.experiment_data.clear() # 清空队列
|
||||||
|
|
||||||
|
def finalize_insertion(self):
|
||||||
|
if self.experiment_data:
|
||||||
|
self._commit_batch() # 提交剩余的数据
|
||||||
|
|
||||||
|
def fill_sample_table(self):
|
||||||
|
rng = random.Random(self.dct_parameter['meta_seed'])
|
||||||
|
# 根据样本数目 设置 32 位随机整数
|
||||||
|
lst_seed = [
|
||||||
|
rng.getrandbits(32)
|
||||||
|
for _ in range(int(self.dct_parameter['n_sample']))
|
||||||
|
]
|
||||||
|
lst_exp = db_session.query(Experiment).all()
|
||||||
|
|
||||||
|
lst_sample = []
|
||||||
|
for experiment in lst_exp:
|
||||||
|
# idx_sample: 1-50
|
||||||
|
for idx_sample in range(int(experiment.n_sample)):
|
||||||
|
s = Sample(e_id=experiment.id,
|
||||||
|
idx_sample=idx_sample + 1,
|
||||||
|
seed=lst_seed[idx_sample],
|
||||||
|
is_done_flag=-1)
|
||||||
|
lst_sample.append(s)
|
||||||
|
# 每当达到批量大小时提交一次
|
||||||
|
if len(lst_sample) >= self.batch_size:
|
||||||
|
db_session.bulk_save_objects(lst_sample)
|
||||||
|
db_session.commit()
|
||||||
|
print(f'Inserted {len(lst_sample)} samples!')
|
||||||
|
lst_sample.clear() # 清空已提交的样本列表
|
||||||
|
|
||||||
|
# 提交剩余的样本
|
||||||
|
if lst_sample:
|
||||||
|
db_session.bulk_save_objects(lst_sample)
|
||||||
|
db_session.commit()
|
||||||
|
print(f'Inserted {len(lst_sample)} samples!')
|
||||||
|
|
||||||
|
def reset_db(self, force_drop=False):
|
||||||
|
# first, check if tables exist
|
||||||
|
lst_table_obj = [
|
||||||
|
Base.metadata.tables[str_table]
|
||||||
|
for str_table in ins.get_table_names()
|
||||||
|
if str_table.startswith(self.db_name_prefix)
|
||||||
|
]
|
||||||
|
self.is_exist = len(lst_table_obj) > 0
|
||||||
|
if force_drop:
|
||||||
|
self.force_drop_db(lst_table_obj)
|
||||||
|
# while is_exist:
|
||||||
|
# a_table = random.choice(lst_table_obj)
|
||||||
|
# try:
|
||||||
|
# Base.metadata.drop_all(bind=engine, tables=[a_table])
|
||||||
|
# except KeyError:
|
||||||
|
# pass
|
||||||
|
# except OperationalError:
|
||||||
|
# pass
|
||||||
|
# else:
|
||||||
|
# lst_table_obj.remove(a_table)
|
||||||
|
# print(
|
||||||
|
# f"Table {a_table.name} is dropped "
|
||||||
|
# f"for exp: {self.db_name_prefix}!!!"
|
||||||
|
# )
|
||||||
|
# finally:
|
||||||
|
# is_exist = len(lst_table_obj) > 0
|
||||||
|
|
||||||
|
if self.is_exist:
|
||||||
|
print(
|
||||||
|
f"All tables exist. No need to reset "
|
||||||
|
f"for exp: {self.db_name_prefix}."
|
||||||
|
)
|
||||||
|
# change the is_done_flag from 0 to -1
|
||||||
|
# rerun the in-finished tasks
|
||||||
|
self.is_exist_reset_flag_resset_db()
|
||||||
|
# if self.reset_flag > 0:
|
||||||
|
# if self.reset_flag == 2:
|
||||||
|
# sample = db_session.query(Sample).filter(
|
||||||
|
# Sample.is_done_flag == 0)
|
||||||
|
# elif self.reset_flag == 1:
|
||||||
|
# sample = db_session.query(Sample).filter(
|
||||||
|
# Sample.is_done_flag == 0,
|
||||||
|
# Sample.computer_name == platform.node())
|
||||||
|
# else:
|
||||||
|
# raise ValueError('Wrong reset flag')
|
||||||
|
# if sample.count() > 0:
|
||||||
|
# for s in sample:
|
||||||
|
# qry_result = db_session.query(Result).filter_by(
|
||||||
|
# s_id=s.id)
|
||||||
|
# if qry_result.count() > 0:
|
||||||
|
# db_session.query(Result).filter(s_id=s.id).delete()
|
||||||
|
# db_session.commit()
|
||||||
|
# s.is_done_flag = -1
|
||||||
|
# db_session.commit()
|
||||||
|
# print(f"Reset the sample id {s.id} flag from 0 to -1")
|
||||||
|
|
||||||
|
else:
|
||||||
|
# 不存在则重新生成所有的表结构
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
|
self.init_tables()
|
||||||
|
print(
|
||||||
|
f"All tables are just created and initialized "
|
||||||
|
f"for exp: {self.db_name_prefix}."
|
||||||
|
)
|
||||||
|
|
||||||
|
def force_drop_db(self, lst_table_obj):
|
||||||
|
self.is_exist = len(lst_table_obj) > 0
|
||||||
|
while self.is_exist:
|
||||||
|
a_table = random.choice(lst_table_obj)
|
||||||
|
try:
|
||||||
|
Base.metadata.drop_all(bind=engine, tables=[a_table])
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
except OperationalError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
lst_table_obj.remove(a_table)
|
||||||
|
print(
|
||||||
|
f"Table {a_table.name} is dropped "
|
||||||
|
f"for exp: {self.db_name_prefix}!!!"
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
self.is_exist = len(lst_table_obj) > 0
|
||||||
|
|
||||||
|
def is_exist_reset_flag_resset_db(self):
|
||||||
|
if self.reset_flag > 0:
|
||||||
|
if self.reset_flag == 2:
|
||||||
|
sample = db_session.query(Sample).filter(
|
||||||
|
Sample.is_done_flag == 0)
|
||||||
|
elif self.reset_flag == 1:
|
||||||
|
sample = db_session.query(Sample).filter(
|
||||||
|
Sample.is_done_flag == 0,
|
||||||
|
Sample.computer_name == platform.node())
|
||||||
|
else:
|
||||||
|
raise ValueError('Wrong reset flag')
|
||||||
|
if sample.count() > 0:
|
||||||
|
for s in sample:
|
||||||
|
qry_result = db_session.query(Result).filter_by(
|
||||||
|
s_id=s.id)
|
||||||
|
if qry_result.count() > 0:
|
||||||
|
db_session.query(Result).filter(s_id=s.id).delete()
|
||||||
|
db_session.commit()
|
||||||
|
s.is_done_flag = -1
|
||||||
|
db_session.commit()
|
||||||
|
print(f"Reset the sample id {s.id} flag from 0 to -1")
|
||||||
|
|
||||||
|
def prepare_list_sample(self):
|
||||||
|
# 为了符合前面 重置表里面存在 重置本机 或者重置全部 或者不重置的部分 这个部分的 关于样本运行也得重新拿出来
|
||||||
|
# 查找一个风险事件中 50 个样本
|
||||||
|
res = db_session.execute(
|
||||||
|
text(f"SELECT count(*) FROM {self.db_name_prefix}_sample s, "
|
||||||
|
f"{self.db_name_prefix}_experiment e WHERE s.e_id=e.id"
|
||||||
|
)).scalar()
|
||||||
|
# 控制 n_sample数量 作为后面的参数
|
||||||
|
n_sample = 0 if res is None else res
|
||||||
|
print(f'There are a total of {n_sample} samples.')
|
||||||
|
# 查找 is_done_flag = -1 也就是没有运行的 样本 运行后会改为0
|
||||||
|
res = db_session.execute(
|
||||||
|
text(f"SELECT id FROM {self.db_name_prefix}_sample "
|
||||||
|
f"WHERE is_done_flag = -1"
|
||||||
|
))
|
||||||
|
for row in res:
|
||||||
|
s_id = row[0]
|
||||||
|
self.lst_saved_s_id.append(s_id)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def select_random_sample(lst_s_id):
|
||||||
|
while 1:
|
||||||
|
if len(lst_s_id) == 0:
|
||||||
|
return None
|
||||||
|
s_id = random.choice(lst_s_id)
|
||||||
|
lst_s_id.remove(s_id)
|
||||||
|
res = db_session.query(Sample).filter(Sample.id == int(s_id),
|
||||||
|
Sample.is_done_flag == -1)
|
||||||
|
if res.count() == 1:
|
||||||
|
return res[0]
|
||||||
|
|
||||||
|
def fetch_a_sample(self, s_id=None):
|
||||||
|
# 由Computation 调用 返回 sample对象 同时给出 2中 指定访问模式 抓取特定的 样本 通过s_id
|
||||||
|
# 默认访问 flag为-1的 lst_saved_s_id
|
||||||
|
if s_id is not None:
|
||||||
|
res = db_session.query(Sample).filter(Sample.id == int(s_id))
|
||||||
|
if res.count() == 0:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return res[0]
|
||||||
|
|
||||||
|
sample = self.select_random_sample(self.lst_saved_s_id)
|
||||||
|
if sample is not None:
|
||||||
|
return sample
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def lock_the_sample(sample: Sample):
|
||||||
|
sample.is_done_flag, sample.computer_name = 0, platform.node()
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("Testing the database connection...")
|
||||||
|
try:
|
||||||
|
controller_db = ControllerDB('test')
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to connect to the database!")
|
||||||
|
print(e)
|
||||||
|
exit(1)
|
||||||
|
After Width: | Height: | Size: 263 KiB |
|
After Width: | Height: | Size: 267 KiB |
|
|
@ -0,0 +1,383 @@
|
||||||
|
from mesa import Agent
|
||||||
|
|
||||||
|
|
||||||
|
class FirmAgent(Agent):
|
||||||
|
def __init__(self, unique_id, model, type_region, revenue_log, a_lst_product,
|
||||||
|
production_output, demand_quantity, R, P, C,s_r,S_r,x):
|
||||||
|
# 调用超类的 __init__ 方法
|
||||||
|
super().__init__(unique_id, model)
|
||||||
|
|
||||||
|
# 初始化模型中的网络引用
|
||||||
|
self.firm_network = self.model.firm_network
|
||||||
|
self.product_network = self.model.product_network
|
||||||
|
# 初始化代理自身的属性
|
||||||
|
self.type_region = type_region
|
||||||
|
self.size_stat = []
|
||||||
|
self.dct_prod_up_prod_stat = {}
|
||||||
|
self.dct_prod_capacity = {}
|
||||||
|
# 企业涉及的产业
|
||||||
|
self.indus_i = a_lst_product
|
||||||
|
# 各资源库存信息,库存资源,库存量
|
||||||
|
self.R = R
|
||||||
|
# 包括库存时间的值 方便后面统计
|
||||||
|
self.R1 = {0: R}
|
||||||
|
# 设备资产信息,持有设备,设备数量, 增加 设备残值 [[1,2,3],[] ]
|
||||||
|
self.C = C
|
||||||
|
# 包括设备时间步的值
|
||||||
|
self.C1 = {0: C}
|
||||||
|
# 复制一份
|
||||||
|
self.C0 = C
|
||||||
|
# 产品库存信息 库存产品,库存量 ID 数量
|
||||||
|
self.P = P
|
||||||
|
# 包括 产品时间
|
||||||
|
self.P1 = {0: P}
|
||||||
|
# 企业i的供应商
|
||||||
|
self.upper_i = [self.model.agent_map[u] for u, v in self.firm_network.in_edges(self.unique_id)
|
||||||
|
if u in self.model.agent_map]
|
||||||
|
# 企业i的客户
|
||||||
|
self.downer_i = [self.model.agent_map[v] for u, v in self.firm_network.out_edges(self.unique_id)
|
||||||
|
if v in self.model.agent_map]
|
||||||
|
# 设备c的数量 (总量) 使用这个来判断设备数量
|
||||||
|
# self.n_equip_c = n_equip_c
|
||||||
|
# 设备c产量 根据设备量进行估算
|
||||||
|
self.c_yield = production_output
|
||||||
|
# 消耗材料量 根据设备量进行估算 { }
|
||||||
|
self.c_consumption = demand_quantity
|
||||||
|
# 设备c购买价格(初始值)
|
||||||
|
# self.c_price = c_price
|
||||||
|
# 资源r补货库存阈值 很重要设置
|
||||||
|
self.s_r = s_r
|
||||||
|
self.S_r = S_r
|
||||||
|
# 设备补货阙值 可选
|
||||||
|
# self.ss_r = 70
|
||||||
|
# 每一个周期步减少残值:x
|
||||||
|
self.x = x
|
||||||
|
# 试验中的参数
|
||||||
|
self.dct_n_trial_up_prod_disrupted = {}
|
||||||
|
self.dct_cand_alt_supp_up_prod_disrupted = {}
|
||||||
|
self.dct_request_prod_from_firm = {}
|
||||||
|
|
||||||
|
# 外部变量
|
||||||
|
self.is_prf_size = self.model.is_prf_size
|
||||||
|
self.is_prf_conn = bool(self.model.prf_conn)
|
||||||
|
self.str_cap_limit_prob_type = str(self.model.cap_limit_prob_type)
|
||||||
|
self.flt_cap_limit_level = float(self.model.cap_limit_level)
|
||||||
|
self.flt_diff_new_conn = float(self.model.diff_new_conn)
|
||||||
|
|
||||||
|
# 初始化 size_stat
|
||||||
|
self.size_stat.append((revenue_log, 0))
|
||||||
|
|
||||||
|
# 初始化 dct_prod_up_prod_stat
|
||||||
|
for prod in a_lst_product:
|
||||||
|
self.dct_prod_up_prod_stat[prod] = {
|
||||||
|
'p_stat': [('N', 0)],
|
||||||
|
's_stat': {up_prod: {'stat': True, 'set_disrupt_firm': set()}
|
||||||
|
for up_prod in prod.a_predecessors()}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 初始化额外容量 (dct_prod_capacity)
|
||||||
|
for product in a_lst_product:
|
||||||
|
assert self.str_cap_limit_prob_type in ['uniform', 'normal'], \
|
||||||
|
"cap_limit_prob_type must be either 'uniform' or 'normal'"
|
||||||
|
extra_cap_mean = self.size_stat[0][0] / self.flt_cap_limit_level
|
||||||
|
if self.str_cap_limit_prob_type == 'uniform':
|
||||||
|
extra_cap = self.model.random.uniform(extra_cap_mean - 2, extra_cap_mean + 2)
|
||||||
|
extra_cap = 0 if round(extra_cap) < 0 else round(extra_cap)
|
||||||
|
elif self.str_cap_limit_prob_type == 'normal':
|
||||||
|
extra_cap = self.model.random.normalvariate(extra_cap_mean, 1)
|
||||||
|
extra_cap = 0 if round(extra_cap) < 0 else round(extra_cap)
|
||||||
|
self.dct_prod_capacity[product] = extra_cap
|
||||||
|
|
||||||
|
def remove_edge_to_cus(self, disrupted_prod):
|
||||||
|
# parameter disrupted_prod is the product that self got disrupted
|
||||||
|
lst_out_edge = list(
|
||||||
|
self.firm_network.out_edges(
|
||||||
|
self.unique_id, keys=True, data='Product'))
|
||||||
|
for n1, n2, key, product_code in lst_out_edge:
|
||||||
|
if product_code == disrupted_prod.unique_id:
|
||||||
|
# update customer up product supplier status
|
||||||
|
customer = next(agent for agent in self.model.company_agents if agent.unique_id == n2)
|
||||||
|
|
||||||
|
for prod in customer.dct_prod_up_prod_stat.keys():
|
||||||
|
if disrupted_prod in customer.dct_prod_up_prod_stat[prod]['s_stat'].keys():
|
||||||
|
customer.dct_prod_up_prod_stat[prod]['s_stat'][disrupted_prod][
|
||||||
|
'set_disrupt_firm'].add(self)
|
||||||
|
# print(f"{self.name} disrupt {customer.name}'s "
|
||||||
|
# f"{prod.code} due to {disrupted_prod.code}")
|
||||||
|
# remove edge to customer
|
||||||
|
self.firm_network.remove_edge(n1, n2, key)
|
||||||
|
|
||||||
|
def disrupt_cus_prod(self, prod, disrupted_up_prod):
|
||||||
|
# parameter prod is the product that has disrupted_up_prod
|
||||||
|
# parameter 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]['set_disrupt_firm'])
|
||||||
|
num_remain = \
|
||||||
|
len([u for u, _, _, d in
|
||||||
|
self.firm_network.in_edges(self.get_firm_network_unique_id(),
|
||||||
|
keys=True,
|
||||||
|
data='Product')
|
||||||
|
if d == disrupted_up_prod.unique_id])
|
||||||
|
lost_percent = num_lost / (num_lost + num_remain)
|
||||||
|
lst_size = \
|
||||||
|
[firm.size_stat[-1][0] for firm in self.model.company_agents]
|
||||||
|
std_size = (self.size_stat[-1][0] - min(lst_size) + 1) \
|
||||||
|
/ (max(lst_size) - min(lst_size) + 1)
|
||||||
|
|
||||||
|
# calculate probability of disruption
|
||||||
|
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))
|
||||||
|
# print(f"{self.name}'s {prod.code} turn to D status due to "
|
||||||
|
# f"disrupted supplier of {disrupted_up_prod.code}")
|
||||||
|
|
||||||
|
def seek_alt_supply(self, product):
|
||||||
|
# 检查当前产品的尝试次数是否达到最大值
|
||||||
|
if self.dct_n_trial_up_prod_disrupted[product] <= self.model.int_n_max_trial:
|
||||||
|
# 初始化候选供应商列表
|
||||||
|
if self.dct_n_trial_up_prod_disrupted[product] == 0:
|
||||||
|
self.dct_cand_alt_supp_up_prod_disrupted[product] = [
|
||||||
|
firm for firm in self.model.company_agents if firm.is_prod_in_current_normal(product)
|
||||||
|
]
|
||||||
|
|
||||||
|
# 如果没有候选供应商,直接退出
|
||||||
|
if not self.dct_cand_alt_supp_up_prod_disrupted[product]:
|
||||||
|
# print(f"No valid candidates found for product {product.unique_id}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 查找与当前企业已连接的候选供应商
|
||||||
|
lst_firm_connect = []
|
||||||
|
if self.is_prf_conn:
|
||||||
|
lst_firm_connect = [
|
||||||
|
firm for firm in self.dct_cand_alt_supp_up_prod_disrupted[product]
|
||||||
|
if self.firm_network.has_edge(self.unique_id, firm.unique_id) or
|
||||||
|
self.firm_network.has_edge(firm.unique_id, self.unique_id)
|
||||||
|
]
|
||||||
|
|
||||||
|
# 如果没有连接的供应商
|
||||||
|
if not lst_firm_connect:
|
||||||
|
candidates = self.dct_cand_alt_supp_up_prod_disrupted[product]
|
||||||
|
if self.is_prf_size: # 根据规模加权选择
|
||||||
|
lst_size = [firm.size_stat[-1][0] for firm in candidates]
|
||||||
|
total_size = sum(lst_size)
|
||||||
|
if total_size > 0:
|
||||||
|
lst_prob = [size / total_size for size in lst_size]
|
||||||
|
select_alt_supply = self.random.choices(candidates, weights=lst_prob)[0]
|
||||||
|
else: # 如果全是 0,就均匀随机
|
||||||
|
select_alt_supply = self.random.choice(candidates)
|
||||||
|
else: # 随机选择
|
||||||
|
select_alt_supply = self.random.choice(candidates)
|
||||||
|
else: # 如果存在连接的供应商
|
||||||
|
if self.is_prf_size: # 根据规模加权选择
|
||||||
|
lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_connect]
|
||||||
|
total_size = sum(lst_firm_size)
|
||||||
|
if total_size > 0:
|
||||||
|
lst_prob = [size / total_size for size in lst_firm_size]
|
||||||
|
select_alt_supply = self.random.choices(lst_firm_connect, weights=lst_prob)[0]
|
||||||
|
else: # 如果全是 0,就均匀随机
|
||||||
|
select_alt_supply = self.random.choice(lst_firm_connect)
|
||||||
|
else: # 随机选择
|
||||||
|
select_alt_supply = self.random.choice(lst_firm_connect)
|
||||||
|
|
||||||
|
# 检查选中的供应商是否能够生产产品
|
||||||
|
if not select_alt_supply.is_prod_in_current_normal(product):
|
||||||
|
# print(f"Selected supplier {select_alt_supply.unique_id} cannot produce product {product.unique_id}")
|
||||||
|
|
||||||
|
# 打印供应商的生产状态字典
|
||||||
|
#print(f"Supplier production state: {select_alt_supply.dct_prod_up_prod_stat}")
|
||||||
|
|
||||||
|
# 检查产品是否存在于生产状态字典中
|
||||||
|
if product in select_alt_supply.dct_prod_up_prod_stat:
|
||||||
|
print(
|
||||||
|
f"Product {product.unique_id} production state: {select_alt_supply.dct_prod_up_prod_stat[product]['p_stat']}")
|
||||||
|
else:
|
||||||
|
print(f"Product {product.unique_id} not found in supplier production state.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 添加到供应商的请求字典
|
||||||
|
if product in select_alt_supply.dct_request_prod_from_firm:
|
||||||
|
select_alt_supply.dct_request_prod_from_firm[product].append(self)
|
||||||
|
else:
|
||||||
|
select_alt_supply.dct_request_prod_from_firm[product] = [self]
|
||||||
|
|
||||||
|
# 更新尝试次数
|
||||||
|
self.dct_n_trial_up_prod_disrupted[product] += 1
|
||||||
|
|
||||||
|
def handle_request(self):
|
||||||
|
for product, lst_firm in self.dct_request_prod_from_firm.items():
|
||||||
|
if self.dct_prod_capacity[product] > 0:
|
||||||
|
if len(lst_firm) == 0:
|
||||||
|
continue
|
||||||
|
elif len(lst_firm) == 1:
|
||||||
|
self.accept_request(lst_firm[0], product)
|
||||||
|
elif len(lst_firm) > 1:
|
||||||
|
lst_firm_connect = []
|
||||||
|
if self.is_prf_conn:
|
||||||
|
for firm in lst_firm:
|
||||||
|
if self.firm_network.has_edge(self.unique_id, firm.unique_id) or \
|
||||||
|
self.firm_network.has_edge(firm.unique_id, self.unique_id):
|
||||||
|
lst_firm_connect.append(firm)
|
||||||
|
if len(lst_firm_connect) == 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm]
|
||||||
|
lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size]
|
||||||
|
select_customer = self.random.choices(lst_firm, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_customer = self.random.choice(lst_firm)
|
||||||
|
self.accept_request(select_customer, product)
|
||||||
|
elif len(lst_firm_connect) > 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_connect]
|
||||||
|
lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size]
|
||||||
|
select_customer = self.random.choices(lst_firm_connect, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_customer = self.random.choice(lst_firm_connect)
|
||||||
|
self.accept_request(select_customer, product)
|
||||||
|
else:
|
||||||
|
for down_firm in lst_firm:
|
||||||
|
down_firm.dct_cand_alt_supp_up_prod_disrupted[product].remove(self)
|
||||||
|
|
||||||
|
def accept_request(self, down_firm, product):
|
||||||
|
if self.firm_network.has_edge(self.unique_id, down_firm.unique_id) or \
|
||||||
|
self.firm_network.has_edge(down_firm.unique_id, self.unique_id):
|
||||||
|
prod_accept = 1.0
|
||||||
|
else:
|
||||||
|
prod_accept = self.flt_diff_new_conn
|
||||||
|
if self.model.nprandom.choice([True, False], p=[prod_accept, 1 - prod_accept]):
|
||||||
|
self.firm_network.add_edge(self.unique_id, down_firm.unique_id, Product=product.unique_id)
|
||||||
|
self.dct_prod_capacity[product] -= 1
|
||||||
|
self.dct_request_prod_from_firm[product].remove(down_firm)
|
||||||
|
|
||||||
|
for prod in down_firm.dct_prod_up_prod_stat.keys():
|
||||||
|
if product in down_firm.dct_prod_up_prod_stat[prod]['s_stat']:
|
||||||
|
down_firm.dct_prod_up_prod_stat[prod]['s_stat'][product]['stat'] = True
|
||||||
|
down_firm.dct_prod_up_prod_stat[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]
|
||||||
|
else:
|
||||||
|
down_firm.dct_cand_alt_supp_up_prod_disrupted[product].remove(self)
|
||||||
|
|
||||||
|
def seek_material_supply(self, material_type):
|
||||||
|
lst_firm_material_connect = [] # 符合条件 可选择的上游
|
||||||
|
upper_i_material = [] # 特定 资源的上游 企业集合
|
||||||
|
for firm in self.upper_i:
|
||||||
|
for sub_list in firm.R:
|
||||||
|
if sub_list[0] == material_type:
|
||||||
|
upper_i_material.append(firm)
|
||||||
|
# 没有 上游 没有 材料的情况,也就是紊乱的情况
|
||||||
|
if len(upper_i_material) == 0:
|
||||||
|
return -1
|
||||||
|
if self.is_prf_conn:
|
||||||
|
for firm in upper_i_material:
|
||||||
|
if self.firm_network.has_edge(self.unique_id, firm.unique_id) or self.firm_network.has_edge(
|
||||||
|
firm.unique_id, self.unique_id):
|
||||||
|
lst_firm_material_connect.append(firm)
|
||||||
|
if len(lst_firm_material_connect) == 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_size = [firm.size_stat[-1][0] for firm in upper_i_material]
|
||||||
|
lst_prob = [size / sum(lst_size) for size in lst_size]
|
||||||
|
select_alt_supply = \
|
||||||
|
self.random.choices(upper_i_material, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_alt_supply = self.random.choice(upper_i_material)
|
||||||
|
elif len(lst_firm_material_connect) > 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_material_connect]
|
||||||
|
lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size]
|
||||||
|
select_alt_supply = self.random.choices(lst_firm_material_connect, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_alt_supply = self.random.choice(lst_firm_material_connect)
|
||||||
|
return select_alt_supply
|
||||||
|
|
||||||
|
def seek_machinery_supply(self, machinery_type):
|
||||||
|
lst_firm_machinery_connect = [] # 符合条件 可选择的上游
|
||||||
|
upper_i_machinery = [] # 特定 资源的上游 企业集合
|
||||||
|
for firm in self.upper_i:
|
||||||
|
for sub_list in firm.R:
|
||||||
|
if sub_list[0] == machinery_type:
|
||||||
|
upper_i_machinery.append(firm)
|
||||||
|
# 没有 上游 没有 材料的情况,也就是紊乱的情况
|
||||||
|
if len(upper_i_machinery) == 0:
|
||||||
|
return -1
|
||||||
|
if self.is_prf_conn:
|
||||||
|
for firm in upper_i_machinery:
|
||||||
|
if self.firm_network.has_edge(self.unique_id, firm.unique_id) or self.firm_network.has_edge(
|
||||||
|
firm.unique_id, self.unique_id):
|
||||||
|
lst_firm_machinery_connect.append(firm)
|
||||||
|
if len(lst_firm_machinery_connect) == 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_size = [firm.size_stat[-1][0] for firm in upper_i_machinery]
|
||||||
|
lst_prob = [size / sum(lst_size) for size in lst_size]
|
||||||
|
select_alt_supply = \
|
||||||
|
self.random.choices(upper_i_machinery, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_alt_supply = self.random.choice(upper_i_machinery)
|
||||||
|
elif len(lst_firm_machinery_connect) > 0:
|
||||||
|
if self.is_prf_size:
|
||||||
|
lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_machinery_connect]
|
||||||
|
lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size]
|
||||||
|
select_alt_supply = self.random.choices(lst_firm_machinery_connect, weights=lst_prob)[0]
|
||||||
|
else:
|
||||||
|
select_alt_supply = self.random.choice(lst_firm_machinery_connect)
|
||||||
|
return select_alt_supply
|
||||||
|
|
||||||
|
def handle_material_request(self, mater_list):
|
||||||
|
for list_P in self.P:
|
||||||
|
if list_P[0] == mater_list[0]:
|
||||||
|
list_P[1] -= mater_list[1]
|
||||||
|
|
||||||
|
def handle_machinery_request(self, machi_list):
|
||||||
|
for list_C in self.C:
|
||||||
|
if list_C[0] == machi_list[0]:
|
||||||
|
list_C[1] -= machi_list[1]
|
||||||
|
|
||||||
|
def refresh_R(self):
|
||||||
|
self.R1[self.model.t] = self.R
|
||||||
|
|
||||||
|
def refresh_C(self):
|
||||||
|
self.C1[self.model.t] = self.C
|
||||||
|
|
||||||
|
def refresh_P(self):
|
||||||
|
self.P1[self.model.t] = self.P
|
||||||
|
|
||||||
|
def clean_before_trial(self):
|
||||||
|
self.dct_request_prod_from_firm = {}
|
||||||
|
|
||||||
|
def clean_before_time_step(self):
|
||||||
|
# Reset the number of trials and candidate suppliers for disrupted products
|
||||||
|
self.dct_n_trial_up_prod_disrupted = dict.fromkeys(self.dct_n_trial_up_prod_disrupted.keys(), 0)
|
||||||
|
self.dct_cand_alt_supp_up_prod_disrupted = {}
|
||||||
|
|
||||||
|
# Update the status of products and refresh disruption sets
|
||||||
|
for prod in self.dct_prod_up_prod_stat.keys():
|
||||||
|
status, ts = self.dct_prod_up_prod_stat[prod]['p_stat'][-1]
|
||||||
|
if ts != self.model.t:
|
||||||
|
self.dct_prod_up_prod_stat[prod]['p_stat'].append((status, self.model.t))
|
||||||
|
|
||||||
|
# Refresh the set of disrupted firms
|
||||||
|
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]['set_disrupt_firm'] = set()
|
||||||
|
|
||||||
|
def get_firm_network_unique_id(self):
|
||||||
|
return self.unique_id
|
||||||
|
|
||||||
|
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]['p_stat'][-1][0] == 'N':
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
设备id,设备残值
|
||||||
|
59,700
|
||||||
|
60,210
|
||||||
|
61,350
|
||||||
|
62,140
|
||||||
|
63,700
|
||||||
|
64,500
|
||||||
|
65,700
|
||||||
|
66,100000
|
||||||
|
67,250
|
||||||
|
68,350
|
||||||
|
69,25
|
||||||
|
70,35
|
||||||
|
71,140
|
||||||
|
72,140
|
||||||
|
73,210
|
||||||
|
74,500
|
||||||
|
75,70
|
||||||
|
76,21
|
||||||
|
77,350
|
||||||
|
78,70
|
||||||
|
79,350
|
||||||
|
80,21
|
||||||
|
81,210
|
||||||
|
82,70
|
||||||
|
83,140
|
||||||
|
84,70
|
||||||
|
85,50
|
||||||
|
86,70
|
||||||
|
87,70
|
||||||
|
88,70
|
||||||
|
89,70
|
||||||
|
|
|
@ -0,0 +1,364 @@
|
||||||
|
Firm_Code,Product_Code
|
||||||
|
1,7
|
||||||
|
5,7
|
||||||
|
29954548,7
|
||||||
|
29954548,7
|
||||||
|
453289520,8
|
||||||
|
453289520,8
|
||||||
|
3472022914,2514
|
||||||
|
79412414,2514
|
||||||
|
490476776,2514
|
||||||
|
720737055,2515
|
||||||
|
850972471,2515
|
||||||
|
350343208,2714
|
||||||
|
37873062,2714
|
||||||
|
1266556718,2714
|
||||||
|
331545755,2715
|
||||||
|
3193516458,2715
|
||||||
|
41454763,2715
|
||||||
|
584019624,2716
|
||||||
|
185356903,2716
|
||||||
|
22751149,2716
|
||||||
|
27169556,2717
|
||||||
|
3346538900,2717
|
||||||
|
2541265952,2717
|
||||||
|
777299215,2718
|
||||||
|
18107611,2718
|
||||||
|
4067555184,32338
|
||||||
|
2313177432,32338
|
||||||
|
12098344,32338
|
||||||
|
104671744,32432
|
||||||
|
4208851809,32432
|
||||||
|
203314437,32433
|
||||||
|
2309668026,32434
|
||||||
|
333499553,32434
|
||||||
|
4315536490,32434
|
||||||
|
1270747834,32435
|
||||||
|
39894253,32435
|
||||||
|
287006714,32435
|
||||||
|
3352578733,32436
|
||||||
|
366828854,32436
|
||||||
|
5849940,32437
|
||||||
|
5849940,32437
|
||||||
|
29954548,32438
|
||||||
|
3227189464,32438
|
||||||
|
2961715231,32439
|
||||||
|
888478182,32439
|
||||||
|
631103677,32440
|
||||||
|
2319266522,32440
|
||||||
|
1194436218,32440
|
||||||
|
2327979389,32441
|
||||||
|
216898035,32441
|
||||||
|
3274238529,32443
|
||||||
|
61066955,32443
|
||||||
|
2348894245,32445
|
||||||
|
169978927,32445
|
||||||
|
142823313,32446
|
||||||
|
367669349,32446
|
||||||
|
2340606811,32447
|
||||||
|
3269940677,32447
|
||||||
|
1452048,32448
|
||||||
|
1452048,32448
|
||||||
|
892652617,32449
|
||||||
|
1555364428,32449
|
||||||
|
2475874929,32450
|
||||||
|
2353020496,32450
|
||||||
|
4076786740,32451
|
||||||
|
331450699,32451
|
||||||
|
632264618,34491
|
||||||
|
29930956,34491
|
||||||
|
632264618,34491
|
||||||
|
1092796483,34492
|
||||||
|
2353851293,34492
|
||||||
|
972774,34492
|
||||||
|
24459300,34493
|
||||||
|
3344266702,34493
|
||||||
|
2345050363,34494
|
||||||
|
33171435,34494
|
||||||
|
2961210947,34495
|
||||||
|
41454763,34495
|
||||||
|
3135349256,34495
|
||||||
|
2350883312,34496
|
||||||
|
2350883312,34496
|
||||||
|
3006753238,34498
|
||||||
|
2350111843,34498
|
||||||
|
2343704209,34499
|
||||||
|
15482118,34499
|
||||||
|
930767828,34501
|
||||||
|
930767828,34501
|
||||||
|
1010816593,34502
|
||||||
|
2321243819,34502
|
||||||
|
2353542014,34502
|
||||||
|
79889978,34503
|
||||||
|
37378925,34503
|
||||||
|
186257378,34503
|
||||||
|
1379191812,34505
|
||||||
|
24653920,34505
|
||||||
|
864536616,34509
|
||||||
|
25685135,34509
|
||||||
|
2349046160,34513
|
||||||
|
2313628561,34513
|
||||||
|
2346465051,34513
|
||||||
|
1253552935,34517
|
||||||
|
1253552935,34517
|
||||||
|
5971532,34518
|
||||||
|
3157495460,34518
|
||||||
|
2354584345,34519
|
||||||
|
29452962,34519
|
||||||
|
2311639124,34524
|
||||||
|
762165453,34524
|
||||||
|
2989649772,34525
|
||||||
|
25147774,34525
|
||||||
|
413876805,34526
|
||||||
|
11807506,34526
|
||||||
|
3384021594,34527
|
||||||
|
413876805,34527
|
||||||
|
80158773,34528
|
||||||
|
2343704209,34528
|
||||||
|
3312358902,34529
|
||||||
|
80169705,34529
|
||||||
|
27075840,34530
|
||||||
|
3077450214,34530
|
||||||
|
2311352797,34531
|
||||||
|
22324879,34531
|
||||||
|
4379631621,34532
|
||||||
|
2349616974,34532
|
||||||
|
423388486,34533
|
||||||
|
1679596339,34533
|
||||||
|
3164072929,34534
|
||||||
|
22324879,34534
|
||||||
|
1033972427,34535
|
||||||
|
3312358902,34535
|
||||||
|
354328758,34537
|
||||||
|
1044103384,34537
|
||||||
|
78979697,34538
|
||||||
|
2316430101,34538
|
||||||
|
2349076526,34539
|
||||||
|
2347561020,34539
|
||||||
|
11169556957,34543
|
||||||
|
2333843479,34543
|
||||||
|
22324879,34544
|
||||||
|
59234665,34544
|
||||||
|
4995239819,34545
|
||||||
|
2339136692,34545
|
||||||
|
3327312155,34546
|
||||||
|
1389529309,34546
|
||||||
|
18729484,34547
|
||||||
|
3287925122,34547
|
||||||
|
888662519,34548
|
||||||
|
443872531,34549
|
||||||
|
24673506,34549
|
||||||
|
3065971313,34550
|
||||||
|
830662620,34550
|
||||||
|
2347561020,34551
|
||||||
|
613464015,34551
|
||||||
|
2453696971,34552
|
||||||
|
43566171,34552
|
||||||
|
2311838590,34553
|
||||||
|
409663925,34553
|
||||||
|
3414534661,34554
|
||||||
|
3393219477,34554
|
||||||
|
11175750477,34555
|
||||||
|
2311838590,34555
|
||||||
|
2321857672,34556
|
||||||
|
146491012,34557
|
||||||
|
2311907103,34557
|
||||||
|
3464943902,34558
|
||||||
|
259923931,34558
|
||||||
|
3054059190,34566
|
||||||
|
186745206,34566
|
||||||
|
507827038,34566
|
||||||
|
2349737110,34567
|
||||||
|
505990558,34567
|
||||||
|
613464015,34568
|
||||||
|
221048382,34568
|
||||||
|
2348910693,34569
|
||||||
|
2342515031,34569
|
||||||
|
2360390148,34570
|
||||||
|
2317568755,34570
|
||||||
|
2349511062,34571
|
||||||
|
2349511062,34571
|
||||||
|
500189853,34572
|
||||||
|
18065940,34572
|
||||||
|
3006753238,34573
|
||||||
|
2333993502,34573
|
||||||
|
433384648,34574
|
||||||
|
344181818,34574
|
||||||
|
1104420298,36914
|
||||||
|
37873062,36914
|
||||||
|
1452048,46504
|
||||||
|
2349349655,46504
|
||||||
|
420984285,46505
|
||||||
|
2329836516,46505
|
||||||
|
27599908,49686
|
||||||
|
2350719552,49686
|
||||||
|
3216066502,49687
|
||||||
|
39698451,49687
|
||||||
|
2351643794,49688
|
||||||
|
2351192662,49688
|
||||||
|
865049663,49689
|
||||||
|
891649,49689
|
||||||
|
3424978618,49690
|
||||||
|
3145156061,49690
|
||||||
|
281599332,49691
|
||||||
|
24653920,49691
|
||||||
|
79938367,49692
|
||||||
|
864169770,49692
|
||||||
|
2310296367,49693
|
||||||
|
774611690,49693
|
||||||
|
2311838590,49694
|
||||||
|
2350442566,49694
|
||||||
|
654461595,49695
|
||||||
|
383463860,49695
|
||||||
|
463659395,49696
|
||||||
|
2347105663,49696
|
||||||
|
504638253,49697
|
||||||
|
519195163,49698
|
||||||
|
3221578464,49698
|
||||||
|
2316256865,49699
|
||||||
|
3269840248,49699
|
||||||
|
1675147952,49700
|
||||||
|
1675147952,49700
|
||||||
|
29223617,49701
|
||||||
|
2553848709,49701
|
||||||
|
168035745,49702
|
||||||
|
510149116,49702
|
||||||
|
2316430101,49704
|
||||||
|
5591349,49704
|
||||||
|
274839085,49705
|
||||||
|
4209347174,49705
|
||||||
|
413142822,49707
|
||||||
|
951988821,49707
|
||||||
|
1587526,49708
|
||||||
|
1587526,49708
|
||||||
|
3402194899,49709
|
||||||
|
730857,49709
|
||||||
|
27085933,49710
|
||||||
|
27085933,49710
|
||||||
|
3424978618,49711
|
||||||
|
24495941,49711
|
||||||
|
2424229017,49712
|
||||||
|
3118428071,49712
|
||||||
|
3297178263,49713
|
||||||
|
441623911,49713
|
||||||
|
2316150629,49714
|
||||||
|
2327057709,49714
|
||||||
|
2624175,49715
|
||||||
|
3483100980,49715
|
||||||
|
781386116,49715
|
||||||
|
3222821993,49716
|
||||||
|
10398718,49716
|
||||||
|
3042364033,49717
|
||||||
|
2333993502,49717
|
||||||
|
79938367,49718
|
||||||
|
2342518227,49718
|
||||||
|
3068358389,49719
|
||||||
|
20751117,49719
|
||||||
|
3449575456,49720
|
||||||
|
3449575456,49720
|
||||||
|
3440374619,49721
|
||||||
|
3168979780,49721
|
||||||
|
2962064709,49722
|
||||||
|
3151203276,49722
|
||||||
|
3449575456,49723
|
||||||
|
777299215,49723
|
||||||
|
24459300,49724
|
||||||
|
1675147952,49724
|
||||||
|
2334772533,49725
|
||||||
|
38567125,49725
|
||||||
|
2338894532,49726
|
||||||
|
270141231,49726
|
||||||
|
220783142,49727
|
||||||
|
3407754893,49727
|
||||||
|
9278530,49728
|
||||||
|
9278530,49728
|
||||||
|
2323580212,49729
|
||||||
|
2331160070,49729
|
||||||
|
2349345463,49730
|
||||||
|
2350687852,49730
|
||||||
|
2357754148,49731
|
||||||
|
2357754148,49731
|
||||||
|
3173999388,49733
|
||||||
|
501323741,49733
|
||||||
|
20751117,49734
|
||||||
|
20751117,49734
|
||||||
|
2311337085,56247
|
||||||
|
2950325617,56247
|
||||||
|
2350701298,56248
|
||||||
|
2322658897,56248
|
||||||
|
2347015781,56249
|
||||||
|
24610687,56249
|
||||||
|
181655991,56250
|
||||||
|
15482118,56250
|
||||||
|
2326956863,56319
|
||||||
|
2326956863,56319
|
||||||
|
3270918801,56320
|
||||||
|
7299120,56320
|
||||||
|
557266995,56321
|
||||||
|
557266995,56321
|
||||||
|
2357759100,56322
|
||||||
|
695879282,56322
|
||||||
|
2314301730,56322
|
||||||
|
3118917053,56323
|
||||||
|
648145286,56323
|
||||||
|
4091219112,56341
|
||||||
|
60716715,56341
|
||||||
|
2982872611,317586
|
||||||
|
3051771738,317586
|
||||||
|
1237811030,317586
|
||||||
|
814834276,317589
|
||||||
|
3339921892,317589
|
||||||
|
22324879,317589
|
||||||
|
2358215091,317620
|
||||||
|
6823511,317620
|
||||||
|
2318300058,431078
|
||||||
|
30918572,431078
|
||||||
|
173280333,431079
|
||||||
|
1217010297,431079
|
||||||
|
79412414,431079
|
||||||
|
227353488,431080
|
||||||
|
4728160558,431080
|
||||||
|
20751117,431081
|
||||||
|
2313858141,431081
|
||||||
|
2311676659,431082
|
||||||
|
1048928993,431082
|
||||||
|
966536464,431083
|
||||||
|
3464313484,431083
|
||||||
|
2347015781,431085
|
||||||
|
2357754148,431085
|
||||||
|
338952484,431086
|
||||||
|
27042865,431086
|
||||||
|
3104545193,431087
|
||||||
|
9620005,431087
|
||||||
|
864166372,431088
|
||||||
|
33822284,431088
|
||||||
|
3312199997,513687
|
||||||
|
3344266702,513687
|
||||||
|
591975267,513689
|
||||||
|
3357541349,513691
|
||||||
|
3357541349,513691
|
||||||
|
24673506,513693
|
||||||
|
708388905,513693
|
||||||
|
16116663,513695
|
||||||
|
784491064,513695
|
||||||
|
2329395956,513697
|
||||||
|
2348912438,513697
|
||||||
|
520408144,513697
|
||||||
|
2351592628,513699
|
||||||
|
300186799,513699
|
||||||
|
578803019,513701
|
||||||
|
2342515031,513701
|
||||||
|
3339921892,513701
|
||||||
|
343932526,513720
|
||||||
|
2349375343,513720
|
||||||
|
2311838590,513738
|
||||||
|
2311838590,513738
|
||||||
|
2325170042,513742
|
||||||
|
10437056,513742
|
||||||
|
2350111843,513744
|
||||||
|
2311838590,513744
|
||||||
|
2350111843,513746
|
||||||
|
3306665331,513746
|
||||||
|
23131812,513749
|
||||||
|
3120341363,513749
|
||||||
|
314846874,513751
|
||||||
|
|
|
@ -0,0 +1,306 @@
|
||||||
|
Code,固定资产原值(万元人民币),固定资产净值(万元人民币),资产总和(万元人民币),存货(万元人民币),企业名称,Type_Region,Revenue_Log
|
||||||
|
1,24895.67,19028.645,59296.0375,3736.5025,金三江(肇庆)硅材料股份有限公司,广东省,4.77
|
||||||
|
5,28523.3982120397,16482.5120486869,40960.480086326,2588.93324,福建省三明正元化工有限公司,福建省,4.61
|
||||||
|
29954548,757171.52339162,494430.604177194,1465408.31294514,133292.643730143,多氟多新材料股份有限公司,河南省,6.17
|
||||||
|
453289520,130115.029749624,82224.7896921481,479782.660674286,193520.088971571,拓荆科技股份有限公司,辽宁省,5.68
|
||||||
|
3472022914,737.674091690682,426.271863328108,1059.32276085326,66.95517,哈尔滨市丰赛农业技术开发有限公司,黑龙江省,3.03
|
||||||
|
79412414,21634.7036353221,11761.1518318531,91981.0940971428,12269.0431131106,无锡力芯微电子股份有限公司,江苏省,4.96
|
||||||
|
490476776,55936.0889760484,32323.191425171,80325.95,18149.98,成都旭光科技股份有限公司,四川省,4.9
|
||||||
|
720737055,4537.85989427612,2622.24472086527,6516.50685,315.444274666667,上海明波通信技术股份有限公司,上海市,3.81
|
||||||
|
850972471,10860.463202359,7923.85146086661,132707.358609333,8836.59633516667,杭州广立微电子股份有限公司,浙江省,5.12
|
||||||
|
350343208,29640.4180971984,17127.9924216384,42564.5551135,3903.95977783333,四川九洲光电科技股份有限公司,四川省,4.63
|
||||||
|
37873062,859499.995818288,498140.77960258,1507073.36388473,184703.551339833,杭州士兰微电子股份有限公司,浙江省,6.18
|
||||||
|
1266556718,37572.0587346531,22449.072071654,168567.630391833,10632.3104404292,科大国盾量子技术股份有限公司,安徽省,5.23
|
||||||
|
331545755,14213.7203367523,8213.53104442853,20411.3410498333,6911.28954133333,西安西驰电气股份有限公司,陕西省,4.31
|
||||||
|
3193516458,113416.479647353,79144.1733852397,412242.506193571,41347.21758,苏州华兴源创科技股份有限公司,江苏省,5.62
|
||||||
|
41454763,29933.175208967,18326.5778449736,160000.820546286,3281.00494028571,上海概伦电子股份有限公司,上海市,5.2
|
||||||
|
584019624,219826.879323823,127029.015271776,315678.182734271,19952.64066,安徽电力股份有限公司淮南田家庵发电分公司,安徽省,5.5
|
||||||
|
185356903,327.855151862525,189.454161479159,470.810115934781,29.7578533333333,淮南市西迈机械制造有限公司,安徽省,2.67
|
||||||
|
22751149,743338.086508,447941.053405333,1288765.41920833,263513.812713,新洋丰农业科技股份有限公司,湖北省,6.11
|
||||||
|
27169556,663046.74805,380037.692216667,4032516.77646667,455436.179933333,株洲中车时代电气股份有限公司,湖南省,6.61
|
||||||
|
3346538900,3093538.01873858,1787629.83596418,4442416.06385275,335021.89871525,广东小鹏汽车科技有限公司,广东省,6.65
|
||||||
|
2541265952,7294.77712894119,4215.35509291129,10475.5250795489,662.112236666667,深圳市福斯特半导体有限公司,广东省,4.02
|
||||||
|
777299215,6639.06682521613,3836.44676995298,9533.90484767932,602.59653,福州世强电子有限公司,福建省,3.98
|
||||||
|
18107611,34371080.0120577,19861649.5907558,49357931.615075,4949308.389283,浙江吉利控股集团有限公司,浙江省,7.69
|
||||||
|
4067555184,3565.42477650496,2060.31400608586,5120.06001079074,323.616655,大庆菲曼希精密设备制造有限公司,黑龙江省,3.71
|
||||||
|
2313177432,983.565455587575,568.362484437478,1412.43034780434,89.27356,常州卡思特摩光伏材料有限公司,江苏省,3.15
|
||||||
|
12098344,134382.308019667,35393.1831141667,190516.121775667,36019.3828761667,宁夏东方钽业股份有限公司,宁夏回族自治区,5.28
|
||||||
|
104671744,5409.61000573167,3125.99366440613,7768.36691292389,491.00458,青海利亚达化工有限公司,青海省,3.89
|
||||||
|
4208851809,71851.6551423333,52930.2237671667,445347.011300833,49697.6881215,西陇科学股份有限公司,广东省,5.65
|
||||||
|
203314437,3196.58773065962,1847.1780744218,4590.39863036412,290.13907,洛阳市洁晶清洗材料有限公司,河南省,3.66
|
||||||
|
2309668026,1229.45681948447,710.453105546847,1765.53793475543,111.59195,山西蓝光工程材料有限公司,山西省,3.25
|
||||||
|
333499553,371418.905166259,214627.883185702,533369.010089615,33711.928095,山西三维华邦集团有限公司,山西省,5.73
|
||||||
|
4315536490,737.674091690682,426.271863328108,1059.32276085326,66.95517,山西鑫远建材有限公司,山西省,3.03
|
||||||
|
1270747834,38359.0527679154,22166.1368930616,55084.7835643694,3481.66884,广东奥克化学有限公司,广东省,4.74
|
||||||
|
39894253,4989507.81666667,1332605.0,4381081.81666667,662222.116666667,中国石化上海石油化工股份有限公司,上海市,6.64
|
||||||
|
287006714,913508.252742451,527879.275480115,1311826.0425,111970.2725,宝武碳业科技股份有限公司,上海市,6.12
|
||||||
|
3352578733,491.782727793788,284.181242218739,706.215173902173,44.63678,吉林省泓昇新能源科技有限公司,吉林省,2.85
|
||||||
|
366828854,81536.6715771667,60716.0971225,275511.445341833,37270.9437623333,广东聚石化学股份有限公司,广东省,5.44
|
||||||
|
5849940,18652802.5217652,10302896.7482042,20855221.2857143,2169804.72857143,中国铝业股份有限公司,北京市,7.32
|
||||||
|
3227189464,32949.4427621838,19040.1432286555,47316.4166514455,2990.66426,安徽瑞柏新材料有限公司,安徽省,4.68
|
||||||
|
2961715231,9712.7088739273,5612.57953382009,13947.7496845679,881.576405,绍兴金冶环保科技有限公司,浙江省,4.14
|
||||||
|
888478182,491.782727793788,284.181242218739,706.215173902172,44.63678,东莞市道滘博尔日涂料助剂厂,广东省,2.85
|
||||||
|
631103677,5245.68242980039,3031.26658366655,7532.9618549565,476.125653333333,贵州忠辉重工有限公司,贵州省,3.88
|
||||||
|
2319266522,688.495818911303,397.853739106234,988.701243463042,62.491492,台州市路桥岩方涂料有限公司,浙江省,3.0
|
||||||
|
1194436218,245.891363896894,142.090621109369,353.107586951086,22.31839,平湖市金鹏工贸有限公司油漆分公司,浙江省,2.55
|
||||||
|
2327979389,9507.79940401323,5494.17068289562,13653.4933621087,862.977746666667,江苏赢新润滑科技有限公司,江苏省,4.14
|
||||||
|
216898035,39506.5457994343,22829.2264582387,56732.6189701411,3585.82132666667,河南长兴实业有限公司,河南省,4.75
|
||||||
|
3274238529,737.674091690682,426.271863328108,1059.32276085326,66.95517,杭州东宇活性炭有限公司,浙江省,3.03
|
||||||
|
61066955,140510.748267291,76204.8620044891,338602.933514714,28179.6880875714,浙江康盛股份有限公司,浙江省,5.53
|
||||||
|
2348894245,140155.923780404,84124.7869805446,297024.681265143,11981.7573048571,晶瑞电子材料股份有限公司,江苏省,5.47
|
||||||
|
169978927,1674991.23124933,1348118.9408745,2598689.7056225,65028.9291661667,合肥晶合集成电路股份有限公司,安徽省,6.41
|
||||||
|
142823313,110604.194319667,62639.2297726667,635987.119100167,97437.8679368333,重庆川仪自动化股份有限公司,重庆市,5.8
|
||||||
|
367669349,5105668.05830967,3059216.88747333,6702847.66086067,537603.399401,蓝思科技股份有限公司,湖南省,6.83
|
||||||
|
2340606811,4180.1531862472,2415.54055885928,6002.82897816846,379.41263,佛山市特能宝化学原料有限公司,广东省,3.78
|
||||||
|
3269940677,30244.6377593179,17477.1463964524,43432.2331949836,2745.16197,吉和昌新材料(荆门)有限公司,湖北省,4.64
|
||||||
|
1452048,28236967.2134157,17452589.831388,37654713.2389085,1884370.44367833,京东方科技集团股份有限公司,北京市,7.58
|
||||||
|
892652617,64751.3924928487,37417.196892134,92984.9978971192,5877.17603333333,兰州金川科技园有限公司,甘肃省,4.97
|
||||||
|
1555364428,70201.9843925632,40566.872326725,100812.216074535,6371.900345,稀美资源(广东)有限公司,广东省,5.0
|
||||||
|
2475874929,245.891363896894,142.090621109369,353.107586951086,22.31839,南亚贸易(惠州)有限公司,广东省,2.55
|
||||||
|
2353020496,26261.923728183,15429.0215205381,60979.99377175,4997.96087575,同宇新材料(广东)股份有限公司,广东省,4.79
|
||||||
|
4076786740,983.565455587575,568.362484437478,1412.43034780434,89.27356,内蒙古鑫钰祥商贸有限公司,内蒙古自治区,3.15
|
||||||
|
331450699,5409.61000573167,3125.99366440613,7768.36691292389,491.00458,绵阳诚勤电子科技有限责任公司,四川省,3.89
|
||||||
|
632264618,24466.2960693333,11125.104671,41893.9137386667,9131.4346385,精伦电子股份有限公司,湖北省,4.62
|
||||||
|
29930956,1113.70019512213,643.562059059886,1599.30784983333,492.828037833333,北京鼎实创新科技股份有限公司,北京市,3.2
|
||||||
|
1092796483,24644.7665540916,13962.6723778493,99636.0612445714,21795.4415151429,亚世光电(集团)股份有限公司,辽宁省,5.0
|
||||||
|
2353851293,1475.34818338136,852.543726656217,2118.64552170652,133.91034,深圳市弘佳光电科技有限公司,广东省,3.33
|
||||||
|
972774,34438.570245,21878.4732774,269601.932676,94545.1294942,北京神舟航天软件技术股份有限公司,北京市,5.43
|
||||||
|
24459300,11563.6630606667,6970.961253,604937.636983333,87424.1267993333,北京集创北方科技股份有限公司,北京市,5.78
|
||||||
|
3344266702,22275.8966165753,12988.7428133535,91231.4598907143,12065.8805295714,佛山市联动科技股份有限公司,广东省,4.96
|
||||||
|
2345050363,29345.4983293333,19251.4658936667,69568.8449763333,1262.94723833333,胜科纳米(苏州)股份有限公司,江苏省,4.84
|
||||||
|
33171435,608534.898068333,328118.5379995,1084751.64497883,61275.9548563333,广东风华高新科技股份有限公司,广东省,6.04
|
||||||
|
2961210947,1721.23954727826,994.634347765586,2471.7531086576,156.22873,深圳市泽晶伟创科技有限公司,广东省,3.39
|
||||||
|
3135349256,23988.7417005,21562.453113,213376.093520167,11441.7133435,北京华峰测控技术股份有限公司,北京市,5.33
|
||||||
|
2350883312,8360.30637249438,4831.08111771856,12005.6579563369,758.82526,无锡市辉煌电子材料有限公司,江苏省,4.08
|
||||||
|
3006753238,2041970.43921619,1162815.70513596,2626399.81194,236376.363264714,通富微电子股份有限公司,江苏省,6.42
|
||||||
|
2350111843,92789.448255777,62286.1122935528,131188.586355714,1480.14299457143,广东利扬芯片测试股份有限公司,广东省,5.12
|
||||||
|
2343704209,71514.6399746746,41325.4026142836,102697.23,7848.60666666667,麦斯克电子材料股份有限公司,河南省,5.01
|
||||||
|
15482118,136268.003408653,72622.7235243867,386138.298983975,75554.4652471667,上海复旦微电子集团股份有限公司,上海市,5.59
|
||||||
|
930767828,92087.5475024413,53213.6493681296,132240.5601055,24848.5958543333,中国科学院沈阳科学仪器股份有限公司,辽宁省,5.12
|
||||||
|
1010816593,190161.172017552,125995.43098285,489297.169029714,111575.164158429,青岛鼎信通讯股份有限公司,山东省,5.69
|
||||||
|
2321243819,8150.63908576382,5683.42656648055,78242.99176,8590.6279275,浙江铖昌科技股份有限公司,浙江省,4.89
|
||||||
|
2353542014,5346.21434766376,3089.35989131322,7677.3287915,3063.477861,深圳市力生美半导体股份有限公司,广东省,3.89
|
||||||
|
79889978,70662.4194063333,47709.2542268333,743263.198951833,57637.2210431667,杭州海兴电力科技股份有限公司,浙江省,5.87
|
||||||
|
37378925,35834.7159848466,22934.3345194324,85466.377199,12474.301626,欣灵电气股份有限公司,浙江省,4.93
|
||||||
|
186257378,9884.83282865514,5712.04296859665,14194.9249954336,897.199278,长春长光奥立红外技术有限公司,吉林省,4.15
|
||||||
|
1379191812,7376.74091690682,4262.71863328108,10593.2276085326,669.5517,宁波力创电子科技发展有限公司,浙江省,4.03
|
||||||
|
24653920,63925.6287144089,38626.1648407043,301902.830405857,49184.7394994286,圣邦微电子(北京)股份有限公司,北京市,5.48
|
||||||
|
864536616,449077.123100443,297167.27771169,1565844.03465357,259887.593897857,上海联影医疗科技股份有限公司,上海市,6.19
|
||||||
|
25685135,27225.0066035415,15732.2243314978,39095.9496671667,494.656998333333,北京确安科技股份有限公司,北京市,4.59
|
||||||
|
2349046160,7145.51529816667,4421.05037816667,275606.846605167,16789.3887331667,思瑞浦微电子科技(苏州)股份有限公司,江苏省,5.44
|
||||||
|
2313628561,14933.4672534613,8629.44352226417,21444.9198341667,3977.1318875,重庆阿泰可科技股份有限公司,重庆市,4.33
|
||||||
|
2346465051,2114.66572951329,1221.97934154058,3036.72524777934,191.938154,海南中藤科技股份有限公司,海南省,3.48
|
||||||
|
1253552935,4169.08448783333,2457.4742155,82802.5928295,7680.27564083333,深圳市力合微电子股份有限公司,广东省,4.92
|
||||||
|
5971532,1008031.2322245,724134.278732333,9825144.85496167,1410912.94534083,杭州海康威视数字技术股份有限公司,浙江省,6.99
|
||||||
|
3157495460,29634.8258561912,17809.9080543064,74174.9565917143,12596.5014271429,广东绿岛风空气系统股份有限公司,广东省,4.87
|
||||||
|
2354584345,1844.1852292267,1065.67965832027,2648.30690213314,167.387925,山西集目看看信息技术股份有限公司,山西省,3.42
|
||||||
|
29452962,456144.931192807,269318.787489444,1898148.98546986,206077.306495286,广电运通集团股份有限公司,广东省,6.28
|
||||||
|
2311639124,737.674091690682,426.271863328108,1059.32276085326,66.95517,府谷县鈺益来环保设备安装有限公司,陕西省,3.03
|
||||||
|
762165453,614.728409742234,355.226552773424,882.768967377713,55.795975,贵州大龙铁合金集团海鸿硅业有限公司,贵州省,2.95
|
||||||
|
2989649772,353266.3068118,314586.6119876,816569.9774388,71733.723177,江苏美科太阳能科技股份有限公司,江苏省,5.91
|
||||||
|
25147774,122743.43558,87339.0741283333,470955.22499,92968.234407,有研新材料股份有限公司,北京市,5.67
|
||||||
|
413876805,245.891363896894,142.090621109369,353.107586951086,22.31839,益阳同行机电设备有限公司,湖南省,2.55
|
||||||
|
11807506,19609298.1959302,12104435.9853224,39142373.2,5444482.05714286,比亚迪股份有限公司,广东省,7.59
|
||||||
|
3384021594,24097.3536618956,13924.8808687182,34604.5435212064,2187.20222,中电化合物半导体有限公司,浙江省,4.54
|
||||||
|
80158773,12635.7451105,6465.9750325,23799.6983851667,1474.810014,江苏华盛天龙光电设备股份有限公司,江苏省,4.38
|
||||||
|
3312358902,66438.2226519953,41878.7735649207,237082.540978857,87569.4877398571,沈阳芯源微电子设备股份有限公司,辽宁省,5.37
|
||||||
|
80169705,49057.3516709158,36516.8322531191,374401.3523425,149290.899493,深圳市联赢激光股份有限公司,广东省,5.57
|
||||||
|
27075840,240383.397345603,138907.79119652,345197.977003382,21818.458064,上海生物制品研究所有限责任公司,上海市,5.54
|
||||||
|
3077450214,25753.3271505,16846.9978213333,150584.844272833,21242.4322786667,安集微电子科技(上海)股份有限公司,上海市,5.18
|
||||||
|
2311352797,55205.024134511,31900.7387787705,79276.1183263333,6754.43288,阳光中科(福建)能源股份有限公司,福建省,4.9
|
||||||
|
22324879,32642.0785573127,18862.5299522688,46875.0321677567,2962.7662725,北京中电科电子装备有限公司,北京市,4.67
|
||||||
|
4379631621,245.891363896894,142.090621109369,353.107586951086,22.31839,深圳市铁盒科技有限公司,广东省,2.55
|
||||||
|
2349616974,31228.2032149055,18045.5088808899,44844.6635427879,2834.43553,无锡派斯克科技有限公司,江苏省,4.65
|
||||||
|
423388486,163646.093171967,112755.430119389,622443.151983429,242227.496705143,海目星激光科技集团股份有限公司,广东省,5.79
|
||||||
|
1679596339,7602.68963569803,4393.28521066349,10917.6969416667,4958.50469716667,上海广奕电子科技股份有限公司,上海市,4.04
|
||||||
|
3164072929,798499.18961975,624873.87844475,1327789.8413485,124088.77507875,芯联集成电路制造股份有限公司,浙江省,6.12
|
||||||
|
1033972427,36282.327026942,26200.1602546739,467572.046681333,150030.431427836,盛美半导体设备(上海)股份有限公司,上海市,5.67
|
||||||
|
354328758,4917.82727793788,2841.81242218739,7062.15173902172,446.3678,安徽索克菲尼仪表有限公司,安徽省,3.85
|
||||||
|
1044103384,424162.602722142,245106.321413662,609110.587490623,38499.22275,通威太阳能(安徽)有限公司,安徽省,5.78
|
||||||
|
78979697,3444820.24820822,2409945.69767362,8167350.12541314,1224407.85554914,晶科能源股份有限公司,江西省,6.91
|
||||||
|
2316430101,190407.310913344,133151.348506564,648884.637041571,104480.892502143,江苏卓胜微电子股份有限公司,江苏省,5.81
|
||||||
|
2349076526,438376.609971396,268726.318611834,2259548.69151771,771941.581803429,无锡先导智能装备股份有限公司,江苏省,6.35
|
||||||
|
2347561020,23605.5709341018,13640.6996264995,33898.3283473042,2142.56544,安徽北方微电子研究院集团有限公司,安徽省,4.53
|
||||||
|
11169556957,983.565455587577,568.362484437478,1412.43034780434,89.27356,安徽华鑫微纳集成电路有限公司,安徽省,3.15
|
||||||
|
2333843479,25746.1035943333,12125.48027,54175.2774613333,8385.40003966667,山东华光光电子股份有限公司,山东省,4.73
|
||||||
|
59234665,251695.047657333,199428.352979167,1787952.23306117,656252.890643167,浙江晶盛机电股份有限公司,浙江省,6.25
|
||||||
|
4995239819,491.782727793788,284.181242218739,706.215173902172,44.63678,江苏明纳供应链管理有限公司,江苏省,2.85
|
||||||
|
2339136692,640144.399809059,473982.97970632,1481467.957578,133298.837068571,弘元绿色能源股份有限公司,江苏省,6.17
|
||||||
|
3327312155,4794.88159598943,2770.76711163271,6885.59794554618,435.208605,合肥钛柯精密机械有限公司,安徽省,3.84
|
||||||
|
1389529309,32860.1214204911,18988.5280571493,47188.14844825,8239.6429645,深圳市哈德胜精密科技股份有限公司,广东省,4.67
|
||||||
|
18729484,505503.465899235,292109.898876642,725918.577254043,45882.146162,淮海工业集团有限公司,山西省,5.86
|
||||||
|
3287925122,8729.14341833971,5044.21704938262,12535.3193367636,792.302845,贵州通创科光电有限公司,贵州省,4.1
|
||||||
|
888662519,22130.2227507204,12788.1558998433,31779.6828255977,2008.6551,东莞市森富同纸品有限公司,广东省,4.5
|
||||||
|
443872531,217273.703527667,142463.186399833,490405.746949167,14931.5790275,惠州光弘科技股份有限公司,广东省,5.69
|
||||||
|
24673506,3731195.01695067,1819174.82755833,3657055.221448,291506.649439667,江苏长电科技股份有限公司,江苏省,6.56
|
||||||
|
3065971313,134201.385594667,87171.1758126667,197624.891468667,29697.253081,华羿微电子股份有限公司,陕西省,5.3
|
||||||
|
830662620,262637.565598167,177898.6218025,676303.217476167,73842.0312075,扬州扬杰电子科技股份有限公司,江苏省,5.83
|
||||||
|
613464015,17409.1331735,10325.6691753333,220548.5172555,35552.7344381667,贵州振华风光半导体股份有限公司,贵州省,5.34
|
||||||
|
2453696971,48907.0477203197,33449.653193481,182178.79532558,34675.6299895,罗博特科智能科技股份有限公司,江苏省,5.26
|
||||||
|
43566171,19425.4177478546,11225.1590676402,27895.4993691358,1763.15281,长白朝鲜族自治县天宝硅藻土功能制品有限公司,吉林省,4.45
|
||||||
|
2311838590,53398.0289114503,26546.600225041,80495.2837445714,310.151853,上海华岭集成电路技术股份有限公司,上海市,4.91
|
||||||
|
409663925,63931.7546131924,36943.5614884361,91807.9726072824,5802.7814,三河建华高科有限责任公司,河北省,4.96
|
||||||
|
3414534661,227798.54904047,146248.694269867,454874.703635286,46215.3088984286,厦门弘信电子科技集团股份有限公司,福建省,5.66
|
||||||
|
3393219477,245.891363896894,142.090621109369,353.107586951086,22.31839,吉林新环诚汽车科技有限公司,吉林省,2.55
|
||||||
|
11175750477,39342.618223503,22734.4993774991,56497.2139121738,3570.9424,强一半导体(合肥)有限公司,安徽省,4.75
|
||||||
|
2321857672,172615.737455619,99747.6160187774,247881.526039662,15667.50978,福建福顺半导体制造有限公司,福建省,5.39
|
||||||
|
146491012,172984.813296877,111150.023329549,555820.536672,166754.219868852,博众精工科技股份有限公司,江苏省,5.74
|
||||||
|
2311907103,61082.6578818333,46952.3648285,333112.031847833,76726.8203528333,苏州赛腾精密电子股份有限公司,江苏省,5.52
|
||||||
|
3464943902,368.837045845341,213.135931664054,529.661380426629,33.477585,南京波彩汽车服务有限公司,江苏省,2.72
|
||||||
|
259923931,1426.16991060198,824.125602434345,2048.0240043163,129.446662,甘肃明辰环保科技有限公司,甘肃省,3.31
|
||||||
|
3054059190,16474.7213810919,9520.07161432775,23658.2083257228,1495.33213,四川宏润达幕墙装饰工程有限公司,四川省,4.37
|
||||||
|
186745206,322457.554289333,214280.913465333,594869.173440333,31534.1938276667,四川东材科技集团股份有限公司,四川省,5.77
|
||||||
|
507827038,690052.603181786,422522.420147987,1589615.70303614,134419.051238286,潮州三环(集团)股份有限公司,广东省,6.2
|
||||||
|
2349737110,18351.1885185589,10604.4056748188,26352.8730443333,6196.09279783333,无锡红光微电子股份有限公司,江苏省,4.42
|
||||||
|
505990558,2704.80500286583,1562.99683220306,3884.18345646195,245.50229,铜陵佳友科技有限公司,安徽省,3.59
|
||||||
|
221048382,157338.070008167,103120.752683167,993163.7559685,352447.843621667,云南省贵金属新材料控股集团股份有限公司,云南省,6.0
|
||||||
|
2348910693,26926.1598385298,15632.4205943617,40928.6516936667,4641.11761583333,北京康美特科技股份有限公司,北京市,4.61
|
||||||
|
2342515031,55858.3214985777,32278.2527620118,80214.2735023883,5069.99426166667,苏州住友电木有限公司,江苏省,4.9
|
||||||
|
2360390148,6393.17546131924,3694.35614884361,9180.79726072824,580.27814,广东施奈仕实业有限公司,广东省,3.96
|
||||||
|
2317568755,11034.5563371667,7291.74244,86496.1049655,7858.70136516667,深圳科创新源新材料股份有限公司,广东省,4.94
|
||||||
|
2349511062,8646.87845536109,4996.67947221875,12417.1843111667,1190.53784783333,江苏明昊新材料科技股份有限公司,江苏省,4.09
|
||||||
|
500189853,22867.8968424112,13214.4277631714,32839.005586451,2075.61027,东莞升洋焊锡材料有限公司,广东省,4.52
|
||||||
|
18065940,191013.048499246,96582.5538206939,867380.822769857,143283.010690286,北京君正集成电路股份有限公司,北京市,5.94
|
||||||
|
2333993502,206465.644948888,142992.065005962,241630.438272143,17415.7935534286,合肥新汇成微电子股份有限公司,安徽省,5.38
|
||||||
|
433384648,13130.5988320941,7587.63916724033,18855.945143188,1191.802026,牡丹江市北亚硬质合金有限责任公司,黑龙江省,4.28
|
||||||
|
344181818,162948.972334805,104126.347671517,466055.759069286,79181.2545228571,青岛高测科技股份有限公司,山东省,5.67
|
||||||
|
1104420298,86588.4830698333,50706.5640115,1206682.12055083,213731.195733667,中微半导体设备(上海)股份有限公司,上海市,6.08
|
||||||
|
2349349655,8916.26246416139,5152.34553759312,12804.0280612,1116.3192482,苏州博洋化学股份有限公司,江苏省,4.11
|
||||||
|
420984285,223613.011910333,158257.78831,1015669.78454783,62168.8641543333,深圳新宙邦科技股份有限公司,广东省,6.01
|
||||||
|
2329836516,78826.6177775,56812.0715446667,203111.819117167,4786.47693733333,江阴江化微电子材料股份有限公司,江苏省,5.31
|
||||||
|
27599908,65243.1752206425,37701.3781343527,93691.2130710213,5921.81281333333,北京航天晨信科技有限责任公司,北京市,4.97
|
||||||
|
2350719552,1767.01581175,997.23466825,55246.80543625,11314.5121375,深圳好博窗控技术股份有限公司,广东省,4.74
|
||||||
|
3216066502,47519.3914293237,25919.6030558896,183625.261502,20677.0661462857,楚天龙股份有限公司,广东省,5.26
|
||||||
|
39698451,107938.314838978,39590.1075543603,412101.092700429,69378.6032017143,东方通信股份有限公司,浙江省,5.62
|
||||||
|
2351643794,24220.299343844,13995.9261792729,34781.097314682,2198.361415,亚洲信用卡厂(深圳)有限公司,广东省,4.54
|
||||||
|
2351192662,8851.83008107238,5548.49697731345,27867.47160725,3416.11452834962,河北晶禾电子技术股份有限公司,河北省,4.45
|
||||||
|
865049663,87774.8053041193,59882.7303796437,298504.191277714,43328.108973,国民技术股份有限公司,广东省,5.47
|
||||||
|
891649,85550.3230285109,36367.0451934161,230945.34964,25810.7164891429,恒宝股份有限公司,江苏省,5.36
|
||||||
|
3424978618,31885.9688027932,21504.6483379033,177114.294382333,56086.1265501667,深圳市智微智能科技股份有限公司,广东省,5.25
|
||||||
|
3145156061,245.891363896894,142.090621109369,353.107586951086,22.31839,北京中星微人工智能芯片技术有限公司,北京市,2.55
|
||||||
|
281599332,64820.07552,40154.6568665,558302.417650333,40598.0444641667,金卡智能集团股份有限公司,浙江省,5.75
|
||||||
|
79938367,364886.103943167,192426.6793045,3404308.61500033,438207.673933167,海信视像科技股份有限公司,山东省,6.53
|
||||||
|
864169770,170444.206583047,110508.776061746,469960.309361,24457.7740034286,深圳市聚飞光电股份有限公司,广东省,5.67
|
||||||
|
2310296367,37034.8887722,31909.4172092,800509.2176356,31554.9076322,澜起科技股份有限公司,上海市,5.9
|
||||||
|
774611690,87455.3617593286,50536.8975745657,125588.598425603,7937.90737666667,成都大唐线缆有限公司,四川省,5.1
|
||||||
|
2350442566,24785.8494808069,14322.7346078244,35593.2447646695,2249.693712,无锡友达电子有限公司,江苏省,4.55
|
||||||
|
654461595,14660.1619921667,11316.6484308333,119189.010378333,8316.87563333333,上海灿瑞科技股份有限公司,上海市,5.08
|
||||||
|
383463860,498520.151164562,288074.525237136,715890.321784631,45248.303886,广东虹勤通讯技术有限公司,广东省,5.85
|
||||||
|
463659395,164973.071000475,103647.445394252,518579.052314833,39793.0929578333,深圳市奋达科技股份有限公司,广东省,5.71
|
||||||
|
2347105663,7670.18126121354,4432.28587679994,11014.61699875,4603.6098265,深圳市百泰实业股份有限公司,广东省,4.04
|
||||||
|
504638253,84443.6902996838,49855.5442456137,204519.3508715,51230.2114925,珠海市杰理科技股份有限公司,广东省,5.31
|
||||||
|
519195163,1924.04639447068,1111.82817851309,2762.99,269.27,深圳市迪浦电子有限公司,广东省,3.44
|
||||||
|
3221578464,6393.17546131924,3694.35614884361,9180.79726072824,580.27814,北京电星互动文化传媒有限公司,北京市,3.96
|
||||||
|
2316256865,31675.2583182562,18154.1646929991,146872.233407667,30518.2317446667,广州慧智微电子股份有限公司,广东省,5.17
|
||||||
|
3269840248,368.837045845341,213.135931664054,529.661380426629,33.477585,安徽创矽电子科技有限公司,安徽省,2.72
|
||||||
|
1675147952,16925.06773,12545.4403666,86939.851294,9412.2279396,广州安凯微电子股份有限公司,广东省,4.94
|
||||||
|
29223617,49351.6354965,38030.0537195,336478.787652167,25356.7104388333,青岛东软载波科技股份有限公司,山东省,5.53
|
||||||
|
2553848709,15982.9386532981,9235.89037210901,22951.9931518205,1450.69535,深圳智微电子科技股份有限公司,广东省,4.36
|
||||||
|
168035745,4475.22282292347,2586.04930419052,6426.55808250976,406.194698,成都艾希联科技有限公司,四川省,3.81
|
||||||
|
510149116,4130.97491346782,2387.12243463741,5932.20746077824,374.948952,深圳市宝视达科技有限公司,广东省,3.77
|
||||||
|
5591349,214284.563403751,124927.075093795,1154545.83667914,44936.3798348571,北京四维图新科技股份有限公司,北京市,6.06
|
||||||
|
274839085,5072.9571540186,2931.45566990296,7284.9230285,1251.8898265,上海长合信息技术股份有限公司,上海市,3.86
|
||||||
|
4209347174,10573.3286475664,6109.89670770289,15183.6262388967,959.69077,四川锦路通科技有限公司,四川省,4.18
|
||||||
|
413142822,33691.2724915977,19012.8064225955,295228.181493667,9677.11797866667,北京弘高创意建筑设计股份有限公司,北京市,5.47
|
||||||
|
951988821,25605.8899302788,18756.1741981746,351800.143148667,88668.7767376667,武汉帝尔激光科技股份有限公司,湖北省,5.55
|
||||||
|
1587526,37281.2763304483,20821.6870507603,264083.505326,37562.7044782857,北京北信源软件股份有限公司,北京市,5.42
|
||||||
|
3402194899,614.728409742234,355.226552773424,882.768967377713,55.795975,吉林省依岚机器人科技有限公司,吉林省,2.95
|
||||||
|
730857,170484.678968513,98516.1639691628,244821.260286086,15474.0837333333,北京机械工业自动化研究所有限公司,北京市,5.39
|
||||||
|
27085933,39068.3169418316,24985.5123183443,81807.0237951429,3512.25453285714,观典防务技术股份有限公司,北京市,4.91
|
||||||
|
24495941,68018.9182948103,41411.5321373808,343277.487442714,80497.7686304286,瑞斯康达科技发展股份有限公司,北京市,5.54
|
||||||
|
2424229017,114276.893374667,77926.1367106667,500826.828284333,41132.540103,湖北鼎龙控股股份有限公司,湖北省,5.7
|
||||||
|
3118428071,245.891363896894,142.090621109369,353.107586951086,22.31839,浙江出彩智能科技有限公司,浙江省,2.55
|
||||||
|
3297178263,6721.03061318177,3883.81031032277,9651.60737666299,610.035993333333,安徽徽昂光电科技有限公司,安徽省,3.98
|
||||||
|
441623911,79201.8446421667,54549.9474813333,240891.492164333,46601.7746505,东莞铭普光磁股份有限公司,广东省,5.38
|
||||||
|
2316150629,3193.75060666667,2061.597836,93411.1801021667,20442.4057828333,深圳英集芯科技股份有限公司,广东省,4.97
|
||||||
|
2327057709,23544.9442314765,13440.4003796565,68644.06669975,18862.75571075,苏州华之杰电讯股份有限公司,江苏省,4.84
|
||||||
|
2624175,112528.502696921,68592.2842455949,676577.778208429,45047.728384,北京旋极信息技术股份有限公司,北京市,5.83
|
||||||
|
3483100980,491.782727793788,284.181242218739,706.215173902172,44.63678,公主岭市王岩口腔诊所有限公司,吉林省,2.85
|
||||||
|
781386116,141735.041227833,75482.3393631667,509573.936014,65785.0702958333,国光电器股份有限公司,广东省,5.71
|
||||||
|
3222821993,7991.46932664906,4617.94518605451,11475.9965759103,725.347675,象山金钇光电科技有限公司,浙江省,4.06
|
||||||
|
10398718,769033.670522573,491078.248113787,2870403.42429771,537996.506329429,中国长城科技集团股份有限公司,广东省,6.46
|
||||||
|
3042364033,245.891363896894,142.090621109369,353.107586951086,22.31839,上海津领信息科技有限公司,上海市,2.55
|
||||||
|
2342518227,9173.79330924141,5301.16214161011,13173.8503023333,3045.84492716667,江苏欧密格光电科技股份有限公司,江苏省,4.12
|
||||||
|
3068358389,1811.95903660257,1047.05745193863,2602.029095,298.473805182015,无锡汉咏科技股份有限公司,江苏省,3.42
|
||||||
|
20751117,15716.6102843333,8183.32674633333,416800.384882667,41335.5048401667,上海贝岭股份有限公司,上海市,5.62
|
||||||
|
3449575456,705.462014166667,404.564843666667,98147.2591208333,8331.321303,峰岹科技(深圳)股份有限公司,广东省,4.99
|
||||||
|
3440374619,5071.89578685606,2930.84234897554,7283.3988725,2753.40906483333,浙江信测通信股份有限公司,浙江省,3.86
|
||||||
|
3168979780,312036.140785158,180312.99818779,448093.527840928,28322.03691,华域视觉科技(上海)有限公司,上海市,5.65
|
||||||
|
2962064709,10650.3258155645,6154.39024033911,15294.1965483333,3870.76790783333,上海中基国威电子股份有限公司,上海市,4.18
|
||||||
|
3151203276,341884.6623548,201430.568992,477385.6924028,28574.494008,合肥颀中科技股份有限公司,安徽省,5.68
|
||||||
|
2334772533,28252.9257821369,16326.2170290132,40572.07333,8232.49431216667,南京泰通科技股份有限公司,江苏省,4.61
|
||||||
|
38567125,55215.5674613333,32280.1155033333,195121.699532833,23741.5776591667,杭州星帅尔电器股份有限公司,浙江省,5.29
|
||||||
|
2338894532,7130.84955300992,4120.62801217171,10240.1200215815,647.23331,宁波锦澄电子科技股份有限公司,浙江省,4.01
|
||||||
|
270141231,72968.2622364032,42165.3918142054,104784.676427735,6622.9822325,贵州雅光电子科技股份有限公司,贵州省,5.02
|
||||||
|
220783142,7868.5236447006,4546.89987549982,11299.4427824348,714.18848,麦歌恩电子(上海)有限公司,上海市,4.05
|
||||||
|
3407754893,232859.633511805,168326.909166578,411069.08997625,40891.55866,比亚迪半导体股份有限公司,广东省,5.61
|
||||||
|
9278530,70406.8938624773,40685.2811776494,101106.472396994,6390.49900333333,北京银联金卡科技有限公司,北京市,5.0
|
||||||
|
2323580212,16597.6670630403,9591.11692488244,23834.7621191983,1506.491325,深圳市美莱雅科技有限公司,广东省,4.38
|
||||||
|
2331160070,3255.79612835197,1881.39220000014,4675.42371666667,794.0237395,南通光合生物技术股份有限公司,江苏省,3.67
|
||||||
|
2349345463,74136.2462149135,42840.3222644749,106461.937465753,6728.994585,成都海威华芯科技有限公司,四川省,5.03
|
||||||
|
2350687852,11074.7830890728,6399.66684001862,15903.7302921667,4029.26472366667,江苏钜芯集成电路技术股份有限公司,江苏省,4.2
|
||||||
|
2357754148,8015.82834302686,4632.02127116739,11510.9768751667,3729.40010633333,广芯电子技术(上海)股份有限公司,上海市,4.06
|
||||||
|
3173999388,16720.6127449888,9662.16223543712,24011.3159126738,1517.65052,东方微电科技(武汉)有限公司,湖北省,4.38
|
||||||
|
501323741,66833.3625173174,43673.4697465961,220671.160353143,45867.2232541429,浙江大立科技股份有限公司,浙江省,5.34
|
||||||
|
2311337085,19127.0147477191,11036.5029958297,112145.035851286,36647.5253237143,上海安路信息科技股份有限公司,上海市,5.05
|
||||||
|
2950325617,19318.22026519,11163.2140011207,27741.5604758333,5855.69548783333,深圳市汇春科技股份有限公司,广东省,4.44
|
||||||
|
2350701298,2458.91363896894,1420.90621109369,3531.07586951086,223.1839,深圳市玛琪电子科技有限公司,广东省,3.55
|
||||||
|
2322658897,1721.23954727826,994.634347765586,2471.7531086576,156.22873,深圳市好通家实业有限公司,广东省,3.39
|
||||||
|
2347015781,41626.2975832227,25542.5692075516,141575.867817429,28732.6177297143,苏州盛科通信股份有限公司,江苏省,5.15
|
||||||
|
24610687,6738738.84243147,3834842.07575342,24477540.6526928,2602016.44544083,潍柴动力股份有限公司,山东省,7.39
|
||||||
|
181655991,273187.085037167,140652.672426167,1074612.49761317,1582.68336616667,网宿科技股份有限公司,上海市,6.03
|
||||||
|
2326956863,124019.549713435,73785.5926887248,540313.3684405,76558.826568734,南京国博电子股份有限公司,江苏省,5.73
|
||||||
|
3270918801,15859.9929713496,9164.84506155432,22775.4393583451,1439.536155,浙江康鹏半导体有限公司,浙江省,4.36
|
||||||
|
7299120,86887.22406325,46503.9275985,158305.75064575,29562.480612,北京通美晶体技术股份有限公司,北京市,5.2
|
||||||
|
557266995,12727.7263021028,7354.83551319098,18277.4077571667,1541.1883505,上海宇昂水性新材料科技股份有限公司,上海市,4.26
|
||||||
|
2357759100,9393.05010086134,5427.86172637791,13488.7098215315,852.562498,兰州华亚碳化硅有限公司,甘肃省,4.13
|
||||||
|
695879282,245.891363896894,142.090621109369,353.107586951086,22.31839,长兴县煤山石墨炉料厂,浙江省,2.55
|
||||||
|
2314301730,245.891363896894,142.090621109369,353.107586951086,22.31839,哈尔滨滨大阀门销售有限公司,黑龙江省,2.55
|
||||||
|
3118917053,3745.07570646035,2235.78648897479,34776.380083,7562.35984084442,钰泰半导体股份有限公司,江苏省,4.54
|
||||||
|
648145286,5614.51947564574,3244.4025153306,8062.62323538314,509.603238333333,东莞高辉光电科技有限公司,广东省,3.91
|
||||||
|
4091219112,614.728409742235,355.226552773424,882.768967377716,55.795975,深圳市盈享电子有限公司,广东省,2.95
|
||||||
|
60716715,592169.358539127,384961.940366283,1120885.29632114,52097.0039868571,东江环保股份有限公司,广东省,6.05
|
||||||
|
2982872611,8421.77921346862,4866.60377299591,12093.9348530747,764.4048575,长春精测光电技术有限公司,吉林省,4.08
|
||||||
|
3051771738,42617.058969,38615.9713255,335052.885705,119431.036400333,思特威(上海)电子科技股份有限公司,上海市,5.53
|
||||||
|
1237811030,14876.4275157621,8596.48257711685,21363.0090105407,1350.262595,上海华元创信软件有限公司,上海市,4.33
|
||||||
|
814834276,491.782727793788,284.181242218739,706.215173902172,44.63678,合肥迅驰电子科技有限责任公司,安徽省,2.85
|
||||||
|
3339921892,3196.58773065962,1847.1780744218,4590.39863036412,290.13907,安徽新芯威半导体有限公司,安徽省,3.66
|
||||||
|
2358215091,13289.0210914582,7679.18494938513,19083.4443966667,2443.928088,湖南康通电子股份有限公司,湖南省,4.28
|
||||||
|
6823511,78869.4760125386,47996.3703655252,256662.443677,49246.3736734781,龙芯中科技术股份有限公司,北京市,5.41
|
||||||
|
2318300058,9211.4190974,8204.0656666,166804.0972472,22511.6174346,上海南芯半导体科技股份有限公司,上海市,5.22
|
||||||
|
30918572,15257.2196295671,8816.52685645477,21909.8382375,6399.88976466667,先控捷联电气股份有限公司,河北省,4.34
|
||||||
|
173280333,248425.451059374,142652.70938459,878978.625317428,71268.6104547143,欧普照明股份有限公司,上海市,5.94
|
||||||
|
1217010297,90629.2798441586,52928.8445056824,472859.626137,86929.247462,湖南国科微电子股份有限公司,湖南省,5.67
|
||||||
|
227353488,175499.644065506,111018.373589625,674848.280106857,141511.018406,深圳麦格米特电气股份有限公司,广东省,5.83
|
||||||
|
4728160558,6146862.45588483,3440255.60792112,21708037.884611,3437661.391239,海尔智家股份有限公司,山东省,7.34
|
||||||
|
2313858141,16878.5286234786,10924.6070951714,54919.3020473333,8636.660643,苏州锴威特半导体股份有限公司,江苏省,4.74
|
||||||
|
2311676659,91225.6960057476,52715.6204315761,131002.914758853,8280.12269,西安航天远征流体控制股份有限公司,陕西省,5.12
|
||||||
|
1048928993,32609.7984571027,18843.8765948852,46828.6769476667,13303.533159,上海南麟电子股份有限公司,上海市,4.67
|
||||||
|
966536464,4523.96805911779,2614.21719417741,6496.557746,957.122635333333,安徽中瑞通信科技股份有限公司,安徽省,3.81
|
||||||
|
3464313484,16473.8484456667,14922.002517,126101.603055167,6330.15329883333,江苏帝奥微电子股份有限公司,江苏省,5.1
|
||||||
|
338952484,14110.7472545758,8154.02708718447,20263.468526,6999.23901883333,山东德佑电气股份有限公司,山东省,4.31
|
||||||
|
27042865,1497706.54820932,865463.716586106,2150752.82359567,291043.484399,许继集团有限公司,河南省,6.33
|
||||||
|
3104545193,105021.775873296,73402.8541622617,268651.229376429,36083.9444402857,深圳欧陆通电子股份有限公司,广东省,5.43
|
||||||
|
9620005,295597.151853333,194730.920618333,2678794.80455533,681912.489464,上海韦尔半导体股份有限公司,上海市,6.43
|
||||||
|
864166372,88655.6666795,53753.15834,298897.386987333,27638.9844123333,江苏云意电气股份有限公司,江苏省,5.48
|
||||||
|
33822284,7821705.81265451,4340541.90024414,31773080.975276,3117341.894336,珠海格力电器股份有限公司,广东省,7.5
|
||||||
|
3312199997,138830.090012117,91789.4512288681,333225.515573857,39124.2209532857,河北中瓷电子科技股份有限公司,河北省,5.52
|
||||||
|
591975267,4917.82727793788,2841.81242218739,7062.15173902172,446.3678,沧州凯润电子科技有限公司,河北省,3.85
|
||||||
|
3357541349,90822.4366201021,66907.2350655535,148235.929229143,6191.05493557143,杭州美迪凯光电科技股份有限公司,浙江省,5.17
|
||||||
|
708388905,3442.47909455651,1989.26869553117,4943.5062173152,312.45746,南通锦程塑料制品厂,江苏省,3.69
|
||||||
|
16116663,93258.3100837016,52399.5479796363,350692.109563571,26734.2883584286,珠海航宇微科技股份有限公司,广东省,5.54
|
||||||
|
784491064,36676.1406432416,26183.5340754385,78563.0454985714,4984.05170328571,腾景科技股份有限公司,福建省,4.9
|
||||||
|
2329395956,983.565455587575,568.362484437478,1412.43034780434,89.27356,辽阳县力通机械制造有限公司,辽宁省,3.15
|
||||||
|
2348912438,15033.7874138907,8687.41446389993,21588.9826805,6642.99890894431,广东圣帕新材料股份有限公司,广东省,4.33
|
||||||
|
520408144,223023.467054483,128876.193346198,320268.581364635,20242.77973,国巨电子(东莞)有限公司,广东省,5.51
|
||||||
|
2351592628,41820.4531887686,22960.7164579339,141041.529103571,26807.1478321429,无锡市德科立光电子技术股份有限公司,江苏省,5.15
|
||||||
|
300186799,1913582.75295502,1234953.81045746,2517803.40044929,175073.587292714,天水华天科技股份有限公司,甘肃省,6.4
|
||||||
|
578803019,16290.3028581692,9413.50364849573,23393.3776355094,1478.5933375,深圳市光脉电子有限公司,广东省,4.37
|
||||||
|
343932526,63566.4602922289,45042.3466785544,273327.568779,48343.29187,上海艾为电子技术股份有限公司,上海市,5.44
|
||||||
|
2349375343,4807.3848604464,2777.99223977234,6903.55301916667,1503.62640083333,苏州康尼格电子科技股份有限公司,江苏省,3.84
|
||||||
|
2325170042,10068.2861576175,5818.05318808436,14458.3696373333,1149.84855133333,深圳电通纬创微电子股份有限公司,广东省,4.16
|
||||||
|
10437056,194286.929344781,116962.315280927,419389.225194167,1602.69784816667,广电计量检测集团股份有限公司,广东省,5.62
|
||||||
|
3306665331,28691.8448431667,19979.0470871667,309295.834049333,16592.0700063333,芯原微电子(上海)股份有限公司,上海市,5.49
|
||||||
|
23131812,71270.701868413,40132.0804564047,330063.943783714,29776.0587888571,北京东方中科集成科技股份有限公司,北京市,5.52
|
||||||
|
3120341363,177544.316546708,129292.795388716,626033.402033857,102806.403100857,武汉精测电子集团股份有限公司,湖北省,5.8
|
||||||
|
314846874,1984.631183,1641.71031766667,17644.9277333333,1747.244057,赛卓电子科技(上海)股份有限公司,上海市,4.25
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
Firm_Code,相关细分行业,设备id,种类,设备单价数值,固定资产原值(万元人民币),设备数量
|
||||||
|
2311639124,34524,72,设备,140,737.674091690682,5.26910065493344
|
||||||
|
762165453,34524,72,设备,140,614.728409742234,4.39091721244453
|
||||||
|
2989649772,34525,64,设备,500,353266.3068118,706.5326136236
|
||||||
|
25147774,34525,64,设备,500,122743.43558,245.48687116
|
||||||
|
413876805,34526,60,设备,210,245.891363896894,1.17091125665188
|
||||||
|
11807506,34526,60,设备,210,19609298.1959302,93377.6104568105
|
||||||
|
3384021594,34527,67,设备,250,24097.3536618956,96.3894146475824
|
||||||
|
413876805,34527,67,设备,250,245.891363896894,0.983565455587576
|
||||||
|
80158773,34528,69,设备,25,12635.7451105,505.42980442
|
||||||
|
2343704209,34528,69,设备,25,71514.6399746746,2860.58559898698
|
||||||
|
3312358902,34529,61,设备,350,66438.2226519953,189.823493291415
|
||||||
|
80169705,34529,61,设备,350,49057.3516709158,140.163861916902
|
||||||
|
27075840,34530,65,设备,700,240383.397345603,343.404853350861
|
||||||
|
3077450214,34530,65,设备,700,25753.3271505,36.7904673578571
|
||||||
|
2311352797,34531,71,设备,140,55205.024134511,394.321600960793
|
||||||
|
22324879,34531,71,设备,140,32642.0785573127,233.157703980805
|
||||||
|
4379631621,34532,73,设备,210,245.891363896894,1.17091125665188
|
||||||
|
2349616974,34532,73,设备,210,31228.2032149055,148.705729594788
|
||||||
|
423388486,34533,66,设备,100000,163646.093171967,1.63646093171967
|
||||||
|
1679596339,34533,66,设备,100000,7602.68963569803,0.0760268963569803
|
||||||
|
3164072929,34534,63,设备,700,798499.18961975,1140.71312802821
|
||||||
|
22324879,34534,63,设备,700,32642.0785573127,46.631540796161
|
||||||
|
1033972427,34535,59,设备,700,36282.327026942,51.8318957527743
|
||||||
|
3312358902,34535,59,设备,700,66438.2226519953,94.9117466457076
|
||||||
|
354328758,34537,62,设备,140,4917.82727793788,35.1273376995563
|
||||||
|
1044103384,34537,62,设备,140,424162.602722142,3029.73287658673
|
||||||
|
78979697,34538,74,设备,500,3444820.24820822,6889.64049641644
|
||||||
|
2316430101,34538,74,设备,500,190407.310913344,380.814621826688
|
||||||
|
2349076526,34539,68,设备,350,438376.609971396,1252.50459991827
|
||||||
|
2347561020,34539,68,设备,350,23605.5709341018,67.444488383148
|
||||||
|
11169556957,34543,70,设备,35,983.565455587577,28.1018701596451
|
||||||
|
2333843479,34543,70,设备,35,25746.1035943333,735.602959838094
|
||||||
|
22324879,34544,83,设备,140,32642.0785573127,233.157703980805
|
||||||
|
59234665,34544,83,设备,140,251695.047657333,1797.82176898095
|
||||||
|
4995239819,34545,81,设备,210,491.782727793788,2.34182251330375
|
||||||
|
2339136692,34545,81,设备,210,640144.399809059,3048.30666575742
|
||||||
|
3327312155,34546,84,设备,70,4794.88159598943,68.4983085141347
|
||||||
|
1389529309,34546,84,设备,70,32860.1214204911,469.430306007016
|
||||||
|
18729484,34547,87,设备,70,505503.465899235,7221.47808427479
|
||||||
|
3287925122,34547,87,设备,70,8729.14341833971,124.702048833424
|
||||||
|
888662519,34548,89,设备,70,22130.2227507204,316.146039296006
|
||||||
|
443872531,34549,85,设备,50,217273.703527667,4345.47407055334
|
||||||
|
24673506,34549,85,设备,50,3731195.01695067,74623.9003390134
|
||||||
|
3065971313,34550,75,设备,70,134201.385594667,1917.16265135239
|
||||||
|
830662620,34550,75,设备,70,262637.565598167,3751.96522283096
|
||||||
|
2347561020,34551,88,设备,70,23605.5709341018,337.22244191574
|
||||||
|
613464015,34551,88,设备,70,17409.1331735,248.701902478571
|
||||||
|
2453696971,34552,82,设备,70,48907.0477203197,698.672110290281
|
||||||
|
43566171,34552,82,设备,70,19425.4177478546,277.505967826494
|
||||||
|
2311838590,34553,80,设备,21,53398.0289114503,2542.76328149763
|
||||||
|
409663925,34553,80,设备,21,63931.7546131924,3044.36926729488
|
||||||
|
3414534661,34554,77,设备,350,227798.54904047,650.852997258486
|
||||||
|
3393219477,34554,77,设备,350,245.891363896894,0.702546753991126
|
||||||
|
11175750477,34555,76,设备,21,39342.618223503,1873.458010643
|
||||||
|
2311838590,34555,76,设备,21,53398.0289114503,2542.76328149763
|
||||||
|
2321857672,34556,78,设备,70,172615.737455619,2465.93910650884
|
||||||
|
146491012,34557,79,设备,350,172984.813296877,494.242323705363
|
||||||
|
2311907103,34557,79,设备,350,61082.6578818333,174.521879662381
|
||||||
|
3464943902,34558,86,设备,70,368.837045845341,5.26910065493344
|
||||||
|
259923931,34558,86,设备,70,1426.16991060198,20.3738558657426
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
Firm_Code,相关细分行业,材料id,种类,材料单价数值,存货(万元人民币),材料数量
|
||||||
|
1,7,10,材料,70.0,3736.5025,40.0339553571429
|
||||||
|
5,7,10,材料,70.0,2588.93324,27.7385704285714
|
||||||
|
29954548,7,10,材料,70.0,133292.643730143,1428.13546853725
|
||||||
|
29954548,7,10,材料,70.0,133292.643730143,1428.13546853725
|
||||||
|
453289520,8,37,材料,9.7,193520.088971571,14962.8934771833
|
||||||
|
453289520,8,37,材料,9.7,193520.088971571,14962.8934771833
|
||||||
|
350343208,2714,91,材料,140.0,3903.95977783333,20.9140702383928
|
||||||
|
37873062,2714,91,材料,140.0,184703.551339833,989.483310749105
|
||||||
|
1266556718,2714,91,材料,140.0,10632.3104404292,56.9588059308707
|
||||||
|
331545755,2715,92,材料,21.0,6911.28954133333,246.831769333333
|
||||||
|
3193516458,2715,92,材料,21.0,41347.21758,1476.68634214286
|
||||||
|
41454763,2715,92,材料,21.0,3281.00494028571,117.178747867347
|
||||||
|
584019624,2716,93,材料,7.0,19952.64066,2137.78292785714
|
||||||
|
185356903,2716,93,材料,7.0,29.7578533333333,3.18834142857143
|
||||||
|
22751149,2716,93,材料,7.0,263513.812713,28233.6227906786
|
||||||
|
27169556,2717,90,材料,70.0,455436.179933333,4879.67335642857
|
||||||
|
3346538900,2717,90,材料,70.0,335021.89871525,3589.52034337768
|
||||||
|
2541265952,2717,90,材料,70.0,662.112236666667,7.09405967857143
|
||||||
|
777299215,2718,94,材料,21.0,602.59653,21.5213046428571
|
||||||
|
18107611,2718,94,材料,21.0,4949308.389283,176761.013902964
|
||||||
|
4067555184,32338,7,材料,4.0,323.616655,60.6781228125
|
||||||
|
2313177432,32338,7,材料,4.0,89.27356,16.7387925
|
||||||
|
12098344,32338,7,材料,4.0,36019.3828761667,6753.63428928126
|
||||||
|
104671744,32432,16,材料,0.77,491.00458,478.251214285714
|
||||||
|
4208851809,32432,16,材料,0.77,49697.6881215,48406.8390793831
|
||||||
|
203314437,32433,22,材料,2.0,290.13907,108.80215125
|
||||||
|
2309668026,32434,12,材料,0.79,111.59195,105.941724683544
|
||||||
|
333499553,32434,12,材料,0.79,33711.928095,32004.9950268987
|
||||||
|
4315536490,32434,12,材料,0.79,66.95517,63.5650348101266
|
||||||
|
1270747834,32435,25,材料,0.5,3481.66884,5222.50326
|
||||||
|
39894253,32435,25,材料,0.5,662222.116666667,993333.175000001
|
||||||
|
287006714,32435,25,材料,0.5,111970.2725,167955.40875
|
||||||
|
3352578733,32436,29,材料,1.6,44.63678,20.923490625
|
||||||
|
366828854,32436,29,材料,1.6,37270.9437623333,17470.7548885937
|
||||||
|
5849940,32437,26,材料,20.0,2169804.72857143,81367.6773214286
|
||||||
|
5849940,32437,26,材料,20.0,2169804.72857143,81367.6773214286
|
||||||
|
29954548,32438,27,材料,0.25,133292.643730143,399877.931190429
|
||||||
|
3227189464,32438,27,材料,0.25,2990.66426,8971.99278
|
||||||
|
2961715231,32439,31,材料,0.25,881.576405,2644.729215
|
||||||
|
888478182,32439,31,材料,0.25,44.63678,133.91034
|
||||||
|
631103677,32440,15,材料,0.6,476.125653333333,595.157066666666
|
||||||
|
2319266522,32440,15,材料,0.6,62.491492,78.114365
|
||||||
|
1194436218,32440,15,材料,0.6,22.31839,27.8979875
|
||||||
|
2327979389,32441,13,材料,2.28,862.977746666667,283.87425877193
|
||||||
|
216898035,32441,13,材料,2.28,3585.82132666667,1179.54648903509
|
||||||
|
3274238529,32443,23,材料,2.5,66.95517,20.086551
|
||||||
|
61066955,32443,23,材料,2.5,28179.6880875714,8453.90642627142
|
||||||
|
2348894245,32445,8,材料,22.78,11981.7573048571,394.482790985199
|
||||||
|
169978927,32445,8,材料,22.78,65028.9291661667,2140.98757131804
|
||||||
|
142823313,32446,20,材料,1.2,97437.8679368333,60898.6674605208
|
||||||
|
367669349,32446,20,材料,1.2,537603.399401,336002.124625625
|
||||||
|
2340606811,32447,28,材料,0.3,379.41263,948.531575
|
||||||
|
3269940677,32447,28,材料,0.3,2745.16197,6862.904925
|
||||||
|
1452048,32448,30,材料,10.0,1884370.44367833,141327.783275875
|
||||||
|
1452048,32448,30,材料,10.0,1884370.44367833,141327.783275875
|
||||||
|
892652617,32449,19,材料,100.0,5877.17603333333,44.07882025
|
||||||
|
1555364428,32449,19,材料,100.0,6371.900345,47.7892525875
|
||||||
|
2475874929,32450,24,材料,1.38,22.31839,12.1295597826087
|
||||||
|
2353020496,32450,24,材料,1.38,4997.96087575,2716.28308464674
|
||||||
|
4076786740,32451,17,材料,1.38,89.27356,48.5182391304348
|
||||||
|
331450699,32451,17,材料,1.38,491.00458,266.850315217391
|
||||||
|
3054059190,34566,105,材料,21.0,1495.33213,53.4047189285714
|
||||||
|
186745206,34566,105,材料,21.0,31534.1938276667,1126.22120813095
|
||||||
|
507827038,34566,105,材料,21.0,134419.051238286,4800.68040136736
|
||||||
|
2349737110,34567,103,材料,14.0,6196.09279783333,331.933542741071
|
||||||
|
505990558,34567,103,材料,14.0,245.50229,13.1519083928571
|
||||||
|
613464015,34568,107,材料,50.0,35552.7344381667,533.2910165725
|
||||||
|
221048382,34568,107,材料,50.0,352447.843621667,5286.71765432501
|
||||||
|
2348910693,34569,106,材料,8.0,4641.11761583333,435.104776484375
|
||||||
|
2342515031,34569,106,材料,8.0,5069.99426166667,475.31196203125
|
||||||
|
2360390148,34570,108,材料,28.0,580.27814,15.5431644642857
|
||||||
|
2317568755,34570,108,材料,28.0,7858.70136516667,210.500929424107
|
||||||
|
2349511062,34571,102,材料,21.0,1190.53784783333,42.5192088511904
|
||||||
|
2349511062,34571,102,材料,21.0,1190.53784783333,42.5192088511904
|
||||||
|
500189853,34572,104,材料,40.0,2075.61027,38.9176925625
|
||||||
|
18065940,34572,104,材料,40.0,143283.010690286,2686.55645044286
|
||||||
|
3006753238,34573,101,材料,21.0,236376.363264714,8442.01297373979
|
||||||
|
2333993502,34573,101,材料,21.0,17415.7935534286,621.992626908164
|
||||||
|
433384648,34574,109,材料,21.0,1191.802026,42.5643580714286
|
||||||
|
344181818,34574,109,材料,21.0,79181.2545228571,2827.9019472449
|
||||||
|
1104420298,36914,38,材料,700.0,213731.195733667,228.997709714643
|
||||||
|
37873062,36914,38,材料,700.0,184703.551339833,197.896662149821
|
||||||
|
1452048,46504,11,材料,35.0,1884370.44367833,40379.3666502499
|
||||||
|
2349349655,46504,11,材料,35.0,1116.3192482,23.9211267471429
|
||||||
|
420984285,46505,18,材料,15.5,62168.8641543333,3008.17084617742
|
||||||
|
2329836516,46505,18,材料,15.5,4786.47693733333,231.603722774193
|
||||||
|
2326956863,56319,34,材料,350.0,76558.826568734,164.054628361573
|
||||||
|
2326956863,56319,34,材料,350.0,76558.826568734,164.054628361573
|
||||||
|
3270918801,56320,32,材料,200.0,1439.536155,5.39826058125
|
||||||
|
7299120,56320,32,材料,200.0,29562.480612,110.859302295
|
||||||
|
557266995,56321,36,材料,2.8,1541.1883505,412.818308169643
|
||||||
|
557266995,56321,36,材料,2.8,1541.1883505,412.818308169643
|
||||||
|
2357759100,56322,33,材料,0.5,852.562498,1278.843747
|
||||||
|
695879282,56322,33,材料,0.5,22.31839,33.477585
|
||||||
|
2314301730,56322,33,材料,0.5,22.31839,33.477585
|
||||||
|
3118917053,56323,35,材料,1400.0,7562.35984084442,4.05126420045237
|
||||||
|
648145286,56323,35,材料,1400.0,509.603238333333,0.273001734821428
|
||||||
|
4091219112,56341,9,材料,2.0,55.795975,20.923490625
|
||||||
|
60716715,56341,9,材料,2.0,52097.0039868571,19536.3764950714
|
||||||
|
814834276,317589,95,材料,35.0,44.63678,0.956502428571429
|
||||||
|
3339921892,317589,95,材料,35.0,290.13907,6.21726578571429
|
||||||
|
22324879,317589,95,材料,35.0,2962.7662725,63.4878486964286
|
||||||
|
3357541349,513691,52,材料,700.0,6191.05493557143,6.6332731452551
|
||||||
|
3357541349,513691,52,材料,700.0,6191.05493557143,6.6332731452551
|
||||||
|
|
|
@ -0,0 +1,350 @@
|
||||||
|
Firm_Code,相关细分行业,产品id,下游,种类,产品单价数值,存货(万元人民币),产品数量
|
||||||
|
4067555184,32338,7,44,材料,28,323.616655,2.88943441964286
|
||||||
|
2313177432,32338,7,44,材料,28,89.27356,0.797085357142857
|
||||||
|
12098344,32338,7,45,材料,21,36019.3828761667,428.802177097223
|
||||||
|
2348894245,32445,8,90,材料,70,11981.7573048571,42.7919903744896
|
||||||
|
2348894245,32445,8,93,材料,7,22.31839,0.797085357142857
|
||||||
|
169978927,32445,8,90,材料,70,65028.9291661667,232.246175593453
|
||||||
|
169978927,32445,8,92,材料,21,65028.9291661667,774.153918644842
|
||||||
|
169978927,32445,8,94,材料,21,65028.9291661667,774.153918644842
|
||||||
|
4091219112,56341,9,90,材料,70,55.795975,0.199271339285714
|
||||||
|
60716715,56341,9,90,材料,70,52097.0039868571,186.06072852449
|
||||||
|
1,7,10,90,材料,70,3736.5025,13.3446517857143
|
||||||
|
5,7,10,90,材料,70,2588.93324,9.24619014285714
|
||||||
|
29954548,7,10,90,材料,70,133292.643730143,476.045156179082
|
||||||
|
29954548,7,10,90,材料,70,133292.643730143,476.045156179082
|
||||||
|
1452048,46504,11,90,材料,70,1884370.44367833,6729.89444170832
|
||||||
|
2349349655,46504,11,90,材料,70,1116.3192482,3.98685445785714
|
||||||
|
2309668026,32434,12,95,材料,35,111.59195,0.797085357142857
|
||||||
|
333499553,32434,12,95,材料,35,33711.928095,240.799486392857
|
||||||
|
4315536490,32434,12,95,材料,35,66.95517,0.478251214285714
|
||||||
|
2327979389,32441,13,95,材料,35,862.977746666667,6.16412676190476
|
||||||
|
216898035,32441,13,95,材料,35,3585.82132666667,25.6130094761905
|
||||||
|
631103677,32440,15,41,材料,1000,476.125653333333,0.119031413333333
|
||||||
|
2319266522,32440,15,41,材料,1000,62.491492,0.015622873
|
||||||
|
1194436218,32440,15,42,材料,1500,22.31839,0.00371973166666667
|
||||||
|
104671744,32432,16,95,材料,35,491.00458,3.50717557142857
|
||||||
|
4208851809,32432,16,95,材料,35,49697.6881215,354.983486582143
|
||||||
|
4076786740,32451,17,90,材料,70,89.27356,0.318834142857143
|
||||||
|
331450699,32451,17,90,材料,70,491.00458,1.75358778571429
|
||||||
|
420984285,46505,18,41,材料,1000,62168.8641543333,15.5422160385833
|
||||||
|
2329836516,46505,18,41,材料,1000,4786.47693733333,1.19661923433333
|
||||||
|
892652617,32449,19,50,材料,140,5877.17603333333,10.4949572023809
|
||||||
|
1555364428,32449,19,50,材料,140,6371.900345,11.3783934732143
|
||||||
|
1555364428,32449,19,52,材料,700,6371.900345,2.27567869464286
|
||||||
|
1555364428,32449,19,53,材料,1400,6371.900345,1.13783934732143
|
||||||
|
892652617,32449,19,54,材料,1400,5877.17603333333,1.04949572023809
|
||||||
|
892652617,32449,19,55,材料,2000,5877.17603333333,0.734647004166666
|
||||||
|
142823313,32446,20,41,材料,1000,97437.8679368333,24.3594669842083
|
||||||
|
367669349,32446,20,41,材料,1000,537603.399401,134.40084985025
|
||||||
|
203314437,32433,22,41,材料,1000,290.13907,0.0725347675
|
||||||
|
3274238529,32443,23,41,材料,1000,66.95517,0.0167387925
|
||||||
|
61066955,32443,23,41,材料,1000,28179.6880875714,7.04492202189285
|
||||||
|
2475874929,32450,24,90,材料,70,22.31839,0.0797085357142857
|
||||||
|
2353020496,32450,24,90,材料,70,4997.96087575,17.8498602705357
|
||||||
|
1270747834,32435,25,41,材料,1000,3481.66884,0.87041721
|
||||||
|
39894253,32435,25,41,材料,1000,662222.116666667,165.555529166667
|
||||||
|
287006714,32435,25,41,材料,1000,111970.2725,27.992568125
|
||||||
|
5849940,32437,26,95,材料,35,2169804.72857143,15498.6052040816
|
||||||
|
5849940,32437,26,95,材料,35,2169804.72857143,15498.6052040816
|
||||||
|
29954548,32438,27,44,材料,28,133292.643730143,1190.11289044771
|
||||||
|
3227189464,32438,27,44,材料,28,2990.66426,26.7023594642857
|
||||||
|
2340606811,32447,28,50,材料,140,379.41263,0.677522553571429
|
||||||
|
3269940677,32447,28,50,材料,140,2745.16197,4.90207494642857
|
||||||
|
3352578733,32436,29,50,材料,140,44.63678,0.0797085357142857
|
||||||
|
366828854,32436,29,50,材料,140,37270.9437623333,66.5552567184523
|
||||||
|
1452048,32448,30,95,材料,35,1884370.44367833,13459.7888834166
|
||||||
|
1452048,32448,30,95,材料,35,1884370.44367833,13459.7888834166
|
||||||
|
2961715231,32439,31,41,材料,1000,881.576405,0.22039410125
|
||||||
|
888478182,32439,31,41,材料,1000,44.63678,0.011159195
|
||||||
|
3270918801,56320,32,46,材料,1400,1439.536155,0.257060027678571
|
||||||
|
7299120,56320,32,46,材料,1400,29562.480612,5.279014395
|
||||||
|
2357759100,56322,33,47,材料,14000,852.562498,0.0152243303214286
|
||||||
|
695879282,56322,33,47,材料,14000,22.31839,0.000398542678571429
|
||||||
|
2314301730,56322,33,47,材料,14000,22.31839,0.000398542678571429
|
||||||
|
2326956863,56319,34,48,材料,350,76558.826568734,54.6848761205243
|
||||||
|
2326956863,56319,34,48,材料,350,76558.826568734,54.6848761205243
|
||||||
|
3118917053,56323,35,49,材料,1400,7562.35984084442,1.35042140015079
|
||||||
|
648145286,56323,35,49,材料,1400,509.603238333333,0.0910005782738095
|
||||||
|
557266995,56321,36,41,材料,1000,1541.1883505,0.385297087625
|
||||||
|
557266995,56321,36,41,材料,1000,1541.1883505,0.385297087625
|
||||||
|
453289520,8,37,95,材料,35,193520.088971571,1382.28634979694
|
||||||
|
453289520,8,37,95,材料,35,193520.088971571,1382.28634979694
|
||||||
|
1104420298,36914,38,51,材料,70000,213731.195733667,0.763325699048811
|
||||||
|
37873062,36914,38,51,材料,70000,184703.551339833,0.659655540499404
|
||||||
|
12098344,32338,44,40,材料,35,36019.3828761667,257.281306258334
|
||||||
|
12098344,32338,46,43,材料,1400,36019.3828761667,6.43203265645834
|
||||||
|
12098344,32338,46,43,材料,1400,36019.3828761667,6.43203265645834
|
||||||
|
12098344,32338,47,38,材料,700,36019.3828761667,12.8640653129167
|
||||||
|
12098344,32338,49,39,材料,14000,36019.3828761667,0.643203265645834
|
||||||
|
3357541349,513691,52,95,材料,35,6191.05493557143,44.2218209683674
|
||||||
|
3357541349,513691,52,95,材料,35,6191.05493557143,44.2218209683674
|
||||||
|
720737055,2515,56,58,设计,0,315.444274666667,9999999999999.0
|
||||||
|
850972471,2515,56,58,设计,0,8836.59633516667,9999999999999.0
|
||||||
|
3472022914,2514,57,58,设计,0,66.95517,9999999999999.0
|
||||||
|
79412414,2514,57,58,设计,0,12269.0431131106,9999999999999.0
|
||||||
|
490476776,2514,57,58,设计,0,18149.98,9999999999999.0
|
||||||
|
632264618,34491,58,90,材料,70,9131.4346385,32.6122665660714
|
||||||
|
29930956,34491,58,91,材料,140,492.828037833333,0.880050067559523
|
||||||
|
632264618,34491,58,92,材料,21,9131.4346385,108.707555220238
|
||||||
|
1092796483,34492,58,93,材料,7,21795.4415151429,778.408625540818
|
||||||
|
2353851293,34492,58,94,材料,21,133.91034,1.59417071428571
|
||||||
|
972774,34492,58,95,材料,35,94545.1294942,675.32235353
|
||||||
|
24459300,34493,58,97,测试,0,87424.1267993333,9999999999999.0
|
||||||
|
3344266702,34493,58,90,材料,70,12065.8805295714,43.092430462755
|
||||||
|
2345050363,34494,58,91,材料,140,1262.94723833333,2.25526292559523
|
||||||
|
33171435,34494,58,92,材料,21,61275.9548563333,729.475653051587
|
||||||
|
2961210947,34495,58,93,材料,7,156.22873,5.5795975
|
||||||
|
41454763,34495,58,94,材料,21,3281.00494028571,39.0595826224489
|
||||||
|
3135349256,34495,58,95,材料,35,11441.7133435,81.7265238821429
|
||||||
|
2350883312,34496,58,97,测试,0,758.82526,9999999999999.0
|
||||||
|
2350883312,34496,58,90,材料,70,758.82526,2.71009021428571
|
||||||
|
3006753238,34498,58,91,材料,140,236376.363264714,422.100648686989
|
||||||
|
2350111843,34498,58,92,材料,21,1480.14299457143,17.6207499353742
|
||||||
|
2343704209,34499,58,93,材料,7,7848.60666666667,280.307380952381
|
||||||
|
15482118,34499,58,94,材料,21,75554.4652471667,899.457919609127
|
||||||
|
930767828,34501,58,95,材料,35,24848.5958543333,177.489970388095
|
||||||
|
930767828,34501,58,97,测试,0,24848.5958543333,9999999999999.0
|
||||||
|
1010816593,34502,58,90,材料,70,111575.164158429,398.482729137246
|
||||||
|
2321243819,34502,58,91,材料,140,8590.6279275,15.3404070133929
|
||||||
|
2353542014,34502,58,92,材料,21,3063.477861,36.4699745357143
|
||||||
|
79889978,34503,58,93,材料,7,57637.2210431667,2058.4721801131
|
||||||
|
37378925,34503,58,94,材料,21,12474.301626,148.503590785714
|
||||||
|
186257378,34503,58,95,材料,35,897.199278,6.40856627142857
|
||||||
|
1379191812,34505,58,97,测试,0,669.5517,9999999999999.0
|
||||||
|
24653920,34505,58,90,材料,70,49184.7394994286,175.659783926531
|
||||||
|
864536616,34509,58,91,材料,140,259887.593897857,464.084989103316
|
||||||
|
25685135,34509,58,92,材料,21,494.656998333333,5.88877378968254
|
||||||
|
2349046160,34513,58,93,材料,7,16789.3887331667,599.621026184525
|
||||||
|
2313628561,34513,58,94,材料,21,3977.1318875,47.3468081845238
|
||||||
|
2346465051,34513,58,95,材料,35,191.938154,1.37098681428571
|
||||||
|
1253552935,34517,58,97,测试,0,7680.27564083333,9999999999999.0
|
||||||
|
1253552935,34517,58,90,材料,70,7680.27564083333,27.429555860119
|
||||||
|
5971532,34518,58,91,材料,140,1410912.94534083,2519.48740239434
|
||||||
|
3157495460,34518,58,92,材料,21,12596.5014271429,149.95835032313
|
||||||
|
2354584345,34519,58,93,材料,7,167.387925,5.97814017857143
|
||||||
|
29452962,34519,58,94,材料,21,206077.306495286,2453.30126780102
|
||||||
|
27599908,49686,58,95,材料,35,5921.81281333333,42.2986629523809
|
||||||
|
2350719552,49686,58,97,测试,0,11314.5121375,9999999999999.0
|
||||||
|
3216066502,49687,58,90,材料,70,20677.0661462857,73.8466648081632
|
||||||
|
39698451,49687,58,91,材料,140,69378.6032017143,123.890362860204
|
||||||
|
2351643794,49688,58,92,材料,21,2198.361415,26.1709692261905
|
||||||
|
2351192662,49688,58,93,材料,7,3416.11452834962,122.004090298201
|
||||||
|
865049663,49689,58,94,材料,21,43328.108973,515.810821107143
|
||||||
|
891649,49689,58,95,材料,35,25810.7164891429,184.362260636735
|
||||||
|
3424978618,49690,58,97,测试,0,56086.1265501667,9999999999999.0
|
||||||
|
3145156061,49690,58,90,材料,70,22.31839,0.0797085357142857
|
||||||
|
281599332,49691,58,91,材料,140,40598.0444641667,72.4965079717262
|
||||||
|
24653920,49691,58,92,材料,21,49184.7394994286,585.532613088436
|
||||||
|
79938367,49692,58,93,材料,7,438207.673933167,15650.2740690417
|
||||||
|
864169770,49692,58,94,材料,21,24457.7740034286,291.163976231293
|
||||||
|
2310296367,49693,58,95,材料,35,31554.9076322,225.392197372857
|
||||||
|
774611690,49693,58,97,测试,0,7937.90737666667,9999999999999.0
|
||||||
|
2311838590,49694,58,90,材料,70,310.151853,1.10768518928571
|
||||||
|
2350442566,49694,58,91,材料,140,2249.693712,4.0173102
|
||||||
|
654461595,49695,58,92,材料,21,8316.87563333333,99.0104242063492
|
||||||
|
383463860,49695,58,93,材料,7,45248.303886,1616.01085307143
|
||||||
|
463659395,49696,58,94,材料,21,39793.0929578333,473.727297117063
|
||||||
|
2347105663,49696,58,95,材料,35,4603.6098265,32.8829273321429
|
||||||
|
504638253,49697,58,97,测试,0,51230.2114925,9999999999999.0
|
||||||
|
519195163,49698,58,90,材料,70,269.27,0.961678571428571
|
||||||
|
3221578464,49698,58,91,材料,140,580.27814,1.03621096428571
|
||||||
|
2316256865,49699,58,92,材料,21,30518.2317446667,363.312282674604
|
||||||
|
3269840248,49699,58,93,材料,7,33.477585,1.19562803571429
|
||||||
|
1675147952,49700,58,94,材料,21,9412.2279396,112.050332614286
|
||||||
|
1675147952,49700,58,95,材料,35,9412.2279396,67.2301995685714
|
||||||
|
29223617,49701,58,97,测试,0,25356.7104388333,9999999999999.0
|
||||||
|
2553848709,49701,58,90,材料,70,1450.69535,5.18105482142857
|
||||||
|
168035745,49702,58,91,材料,140,406.194698,0.725347675
|
||||||
|
510149116,49702,58,92,材料,21,374.948952,4.463678
|
||||||
|
2316430101,49704,58,93,材料,7,104480.892502143,3731.46044650511
|
||||||
|
5591349,49704,58,94,材料,21,44936.3798348571,534.956902795918
|
||||||
|
274839085,49705,58,95,材料,35,1251.8898265,8.94207018928572
|
||||||
|
4209347174,49705,58,97,测试,0,959.69077,9999999999999.0
|
||||||
|
413142822,49707,58,90,材料,70,9677.11797866667,34.5611356380953
|
||||||
|
951988821,49707,58,91,材料,140,88668.7767376667,158.337101317262
|
||||||
|
1587526,49708,58,92,材料,21,37562.7044782857,447.175053312925
|
||||||
|
1587526,49708,58,93,材料,7,37562.7044782857,1341.52515993878
|
||||||
|
3402194899,49709,58,94,材料,21,55.795975,0.664237797619048
|
||||||
|
730857,49709,58,95,材料,35,15474.0837333333,110.529169523809
|
||||||
|
27085933,49710,58,97,测试,0,3512.25453285714,9999999999999.0
|
||||||
|
27085933,49710,58,90,材料,70,3512.25453285714,12.5437661887755
|
||||||
|
3424978618,49711,58,91,材料,140,56086.1265501667,100.153797411012
|
||||||
|
24495941,49711,58,92,材料,21,80497.7686304286,958.306769409864
|
||||||
|
2424229017,49712,58,93,材料,7,41132.540103,1469.01928939286
|
||||||
|
3118428071,49712,58,94,材料,21,22.31839,0.265695119047619
|
||||||
|
3297178263,49713,58,95,材料,35,610.035993333333,4.35739995238095
|
||||||
|
441623911,49713,58,97,测试,0,46601.7746505,9999999999999.0
|
||||||
|
2316150629,49714,58,90,材料,70,20442.4057828333,73.0085920815475
|
||||||
|
2327057709,49714,58,91,材料,140,18862.75571075,33.683492340625
|
||||||
|
2624175,49715,58,92,材料,21,45047.728384,536.282480761905
|
||||||
|
3483100980,49715,58,93,材料,7,44.63678,1.59417071428571
|
||||||
|
781386116,49715,58,94,材料,21,65785.0702958333,783.15559875992
|
||||||
|
3222821993,49716,58,95,材料,35,725.347675,5.18105482142857
|
||||||
|
10398718,49716,58,97,测试,0,537996.506329429,9999999999999.0
|
||||||
|
3042364033,49717,58,90,材料,70,22.31839,0.0797085357142857
|
||||||
|
2333993502,49717,58,91,材料,140,17415.7935534286,31.0996313454082
|
||||||
|
79938367,49718,58,92,材料,21,438207.673933167,5216.75802301389
|
||||||
|
2342518227,49718,58,93,材料,7,3045.84492716667,108.780175970238
|
||||||
|
3068358389,49719,58,94,材料,21,298.473805182015,3.55325958550018
|
||||||
|
20751117,49719,58,95,材料,35,41335.5048401667,295.253606001191
|
||||||
|
3449575456,49720,58,97,测试,0,8331.321303,9999999999999.0
|
||||||
|
3449575456,49720,58,90,材料,70,8331.321303,29.7547189392857
|
||||||
|
3440374619,49721,58,91,材料,140,2753.40906483333,4.91680190148809
|
||||||
|
3168979780,49721,58,92,材料,21,28322.03691,337.167106071429
|
||||||
|
2962064709,49722,58,93,材料,7,3870.76790783333,138.241710994048
|
||||||
|
3151203276,49722,58,94,材料,21,28574.494008,340.172547714286
|
||||||
|
3449575456,49723,58,95,材料,35,8331.321303,59.5094378785714
|
||||||
|
777299215,49723,58,97,测试,0,602.59653,9999999999999.0
|
||||||
|
24459300,49724,58,90,材料,70,87424.1267993333,312.229024283333
|
||||||
|
1675147952,49724,58,91,材料,140,9412.2279396,16.8075498921429
|
||||||
|
2334772533,49725,58,92,材料,21,8232.49431216667,98.0058846686508
|
||||||
|
38567125,49725,58,93,材料,7,23741.5776591667,847.913487827382
|
||||||
|
2338894532,49726,58,94,材料,21,647.23331,7.70515845238095
|
||||||
|
270141231,49726,58,95,材料,35,6622.9822325,47.3070159464286
|
||||||
|
220783142,49727,58,97,测试,0,714.18848,9999999999999.0
|
||||||
|
3407754893,49727,58,90,材料,70,40891.55866,146.041280928571
|
||||||
|
9278530,49728,58,91,材料,140,6390.49900333333,11.4116053630952
|
||||||
|
9278530,49728,58,92,材料,21,6390.49900333333,76.0773690873015
|
||||||
|
2323580212,49729,58,93,材料,7,1506.491325,53.8032616071429
|
||||||
|
2331160070,49729,58,94,材料,21,794.0237395,9.45266356547619
|
||||||
|
2349345463,49730,58,95,材料,35,6728.994585,48.0642470357143
|
||||||
|
2350687852,49730,58,97,测试,0,4029.26472366667,9999999999999.0
|
||||||
|
2357754148,49731,58,90,材料,70,3729.40010633333,13.3192860940476
|
||||||
|
2357754148,49731,58,91,材料,140,3729.40010633333,6.6596430470238
|
||||||
|
3173999388,49733,58,92,材料,21,1517.65052,18.0672680952381
|
||||||
|
501323741,49733,58,93,材料,7,45867.2232541429,1638.11511621939
|
||||||
|
20751117,49734,58,94,材料,21,41335.5048401667,492.089343335318
|
||||||
|
20751117,49734,58,95,材料,35,41335.5048401667,295.253606001191
|
||||||
|
2311337085,56247,58,97,测试,0,36647.5253237143,9999999999999.0
|
||||||
|
2950325617,56247,58,90,材料,70,5855.69548783333,20.9131981708333
|
||||||
|
2350701298,56248,58,91,材料,140,223.1839,0.398542678571429
|
||||||
|
2322658897,56248,58,92,材料,21,156.22873,1.85986583333333
|
||||||
|
2347015781,56249,58,93,材料,7,28732.6177297143,1026.16491891837
|
||||||
|
24610687,56249,58,94,材料,21,2602016.44544083,30976.386255248
|
||||||
|
181655991,56250,58,95,材料,35,1582.68336616667,11.3048811869048
|
||||||
|
15482118,56250,58,97,测试,0,75554.4652471667,9999999999999.0
|
||||||
|
2982872611,317586,58,90,材料,70,764.4048575,2.73001734821429
|
||||||
|
3051771738,317586,58,91,材料,140,119431.036400333,213.269707857738
|
||||||
|
1237811030,317586,58,92,材料,21,1350.262595,16.074554702381
|
||||||
|
2358215091,317620,58,93,材料,7,2443.928088,87.283146
|
||||||
|
6823511,317620,58,94,材料,21,49246.3736734781,586.266353255692
|
||||||
|
2318300058,431078,58,95,材料,35,22511.6174346,160.79726739
|
||||||
|
30918572,431078,58,97,测试,0,6399.88976466667,9999999999999.0
|
||||||
|
173280333,431079,58,90,材料,70,71268.6104547143,254.53075162398
|
||||||
|
1217010297,431079,58,91,材料,140,86929.247462,155.230799039286
|
||||||
|
79412414,431079,58,92,材料,21,12269.0431131106,146.06003706084
|
||||||
|
227353488,431080,58,93,材料,7,141511.018406,5053.96494307143
|
||||||
|
4728160558,431080,58,94,材料,21,3437661.391239,40924.5403718929
|
||||||
|
20751117,431081,58,95,材料,35,41335.5048401667,295.253606001191
|
||||||
|
2313858141,431081,58,97,测试,0,8636.660643,9999999999999.0
|
||||||
|
2311676659,431082,58,90,材料,70,8280.12269,29.57186675
|
||||||
|
1048928993,431082,58,91,材料,140,13303.533159,23.7563092125
|
||||||
|
966536464,431083,58,92,材料,21,957.122635333333,11.3943170873016
|
||||||
|
3464313484,431083,58,93,材料,7,6330.15329883333,226.076903529762
|
||||||
|
2347015781,431085,58,94,材料,21,28732.6177297143,342.054972972789
|
||||||
|
2357754148,431085,58,95,材料,35,3729.40010633333,26.6385721880952
|
||||||
|
338952484,431086,58,97,测试,0,6999.23901883333,9999999999999.0
|
||||||
|
27042865,431086,58,90,材料,70,291043.484399,1039.44101571071
|
||||||
|
3104545193,431087,58,91,材料,140,36083.9444402857,64.4356150719387
|
||||||
|
9620005,431087,58,92,材料,21,681912.489464,8118.00582695238
|
||||||
|
864166372,431088,58,93,材料,7,27638.9844123333,987.106586154761
|
||||||
|
33822284,431088,58,94,材料,21,3117341.894336,37111.2130278095
|
||||||
|
1033972427,34535,59,90,材料,70,150030.431427836,535.822969385129
|
||||||
|
3312358902,34535,59,91,材料,140,87569.4877398571,156.374085249745
|
||||||
|
413876805,34526,60,41,材料,1000,22.31839,0.0055795975
|
||||||
|
11807506,34526,60,41,材料,1000,5444482.05714286,1361.12051428571
|
||||||
|
3312358902,34529,61,90,材料,70,87569.4877398571,312.74817049949
|
||||||
|
80169705,34529,61,90,材料,70,149290.899493,533.181783903572
|
||||||
|
354328758,34537,62,50,材料,140,446.3678,0.797085357142857
|
||||||
|
1044103384,34537,62,50,材料,140,38499.22275,68.7486120535714
|
||||||
|
3164072929,34534,63,50,材料,140,124088.77507875,221.587098354911
|
||||||
|
22324879,34534,63,50,材料,140,2962.7662725,5.29065405803571
|
||||||
|
2989649772,34525,64,41,材料,1000,71733.723177,17.93343079425
|
||||||
|
25147774,34525,64,41,材料,1000,92968.234407,23.24205860175
|
||||||
|
27075840,34530,65,41,材料,1000,21818.458064,5.454614516
|
||||||
|
3077450214,34530,65,41,材料,1000,21242.4322786667,5.31060806966668
|
||||||
|
423388486,34533,66,90,材料,70,242227.496705143,865.098202518368
|
||||||
|
1679596339,34533,66,90,材料,70,4958.50469716667,17.7089453470238
|
||||||
|
3384021594,34527,67,41,材料,1000,2187.20222,0.546800555
|
||||||
|
413876805,34527,67,41,材料,1000,22.31839,0.0055795975
|
||||||
|
2349076526,34539,68,50,材料,140,771941.581803429,1378.46711036327
|
||||||
|
2347561020,34539,68,50,材料,140,2142.56544,3.82600971428571
|
||||||
|
80158773,34528,69,50,材料,140,1474.810014,2.63358931071429
|
||||||
|
2343704209,34528,69,50,材料,140,7848.60666666667,14.0153690476191
|
||||||
|
11169556957,34543,70,91,材料,140,89.27356,0.159417071428571
|
||||||
|
2333843479,34543,70,91,材料,140,8385.40003966667,14.9739286422619
|
||||||
|
2311352797,34531,71,41,材料,1000,6754.43288,1.68860822
|
||||||
|
22324879,34531,71,41,材料,1000,2962.7662725,0.740691568125
|
||||||
|
2311639124,34524,72,50,材料,140,66.95517,0.119562803571429
|
||||||
|
762165453,34524,72,50,材料,140,55.795975,0.0996356696428571
|
||||||
|
4379631621,34532,73,95,材料,35,22.31839,0.159417071428571
|
||||||
|
2349616974,34532,73,95,材料,35,2834.43553,20.2459680714286
|
||||||
|
78979697,34538,74,95,材料,35,1224407.85554914,8745.77039677957
|
||||||
|
2316430101,34538,74,95,材料,35,104480.892502143,746.292089301021
|
||||||
|
3065971313,34550,75,96,封装,0,29697.253081,9999999999999.0
|
||||||
|
830662620,34550,75,96,封装,0,73842.0312075,9999999999999.0
|
||||||
|
11175750477,34555,76,96,封装,0,3570.9424,9999999999999.0
|
||||||
|
2311838590,34555,76,96,封装,0,310.151853,9999999999999.0
|
||||||
|
3414534661,34554,77,100,测试,0,46215.3088984286,9999999999999.0
|
||||||
|
3393219477,34554,77,100,测试,0,22.31839,9999999999999.0
|
||||||
|
2321857672,34556,78,98,测试,0,15667.50978,9999999999999.0
|
||||||
|
146491012,34557,79,99,测试,0,166754.219868852,9999999999999.0
|
||||||
|
2311907103,34557,79,99,测试,0,76726.8203528333,9999999999999.0
|
||||||
|
2311838590,34553,80,96,封装,0,310.151853,9999999999999.0
|
||||||
|
409663925,34553,80,96,封装,0,5802.7814,9999999999999.0
|
||||||
|
4995239819,34545,81,96,封装,0,44.63678,9999999999999.0
|
||||||
|
2339136692,34545,81,96,封装,0,133298.837068571,9999999999999.0
|
||||||
|
2453696971,34552,82,96,封装,0,34675.6299895,9999999999999.0
|
||||||
|
43566171,34552,82,96,封装,0,1763.15281,9999999999999.0
|
||||||
|
22324879,34544,83,96,封装,0,2962.7662725,9999999999999.0
|
||||||
|
59234665,34544,83,96,封装,0,656252.890643167,9999999999999.0
|
||||||
|
3327312155,34546,84,96,封装,0,435.208605,9999999999999.0
|
||||||
|
1389529309,34546,84,96,封装,0,8239.6429645,9999999999999.0
|
||||||
|
443872531,34549,85,96,封装,0,14931.5790275,9999999999999.0
|
||||||
|
24673506,34549,85,96,封装,0,291506.649439667,9999999999999.0
|
||||||
|
3464943902,34558,86,96,封装,0,33.477585,9999999999999.0
|
||||||
|
259923931,34558,86,96,封装,0,129.446662,9999999999999.0
|
||||||
|
18729484,34547,87,96,封装,0,45882.146162,9999999999999.0
|
||||||
|
3287925122,34547,87,96,封装,0,792.302845,9999999999999.0
|
||||||
|
2347561020,34551,88,96,封装,0,2142.56544,9999999999999.0
|
||||||
|
613464015,34551,88,96,封装,0,35552.7344381667,9999999999999.0
|
||||||
|
888662519,34548,89,96,封装,0,2008.6551,9999999999999.0
|
||||||
|
27169556,2717,90,95,材料,35,455436.179933333,3253.11557095238
|
||||||
|
3346538900,2717,90,95,材料,35,335021.89871525,2393.01356225179
|
||||||
|
2541265952,2717,90,95,材料,35,662.112236666667,4.72937311904762
|
||||||
|
350343208,2714,91,95,材料,35,3903.95977783333,27.8854269845238
|
||||||
|
37873062,2714,91,95,材料,35,184703.551339833,1319.31108099881
|
||||||
|
1266556718,2714,91,95,材料,35,10632.3104404292,75.9450745744943
|
||||||
|
331545755,2715,92,95,材料,35,6911.28954133333,49.3663538666666
|
||||||
|
3193516458,2715,92,95,材料,35,41347.21758,295.337268428571
|
||||||
|
41454763,2715,92,95,材料,35,3281.00494028571,23.4357495734694
|
||||||
|
584019624,2716,93,95,材料,35,19952.64066,142.518861857143
|
||||||
|
185356903,2716,93,95,材料,35,29.7578533333333,0.212556095238095
|
||||||
|
22751149,2716,93,95,材料,35,263513.812713,1882.24151937857
|
||||||
|
777299215,2718,94,95,材料,35,602.59653,4.30426092857143
|
||||||
|
18107611,2718,94,95,材料,35,4949308.389283,35352.2027805929
|
||||||
|
814834276,317589,95,96,封装,0,44.63678,9999999999999.0
|
||||||
|
3339921892,317589,95,96,封装,0,290.13907,9999999999999.0
|
||||||
|
22324879,317589,95,96,封装,0,2962.7662725,9999999999999.0
|
||||||
|
2311838590,513738,97,95,材料,35,310.151853,2.21537037857143
|
||||||
|
2311838590,513738,97,95,材料,35,310.151853,2.21537037857143
|
||||||
|
3006753238,34573,101,96,封装,0,236376.363264714,9999999999999.0
|
||||||
|
2333993502,34573,101,96,封装,0,17415.7935534286,9999999999999.0
|
||||||
|
2349511062,34571,102,96,封装,0,1190.53784783333,9999999999999.0
|
||||||
|
2349511062,34571,102,96,封装,0,1190.53784783333,9999999999999.0
|
||||||
|
2349737110,34567,103,96,封装,0,6196.09279783333,9999999999999.0
|
||||||
|
505990558,34567,103,96,封装,0,245.50229,9999999999999.0
|
||||||
|
500189853,34572,104,96,封装,0,2075.61027,9999999999999.0
|
||||||
|
18065940,34572,104,96,封装,0,143283.010690286,9999999999999.0
|
||||||
|
3054059190,34566,105,96,封装,0,1495.33213,9999999999999.0
|
||||||
|
186745206,34566,105,96,封装,0,31534.1938276667,9999999999999.0
|
||||||
|
507827038,34566,105,96,封装,0,134419.051238286,9999999999999.0
|
||||||
|
2348910693,34569,106,96,封装,0,4641.11761583333,9999999999999.0
|
||||||
|
2342515031,34569,106,96,封装,0,5069.99426166667,9999999999999.0
|
||||||
|
613464015,34568,107,96,封装,0,35552.7344381667,9999999999999.0
|
||||||
|
221048382,34568,107,96,封装,0,352447.843621667,9999999999999.0
|
||||||
|
2360390148,34570,108,96,封装,0,580.27814,9999999999999.0
|
||||||
|
2317568755,34570,108,96,封装,0,7858.70136516667,9999999999999.0
|
||||||
|
433384648,34574,109,96,封装,0,1191.802026,9999999999999.0
|
||||||
|
344181818,34574,109,96,封装,0,79181.2545228571,9999999999999.0
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
Code,32338,32445,56341,7,4654,32434,32441,32444,3244,32432,32451,4655,32449,32446,32442,32433,32443,3245,32435,32437,32438,32447,32436,32448,32439,5632,56322,56319,56323,56321,8,36914,2515,2514,9,34535,34526,34529,34537,34534,34525,3453,34533,34527,34539,34528,34543,34531,34524,34532,34538,3455,34555,34554,34556,34557,34553,34545,34552,34544,34546,34549,34558,34547,34551,34548,2717,2714,2715,2716,2718,317589,1,513738,51374,513742,11,34573,34571,34567,34572,34566,34569,34568,3457,34574
|
||||||
|
32338,1,,,,,,,,1,,,1,1,1,,1,1,,1,,1,1,1,,,1,1,1,1,,,1,,,,,1,,1,1,1,1,,1,1,1,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32445,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
56341,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
4654,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32434,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32441,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32444,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
3244,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32432,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32451,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
4655,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32449,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32446,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32442,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32433,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32443,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
3245,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32435,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32437,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32438,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32447,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32436,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32448,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
32439,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
5632,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
56322,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
56319,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
56323,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
56321,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
36914,1,,,,,,,,1,,,1,,1,,1,1,,1,,,,,,1,,,,,1,,,,,,,1,,,,1,1,,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2515,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2514,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34535,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34526,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34529,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34537,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34534,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34525,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
3453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34533,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34527,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34539,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34528,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34543,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34531,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34524,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34532,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34538,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
3455,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34555,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34554,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34556,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34557,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34545,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34552,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34544,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34546,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34549,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34558,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34547,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34551,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34548,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2717,1,1,1,1,1,,,,,,1,,1,1,1,,1,1,1,,,1,,,1,,,,,,,,,,1,1,1,1,1,,,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2714,,1,1,1,1,,,,,,1,1,1,1,,,1,1,,,,1,,,1,,,,,,,,,,1,1,,1,1,,,1,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2715,,1,1,1,1,,,,,,1,1,1,1,,,1,1,,,,1,,,1,,,,,,,,,,1,1,,1,1,,,1,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2716,,1,1,1,1,,,,,,1,1,1,1,,,1,1,,,,1,,,1,,,,,,,,,,1,1,,1,1,,,1,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
2718,,1,1,1,1,,,,,,1,1,1,1,,,1,1,,,,1,,,1,,,,,,,,,,1,1,,1,1,,,1,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
317589,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,1,1,1,1,1,,,1,,,,,,,,,,,,
|
||||||
|
1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,,,,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||||
|
513738,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
51374,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,
|
||||||
|
513742,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,
|
||||||
|
11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,
|
||||||
|
34573,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34571,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34567,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34572,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34566,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34569,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34568,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
3457,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
34574,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
|
|
|
@ -0,0 +1,201 @@
|
||||||
|
Code,Index,Name,产业种类
|
||||||
|
32338,7,硅原材料,0
|
||||||
|
32445,8,光刻胶及其配套试剂,0
|
||||||
|
56341,9,蚀刻液,0
|
||||||
|
7,10,氟化硅,0
|
||||||
|
46504,11,显影液,0
|
||||||
|
32434,12,聚羧酸减水剂,0
|
||||||
|
32441,13,金属保护液,0
|
||||||
|
32444,14,深孔镀铜液,0
|
||||||
|
32440,15,稀释剂,0
|
||||||
|
32432,16,高纯硼酸(核电),0
|
||||||
|
32451,17,电子级环氧树脂,0
|
||||||
|
46505,18,剥离液,0
|
||||||
|
32449,19,高纯金属有机化合物,0
|
||||||
|
32446,20,研磨液及配套化学品、研磨垫材料,0
|
||||||
|
32442,21,光阻去除剂,0
|
||||||
|
32433,22,多晶硅切削液,0
|
||||||
|
32443,23,钝化液,0
|
||||||
|
32450,24,电子级酚醛树脂,0
|
||||||
|
32435,25,表面活性剂,0
|
||||||
|
32437,26,磁性载体,0
|
||||||
|
32438,27,通用湿电子化学品,0
|
||||||
|
32447,28,电镀化学品及配套材料,0
|
||||||
|
32436,29,电子级阻燃材料及化学品,0
|
||||||
|
32448,30,液晶取向剂及配套化学品,0
|
||||||
|
32439,31,功能湿电子化学品,0
|
||||||
|
56320,32,磷化铟,0
|
||||||
|
56322,33,碳化硅,0
|
||||||
|
56319,34,砷化镓,0
|
||||||
|
56323,35,氮化镓,0
|
||||||
|
56321,36,氮化铝,0
|
||||||
|
8,37,氮化硅,0
|
||||||
|
36914,38,碳化硅衬底,0
|
||||||
|
36914,39,氮化镓衬底,0
|
||||||
|
36914,40,硅衬底,0
|
||||||
|
36914,41,氮化铝衬底,0
|
||||||
|
36914,42,深紫外LED衬底,0
|
||||||
|
36914,43,磷化铟衬底,0
|
||||||
|
32338,44,单晶硅片,0
|
||||||
|
32338,45,多晶硅片,0
|
||||||
|
32338,46,磷化铟单晶和单晶片,0
|
||||||
|
32338,47,碳化硅单晶和单晶片,0
|
||||||
|
32338,48,砷化镓单晶片,0
|
||||||
|
32338,49,氮化镓晶体和单晶片,0
|
||||||
|
32338,50,硅外延片,0
|
||||||
|
32338,51,碳化硅外延晶片,0
|
||||||
|
32338,52,氮化铝外延片,0
|
||||||
|
32338,53,氮化镓外延片,0
|
||||||
|
32338,54,磷化铟外延片,0
|
||||||
|
32338,55,LED外延片,0
|
||||||
|
2515,56,EDA及IP服务,2
|
||||||
|
2514,57,MPW服务,2
|
||||||
|
9,58,芯片设计,3
|
||||||
|
34535,59,涂胶显影设备,1
|
||||||
|
34526,60,硅片研磨机,1
|
||||||
|
34529,61,刻蚀机,1
|
||||||
|
34537,62,氧化/扩散炉,1
|
||||||
|
34534,63,晶圆测量设备,1
|
||||||
|
34525,64,单晶生长炉,1
|
||||||
|
34530,65,化学机械抛光设备,1
|
||||||
|
34533,66,光刻机,1
|
||||||
|
34527,67,晶硅切片机,1
|
||||||
|
34539,68,薄膜生长设备,1
|
||||||
|
34528,69,硅片倒角机,1
|
||||||
|
34543,70,等离子去胶机,1
|
||||||
|
34531,71,晶圆清洗机,1
|
||||||
|
34524,72,熔炼矿热炉,1
|
||||||
|
34532,73,半导体电镀设备,1
|
||||||
|
34538,74,离子注入设备,1
|
||||||
|
34550,75,切筋成型机,1
|
||||||
|
34555,76,探针卡,1
|
||||||
|
34554,77,测试机,1
|
||||||
|
34556,78,工艺检测设备,1
|
||||||
|
34557,79,晶圆检测设备,1
|
||||||
|
34553,80,探针台,1
|
||||||
|
34545,81,晶圆划片机,1
|
||||||
|
34552,82,分选机,1
|
||||||
|
34544,83,晶圆减薄机,1
|
||||||
|
34546,84,贴片机,1
|
||||||
|
34549,85,回流炉,1
|
||||||
|
34558,86,FT测试设备,1
|
||||||
|
34547,87,引线键合机,1
|
||||||
|
34551,88,植球机,1
|
||||||
|
34548,89,半导体塑封机,1
|
||||||
|
2717,90,功率半导体器件,1
|
||||||
|
2714,91,二极管,1
|
||||||
|
2715,92,晶体管,1
|
||||||
|
2716,93,晶闸管,1
|
||||||
|
2718,94,整流桥,1
|
||||||
|
317589,95,集成电路制造,1
|
||||||
|
10,96,IC封装,5
|
||||||
|
513738,97,芯片设计验证,4
|
||||||
|
513740,98,过程工艺检测,4
|
||||||
|
513742,99,晶圆测试,4
|
||||||
|
11,100,芯片测试,4
|
||||||
|
34573,101,晶圆凸块,0
|
||||||
|
34571,102,芯片粘结材料,0
|
||||||
|
34567,103,引线框架,0
|
||||||
|
34572,104,焊球,0
|
||||||
|
34566,105,封装基板,0
|
||||||
|
34569,106,半导体塑封料,0
|
||||||
|
34568,107,键合线,0
|
||||||
|
34570,108,底部填充料,0
|
||||||
|
34574,109,半导体切割材料,0
|
||||||
|
56249,9,芯片设计,0
|
||||||
|
56250,9,芯片设计,0
|
||||||
|
49731,9,芯片设计,0
|
||||||
|
49692,9,芯片设计,0
|
||||||
|
49709,9,芯片设计,0
|
||||||
|
49711,9,芯片设计,0
|
||||||
|
49714,9,芯片设计,0
|
||||||
|
34505,9,芯片设计,0
|
||||||
|
34491,9,芯片设计,0
|
||||||
|
34497,9,芯片设计,0
|
||||||
|
49687,9,芯片设计,0
|
||||||
|
34492,9,芯片设计,0
|
||||||
|
49724,9,芯片设计,0
|
||||||
|
49725,9,芯片设计,0
|
||||||
|
49715,9,芯片设计,0
|
||||||
|
49732,9,芯片设计,0
|
||||||
|
49718,9,芯片设计,0
|
||||||
|
49733,9,芯片设计,0
|
||||||
|
34518,9,芯片设计,0
|
||||||
|
49717,9,芯片设计,0
|
||||||
|
49734,9,芯片设计,0
|
||||||
|
34513,9,芯片设计,0
|
||||||
|
49702,9,芯片设计,0
|
||||||
|
56247,9,芯片设计,0
|
||||||
|
49726,9,芯片设计,0
|
||||||
|
49727,9,芯片设计,0
|
||||||
|
34519,9,芯片设计,0
|
||||||
|
49704,9,芯片设计,0
|
||||||
|
49693,9,芯片设计,0
|
||||||
|
34509,9,芯片设计,0
|
||||||
|
34517,9,芯片设计,0
|
||||||
|
34501,9,芯片设计,0
|
||||||
|
49698,9,芯片设计,0
|
||||||
|
49713,9,芯片设计,0
|
||||||
|
49723,9,芯片设计,0
|
||||||
|
49730,9,芯片设计,0
|
||||||
|
49701,9,芯片设计,0
|
||||||
|
49695,9,芯片设计,0
|
||||||
|
49696,9,芯片设计,0
|
||||||
|
34496,9,芯片设计,0
|
||||||
|
34502,9,芯片设计,0
|
||||||
|
34494,9,芯片设计,0
|
||||||
|
49691,9,芯片设计,0
|
||||||
|
49729,9,芯片设计,0
|
||||||
|
49708,9,芯片设计,0
|
||||||
|
49694,9,芯片设计,0
|
||||||
|
49707,9,芯片设计,0
|
||||||
|
49686,9,芯片设计,0
|
||||||
|
49699,9,芯片设计,0
|
||||||
|
49710,9,芯片设计,0
|
||||||
|
49705,9,芯片设计,0
|
||||||
|
34499,9,芯片设计,0
|
||||||
|
49722,9,芯片设计,0
|
||||||
|
49720,9,芯片设计,0
|
||||||
|
49721,9,芯片设计,0
|
||||||
|
49716,9,芯片设计,0
|
||||||
|
56248,9,芯片设计,0
|
||||||
|
34493,9,芯片设计,0
|
||||||
|
49688,9,芯片设计,0
|
||||||
|
49689,9,芯片设计,0
|
||||||
|
49690,9,芯片设计,0
|
||||||
|
34503,9,芯片设计,0
|
||||||
|
49697,9,芯片设计,0
|
||||||
|
49700,9,芯片设计,0
|
||||||
|
34500,9,芯片设计,0
|
||||||
|
49719,9,芯片设计,0
|
||||||
|
49728,9,芯片设计,0
|
||||||
|
49712,9,芯片设计,0
|
||||||
|
34495,9,芯片设计,0
|
||||||
|
34498,9,芯片设计,0
|
||||||
|
431078,9,芯片设计,0
|
||||||
|
431079,9,芯片设计,0
|
||||||
|
431080,9,芯片设计,0
|
||||||
|
431081,9,芯片设计,0
|
||||||
|
431082,9,芯片设计,0
|
||||||
|
431083,9,芯片设计,0
|
||||||
|
431084,9,芯片设计,0
|
||||||
|
431085,9,芯片设计,0
|
||||||
|
431086,9,芯片设计,0
|
||||||
|
431087,9,芯片设计,0
|
||||||
|
431088,9,芯片设计,0
|
||||||
|
317620,9,芯片设计,0
|
||||||
|
317586,9,芯片设计,0
|
||||||
|
513687,10,半导体封装,0
|
||||||
|
513689,10,半导体封装,0
|
||||||
|
513691,10,半导体封装,0
|
||||||
|
513693,10,半导体封装,0
|
||||||
|
513695,10,半导体封装,0
|
||||||
|
513697,10,半导体封装,0
|
||||||
|
513699,10,半导体封装,0
|
||||||
|
513701,10,半导体封装,0
|
||||||
|
513720,10,半导体封装,0
|
||||||
|
513744,11,半导体测试,0
|
||||||
|
513746,11,半导体测试,0
|
||||||
|
513748,11,半导体测试,0
|
||||||
|
513749,11,半导体测试,0
|
||||||
|
513751,11,半导体测试,0
|
||||||
|
|
|
@ -0,0 +1,241 @@
|
||||||
|
,产业id,消耗材料id
|
||||||
|
0,36914,32338
|
||||||
|
1,36914,32338
|
||||||
|
2,36914,32338
|
||||||
|
3,36914,32440
|
||||||
|
4,36914,46505
|
||||||
|
5,36914,32446
|
||||||
|
6,36914,32433
|
||||||
|
7,36914,32443
|
||||||
|
8,36914,32435
|
||||||
|
9,36914,32439
|
||||||
|
10,36914,56321
|
||||||
|
11,36914,32440
|
||||||
|
12,36914,46505
|
||||||
|
13,36914,32446
|
||||||
|
14,36914,32433
|
||||||
|
15,36914,32443
|
||||||
|
16,36914,32435
|
||||||
|
17,36914,32439
|
||||||
|
18,36914,32338
|
||||||
|
19,32338,32338
|
||||||
|
20,32338,32440
|
||||||
|
21,32338,46505
|
||||||
|
22,32338,32446
|
||||||
|
23,32338,32433
|
||||||
|
24,32338,32443
|
||||||
|
25,32338,32435
|
||||||
|
26,32338,32438
|
||||||
|
27,32338,32338
|
||||||
|
28,32338,32440
|
||||||
|
29,32338,46505
|
||||||
|
30,32338,32446
|
||||||
|
31,32338,32433
|
||||||
|
32,32338,32443
|
||||||
|
33,32338,32435
|
||||||
|
34,32338,32438
|
||||||
|
35,32338,32440
|
||||||
|
36,32338,46505
|
||||||
|
37,32338,32446
|
||||||
|
38,32338,32433
|
||||||
|
39,32338,32443
|
||||||
|
40,32338,32435
|
||||||
|
41,32338,32438
|
||||||
|
42,32338,56320
|
||||||
|
43,32338,32440
|
||||||
|
44,32338,46505
|
||||||
|
45,32338,32446
|
||||||
|
46,32338,32433
|
||||||
|
47,32338,32443
|
||||||
|
48,32338,32435
|
||||||
|
49,32338,32438
|
||||||
|
50,32338,56322
|
||||||
|
51,32338,32440
|
||||||
|
52,32338,46505
|
||||||
|
53,32338,32446
|
||||||
|
54,32338,32433
|
||||||
|
55,32338,32443
|
||||||
|
56,32338,32435
|
||||||
|
57,32338,32438
|
||||||
|
58,32338,56319
|
||||||
|
59,32338,32440
|
||||||
|
60,32338,46505
|
||||||
|
61,32338,32446
|
||||||
|
62,32338,32433
|
||||||
|
63,32338,32443
|
||||||
|
64,32338,32435
|
||||||
|
65,32338,32438
|
||||||
|
66,32338,56323
|
||||||
|
67,32338,32449
|
||||||
|
68,32338,32446
|
||||||
|
69,32338,32433
|
||||||
|
70,32338,32443
|
||||||
|
71,32338,32435
|
||||||
|
72,32338,32447
|
||||||
|
73,32338,32436
|
||||||
|
74,32338,32438
|
||||||
|
75,32338,36914
|
||||||
|
76,32338,32449
|
||||||
|
77,32338,32446
|
||||||
|
78,32338,32433
|
||||||
|
79,32338,32443
|
||||||
|
80,32338,32435
|
||||||
|
81,32338,32447
|
||||||
|
82,32338,32436
|
||||||
|
83,32338,32438
|
||||||
|
84,32338,36914
|
||||||
|
85,32338,32449
|
||||||
|
86,32338,32446
|
||||||
|
87,32338,32433
|
||||||
|
88,32338,32443
|
||||||
|
89,32338,32435
|
||||||
|
90,32338,32447
|
||||||
|
91,32338,32436
|
||||||
|
92,32338,32438
|
||||||
|
93,32338,36914
|
||||||
|
94,32338,32449
|
||||||
|
95,32338,32446
|
||||||
|
96,32338,32433
|
||||||
|
97,32338,32443
|
||||||
|
98,32338,32435
|
||||||
|
99,32338,32447
|
||||||
|
100,32338,32436
|
||||||
|
101,32338,32438
|
||||||
|
102,32338,36914
|
||||||
|
103,32338,32449
|
||||||
|
104,32338,32446
|
||||||
|
105,32338,32433
|
||||||
|
106,32338,32443
|
||||||
|
107,32338,32435
|
||||||
|
108,32338,32447
|
||||||
|
109,32338,32436
|
||||||
|
110,32338,32438
|
||||||
|
111,32338,36914
|
||||||
|
112,32338,32449
|
||||||
|
113,32338,32446
|
||||||
|
114,32338,32433
|
||||||
|
115,32338,32443
|
||||||
|
116,32338,32435
|
||||||
|
117,32338,32447
|
||||||
|
118,32338,32436
|
||||||
|
119,32338,32438
|
||||||
|
120,32338,36914
|
||||||
|
121,2717,32338
|
||||||
|
122,2717,32445
|
||||||
|
123,2717,56341
|
||||||
|
124,2717,7
|
||||||
|
125,2717,46504
|
||||||
|
126,2717,32451
|
||||||
|
127,2717,32449
|
||||||
|
128,2717,32446
|
||||||
|
129,2717,32442
|
||||||
|
130,2717,32443
|
||||||
|
131,2717,32450
|
||||||
|
132,2717,32435
|
||||||
|
133,2717,32447
|
||||||
|
134,2717,32439
|
||||||
|
135,2717,32338
|
||||||
|
136,2717,32338
|
||||||
|
137,2714,32445
|
||||||
|
138,2714,56341
|
||||||
|
139,2714,7
|
||||||
|
140,2714,46504
|
||||||
|
141,2714,32451
|
||||||
|
142,2714,46505
|
||||||
|
143,2714,32449
|
||||||
|
144,2714,32446
|
||||||
|
145,2714,32443
|
||||||
|
146,2714,32450
|
||||||
|
147,2714,32447
|
||||||
|
148,2714,32439
|
||||||
|
149,2715,32445
|
||||||
|
150,2715,56341
|
||||||
|
151,2715,7
|
||||||
|
152,2715,46504
|
||||||
|
153,2715,32451
|
||||||
|
154,2715,46505
|
||||||
|
155,2715,32449
|
||||||
|
156,2715,32446
|
||||||
|
157,2715,32443
|
||||||
|
158,2715,32450
|
||||||
|
159,2715,32447
|
||||||
|
160,2715,32439
|
||||||
|
161,2716,32445
|
||||||
|
162,2716,56341
|
||||||
|
163,2716,7
|
||||||
|
164,2716,46504
|
||||||
|
165,2716,32451
|
||||||
|
166,2716,46505
|
||||||
|
167,2716,32449
|
||||||
|
168,2716,32446
|
||||||
|
169,2716,32443
|
||||||
|
170,2716,32450
|
||||||
|
171,2716,32447
|
||||||
|
172,2716,32439
|
||||||
|
173,2718,32445
|
||||||
|
174,2718,56341
|
||||||
|
175,2718,7
|
||||||
|
176,2718,46504
|
||||||
|
177,2718,32451
|
||||||
|
178,2718,46505
|
||||||
|
179,2718,32449
|
||||||
|
180,2718,32446
|
||||||
|
181,2718,32443
|
||||||
|
182,2718,32450
|
||||||
|
183,2718,32447
|
||||||
|
184,2718,32439
|
||||||
|
185,317589,32445
|
||||||
|
186,317589,56341
|
||||||
|
187,317589,7
|
||||||
|
188,317589,46504
|
||||||
|
189,317589,32434
|
||||||
|
190,317589,32441
|
||||||
|
191,317589,32444
|
||||||
|
192,317589,32440
|
||||||
|
193,317589,32432
|
||||||
|
194,317589,32451
|
||||||
|
195,317589,46505
|
||||||
|
196,317589,32449
|
||||||
|
197,317589,32446
|
||||||
|
198,317589,32442
|
||||||
|
199,317589,32433
|
||||||
|
200,317589,32443
|
||||||
|
201,317589,32450
|
||||||
|
202,317589,32435
|
||||||
|
203,317589,32437
|
||||||
|
204,317589,32438
|
||||||
|
205,317589,32447
|
||||||
|
206,317589,32436
|
||||||
|
207,317589,32448
|
||||||
|
208,317589,32439
|
||||||
|
209,317589,8
|
||||||
|
210,317589,32338
|
||||||
|
211,317589,32338
|
||||||
|
212,317589,32338
|
||||||
|
213,317589,32338
|
||||||
|
214,317589,32338
|
||||||
|
215,317589,32338
|
||||||
|
216,317589,32338
|
||||||
|
217,317589,32338
|
||||||
|
218,317589,32338
|
||||||
|
219,317589,32338
|
||||||
|
220,317589,32338
|
||||||
|
221,317589,32338
|
||||||
|
222,317589,2717
|
||||||
|
223,317589,2714
|
||||||
|
224,317589,2715
|
||||||
|
225,317589,2716
|
||||||
|
226,317589,2718
|
||||||
|
227,10,317589
|
||||||
|
228,10,34573
|
||||||
|
229,10,34571
|
||||||
|
230,10,34567
|
||||||
|
231,10,34572
|
||||||
|
232,10,34566
|
||||||
|
233,10,34569
|
||||||
|
234,10,34568
|
||||||
|
235,10,34570
|
||||||
|
236,10,34574
|
||||||
|
237,513740,317589
|
||||||
|
238,513742,317589
|
||||||
|
239,11,317589
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
产品id,种类
|
||||||
|
7,材料
|
||||||
|
8,材料
|
||||||
|
9,材料
|
||||||
|
10,材料
|
||||||
|
11,材料
|
||||||
|
12,材料
|
||||||
|
13,材料
|
||||||
|
14,材料
|
||||||
|
15,材料
|
||||||
|
16,材料
|
||||||
|
17,材料
|
||||||
|
18,材料
|
||||||
|
19,材料
|
||||||
|
20,材料
|
||||||
|
21,材料
|
||||||
|
22,材料
|
||||||
|
23,材料
|
||||||
|
24,材料
|
||||||
|
25,材料
|
||||||
|
26,材料
|
||||||
|
27,材料
|
||||||
|
28,材料
|
||||||
|
29,材料
|
||||||
|
30,材料
|
||||||
|
31,材料
|
||||||
|
32,材料
|
||||||
|
33,材料
|
||||||
|
34,材料
|
||||||
|
35,材料
|
||||||
|
36,材料
|
||||||
|
37,材料
|
||||||
|
38,材料
|
||||||
|
39,材料
|
||||||
|
40,材料
|
||||||
|
41,材料
|
||||||
|
42,材料
|
||||||
|
43,材料
|
||||||
|
44,材料
|
||||||
|
45,材料
|
||||||
|
46,材料
|
||||||
|
47,材料
|
||||||
|
48,材料
|
||||||
|
49,材料
|
||||||
|
50,材料
|
||||||
|
51,材料
|
||||||
|
52,材料
|
||||||
|
53,材料
|
||||||
|
54,材料
|
||||||
|
55,材料
|
||||||
|
90,材料
|
||||||
|
91,材料
|
||||||
|
92,材料
|
||||||
|
93,材料
|
||||||
|
94,材料
|
||||||
|
95,材料
|
||||||
|
101,材料
|
||||||
|
102,材料
|
||||||
|
103,材料
|
||||||
|
104,材料
|
||||||
|
105,材料
|
||||||
|
106,材料
|
||||||
|
107,材料
|
||||||
|
108,材料
|
||||||
|
109,材料
|
||||||
|
59,设备
|
||||||
|
60,设备
|
||||||
|
61,设备
|
||||||
|
62,设备
|
||||||
|
63,设备
|
||||||
|
64,设备
|
||||||
|
65,设备
|
||||||
|
66,设备
|
||||||
|
67,设备
|
||||||
|
68,设备
|
||||||
|
69,设备
|
||||||
|
70,设备
|
||||||
|
71,设备
|
||||||
|
72,设备
|
||||||
|
73,设备
|
||||||
|
74,设备
|
||||||
|
75,设备
|
||||||
|
76,设备
|
||||||
|
77,设备
|
||||||
|
78,设备
|
||||||
|
79,设备
|
||||||
|
80,设备
|
||||||
|
81,设备
|
||||||
|
82,设备
|
||||||
|
83,设备
|
||||||
|
84,设备
|
||||||
|
85,设备
|
||||||
|
86,设备
|
||||||
|
87,设备
|
||||||
|
88,设备
|
||||||
|
89,设备
|
||||||
|
|
|
@ -0,0 +1,382 @@
|
||||||
|
,产业id,制造产品id
|
||||||
|
0,2714,8
|
||||||
|
1,2714,9
|
||||||
|
2,2714,10
|
||||||
|
3,2714,11
|
||||||
|
4,2714,17
|
||||||
|
5,2714,18
|
||||||
|
6,2714,19
|
||||||
|
7,2714,20
|
||||||
|
8,2714,23
|
||||||
|
9,2714,24
|
||||||
|
10,2714,28
|
||||||
|
11,2714,31
|
||||||
|
12,2714,58
|
||||||
|
13,2714,59
|
||||||
|
14,2714,61
|
||||||
|
15,2714,62
|
||||||
|
16,2714,65
|
||||||
|
17,2714,66
|
||||||
|
18,2714,70
|
||||||
|
19,2715,8
|
||||||
|
20,2715,9
|
||||||
|
21,2715,10
|
||||||
|
22,2715,11
|
||||||
|
23,2715,17
|
||||||
|
24,2715,18
|
||||||
|
25,2715,19
|
||||||
|
26,2715,20
|
||||||
|
27,2715,23
|
||||||
|
28,2715,24
|
||||||
|
29,2715,28
|
||||||
|
30,2715,31
|
||||||
|
31,2715,58
|
||||||
|
32,2715,59
|
||||||
|
33,2715,61
|
||||||
|
34,2715,62
|
||||||
|
35,2715,65
|
||||||
|
36,2715,66
|
||||||
|
37,2715,70
|
||||||
|
38,2716,8
|
||||||
|
39,2716,9
|
||||||
|
40,2716,10
|
||||||
|
41,2716,11
|
||||||
|
42,2716,17
|
||||||
|
43,2716,18
|
||||||
|
44,2716,19
|
||||||
|
45,2716,20
|
||||||
|
46,2716,23
|
||||||
|
47,2716,24
|
||||||
|
48,2716,28
|
||||||
|
49,2716,31
|
||||||
|
50,2716,58
|
||||||
|
51,2716,59
|
||||||
|
52,2716,61
|
||||||
|
53,2716,62
|
||||||
|
54,2716,65
|
||||||
|
55,2716,66
|
||||||
|
56,2716,70
|
||||||
|
57,2717,2
|
||||||
|
58,2717,8
|
||||||
|
59,2717,9
|
||||||
|
60,2717,10
|
||||||
|
61,2717,11
|
||||||
|
62,2717,17
|
||||||
|
63,2717,19
|
||||||
|
64,2717,20
|
||||||
|
65,2717,21
|
||||||
|
66,2717,23
|
||||||
|
67,2717,24
|
||||||
|
68,2717,25
|
||||||
|
69,2717,28
|
||||||
|
70,2717,31
|
||||||
|
71,2717,44
|
||||||
|
72,2717,45
|
||||||
|
73,2717,58
|
||||||
|
74,2717,59
|
||||||
|
75,2717,60
|
||||||
|
76,2717,61
|
||||||
|
77,2717,62
|
||||||
|
78,2717,65
|
||||||
|
79,2717,66
|
||||||
|
80,2717,67
|
||||||
|
81,2717,68
|
||||||
|
82,2718,8
|
||||||
|
83,2718,9
|
||||||
|
84,2718,10
|
||||||
|
85,2718,11
|
||||||
|
86,2718,17
|
||||||
|
87,2718,18
|
||||||
|
88,2718,19
|
||||||
|
89,2718,20
|
||||||
|
90,2718,23
|
||||||
|
91,2718,24
|
||||||
|
92,2718,28
|
||||||
|
93,2718,31
|
||||||
|
94,2718,58
|
||||||
|
95,2718,59
|
||||||
|
96,2718,61
|
||||||
|
97,2718,62
|
||||||
|
98,2718,65
|
||||||
|
99,2718,66
|
||||||
|
100,2718,70
|
||||||
|
101,32338,2
|
||||||
|
102,32338,15
|
||||||
|
103,32338,18
|
||||||
|
104,32338,20
|
||||||
|
105,32338,22
|
||||||
|
106,32338,23
|
||||||
|
107,32338,25
|
||||||
|
108,32338,27
|
||||||
|
109,32338,64
|
||||||
|
110,32338,67
|
||||||
|
111,32338,60
|
||||||
|
112,32338,65
|
||||||
|
113,32338,71
|
||||||
|
114,32338,2
|
||||||
|
115,32338,15
|
||||||
|
116,32338,18
|
||||||
|
117,32338,20
|
||||||
|
118,32338,22
|
||||||
|
119,32338,23
|
||||||
|
120,32338,25
|
||||||
|
121,32338,27
|
||||||
|
122,32338,64
|
||||||
|
123,32338,67
|
||||||
|
124,32338,60
|
||||||
|
125,32338,65
|
||||||
|
126,32338,71
|
||||||
|
127,32338,15
|
||||||
|
128,32338,18
|
||||||
|
129,32338,20
|
||||||
|
130,32338,22
|
||||||
|
131,32338,23
|
||||||
|
132,32338,25
|
||||||
|
133,32338,27
|
||||||
|
134,32338,32
|
||||||
|
135,32338,64
|
||||||
|
136,32338,67
|
||||||
|
137,32338,60
|
||||||
|
138,32338,65
|
||||||
|
139,32338,71
|
||||||
|
140,32338,15
|
||||||
|
141,32338,18
|
||||||
|
142,32338,20
|
||||||
|
143,32338,22
|
||||||
|
144,32338,23
|
||||||
|
145,32338,25
|
||||||
|
146,32338,27
|
||||||
|
147,32338,33
|
||||||
|
148,32338,64
|
||||||
|
149,32338,67
|
||||||
|
150,32338,60
|
||||||
|
151,32338,65
|
||||||
|
152,32338,71
|
||||||
|
153,32338,15
|
||||||
|
154,32338,18
|
||||||
|
155,32338,20
|
||||||
|
156,32338,22
|
||||||
|
157,32338,23
|
||||||
|
158,32338,25
|
||||||
|
159,32338,27
|
||||||
|
160,32338,34
|
||||||
|
161,32338,64
|
||||||
|
162,32338,67
|
||||||
|
163,32338,60
|
||||||
|
164,32338,65
|
||||||
|
165,32338,71
|
||||||
|
166,32338,15
|
||||||
|
167,32338,18
|
||||||
|
168,32338,20
|
||||||
|
169,32338,22
|
||||||
|
170,32338,23
|
||||||
|
171,32338,25
|
||||||
|
172,32338,27
|
||||||
|
173,32338,35
|
||||||
|
174,32338,64
|
||||||
|
175,32338,67
|
||||||
|
176,32338,60
|
||||||
|
177,32338,65
|
||||||
|
178,32338,71
|
||||||
|
179,32338,19
|
||||||
|
180,32338,20
|
||||||
|
181,32338,22
|
||||||
|
182,32338,23
|
||||||
|
183,32338,25
|
||||||
|
184,32338,28
|
||||||
|
185,32338,29
|
||||||
|
186,32338,27
|
||||||
|
187,32338,40
|
||||||
|
188,32338,60
|
||||||
|
189,32338,62
|
||||||
|
190,32338,63
|
||||||
|
191,32338,64
|
||||||
|
192,32338,65
|
||||||
|
193,32338,67
|
||||||
|
194,32338,68
|
||||||
|
195,32338,69
|
||||||
|
196,32338,71
|
||||||
|
197,32338,72
|
||||||
|
198,32338,19
|
||||||
|
199,32338,20
|
||||||
|
200,32338,22
|
||||||
|
201,32338,23
|
||||||
|
202,32338,25
|
||||||
|
203,32338,28
|
||||||
|
204,32338,29
|
||||||
|
205,32338,27
|
||||||
|
206,32338,38
|
||||||
|
207,32338,60
|
||||||
|
208,32338,62
|
||||||
|
209,32338,63
|
||||||
|
210,32338,64
|
||||||
|
211,32338,65
|
||||||
|
212,32338,67
|
||||||
|
213,32338,68
|
||||||
|
214,32338,69
|
||||||
|
215,32338,71
|
||||||
|
216,32338,72
|
||||||
|
217,32338,19
|
||||||
|
218,32338,20
|
||||||
|
219,32338,22
|
||||||
|
220,32338,23
|
||||||
|
221,32338,25
|
||||||
|
222,32338,28
|
||||||
|
223,32338,29
|
||||||
|
224,32338,27
|
||||||
|
225,32338,41
|
||||||
|
226,32338,60
|
||||||
|
227,32338,62
|
||||||
|
228,32338,63
|
||||||
|
229,32338,64
|
||||||
|
230,32338,65
|
||||||
|
231,32338,67
|
||||||
|
232,32338,68
|
||||||
|
233,32338,69
|
||||||
|
234,32338,71
|
||||||
|
235,32338,72
|
||||||
|
236,32338,19
|
||||||
|
237,32338,20
|
||||||
|
238,32338,22
|
||||||
|
239,32338,23
|
||||||
|
240,32338,25
|
||||||
|
241,32338,28
|
||||||
|
242,32338,29
|
||||||
|
243,32338,27
|
||||||
|
244,32338,39
|
||||||
|
245,32338,60
|
||||||
|
246,32338,62
|
||||||
|
247,32338,63
|
||||||
|
248,32338,64
|
||||||
|
249,32338,65
|
||||||
|
250,32338,67
|
||||||
|
251,32338,68
|
||||||
|
252,32338,69
|
||||||
|
253,32338,71
|
||||||
|
254,32338,72
|
||||||
|
255,32338,19
|
||||||
|
256,32338,20
|
||||||
|
257,32338,22
|
||||||
|
258,32338,23
|
||||||
|
259,32338,25
|
||||||
|
260,32338,28
|
||||||
|
261,32338,29
|
||||||
|
262,32338,27
|
||||||
|
263,32338,43
|
||||||
|
264,32338,60
|
||||||
|
265,32338,62
|
||||||
|
266,32338,63
|
||||||
|
267,32338,64
|
||||||
|
268,32338,65
|
||||||
|
269,32338,67
|
||||||
|
270,32338,68
|
||||||
|
271,32338,69
|
||||||
|
272,32338,71
|
||||||
|
273,32338,72
|
||||||
|
274,32338,19
|
||||||
|
275,32338,20
|
||||||
|
276,32338,22
|
||||||
|
277,32338,23
|
||||||
|
278,32338,25
|
||||||
|
279,32338,28
|
||||||
|
280,32338,29
|
||||||
|
281,32338,27
|
||||||
|
282,32338,42
|
||||||
|
283,32338,60
|
||||||
|
284,32338,62
|
||||||
|
285,32338,63
|
||||||
|
286,32338,64
|
||||||
|
287,32338,65
|
||||||
|
288,32338,67
|
||||||
|
289,32338,68
|
||||||
|
290,32338,69
|
||||||
|
291,32338,71
|
||||||
|
292,32338,72
|
||||||
|
293,36914,47
|
||||||
|
294,36914,49
|
||||||
|
295,36914,44
|
||||||
|
296,36914,15
|
||||||
|
297,36914,18
|
||||||
|
298,36914,20
|
||||||
|
299,36914,22
|
||||||
|
300,36914,23
|
||||||
|
301,36914,25
|
||||||
|
302,36914,31
|
||||||
|
303,36914,36
|
||||||
|
304,36914,64
|
||||||
|
305,36914,67
|
||||||
|
306,36914,60
|
||||||
|
307,36914,65
|
||||||
|
308,36914,71
|
||||||
|
309,36914,15
|
||||||
|
310,36914,18
|
||||||
|
311,36914,20
|
||||||
|
312,36914,22
|
||||||
|
313,36914,23
|
||||||
|
314,36914,25
|
||||||
|
315,36914,31
|
||||||
|
316,36914,64
|
||||||
|
317,36914,67
|
||||||
|
318,36914,60
|
||||||
|
319,36914,65
|
||||||
|
320,36914,71
|
||||||
|
321,36914,46
|
||||||
|
322,317589,8
|
||||||
|
323,317589,9
|
||||||
|
324,317589,10
|
||||||
|
325,317589,11
|
||||||
|
326,317589,12
|
||||||
|
327,317589,13
|
||||||
|
328,317589,14
|
||||||
|
329,317589,15
|
||||||
|
330,317589,16
|
||||||
|
331,317589,17
|
||||||
|
332,317589,18
|
||||||
|
333,317589,19
|
||||||
|
334,317589,20
|
||||||
|
335,317589,21
|
||||||
|
336,317589,22
|
||||||
|
337,317589,23
|
||||||
|
338,317589,24
|
||||||
|
339,317589,25
|
||||||
|
340,317589,26
|
||||||
|
341,317589,27
|
||||||
|
342,317589,28
|
||||||
|
343,317589,29
|
||||||
|
344,317589,30
|
||||||
|
345,317589,31
|
||||||
|
346,317589,37
|
||||||
|
347,317589,44
|
||||||
|
348,317589,45
|
||||||
|
349,317589,46
|
||||||
|
350,317589,47
|
||||||
|
351,317589,48
|
||||||
|
352,317589,49
|
||||||
|
353,317589,50
|
||||||
|
354,317589,51
|
||||||
|
355,317589,52
|
||||||
|
356,317589,53
|
||||||
|
357,317589,54
|
||||||
|
358,317589,55
|
||||||
|
359,317589,58
|
||||||
|
360,317589,59
|
||||||
|
361,317589,60
|
||||||
|
362,317589,61
|
||||||
|
363,317589,62
|
||||||
|
364,317589,63
|
||||||
|
365,317589,64
|
||||||
|
366,317589,65
|
||||||
|
367,317589,66
|
||||||
|
368,317589,67
|
||||||
|
369,317589,68
|
||||||
|
370,317589,69
|
||||||
|
371,317589,70
|
||||||
|
372,317589,71
|
||||||
|
373,317589,72
|
||||||
|
374,317589,73
|
||||||
|
375,317589,74
|
||||||
|
376,317589,90
|
||||||
|
377,317589,91
|
||||||
|
378,317589,92
|
||||||
|
379,317589,93
|
||||||
|
380,317589,94
|
||||||
|
|
|
@ -0,0 +1,418 @@
|
||||||
|
ID,UPID
|
||||||
|
38,47
|
||||||
|
39,49
|
||||||
|
40,44
|
||||||
|
41,15
|
||||||
|
41,18
|
||||||
|
41,20
|
||||||
|
41,22
|
||||||
|
41,23
|
||||||
|
41,25
|
||||||
|
41,31
|
||||||
|
41,36
|
||||||
|
41,60
|
||||||
|
41,64
|
||||||
|
41,65
|
||||||
|
41,67
|
||||||
|
41,71
|
||||||
|
42,15
|
||||||
|
42,18
|
||||||
|
42,20
|
||||||
|
42,22
|
||||||
|
42,23
|
||||||
|
42,25
|
||||||
|
42,31
|
||||||
|
42,60
|
||||||
|
42,64
|
||||||
|
42,65
|
||||||
|
42,67
|
||||||
|
42,71
|
||||||
|
43,46
|
||||||
|
44,15
|
||||||
|
44,18
|
||||||
|
44,7
|
||||||
|
44,20
|
||||||
|
44,22
|
||||||
|
44,23
|
||||||
|
44,25
|
||||||
|
44,27
|
||||||
|
44,60
|
||||||
|
44,64
|
||||||
|
44,65
|
||||||
|
44,67
|
||||||
|
44,71
|
||||||
|
45,15
|
||||||
|
45,18
|
||||||
|
45,7
|
||||||
|
45,20
|
||||||
|
45,22
|
||||||
|
45,23
|
||||||
|
45,25
|
||||||
|
45,27
|
||||||
|
45,60
|
||||||
|
45,64
|
||||||
|
45,65
|
||||||
|
45,67
|
||||||
|
45,71
|
||||||
|
46,15
|
||||||
|
46,18
|
||||||
|
46,20
|
||||||
|
46,22
|
||||||
|
46,23
|
||||||
|
46,25
|
||||||
|
46,27
|
||||||
|
46,32
|
||||||
|
46,60
|
||||||
|
46,64
|
||||||
|
46,65
|
||||||
|
46,67
|
||||||
|
46,71
|
||||||
|
47,15
|
||||||
|
47,18
|
||||||
|
47,20
|
||||||
|
47,22
|
||||||
|
47,23
|
||||||
|
47,25
|
||||||
|
47,27
|
||||||
|
47,33
|
||||||
|
47,60
|
||||||
|
47,64
|
||||||
|
47,65
|
||||||
|
47,67
|
||||||
|
47,71
|
||||||
|
48,15
|
||||||
|
48,18
|
||||||
|
48,20
|
||||||
|
48,22
|
||||||
|
48,23
|
||||||
|
48,25
|
||||||
|
48,27
|
||||||
|
48,34
|
||||||
|
48,60
|
||||||
|
48,64
|
||||||
|
48,65
|
||||||
|
48,67
|
||||||
|
48,71
|
||||||
|
49,15
|
||||||
|
49,18
|
||||||
|
49,20
|
||||||
|
49,22
|
||||||
|
49,23
|
||||||
|
49,25
|
||||||
|
49,27
|
||||||
|
49,35
|
||||||
|
49,60
|
||||||
|
49,64
|
||||||
|
49,65
|
||||||
|
49,67
|
||||||
|
49,71
|
||||||
|
50,19
|
||||||
|
50,20
|
||||||
|
50,22
|
||||||
|
50,23
|
||||||
|
50,25
|
||||||
|
50,27
|
||||||
|
50,28
|
||||||
|
50,29
|
||||||
|
50,40
|
||||||
|
50,60
|
||||||
|
50,62
|
||||||
|
50,63
|
||||||
|
50,64
|
||||||
|
50,65
|
||||||
|
50,67
|
||||||
|
50,68
|
||||||
|
50,69
|
||||||
|
50,71
|
||||||
|
50,72
|
||||||
|
51,19
|
||||||
|
51,20
|
||||||
|
51,22
|
||||||
|
51,23
|
||||||
|
51,25
|
||||||
|
51,27
|
||||||
|
51,28
|
||||||
|
51,29
|
||||||
|
51,38
|
||||||
|
51,60
|
||||||
|
51,62
|
||||||
|
51,63
|
||||||
|
51,64
|
||||||
|
51,65
|
||||||
|
51,67
|
||||||
|
51,68
|
||||||
|
51,69
|
||||||
|
51,71
|
||||||
|
51,72
|
||||||
|
52,19
|
||||||
|
52,20
|
||||||
|
52,22
|
||||||
|
52,23
|
||||||
|
52,25
|
||||||
|
52,27
|
||||||
|
52,28
|
||||||
|
52,29
|
||||||
|
52,41
|
||||||
|
52,60
|
||||||
|
52,62
|
||||||
|
52,63
|
||||||
|
52,64
|
||||||
|
52,65
|
||||||
|
52,67
|
||||||
|
52,68
|
||||||
|
52,69
|
||||||
|
52,71
|
||||||
|
52,72
|
||||||
|
53,19
|
||||||
|
53,20
|
||||||
|
53,22
|
||||||
|
53,23
|
||||||
|
53,25
|
||||||
|
53,27
|
||||||
|
53,28
|
||||||
|
53,29
|
||||||
|
53,39
|
||||||
|
53,60
|
||||||
|
53,62
|
||||||
|
53,63
|
||||||
|
53,64
|
||||||
|
53,65
|
||||||
|
53,67
|
||||||
|
53,68
|
||||||
|
53,69
|
||||||
|
53,71
|
||||||
|
53,72
|
||||||
|
54,19
|
||||||
|
54,20
|
||||||
|
54,22
|
||||||
|
54,23
|
||||||
|
54,25
|
||||||
|
54,27
|
||||||
|
54,28
|
||||||
|
54,29
|
||||||
|
54,43
|
||||||
|
54,60
|
||||||
|
54,62
|
||||||
|
54,63
|
||||||
|
54,64
|
||||||
|
54,65
|
||||||
|
54,67
|
||||||
|
54,68
|
||||||
|
54,69
|
||||||
|
54,71
|
||||||
|
54,72
|
||||||
|
55,19
|
||||||
|
55,20
|
||||||
|
55,22
|
||||||
|
55,23
|
||||||
|
55,25
|
||||||
|
55,27
|
||||||
|
55,28
|
||||||
|
55,29
|
||||||
|
55,42
|
||||||
|
55,60
|
||||||
|
55,62
|
||||||
|
55,63
|
||||||
|
55,64
|
||||||
|
55,65
|
||||||
|
55,67
|
||||||
|
55,68
|
||||||
|
55,69
|
||||||
|
55,71
|
||||||
|
55,72
|
||||||
|
58,56
|
||||||
|
58,57
|
||||||
|
90,10
|
||||||
|
90,11
|
||||||
|
90,17
|
||||||
|
90,19
|
||||||
|
90,7
|
||||||
|
90,20
|
||||||
|
90,21
|
||||||
|
90,23
|
||||||
|
90,24
|
||||||
|
90,25
|
||||||
|
90,28
|
||||||
|
90,31
|
||||||
|
90,44
|
||||||
|
90,45
|
||||||
|
90,58
|
||||||
|
90,59
|
||||||
|
90,60
|
||||||
|
90,61
|
||||||
|
90,62
|
||||||
|
90,65
|
||||||
|
90,66
|
||||||
|
90,67
|
||||||
|
90,68
|
||||||
|
90,8
|
||||||
|
90,9
|
||||||
|
91,10
|
||||||
|
91,11
|
||||||
|
91,17
|
||||||
|
91,18
|
||||||
|
91,19
|
||||||
|
91,20
|
||||||
|
91,23
|
||||||
|
91,24
|
||||||
|
91,28
|
||||||
|
91,31
|
||||||
|
91,58
|
||||||
|
91,59
|
||||||
|
91,61
|
||||||
|
91,62
|
||||||
|
91,65
|
||||||
|
91,66
|
||||||
|
91,70
|
||||||
|
91,8
|
||||||
|
91,9
|
||||||
|
92,10
|
||||||
|
92,11
|
||||||
|
92,17
|
||||||
|
92,18
|
||||||
|
92,19
|
||||||
|
92,20
|
||||||
|
92,23
|
||||||
|
92,24
|
||||||
|
92,28
|
||||||
|
92,31
|
||||||
|
92,58
|
||||||
|
92,59
|
||||||
|
92,61
|
||||||
|
92,62
|
||||||
|
92,65
|
||||||
|
92,66
|
||||||
|
92,70
|
||||||
|
92,8
|
||||||
|
92,9
|
||||||
|
93,10
|
||||||
|
93,11
|
||||||
|
93,17
|
||||||
|
93,18
|
||||||
|
93,19
|
||||||
|
93,20
|
||||||
|
93,23
|
||||||
|
93,24
|
||||||
|
93,28
|
||||||
|
93,31
|
||||||
|
93,58
|
||||||
|
93,59
|
||||||
|
93,61
|
||||||
|
93,62
|
||||||
|
93,65
|
||||||
|
93,66
|
||||||
|
93,70
|
||||||
|
93,8
|
||||||
|
93,9
|
||||||
|
94,10
|
||||||
|
94,11
|
||||||
|
94,17
|
||||||
|
94,18
|
||||||
|
94,19
|
||||||
|
94,20
|
||||||
|
94,23
|
||||||
|
94,24
|
||||||
|
94,28
|
||||||
|
94,31
|
||||||
|
94,58
|
||||||
|
94,59
|
||||||
|
94,61
|
||||||
|
94,62
|
||||||
|
94,65
|
||||||
|
94,66
|
||||||
|
94,70
|
||||||
|
94,8
|
||||||
|
94,9
|
||||||
|
95,10
|
||||||
|
95,11
|
||||||
|
95,12
|
||||||
|
95,13
|
||||||
|
95,14
|
||||||
|
95,15
|
||||||
|
95,16
|
||||||
|
95,17
|
||||||
|
95,18
|
||||||
|
95,19
|
||||||
|
95,20
|
||||||
|
95,21
|
||||||
|
95,22
|
||||||
|
95,23
|
||||||
|
95,24
|
||||||
|
95,25
|
||||||
|
95,26
|
||||||
|
95,27
|
||||||
|
95,28
|
||||||
|
95,29
|
||||||
|
95,30
|
||||||
|
95,31
|
||||||
|
95,37
|
||||||
|
95,44
|
||||||
|
95,45
|
||||||
|
95,46
|
||||||
|
95,47
|
||||||
|
95,48
|
||||||
|
95,49
|
||||||
|
95,50
|
||||||
|
95,51
|
||||||
|
95,52
|
||||||
|
95,53
|
||||||
|
95,54
|
||||||
|
95,55
|
||||||
|
95,58
|
||||||
|
95,59
|
||||||
|
95,60
|
||||||
|
95,61
|
||||||
|
95,62
|
||||||
|
95,63
|
||||||
|
95,64
|
||||||
|
95,65
|
||||||
|
95,66
|
||||||
|
95,67
|
||||||
|
95,68
|
||||||
|
95,69
|
||||||
|
95,70
|
||||||
|
95,71
|
||||||
|
95,72
|
||||||
|
95,73
|
||||||
|
95,74
|
||||||
|
95,8
|
||||||
|
95,9
|
||||||
|
95,90
|
||||||
|
95,91
|
||||||
|
95,92
|
||||||
|
95,93
|
||||||
|
95,94
|
||||||
|
95,97
|
||||||
|
96,100
|
||||||
|
96,101
|
||||||
|
96,102
|
||||||
|
96,103
|
||||||
|
96,104
|
||||||
|
96,105
|
||||||
|
96,106
|
||||||
|
96,107
|
||||||
|
96,108
|
||||||
|
96,109
|
||||||
|
96,75
|
||||||
|
96,76
|
||||||
|
96,80
|
||||||
|
96,81
|
||||||
|
96,82
|
||||||
|
96,83
|
||||||
|
96,84
|
||||||
|
96,85
|
||||||
|
96,86
|
||||||
|
96,87
|
||||||
|
96,88
|
||||||
|
96,89
|
||||||
|
96,95
|
||||||
|
96,97
|
||||||
|
96,98
|
||||||
|
96,99
|
||||||
|
97,58
|
||||||
|
98,78
|
||||||
|
98,95
|
||||||
|
99,79
|
||||||
|
99,95
|
||||||
|
100,77
|
||||||
|
100,95
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
X1,X2,X3,X4,X5,X6,X7,X8
|
||||||
|
0,0,0,0,0,0,0,0
|
||||||
|
|
|
@ -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
|
||||||
|
,,,,,
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
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
|
||||||
|
|
|
@ -0,0 +1,238 @@
|
||||||
|
IndustryID,MaterialID,Quantity
|
||||||
|
38,47,1.0
|
||||||
|
39,49,1.0
|
||||||
|
40,44,1.0
|
||||||
|
41,15,0.02
|
||||||
|
41,18,0.1
|
||||||
|
41,20,0.4
|
||||||
|
41,22,0.15
|
||||||
|
41,23,0.04
|
||||||
|
41,25,0.02
|
||||||
|
41,31,0.25
|
||||||
|
41,36,1.0
|
||||||
|
42,15,0.02
|
||||||
|
42,18,0.1
|
||||||
|
42,20,0.4
|
||||||
|
42,22,0.15
|
||||||
|
42,23,0.04
|
||||||
|
42,25,0.02
|
||||||
|
42,31,0.25
|
||||||
|
43,46,1.0
|
||||||
|
44,7,1.4
|
||||||
|
44,15,0.02
|
||||||
|
44,18,0.1
|
||||||
|
44,20,0.4
|
||||||
|
44,22,0.15
|
||||||
|
44,23,0.04
|
||||||
|
44,25,0.02
|
||||||
|
44,27,0.25
|
||||||
|
45,7,1.4
|
||||||
|
45,15,0.02
|
||||||
|
45,18,0.1
|
||||||
|
45,20,0.4
|
||||||
|
45,22,0.15
|
||||||
|
45,23,0.04
|
||||||
|
45,25,0.02
|
||||||
|
45,27,0.25
|
||||||
|
46,15,0.02
|
||||||
|
46,18,0.1
|
||||||
|
46,20,0.4
|
||||||
|
46,22,0.15
|
||||||
|
46,23,0.04
|
||||||
|
46,25,0.02
|
||||||
|
46,27,0.25
|
||||||
|
46,32,1.3
|
||||||
|
47,15,0.02
|
||||||
|
47,18,0.1
|
||||||
|
47,20,0.4
|
||||||
|
47,22,0.15
|
||||||
|
47,23,0.04
|
||||||
|
47,25,0.02
|
||||||
|
47,27,0.25
|
||||||
|
47,33,1.0
|
||||||
|
48,15,0.02
|
||||||
|
48,18,0.1
|
||||||
|
48,20,0.4
|
||||||
|
48,22,0.15
|
||||||
|
48,23,0.04
|
||||||
|
48,25,0.02
|
||||||
|
48,27,0.25
|
||||||
|
48,34,1.3
|
||||||
|
49,15,0.02
|
||||||
|
49,18,0.1
|
||||||
|
49,20,0.4
|
||||||
|
49,22,0.15
|
||||||
|
49,23,0.04
|
||||||
|
49,25,0.02
|
||||||
|
49,27,0.25
|
||||||
|
49,35,1.3
|
||||||
|
50,19,0.005
|
||||||
|
50,20,0.4
|
||||||
|
50,22,0.15
|
||||||
|
50,23,0.04
|
||||||
|
50,25,0.02
|
||||||
|
50,28,0.25
|
||||||
|
50,29,0.03
|
||||||
|
50,27,0.01
|
||||||
|
50,40,1.0
|
||||||
|
51,19,0.005
|
||||||
|
51,20,0.4
|
||||||
|
51,22,0.15
|
||||||
|
51,23,0.04
|
||||||
|
51,25,0.02
|
||||||
|
51,28,0.25
|
||||||
|
51,29,0.03
|
||||||
|
51,27,0.01
|
||||||
|
51,38,1.0
|
||||||
|
52,19,0.005
|
||||||
|
52,20,0.4
|
||||||
|
52,22,0.15
|
||||||
|
52,23,0.04
|
||||||
|
52,25,0.02
|
||||||
|
52,28,0.25
|
||||||
|
52,29,0.03
|
||||||
|
52,27,0.01
|
||||||
|
52,41,1.0
|
||||||
|
53,19,0.005
|
||||||
|
53,20,0.4
|
||||||
|
53,22,0.15
|
||||||
|
53,23,0.04
|
||||||
|
53,25,0.02
|
||||||
|
53,28,0.25
|
||||||
|
53,29,0.03
|
||||||
|
53,27,0.01
|
||||||
|
53,39,1.0
|
||||||
|
54,19,0.005
|
||||||
|
54,20,0.4
|
||||||
|
54,22,0.15
|
||||||
|
54,23,0.04
|
||||||
|
54,25,0.02
|
||||||
|
54,28,0.25
|
||||||
|
54,29,0.03
|
||||||
|
54,27,0.01
|
||||||
|
54,43,1.0
|
||||||
|
55,19,0.005
|
||||||
|
55,20,0.4
|
||||||
|
55,22,0.15
|
||||||
|
55,23,0.04
|
||||||
|
55,25,0.02
|
||||||
|
55,28,0.25
|
||||||
|
55,29,0.03
|
||||||
|
55,27,0.01
|
||||||
|
55,42,1.0
|
||||||
|
90,7,1.7
|
||||||
|
90,8,0.07
|
||||||
|
90,9,0.07
|
||||||
|
90,10,0.02
|
||||||
|
90,11,0.04
|
||||||
|
90,17,0.1
|
||||||
|
90,19,0.005
|
||||||
|
90,20,0.4
|
||||||
|
90,21,0.04
|
||||||
|
90,23,0.04
|
||||||
|
90,24,0.07
|
||||||
|
90,25,0.02
|
||||||
|
90,28,0.03
|
||||||
|
90,31,0.25
|
||||||
|
90,44,0.2
|
||||||
|
90,45,0.1
|
||||||
|
91,8,0.07
|
||||||
|
91,9,0.07
|
||||||
|
91,10,0.02
|
||||||
|
91,11,0.04
|
||||||
|
91,17,0.1
|
||||||
|
91,18,0.1
|
||||||
|
91,19,0.005
|
||||||
|
91,20,0.4
|
||||||
|
91,23,0.04
|
||||||
|
91,24,0.07
|
||||||
|
91,28,0.03
|
||||||
|
91,31,0.25
|
||||||
|
92,8,0.07
|
||||||
|
92,9,0.07
|
||||||
|
92,10,0.02
|
||||||
|
92,11,0.04
|
||||||
|
92,17,0.1
|
||||||
|
92,18,0.1
|
||||||
|
92,19,0.005
|
||||||
|
92,20,0.4
|
||||||
|
92,23,0.04
|
||||||
|
92,24,0.07
|
||||||
|
92,28,0.03
|
||||||
|
92,31,0.26
|
||||||
|
93,8,0.07
|
||||||
|
93,9,0.07
|
||||||
|
93,10,0.02
|
||||||
|
93,11,0.04
|
||||||
|
93,17,0.1
|
||||||
|
93,18,0.1
|
||||||
|
93,19,0.005
|
||||||
|
93,20,0.4
|
||||||
|
93,23,0.04
|
||||||
|
93,24,0.07
|
||||||
|
93,28,0.03
|
||||||
|
93,31,0.27
|
||||||
|
94,8,0.07
|
||||||
|
94,9,0.07
|
||||||
|
94,10,0.02
|
||||||
|
94,11,0.04
|
||||||
|
94,17,0.1
|
||||||
|
94,18,0.1
|
||||||
|
94,19,0.005
|
||||||
|
94,20,0.4
|
||||||
|
94,23,0.04
|
||||||
|
94,24,0.07
|
||||||
|
94,28,0.03
|
||||||
|
94,31,0.28
|
||||||
|
95,8,0.1
|
||||||
|
95,9,0.0
|
||||||
|
95,10,7.0
|
||||||
|
95,11,0.02
|
||||||
|
95,12,0.03
|
||||||
|
95,13,0.01
|
||||||
|
95,14,0.01
|
||||||
|
95,15,0.07
|
||||||
|
95,16,0.05
|
||||||
|
95,17,0.003
|
||||||
|
95,18,0.1
|
||||||
|
95,19,0.04
|
||||||
|
95,20,0.01
|
||||||
|
95,21,0.04
|
||||||
|
95,22,0.03
|
||||||
|
95,23,0.02
|
||||||
|
95,24,0.01
|
||||||
|
95,25,0.05
|
||||||
|
95,26,0.01
|
||||||
|
95,27,0.003
|
||||||
|
95,28,0.1
|
||||||
|
95,29,0.05
|
||||||
|
95,30,0.04
|
||||||
|
95,31,0.01
|
||||||
|
95,37,0.1
|
||||||
|
95,44,0.04
|
||||||
|
95,45,0.7
|
||||||
|
95,46,0.07
|
||||||
|
95,47,0.01
|
||||||
|
95,48,0.03
|
||||||
|
95,49,0.01
|
||||||
|
95,50,0.01
|
||||||
|
95,51,0.01
|
||||||
|
95,52,0.2
|
||||||
|
95,53,0.03
|
||||||
|
95,54,0.01
|
||||||
|
95,55,0.01
|
||||||
|
95,90,0.01
|
||||||
|
95,91,0.01
|
||||||
|
95,92,1.0
|
||||||
|
95,93,1.0
|
||||||
|
95,94,1.0
|
||||||
|
96,95,1.0
|
||||||
|
96,101,0.01
|
||||||
|
96,102,0.01
|
||||||
|
96,103,0.02
|
||||||
|
96,104,0.01
|
||||||
|
96,105,0.2
|
||||||
|
96,106,0.1
|
||||||
|
96,107,0.01
|
||||||
|
96,108,0.03
|
||||||
|
96,109,0.02
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import time
|
||||||
|
from multiprocessing import Process
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
|
||||||
|
from computation import Computation
|
||||||
|
from sqlalchemy.orm import close_all_sessions
|
||||||
|
import yaml
|
||||||
|
from controller_db import ControllerDB
|
||||||
|
|
||||||
|
|
||||||
|
def controll_db_and_process(exp_argument, reset_sample_argument, reset_db_argument):
|
||||||
|
from controller_db import ControllerDB
|
||||||
|
controller_db = ControllerDB(exp_argument, reset_flag=reset_sample_argument)
|
||||||
|
# controller_db.reset_db()
|
||||||
|
# force drop
|
||||||
|
controller_db.reset_db(force_drop=reset_db_argument)
|
||||||
|
# 准备样本表
|
||||||
|
controller_db.prepare_list_sample()
|
||||||
|
|
||||||
|
close_all_sessions()
|
||||||
|
# 调用 do_process 利用计算机进行多核处理 仿真 将数据库中
|
||||||
|
do_process(do_computation, controller_db)
|
||||||
|
def do_process(target: object, controller_db: ControllerDB, ):
|
||||||
|
process_list = []
|
||||||
|
for i in range(int(args.job)):
|
||||||
|
p = Process(target=do_computation, args=(controller_db,))
|
||||||
|
p.start()
|
||||||
|
process_list.append(p)
|
||||||
|
|
||||||
|
for i in process_list:
|
||||||
|
i.join()
|
||||||
|
|
||||||
|
# 所有子进程完成后刷新最终进度
|
||||||
|
|
||||||
|
# 显示最终进度后关闭图表
|
||||||
|
|
||||||
|
def do_computation(c_db):
|
||||||
|
exp = Computation(c_db)
|
||||||
|
|
||||||
|
while 1:
|
||||||
|
# time.sleep(random.uniform(0, 1))
|
||||||
|
is_all_done = exp.run()
|
||||||
|
if is_all_done:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# 输入参数
|
||||||
|
parser = argparse.ArgumentParser(description='setting')
|
||||||
|
parser.add_argument('--exp', type=str, default='without_exp')
|
||||||
|
parser.add_argument('--job', type=int, default='1')
|
||||||
|
parser.add_argument('--reset_sample', type=int, default='0')
|
||||||
|
parser.add_argument('--reset_db', type=bool, default=False)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
# 几核参与进程
|
||||||
|
assert args.job >= 1, 'Number of jobs should >= 1'
|
||||||
|
# 控制参数 利用 prefix_file_name 前缀名字 控制 2项不同的实验
|
||||||
|
prefix_file_name = 'conf_db_prefix.yaml'
|
||||||
|
if os.path.exists(prefix_file_name):
|
||||||
|
os.remove(prefix_file_name)
|
||||||
|
with open(prefix_file_name, 'w', encoding='utf-8') as file:
|
||||||
|
yaml.dump({'db_name_prefix': args.exp}, file)
|
||||||
|
# 数据库连接控制 和 进行模型运行
|
||||||
|
controll_db_and_process(args.exp, args.reset_sample, args.reset_db)
|
||||||
|
|
@ -0,0 +1,904 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
from collections import Counter
|
||||||
|
from random import shuffle
|
||||||
|
import platform
|
||||||
|
|
||||||
|
import networkx as nx
|
||||||
|
import pandas as pd
|
||||||
|
from mesa import Model
|
||||||
|
from mesa.space import MultiGrid, NetworkGrid
|
||||||
|
from mesa.datacollection import DataCollector
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
from mesa_viz_tornado.modules import NetworkModule
|
||||||
|
|
||||||
|
from firm import FirmAgent
|
||||||
|
from orm import db_session, Result
|
||||||
|
from product import ProductAgent
|
||||||
|
|
||||||
|
from mesa.visualization import ModularServer
|
||||||
|
|
||||||
|
|
||||||
|
class MyModel(Model):
|
||||||
|
def __init__(self, params):
|
||||||
|
"""
|
||||||
|
初始化模型,并设置模型的主要参数。
|
||||||
|
参数说明:
|
||||||
|
- params (dict): 包含模型所需的所有参数的字典。
|
||||||
|
主要参数:
|
||||||
|
- prf_size (bool): 是否在选择供应商时考虑企业规模。
|
||||||
|
- prf_conn (float): 企业建立新连接的概率。
|
||||||
|
- cap_limit_prob_type (str): 产能限制的概率分布类型。
|
||||||
|
- cap_limit_level (float): 产能限制的水平。
|
||||||
|
- diff_new_conn (bool): 是否允许差异化的新连接。
|
||||||
|
- g_bom (str): BOM(物料清单)图的 JSON 表示形式。
|
||||||
|
- sample (object): 包含实验数据的样本对象。
|
||||||
|
- n_iter (int): 仿真的迭代次数。
|
||||||
|
- dct_lst_init_disrupt_firm_prod (dict): 初始企业-产品干扰的字典。
|
||||||
|
- n_max_trial (int): 寻找新供应商的最大尝试次数。
|
||||||
|
- remove_t (int): 在网络中移除节点的时间步。
|
||||||
|
- netw_prf_n (int): 每个企业的首选供应商数量。
|
||||||
|
- seed (int): 随机种子的值,用于确保实验的可重复性。
|
||||||
|
"""
|
||||||
|
#ga参数增加
|
||||||
|
self.k = params["k"]
|
||||||
|
self.production_increase_ratio = params["production_increase_ratio"]
|
||||||
|
self.s_r = params["s_r"]
|
||||||
|
self.S_r = params["S_r"]
|
||||||
|
self.x = params["x"]
|
||||||
|
|
||||||
|
# 仿真参数
|
||||||
|
self.agent_map = None
|
||||||
|
self.firm_prod_labels_dict = None
|
||||||
|
self.firm_relationship_cache = None
|
||||||
|
self.firm_product_cache = None
|
||||||
|
|
||||||
|
self.t = 0
|
||||||
|
self.is_prf_size = params['prf_size'] # 是否在选择供应商时考虑企业规模。
|
||||||
|
self.prf_conn = params['prf_conn'] # 企业建立新连接的概率。
|
||||||
|
self.cap_limit_prob_type = params['cap_limit_prob_type'] # 产能限制的概率分布类型。
|
||||||
|
self.cap_limit_level = params['cap_limit_level'] # 产能限制的水平。
|
||||||
|
self.diff_new_conn = params['diff_new_conn'] # 是否允许差异化的新连接。
|
||||||
|
# 初始化停止时间步,可能是用户通过参数传入
|
||||||
|
self.int_stop_ts = params.get('n_iter', 3) # 默认停止时间为 100
|
||||||
|
|
||||||
|
# 网络初始化
|
||||||
|
self.firm_network = nx.MultiDiGraph() # 企业之间的有向多重图。
|
||||||
|
self.firm_prod_network = nx.MultiDiGraph() # 企业与产品关系的有向多重图。
|
||||||
|
self.product_network = nx.MultiDiGraph() # 产品之间的有向多重图。
|
||||||
|
|
||||||
|
# BOM(物料清单)图
|
||||||
|
self.g_bom = nx.adjacency_graph(json.loads(params['g_bom'])) # 表示 BOM 结构的图。
|
||||||
|
|
||||||
|
# 随机数生成器
|
||||||
|
self.nprandom = np.random.default_rng(params['seed']) # 基于固定种子的随机数生成器。
|
||||||
|
|
||||||
|
# 样本和实验参数
|
||||||
|
self.sample = params['sample'] # 仿真的样本对象。
|
||||||
|
self.int_n_iter = int(params['n_iter']) # 仿真的迭代次数。
|
||||||
|
self.dct_lst_init_disrupt_firm_prod = params['dct_lst_init_disrupt_firm_prod'] # 初始企业-产品干扰关系。
|
||||||
|
|
||||||
|
# 外部变量
|
||||||
|
self.int_n_max_trial = int(params['n_max_trial']) # 寻找新供应商的最大尝试次数。
|
||||||
|
self.remove_t = int(params['remove_t']) # 在网络中移除节点的时间步。
|
||||||
|
self.int_netw_prf_n = int(params['netw_prf_n']) # 每个企业的首选供应商数量。
|
||||||
|
|
||||||
|
# 数据收集器
|
||||||
|
self.data_collector = DataCollector(
|
||||||
|
agent_reporters={"Product": "name"} # 收集代理的名称。
|
||||||
|
)
|
||||||
|
|
||||||
|
self.product_agents = [] # 初始化产品代理列表
|
||||||
|
self.company_agents = [] # 初始化公司代理列表
|
||||||
|
|
||||||
|
# 初始化模型的网络和代理
|
||||||
|
# 检查缓存是否存在
|
||||||
|
cache_file = "firm_network.pkl"
|
||||||
|
if os.path.exists(cache_file):
|
||||||
|
# 从缓存加载 firm_network
|
||||||
|
with open(cache_file, 'rb') as f:
|
||||||
|
self.firm_network = pickle.load(f)
|
||||||
|
# print("Loaded firm network from cache.")
|
||||||
|
else:
|
||||||
|
# 执行完整的初始化流程
|
||||||
|
self.initialize_product_network(params)
|
||||||
|
self.initialize_firm_network()
|
||||||
|
self.build_firm_prod_labels_dict()
|
||||||
|
self.initialize_firm_product_network()
|
||||||
|
self.add_edges_to_firm_network()
|
||||||
|
self.connect_unconnected_nodes()
|
||||||
|
self.initialize_product_network(params) # 初始化产品网络。
|
||||||
|
self.resource_integration()
|
||||||
|
self.j_comp_consumed_produced()
|
||||||
|
self.initialize_agents() # 初始化代理。
|
||||||
|
self.initialize_disruptions() # 初始化干扰。
|
||||||
|
|
||||||
|
def initialize_product_network(self, params):
|
||||||
|
"""
|
||||||
|
初始化产品网络。
|
||||||
|
|
||||||
|
参数:
|
||||||
|
- params (dict): 包含模型初始化参数的字典。
|
||||||
|
|
||||||
|
功能:
|
||||||
|
1. 从参数中加载 BOM 图 (Bill of Materials) 并构建产品网络。
|
||||||
|
2. 加载产品节点数据并提取产品种类和索引。
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 从参数中解析 BOM 图,并构建 NetworkX 的图结构
|
||||||
|
self.product_network = nx.adjacency_graph(json.loads(params['g_bom']))
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Failed to initialize product network: {e}")
|
||||||
|
self.product_network = nx.MultiDiGraph() # 初始化为空图,以防后续出错
|
||||||
|
# 加载产品数据
|
||||||
|
try:
|
||||||
|
data = pd.read_csv('input_data/input_product_data/BomNodes.csv') # 读取产品节点数据
|
||||||
|
data['Code'] = data['Code'].astype('string') # 确保 Code 字段为字符串类型
|
||||||
|
|
||||||
|
# 保存产品数据和产品类别索引
|
||||||
|
self.type2 = data # 全量产品数据
|
||||||
|
self.id_code = data.groupby('Code')['Index'].apply(list) # 根据产品代码分组索引
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print("Error: File 'BomNodes.csv' not found.")
|
||||||
|
self.type2 = pd.DataFrame() # 设为空 DataFrame 以防后续出错
|
||||||
|
self.id_code = {}
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error loading product data: {e}")
|
||||||
|
self.type2 = pd.DataFrame()
|
||||||
|
self.id_code = {}
|
||||||
|
|
||||||
|
# 此处可以进一步处理设备折旧比值(如果有具体逻辑,可以在此补充)
|
||||||
|
|
||||||
|
def initialize_firm_network(self):
|
||||||
|
"""
|
||||||
|
初始化企业网络,处理一个 Code 映射到多个 Index 的情况,并缓存所有相关属性。
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 加载企业数据
|
||||||
|
firm_data = pd.read_csv("input_data/input_firm_data/firm_amended.csv", dtype={'Code': str})
|
||||||
|
firm_data['Code'] = firm_data['Code'].str.replace('.0', '', regex=False)
|
||||||
|
|
||||||
|
# 加载企业与产品关系数据
|
||||||
|
firm_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv", dtype={'Firm_Code': str})
|
||||||
|
bom_nodes = pd.read_csv("input_data/input_product_data/BomNodes.csv")
|
||||||
|
|
||||||
|
# 构建 Code -> [Index] 的多值映射
|
||||||
|
code_to_indices = bom_nodes.groupby('Code')['Index'].apply(list).to_dict()
|
||||||
|
|
||||||
|
# 将 Product_Code 转换为 Product_Indices
|
||||||
|
firm_industry_relation['Product_Indices'] = firm_industry_relation['Product_Code'].map(code_to_indices)
|
||||||
|
|
||||||
|
# 检查并处理未映射的 Product_Code
|
||||||
|
unmapped_products = firm_industry_relation[firm_industry_relation['Product_Indices'].isna()]
|
||||||
|
if not unmapped_products.empty:
|
||||||
|
print("Warning: The following Product_Code values could not be mapped to Index:")
|
||||||
|
print(unmapped_products[['Firm_Code', 'Product_Code']])
|
||||||
|
|
||||||
|
firm_industry_relation['Product_Indices'] = firm_industry_relation['Product_Indices'].apply(
|
||||||
|
lambda x: x if isinstance(x, list) else []
|
||||||
|
)
|
||||||
|
|
||||||
|
# 按 Firm_Code 分组生成企业的 Product_Code 和 Product_Indices 映射
|
||||||
|
firm_product = (
|
||||||
|
firm_industry_relation.groupby('Firm_Code')['Product_Code'].apply(list)
|
||||||
|
)
|
||||||
|
firm_product_indices = (
|
||||||
|
firm_industry_relation.groupby('Firm_Code')['Product_Indices']
|
||||||
|
.apply(lambda indices: [idx for sublist in indices for idx in sublist])
|
||||||
|
)
|
||||||
|
|
||||||
|
# 设置企业属性并添加到网络中
|
||||||
|
firm_attributes = firm_data.copy()
|
||||||
|
firm_attributes['Product_Indices'] = firm_attributes['Code'].map(firm_product)
|
||||||
|
firm_attributes['Product_Code'] = firm_attributes['Code'].map(firm_product_indices)
|
||||||
|
firm_attributes.set_index('Code', inplace=True)
|
||||||
|
|
||||||
|
self.firm_network.add_nodes_from(firm_data['Code'])
|
||||||
|
|
||||||
|
# 为企业节点分配属性
|
||||||
|
firm_labels_dict = {code: firm_attributes.loc[code].to_dict() for code in self.firm_network.nodes}
|
||||||
|
nx.set_node_attributes(self.firm_network, firm_labels_dict)
|
||||||
|
|
||||||
|
# 构建企业-产品映射缓存
|
||||||
|
self.firm_product_cache = firm_product_indices.to_dict()
|
||||||
|
|
||||||
|
# 构建企业关系缓存
|
||||||
|
self.firm_relationship_cache = {
|
||||||
|
firm: self.compute_firm_relationship(firm, self.firm_product_cache)
|
||||||
|
for firm in self.firm_product_cache
|
||||||
|
}
|
||||||
|
|
||||||
|
def compute_firm_relationship(self, firm, firm_product_cache):
|
||||||
|
"""计算单个企业的供应链关系"""
|
||||||
|
lst_pred_product_code = []
|
||||||
|
for product_code in firm_product_cache[firm]:
|
||||||
|
lst_pred_product_code += list(self.g_bom.predecessors(product_code))
|
||||||
|
return list(set(lst_pred_product_code)) # 返回唯一值列表
|
||||||
|
|
||||||
|
def build_firm_prod_labels_dict(self):
|
||||||
|
"""
|
||||||
|
构建企业与产品的映射关系字典。
|
||||||
|
"""
|
||||||
|
firm_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv")
|
||||||
|
firm_industry_relation['Firm_Code'] = firm_industry_relation['Firm_Code'].astype(str)
|
||||||
|
self.firm_prod_labels_dict = (
|
||||||
|
firm_industry_relation.groupby('Firm_Code')['Product_Code']
|
||||||
|
.apply(list)
|
||||||
|
.to_dict()
|
||||||
|
)
|
||||||
|
|
||||||
|
def initialize_firm_product_network(self):
|
||||||
|
"""
|
||||||
|
初始化企业与产品的网络关系,并引入缓存机制。
|
||||||
|
功能:
|
||||||
|
1. 加载企业-行业关系数据。
|
||||||
|
2. 为每个企业和产品建立网络节点。
|
||||||
|
3. 将产品代码与索引进行映射,并为网络节点分配属性。
|
||||||
|
4. 缓存网络和相关数据以加速后续运行。
|
||||||
|
"""
|
||||||
|
# 加载企业-行业关系数据
|
||||||
|
firm_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv")
|
||||||
|
firm_industry_relation['Firm_Code'] = firm_industry_relation['Firm_Code'].astype(str)
|
||||||
|
firm_industry_relation['Product_Code'] = firm_industry_relation['Product_Code'].apply(lambda x: [x])
|
||||||
|
|
||||||
|
# 映射产品代码到索引
|
||||||
|
firm_industry_relation['Product_Code'] = firm_industry_relation['Product_Code'].apply(
|
||||||
|
lambda codes: [idx for code in codes for idx in self.id_code.get(str(code), [])]
|
||||||
|
)
|
||||||
|
|
||||||
|
# 创建企业-产品网络图,同时附带属性
|
||||||
|
nodes_with_attributes = [
|
||||||
|
(index, firm_industry_relation.loc[index].to_dict())
|
||||||
|
for index in firm_industry_relation.index
|
||||||
|
]
|
||||||
|
self.firm_prod_network.add_nodes_from(nodes_with_attributes)
|
||||||
|
|
||||||
|
def compute_firm_supply_chain(self, firm_industry_relation, g_bom):
|
||||||
|
"""
|
||||||
|
根据 firm_industry_relation 和 g_bom 生成供应链缓存。
|
||||||
|
:param firm_industry_relation: 企业-产品关系 DataFrame
|
||||||
|
:param g_bom: BOM 网络图
|
||||||
|
:return: 缓存的供应链关系字典
|
||||||
|
"""
|
||||||
|
supply_chain_cache = {}
|
||||||
|
for firm_code, product_codes in firm_industry_relation.groupby('Firm_Code')['Product_Code']:
|
||||||
|
predecessors = set()
|
||||||
|
for product_code in product_codes:
|
||||||
|
predecessors.update(g_bom.predecessors(product_code))
|
||||||
|
supply_chain_cache[firm_code] = list(predecessors)
|
||||||
|
return supply_chain_cache
|
||||||
|
|
||||||
|
def add_edges_to_firm_network(self):
|
||||||
|
for firm in self.firm_relationship_cache:
|
||||||
|
lst_pred_product_code = self.firm_relationship_cache[firm]
|
||||||
|
for pred_product_code in lst_pred_product_code:
|
||||||
|
lst_pred_firm = [
|
||||||
|
f for f, products in self.firm_product_cache.items()
|
||||||
|
if pred_product_code in products
|
||||||
|
]
|
||||||
|
lst_choose_firm = self.select_firms(lst_pred_firm)
|
||||||
|
# 添加边
|
||||||
|
edges = [(pred_firm, firm, {'Product': pred_product_code}) for pred_firm in lst_choose_firm]
|
||||||
|
self.firm_network.add_edges_from(edges)
|
||||||
|
|
||||||
|
def select_firms(self, lst_pred_firm):
|
||||||
|
"""
|
||||||
|
根据企业列表选择供应商。
|
||||||
|
"""
|
||||||
|
if not lst_pred_firm:
|
||||||
|
return [] # 如果列表为空,返回空列表
|
||||||
|
|
||||||
|
n_pred_firm = self.int_netw_prf_n # 最大选择的供应商数量
|
||||||
|
|
||||||
|
# 筛选有效节点并同步生成有效的企业规模
|
||||||
|
valid_firms = []
|
||||||
|
lst_pred_firm_size = []
|
||||||
|
for pred_firm in lst_pred_firm:
|
||||||
|
if pred_firm in self.firm_network.nodes and 'Revenue_Log' in self.firm_network.nodes[pred_firm]:
|
||||||
|
valid_firms.append(pred_firm)
|
||||||
|
lst_pred_firm_size.append(self.firm_network.nodes[pred_firm]['Revenue_Log'])
|
||||||
|
|
||||||
|
# 如果未启用企业规模加权,随机选择
|
||||||
|
if not self.is_prf_size:
|
||||||
|
return self.nprandom.choice(valid_firms, size=min(n_pred_firm, len(valid_firms)), replace=False)
|
||||||
|
|
||||||
|
# 如果考虑企业规模,计算概率分布
|
||||||
|
if lst_pred_firm_size:
|
||||||
|
total_size = sum(lst_pred_firm_size)
|
||||||
|
lst_prob = [size / total_size for size in lst_pred_firm_size]
|
||||||
|
else:
|
||||||
|
lst_prob = []
|
||||||
|
|
||||||
|
# 确保长度一致
|
||||||
|
if len(valid_firms) != len(lst_prob):
|
||||||
|
print(f"Error: valid_firms and lst_prob have different sizes. "
|
||||||
|
f"valid_firms: {len(valid_firms)}, lst_prob: {len(lst_prob)}")
|
||||||
|
return [] # 返回空列表以避免错误
|
||||||
|
|
||||||
|
# 调用 numpy.random.choice
|
||||||
|
return self.nprandom.choice(valid_firms, size=min(n_pred_firm, len(valid_firms)), replace=False, p=lst_prob)
|
||||||
|
|
||||||
|
def add_edges_to_firm_product_network(self, node, pred_product_code, lst_choose_firm):
|
||||||
|
""" Helper function to add edges to the firm-product network """
|
||||||
|
set_node_prod_code = set(self.firm_network.nodes[node]['Product_Code'])
|
||||||
|
set_pred_succ_code = set(self.g_bom.successors(pred_product_code))
|
||||||
|
lst_use_pred_prod_code = list(set_node_prod_code & set_pred_succ_code)
|
||||||
|
|
||||||
|
if len(lst_use_pred_prod_code) == 0:
|
||||||
|
print("错误")
|
||||||
|
|
||||||
|
pred_node_list = []
|
||||||
|
for pred_firm in lst_choose_firm:
|
||||||
|
for n, v in self.firm_prod_network.nodes(data=True):
|
||||||
|
for v1 in v['Product_Code']:
|
||||||
|
if v1 == pred_product_code and v['Firm_Code'] == pred_firm:
|
||||||
|
pred_node_list.append(n)
|
||||||
|
if len(pred_node_list) != 0:
|
||||||
|
pred_node = pred_node_list[0]
|
||||||
|
else:
|
||||||
|
pred_node = -1
|
||||||
|
current_node_list = []
|
||||||
|
for use_pred_prod_code in lst_use_pred_prod_code:
|
||||||
|
for n, v in self.firm_prod_network.nodes(data=True):
|
||||||
|
for v1 in v['Product_Code']:
|
||||||
|
if v1 == use_pred_prod_code and v['Firm_Code'] == node:
|
||||||
|
current_node_list.append(n)
|
||||||
|
if len(current_node_list) != 0:
|
||||||
|
current_node = current_node_list[0]
|
||||||
|
else:
|
||||||
|
current_node = -1
|
||||||
|
if current_node != -1 and pred_node != -1:
|
||||||
|
self.firm_prod_network.add_edge(pred_node, current_node)
|
||||||
|
|
||||||
|
def connect_unconnected_nodes(self):
|
||||||
|
"""
|
||||||
|
连接企业网络中未连接的节点。
|
||||||
|
功能:
|
||||||
|
- 遍历 G_Firm 图中未连接的节点。
|
||||||
|
- 为未连接节点添加边,连接到可能的下游企业。
|
||||||
|
- 同时更新 G_FirmProd 网络,反映企业与产品的关系。
|
||||||
|
"""
|
||||||
|
|
||||||
|
# # 找出 Product_Code 是 float 的节点
|
||||||
|
# for node, data in self.firm_network.nodes(data=True):
|
||||||
|
# val = data.get('Product_Code')
|
||||||
|
# if isinstance(val, float):
|
||||||
|
# print(f"⚠️ 发现异常节点: Node={node}, Product_Code={val}")
|
||||||
|
|
||||||
|
for node in nx.nodes(self.firm_network):
|
||||||
|
# 如果节点没有任何连接,则处理该节点
|
||||||
|
if self.firm_network.degree(node) == 0:
|
||||||
|
# 获取当前节点的产品列表
|
||||||
|
product_codes = self.firm_network.nodes[node].get('Product_Code', [])
|
||||||
|
for product_code in product_codes:
|
||||||
|
# 查找与当前产品相关的 FirmProd 节点
|
||||||
|
current_node_list = [
|
||||||
|
n for n, v in self.firm_prod_network.nodes(data=True)
|
||||||
|
if v['Firm_Code'] == node and product_code in v['Product_Code']
|
||||||
|
]
|
||||||
|
current_node = current_node_list[0] if current_node_list else -1
|
||||||
|
|
||||||
|
# 查找当前产品的所有下游产品代码
|
||||||
|
succ_product_codes = list(self.g_bom.successors(product_code))
|
||||||
|
for succ_product_code in succ_product_codes:
|
||||||
|
# 查找生产下游产品的企业
|
||||||
|
succ_firms = [
|
||||||
|
firm_code for firm_code, products in self.firm_prod_labels_dict.items()
|
||||||
|
if succ_product_code in products
|
||||||
|
]
|
||||||
|
|
||||||
|
# 确定供应商数量限制
|
||||||
|
n_succ_firm = min(len(succ_firms), self.int_netw_prf_n)
|
||||||
|
if n_succ_firm == 0:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 选择供应商
|
||||||
|
if self.is_prf_size:
|
||||||
|
# 基于企业规模选择供应商
|
||||||
|
succ_firm_sizes = [
|
||||||
|
self.firm_network.nodes[succ_firm].get('Revenue_Log', 0)
|
||||||
|
for succ_firm in succ_firms
|
||||||
|
]
|
||||||
|
if sum(succ_firm_sizes) > 0:
|
||||||
|
probs = [size / sum(succ_firm_sizes) for size in succ_firm_sizes]
|
||||||
|
selected_firms = self.nprandom.choice(succ_firms, size=n_succ_firm, replace=False,
|
||||||
|
p=probs)
|
||||||
|
else:
|
||||||
|
selected_firms = []
|
||||||
|
else:
|
||||||
|
# 随机选择供应商
|
||||||
|
selected_firms = self.nprandom.choice(succ_firms, size=n_succ_firm, replace=False)
|
||||||
|
|
||||||
|
# 添加边到 G_Firm 图
|
||||||
|
edges = [(node, firm, {'Product': product_code}) for firm in selected_firms]
|
||||||
|
self.firm_network.add_edges_from(edges)
|
||||||
|
|
||||||
|
# 更新 G_FirmProd 网络
|
||||||
|
for succ_firm in selected_firms:
|
||||||
|
succ_node_list = [
|
||||||
|
n for n, v in self.firm_prod_network.nodes(data=True)
|
||||||
|
if v['Firm_Code'] == succ_firm and succ_product_code in v['Product_Code']
|
||||||
|
]
|
||||||
|
succ_node = succ_node_list[0] if succ_node_list else -1
|
||||||
|
if current_node != -1 and succ_node != -1:
|
||||||
|
self.firm_prod_network.add_edge(current_node, succ_node)
|
||||||
|
|
||||||
|
# 保存构建完成的 firm_network 到缓存
|
||||||
|
cache_file = "firm_network.pkl"
|
||||||
|
os.makedirs("cache", exist_ok=True)
|
||||||
|
with open(cache_file, 'wb') as f:
|
||||||
|
pickle.dump(self.firm_network, f)
|
||||||
|
# print("Firm network has been saved to cache.")
|
||||||
|
|
||||||
|
def initialize_agents(self):
|
||||||
|
"""
|
||||||
|
初始化代理并添加到模型中。
|
||||||
|
功能:
|
||||||
|
1. 根据产品网络初始化产品代理。
|
||||||
|
2. 根据企业网络初始化企业代理。
|
||||||
|
"""
|
||||||
|
# 初始化产品代理
|
||||||
|
for ag_node, attr in self.product_network.nodes(data=True):
|
||||||
|
# 创建产品代理
|
||||||
|
product_agent = ProductAgent(
|
||||||
|
unique_id=ag_node,
|
||||||
|
model=self,
|
||||||
|
name=attr.get('Name', 'Unknown'), # 防止 Name 属性缺失
|
||||||
|
type2=0,
|
||||||
|
production_ratio=0
|
||||||
|
)
|
||||||
|
self.add_agent(product_agent)
|
||||||
|
|
||||||
|
# 初始化企业代理
|
||||||
|
for ag_node, attr in self.firm_network.nodes(data=True):
|
||||||
|
# 获取与企业相关的产品代理
|
||||||
|
a_lst_product = [
|
||||||
|
agent for agent in self.product_agents if agent.unique_id in attr.get('Product_Code', [])
|
||||||
|
]
|
||||||
|
|
||||||
|
# 获取企业的需求数量和生产输出
|
||||||
|
demand_quantity = self.data_materials.loc[self.data_materials['Firm_Code'] == int(ag_node)]
|
||||||
|
production_output = self.data_produced.loc[self.data_produced['Firm_Code'] == int(ag_node)]
|
||||||
|
|
||||||
|
# 获取企业的资源信息,同时处理 R、P、C 的情况
|
||||||
|
try:
|
||||||
|
R = self.firm_resource_R.loc[int(ag_node)]
|
||||||
|
P = self.firm_resource_P.get(int(ag_node))
|
||||||
|
C = self.firm_resource_C.loc[int(ag_node)]
|
||||||
|
except KeyError:
|
||||||
|
R, P, C = [], {}, [] # 如果任何资源不存在,返回空列表
|
||||||
|
# 在模型初始化时,构建 unique_id -> agent 的快速映射字典
|
||||||
|
self.agent_map = {agent.unique_id: agent for agent in self.company_agents}
|
||||||
|
|
||||||
|
# 创建企业代理
|
||||||
|
firm_agent = FirmAgent(
|
||||||
|
unique_id=ag_node,
|
||||||
|
model=self,
|
||||||
|
type_region=attr.get('Type_Region', 'Unknown'),
|
||||||
|
revenue_log=attr.get('Revenue_Log', 0),
|
||||||
|
a_lst_product=a_lst_product,
|
||||||
|
demand_quantity=demand_quantity,
|
||||||
|
production_output=production_output,
|
||||||
|
R=R,
|
||||||
|
P=P,
|
||||||
|
C=C,
|
||||||
|
s_r=self.s_r,
|
||||||
|
S_r=self.S_r,
|
||||||
|
x=self.x
|
||||||
|
)
|
||||||
|
self.add_agent(firm_agent)
|
||||||
|
|
||||||
|
def initialize_disruptions(self):
|
||||||
|
"""
|
||||||
|
初始化公司与其受干扰产品的映射,并更新干扰状态。
|
||||||
|
功能:
|
||||||
|
- 构建公司与受干扰产品的映射字典。
|
||||||
|
- 更新公司与产品的生产状态为干扰状态。
|
||||||
|
"""
|
||||||
|
# 构建公司与受干扰产品的映射字典
|
||||||
|
disruption_mapping = {}
|
||||||
|
for firm_code, lst_product_indices in self.dct_lst_init_disrupt_firm_prod.items():
|
||||||
|
# 查找企业对象
|
||||||
|
firm = next((f for f in self.company_agents if f.unique_id == firm_code), None)
|
||||||
|
if not firm:
|
||||||
|
print(f"Warning: Firm {firm_code} not found. Skipping.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 查找有效的产品代理
|
||||||
|
valid_products = [
|
||||||
|
product for product in self.product_agents if product.unique_id in lst_product_indices
|
||||||
|
]
|
||||||
|
if not valid_products:
|
||||||
|
print(f"Warning: No valid products found for Firm {firm_code}. Skipping.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 更新映射
|
||||||
|
disruption_mapping[firm] = valid_products
|
||||||
|
|
||||||
|
# 更新干扰字典
|
||||||
|
self.dct_lst_init_disrupt_firm_prod = disruption_mapping
|
||||||
|
|
||||||
|
# 设置初始干扰状态
|
||||||
|
for firm, disrupted_products in disruption_mapping.items():
|
||||||
|
for product in disrupted_products:
|
||||||
|
# 检查产品是否在企业的生产状态中
|
||||||
|
if product not in firm.dct_prod_up_prod_stat:
|
||||||
|
# print(
|
||||||
|
# f"Warning: Product {product.unique_id} not found in firm "
|
||||||
|
# f"{firm.unique_id}'s production status. Skipping."
|
||||||
|
# )
|
||||||
|
continue
|
||||||
|
# 更新产品状态为干扰状态,并记录干扰时间
|
||||||
|
firm.dct_prod_up_prod_stat[product]['p_stat'].append(('D', self.t))
|
||||||
|
|
||||||
|
def add_agent(self, agent):
|
||||||
|
if isinstance(agent, FirmAgent):
|
||||||
|
self.company_agents.append(agent)
|
||||||
|
elif isinstance(agent, ProductAgent):
|
||||||
|
self.product_agents.append(agent)
|
||||||
|
|
||||||
|
def resource_integration(self):
|
||||||
|
"""
|
||||||
|
整合企业资源,包括材料、设备和产品数据。
|
||||||
|
功能:
|
||||||
|
- 加载并处理企业的材料、设备和产品数据。
|
||||||
|
- 合并设备数据与设备残值数据。
|
||||||
|
- 按企业分组生成资源列表。
|
||||||
|
"""
|
||||||
|
# 加载企业的材料、设备和产品数据
|
||||||
|
data_R = pd.read_csv("input_data/input_firm_data/firms_materials.csv")
|
||||||
|
data_C = pd.read_csv("input_data/input_firm_data/firms_devices.csv")
|
||||||
|
data_P = pd.read_csv("input_data/input_firm_data/firms_products.csv")
|
||||||
|
|
||||||
|
# 加载设备残值数据,并合并到设备数据中
|
||||||
|
device_salvage_values = pd.read_csv('input_data/device_salvage_values.csv')
|
||||||
|
self.device_salvage_values = device_salvage_values
|
||||||
|
|
||||||
|
# 合并设备数据和设备残值
|
||||||
|
data_merged_C = pd.merge(data_C, device_salvage_values, on='设备id', how='left')
|
||||||
|
|
||||||
|
# 按企业分组并生成资源列表
|
||||||
|
firm_resource_R = (
|
||||||
|
data_R.groupby('Firm_Code')[['材料id', '材料数量']]
|
||||||
|
.apply(lambda x: x.values.tolist())
|
||||||
|
)
|
||||||
|
|
||||||
|
firm_resource_C = (
|
||||||
|
data_merged_C.groupby('Firm_Code')[['设备id', '设备数量', '设备残值']]
|
||||||
|
.apply(lambda x: x.values.tolist())
|
||||||
|
)
|
||||||
|
|
||||||
|
firm_resource_P = (
|
||||||
|
data_P.groupby('Firm_Code')[['产品id', '产品数量']]
|
||||||
|
.apply(lambda x: x.values.tolist())
|
||||||
|
)
|
||||||
|
|
||||||
|
# 将结果存储到模型中
|
||||||
|
self.firm_resource_R = firm_resource_R
|
||||||
|
self.firm_resource_C = firm_resource_C
|
||||||
|
self.firm_resource_P = firm_resource_P
|
||||||
|
|
||||||
|
def j_comp_consumed_produced(self):
|
||||||
|
"""
|
||||||
|
处理企业的材料消耗与产品生产数据,并计算生产比例。
|
||||||
|
|
||||||
|
功能:
|
||||||
|
- 加载材料消耗数据、产品生产数据和生产比例数据。
|
||||||
|
- 按企业分组整理未消耗材料和未生产产品的数据。
|
||||||
|
- 整理生产比例数据,便于后续使用。
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 加载数据
|
||||||
|
data_materials = pd.read_csv('input_data/input_firm_data/firms_materials.csv')
|
||||||
|
data_produced = pd.read_csv('input_data/input_firm_data/firms_products.csv')
|
||||||
|
data_production_ratio = pd.read_csv('input_data/产品消耗制造比例.csv')
|
||||||
|
|
||||||
|
# 处理未消耗材料数据
|
||||||
|
data_not_consumed = (
|
||||||
|
data_materials.groupby('Firm_Code')[['材料id', '材料数量']]
|
||||||
|
.apply(lambda x: dict(zip(x['材料id'], x['材料数量'])))
|
||||||
|
.reset_index(name='Materials_not_Consumed')
|
||||||
|
)
|
||||||
|
|
||||||
|
# 处理未生产产品数据
|
||||||
|
data_not_produced = (
|
||||||
|
data_produced.groupby('Firm_Code')[['产品id', '产品数量']]
|
||||||
|
.apply(lambda x: dict(zip(x['产品id'], x['产品数量'])))
|
||||||
|
.reset_index(name='Products_not_Produced')
|
||||||
|
)
|
||||||
|
|
||||||
|
# 整理生产比例数据
|
||||||
|
data_production_ratio = (
|
||||||
|
data_production_ratio.groupby('IndustryID')[['MaterialID', 'Quantity']]
|
||||||
|
.apply(lambda x: dict(zip(x['MaterialID'], x['Quantity'])))
|
||||||
|
.reset_index(name='Production_Ratio')
|
||||||
|
)
|
||||||
|
|
||||||
|
# 将处理后的数据存储到模型中
|
||||||
|
self.data_materials = data_not_consumed
|
||||||
|
self.data_produced = data_not_produced
|
||||||
|
self.data_production_ratio = data_production_ratio
|
||||||
|
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
print(f"Error: Missing input file - {e.filename}")
|
||||||
|
self.data_materials, self.data_produced, self.data_production_ratio = None, None, None
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error during consumption and production computation: {e}")
|
||||||
|
self.data_materials, self.data_produced, self.data_production_ratio = None, None, None
|
||||||
|
|
||||||
|
def step(self):
|
||||||
|
"""
|
||||||
|
模拟一个时间步,包括以下过程:
|
||||||
|
1. 移除客户边和中断产品。
|
||||||
|
2. 进行尝试过程,寻找替代供应链。
|
||||||
|
3. 判断资源和设备是否需要采购,并处理采购。
|
||||||
|
4. 资源消耗和产品生产。
|
||||||
|
"""
|
||||||
|
while self.t < self.int_stop_ts: # 使用循环控制时间步
|
||||||
|
# 1. 移除客户边并中断客户上游产品
|
||||||
|
self._remove_disrupted_edges()
|
||||||
|
self._disrupt_upstream_products()
|
||||||
|
|
||||||
|
# 2. 尝试寻找替代供应链
|
||||||
|
self._trial_process()
|
||||||
|
|
||||||
|
# 3. 判断是否需要采购资源和设备
|
||||||
|
self._handle_material_purchase()
|
||||||
|
self._handle_machinery_purchase()
|
||||||
|
|
||||||
|
# 4. 资源消耗和产品生产
|
||||||
|
self._consume_resources_and_produce()
|
||||||
|
# 5. 刷新企业干扰字典
|
||||||
|
self._process_firms_step()
|
||||||
|
# 增加时间步
|
||||||
|
self.t += 1
|
||||||
|
|
||||||
|
# 子方法定义
|
||||||
|
def _remove_disrupted_edges(self):
|
||||||
|
"""移除被中断的客户边。"""
|
||||||
|
for firm in self.company_agents:
|
||||||
|
for prod, prod_stat in firm.dct_prod_up_prod_stat.items():
|
||||||
|
status, ts = prod_stat['p_stat'][-1]
|
||||||
|
if status == 'D' and ts == self.t - 1:
|
||||||
|
firm.remove_edge_to_cus(prod)
|
||||||
|
|
||||||
|
def _disrupt_upstream_products(self):
|
||||||
|
"""中断客户的上游产品。"""
|
||||||
|
for firm in self.company_agents:
|
||||||
|
for prod, prod_stat in firm.dct_prod_up_prod_stat.items():
|
||||||
|
for up_prod, up_stat in prod_stat['s_stat'].items():
|
||||||
|
if up_stat['set_disrupt_firm']:
|
||||||
|
firm.disrupt_cus_prod(prod, up_prod)
|
||||||
|
|
||||||
|
def _trial_process(self):
|
||||||
|
"""尝试寻找替代供应链。"""
|
||||||
|
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 = [
|
||||||
|
supply for prod, prod_stat in firm.dct_prod_up_prod_stat.items()
|
||||||
|
if prod_stat['p_stat'][-1][0] == 'D'
|
||||||
|
for supply, supply_stat in prod_stat['s_stat'].items()
|
||||||
|
if not supply_stat['stat']
|
||||||
|
]
|
||||||
|
if lst_seek_prod:
|
||||||
|
is_stop_trial = False
|
||||||
|
for supply in set(lst_seek_prod):
|
||||||
|
firm.seek_alt_supply(supply)
|
||||||
|
|
||||||
|
if is_stop_trial:
|
||||||
|
break
|
||||||
|
|
||||||
|
# 处理请求
|
||||||
|
shuffle(self.company_agents)
|
||||||
|
for firm in self.company_agents:
|
||||||
|
if firm.dct_request_prod_from_firm:
|
||||||
|
firm.handle_request()
|
||||||
|
|
||||||
|
# 重置请求状态
|
||||||
|
for firm in self.company_agents:
|
||||||
|
firm.clean_before_trial()
|
||||||
|
|
||||||
|
def _handle_material_purchase(self):
|
||||||
|
"""
|
||||||
|
判断并处理资源的采购。
|
||||||
|
"""
|
||||||
|
# 存储需要采购资源的企业及其需求
|
||||||
|
purchase_material_firms = {}
|
||||||
|
|
||||||
|
# 遍历所有企业,检查资源需求
|
||||||
|
for firm in self.company_agents:
|
||||||
|
if not firm.R: # 跳过没有资源的企业
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 遍历资源列表,检查哪些资源需要补货
|
||||||
|
for resource_id, resource_quantity in firm.R:
|
||||||
|
if resource_quantity <= firm.s_r: # 如果资源低于阈值,记录需求
|
||||||
|
required_quantity = firm.S_r - resource_quantity
|
||||||
|
if firm not in purchase_material_firms:
|
||||||
|
purchase_material_firms[firm] = []
|
||||||
|
purchase_material_firms[firm].append((resource_id, required_quantity))
|
||||||
|
|
||||||
|
# 寻找供应商并处理补货
|
||||||
|
for firm, material_requests in purchase_material_firms.items():
|
||||||
|
for resource_id, required_quantity in material_requests:
|
||||||
|
# 寻找供应商
|
||||||
|
supplier = firm.seek_material_supply(resource_id)
|
||||||
|
if supplier != -1: # 如果找到供应商
|
||||||
|
# 供应商处理资源请求
|
||||||
|
supplier.handle_material_request([resource_id, required_quantity])
|
||||||
|
# 更新当前企业的资源数量
|
||||||
|
for resource in firm.R:
|
||||||
|
if resource[0] == resource_id:
|
||||||
|
resource[1] = firm.S_r
|
||||||
|
|
||||||
|
def _handle_machinery_purchase(self):
|
||||||
|
"""
|
||||||
|
判断并处理设备的采购。
|
||||||
|
"""
|
||||||
|
# 存储需要采购设备的企业及其需求
|
||||||
|
purchase_machinery_firms = {}
|
||||||
|
|
||||||
|
# 遍历所有企业,检查设备需求
|
||||||
|
for firm in self.company_agents:
|
||||||
|
if not firm.C: # 跳过没有设备的企业
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 检查设备残值,记录需要补充的设备
|
||||||
|
for equipment in firm.C:
|
||||||
|
equipment_id, equipment_quantity, equipment_salvage = equipment
|
||||||
|
equipment_salvage -= firm.x # 减少设备残值
|
||||||
|
if equipment_salvage <= 0: # 如果残值小于等于 0
|
||||||
|
equipment_quantity -= 1
|
||||||
|
required_quantity = 1 # 需要补充的设备数量
|
||||||
|
if firm not in purchase_machinery_firms:
|
||||||
|
purchase_machinery_firms[firm] = []
|
||||||
|
purchase_machinery_firms[firm].append((equipment_id, required_quantity))
|
||||||
|
|
||||||
|
# 寻找供应商并处理设备补充
|
||||||
|
for firm, machinery_requests in purchase_machinery_firms.items():
|
||||||
|
for equipment_id, required_quantity in machinery_requests:
|
||||||
|
# 寻找供应商
|
||||||
|
supplier = firm.seek_machinery_supply(equipment_id)
|
||||||
|
if supplier != -1: # 如果找到供应商
|
||||||
|
# 供应商处理设备请求
|
||||||
|
supplier.handle_machinery_request([equipment_id, required_quantity])
|
||||||
|
# 恢复企业的设备数量和残值
|
||||||
|
for equipment, initial_equipment in zip(firm.C, firm.C0):
|
||||||
|
if equipment[0] == equipment_id:
|
||||||
|
equipment[1] = initial_equipment[1] # 恢复数量
|
||||||
|
equipment[2] = initial_equipment[2] # 恢复残值
|
||||||
|
|
||||||
|
def _consume_resources_and_produce(self):
|
||||||
|
"""
|
||||||
|
消耗资源并生产产品。
|
||||||
|
"""
|
||||||
|
k = self.k # 资源消耗比例
|
||||||
|
production_increase_ratio = self.production_increase_ratio # 产品生产比例
|
||||||
|
|
||||||
|
# 遍历每个企业
|
||||||
|
for firm in self.company_agents:
|
||||||
|
# 计算资源消耗
|
||||||
|
consumed_resources = self._calculate_consumed_resources(firm, k)
|
||||||
|
|
||||||
|
# 消耗资源
|
||||||
|
self._consume_resources(firm, consumed_resources)
|
||||||
|
|
||||||
|
# 生产产品
|
||||||
|
self._produce_products(firm, production_increase_ratio)
|
||||||
|
|
||||||
|
# 刷新资源和设备状态
|
||||||
|
firm.refresh_R()
|
||||||
|
firm.refresh_C()
|
||||||
|
firm.refresh_P()
|
||||||
|
|
||||||
|
def _calculate_consumed_resources(self, firm, k):
|
||||||
|
"""
|
||||||
|
计算企业的资源消耗量。
|
||||||
|
"""
|
||||||
|
consumed_resources = {}
|
||||||
|
for industry in firm.indus_i:
|
||||||
|
consumed_quantity = sum(
|
||||||
|
product[1] * k
|
||||||
|
for product in firm.P
|
||||||
|
if product[0] == industry.unique_id
|
||||||
|
)
|
||||||
|
consumed_resources[industry.unique_id] = consumed_quantity
|
||||||
|
return consumed_resources
|
||||||
|
|
||||||
|
def _consume_resources(self, firm, consumed_resources):
|
||||||
|
"""
|
||||||
|
消耗企业的资源。
|
||||||
|
"""
|
||||||
|
for resource in firm.R:
|
||||||
|
resource_id, resource_quantity = resource[0], resource[1]
|
||||||
|
if resource_id in consumed_resources:
|
||||||
|
resource[1] = max(0, resource_quantity - consumed_resources[resource_id])
|
||||||
|
|
||||||
|
def _produce_products(self, firm, production_increase_ratio):
|
||||||
|
"""
|
||||||
|
生产企业的产品。
|
||||||
|
"""
|
||||||
|
for product in firm.P:
|
||||||
|
product[1] *= production_increase_ratio
|
||||||
|
|
||||||
|
def _process_firms_step(self):
|
||||||
|
"""
|
||||||
|
处理企业的状态更新,包括:
|
||||||
|
1. 刷新企业字典(清理前置步骤)。
|
||||||
|
2. 减少中断企业的规模。
|
||||||
|
3. 判断企业是否需要从中断状态转为移除状态。
|
||||||
|
4. 判断是否停止模拟。
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 减少中断企业的规模
|
||||||
|
# 刷新企业字典
|
||||||
|
for firm in self.company_agents:
|
||||||
|
firm.clean_before_time_step()
|
||||||
|
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':
|
||||||
|
size = firm.size_stat[-1][0] - \
|
||||||
|
firm.size_stat[0][0] / len(firm.dct_prod_up_prod_stat.keys()) / self.remove_t
|
||||||
|
firm.size_stat.append((size, self.t))
|
||||||
|
lst_is_disrupt = [stat == 'D' for stat, _ in
|
||||||
|
firm.dct_prod_up_prod_stat[prod]['p_stat'][-self.remove_t:]]
|
||||||
|
if all(lst_is_disrupt):
|
||||||
|
# 转换中断企业为已移除企业
|
||||||
|
firm.dct_prod_up_prod_stat[prod]['p_stat'].append(('R', self.t))
|
||||||
|
|
||||||
|
# 判断是否需要停止模拟
|
||||||
|
if self.t > 0:
|
||||||
|
for firm in self.company_agents:
|
||||||
|
for prod in firm.dct_prod_up_prod_stat.keys():
|
||||||
|
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]
|
||||||
|
if status == 'D' and not is_init:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.int_stop_ts = self.t
|
||||||
|
|
||||||
|
def end(self):
|
||||||
|
"""
|
||||||
|
结束模型运行并保存结果。
|
||||||
|
- 如果当前样本的结果未保存,则保存所有生产状态为非正常状态的结果。
|
||||||
|
- 更新样本状态为完成,并记录相关信息。
|
||||||
|
"""
|
||||||
|
# 检查当前样本结果是否已存在
|
||||||
|
if not db_session.query(Result).filter_by(s_id=self.sample.id).first():
|
||||||
|
# 生成需要保存的结果列表
|
||||||
|
lst_result_info = [
|
||||||
|
Result(
|
||||||
|
s_id=self.sample.id,
|
||||||
|
id_firm=firm.unique_id,
|
||||||
|
id_product=prod.unique_id,
|
||||||
|
ts=ts,
|
||||||
|
status=status
|
||||||
|
)
|
||||||
|
for firm in self.company_agents
|
||||||
|
for prod, dct_status_supply in firm.dct_prod_up_prod_stat.items()
|
||||||
|
if not all(stat == 'N' for stat, _ in dct_status_supply['p_stat'])
|
||||||
|
for status, ts in dct_status_supply['p_stat']
|
||||||
|
]
|
||||||
|
|
||||||
|
# 批量保存结果到数据库
|
||||||
|
if lst_result_info:
|
||||||
|
db_session.bulk_save_objects(lst_result_info)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
# 更新样本状态为已完成
|
||||||
|
self.sample.is_done_flag = 1
|
||||||
|
self.sample.computer_name = platform.node()
|
||||||
|
self.sample.stop_t = self.int_stop_ts
|
||||||
|
db_session.commit()
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from sqlalchemy import create_engine, inspect, Inspector
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy import (Column, Integer, DECIMAL, String, ForeignKey,
|
||||||
|
BigInteger, DateTime, PickleType, Boolean, Text)
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from sqlalchemy.orm import relationship, Session
|
||||||
|
from sqlalchemy.pool import NullPool
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
with open('conf_db.yaml') as file:
|
||||||
|
dct_conf_db_all = yaml.full_load(file)
|
||||||
|
is_local_db = dct_conf_db_all['is_local_db']
|
||||||
|
if is_local_db:
|
||||||
|
dct_conf_db = dct_conf_db_all['local']
|
||||||
|
else:
|
||||||
|
dct_conf_db = dct_conf_db_all['remote']
|
||||||
|
|
||||||
|
with open('conf_db_prefix.yaml') as file:
|
||||||
|
dct_conf_db_prefix = yaml.full_load(file)
|
||||||
|
db_name_prefix = dct_conf_db_prefix['db_name_prefix']
|
||||||
|
|
||||||
|
str_login = 'mysql://{}:{}@{}:{}/{}'.format(dct_conf_db['user_name'],
|
||||||
|
dct_conf_db['password'],
|
||||||
|
dct_conf_db['address'],
|
||||||
|
dct_conf_db['port'],
|
||||||
|
dct_conf_db['db_name'])
|
||||||
|
# print('DB is {}:{}/{}'.format(dct_conf_db['address'], dct_conf_db['port'], dct_conf_db['db_name']))
|
||||||
|
|
||||||
|
# must be null pool to avoid connection lost error
|
||||||
|
engine = create_engine(str_login, poolclass=NullPool)
|
||||||
|
connection = engine.connect()
|
||||||
|
ins: Inspector = inspect(engine)
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
db_session = Session(bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
class Experiment(Base):
|
||||||
|
__tablename__ = f"{db_name_prefix}_experiment"
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
|
||||||
|
idx_scenario = Column(Integer, nullable=False)
|
||||||
|
idx_init_removal = Column(Integer, nullable=False)
|
||||||
|
|
||||||
|
# fixed parameters
|
||||||
|
n_sample = Column(Integer, nullable=False)
|
||||||
|
n_iter = Column(Integer, nullable=False)
|
||||||
|
|
||||||
|
# variables
|
||||||
|
dct_lst_init_disrupt_firm_prod = Column(PickleType, nullable=False)
|
||||||
|
g_bom = Column(Text(4294000000), nullable=False)
|
||||||
|
|
||||||
|
n_max_trial = Column(Integer, nullable=False)
|
||||||
|
prf_size = Column(Boolean, nullable=False)
|
||||||
|
prf_conn = Column(Boolean, nullable=False)
|
||||||
|
cap_limit_prob_type = Column(String(16), nullable=False)
|
||||||
|
cap_limit_level = Column(DECIMAL(8, 4), nullable=False)
|
||||||
|
diff_new_conn = Column(DECIMAL(8, 4), nullable=False)
|
||||||
|
remove_t = Column(Integer, nullable=False)
|
||||||
|
netw_prf_n = Column(Integer, nullable=False)
|
||||||
|
|
||||||
|
sample = relationship(
|
||||||
|
'Sample', back_populates='experiment', lazy='dynamic')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Experiment: {self.id}>'
|
||||||
|
|
||||||
|
|
||||||
|
class Sample(Base):
|
||||||
|
__tablename__ = f"{db_name_prefix}_sample"
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
e_id = Column(Integer, ForeignKey('{}.id'.format(
|
||||||
|
f"{db_name_prefix}_experiment")), nullable=False)
|
||||||
|
|
||||||
|
idx_sample = Column(Integer, nullable=False)
|
||||||
|
seed = Column(BigInteger, nullable=False)
|
||||||
|
# -1, waiting; 0, running; 1, done
|
||||||
|
is_done_flag = Column(Integer, nullable=False)
|
||||||
|
computer_name = Column(String(64), nullable=True)
|
||||||
|
ts_done = Column(DateTime(timezone=True), onupdate=func.now())
|
||||||
|
stop_t = Column(Integer, nullable=True)
|
||||||
|
|
||||||
|
g_firm = Column(Text(4294000000), nullable=True)
|
||||||
|
|
||||||
|
experiment = relationship(
|
||||||
|
'Experiment', back_populates='sample', uselist=False)
|
||||||
|
result = relationship('Result', back_populates='sample', lazy='dynamic')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Sample id: {self.id}>'
|
||||||
|
|
||||||
|
|
||||||
|
class Result(Base):
|
||||||
|
__tablename__ = f"{db_name_prefix}_result"
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
s_id = Column(Integer, ForeignKey('{}.id'.format(
|
||||||
|
f"{db_name_prefix}_sample")), nullable=False)
|
||||||
|
|
||||||
|
id_firm = Column(String(20), nullable=False)
|
||||||
|
id_product = Column(String(20), nullable=False)
|
||||||
|
ts = Column(Integer, nullable=False)
|
||||||
|
status = Column(String(5), nullable=False)
|
||||||
|
|
||||||
|
sample = relationship('Sample', back_populates='result', uselist=False)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f'<Product id: {self.id}>'
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
Base.metadata.drop_all()
|
||||||
|
Base.metadata.create_all()
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
idx_scenario,n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,remove_t,netw_prf_n,mean_count_firm_prod,mean_count_firm,mean_count_prod,mean_max_ts_firm_prod,mean_max_ts_firm,mean_max_ts_prod,mean_n_remove_firm_prod,mean_n_all_prod_remove_firm,mean_end_ts
|
||||||
|
0,7,true,true,uniform,5.0000,0.3000,3,3,23.0118,12.0966,10.9208,2.3949,2.2627,2.1432,17.9712,5.2286,4.2429
|
||||||
|
1,5,true,true,uniform,10.0000,0.5000,5,2,23.6147,12.3651,11.1158,2.4783,2.3402,2.2084,19.7716,5.7192,6.3352
|
||||||
|
2,3,true,true,uniform,15.0000,0.7000,7,1,23.8131,12.4362,11.1758,2.4971,2.3571,2.2202,20.4802,5.9284,8.3554
|
||||||
|
3,7,true,true,uniform,5.0000,0.3000,3,2,23.1015,12.1215,10.9832,2.3998,2.2672,2.1533,18.0282,5.2069,4.2573
|
||||||
|
4,5,true,true,uniform,10.0000,0.5000,5,1,23.6531,12.3587,11.1335,2.4798,2.3497,2.2006,19.9303,5.7653,6.3297
|
||||||
|
5,3,true,true,uniform,15.0000,0.7000,7,3,23.8027,12.4206,11.1808,2.4855,2.3440,2.2122,20.4480,5.8914,8.3417
|
||||||
|
6,7,true,true,normal,5.0000,0.5000,7,3,23.4065,12.2442,11.0676,2.4274,2.2884,2.1657,18.1994,5.1383,8.0524
|
||||||
|
7,5,true,true,normal,10.0000,0.7000,3,2,23.6724,12.3846,11.1478,2.4882,2.3560,2.2069,20.2585,5.9105,4.4891
|
||||||
|
8,3,true,true,normal,15.0000,0.3000,5,1,23.8876,12.4705,11.1949,2.5128,2.3771,2.2267,21.0337,6.1638,6.4699
|
||||||
|
9,7,true,false,uniform,5.0000,0.7000,5,3,23.2158,12.1493,11.0038,2.3922,2.2522,2.1448,17.9762,5.0893,6.0396
|
||||||
|
10,5,true,false,uniform,10.0000,0.3000,7,2,23.6446,12.3714,11.1451,2.4928,2.3562,2.2019,19.7577,5.6941,8.2886
|
||||||
|
11,3,true,false,uniform,15.0000,0.5000,3,1,23.6482,12.3693,11.1299,2.4926,2.3526,2.2126,20.4114,5.9598,4.5032
|
||||||
|
12,7,true,false,normal,10.0000,0.7000,3,1,23.5992,12.3406,11.1282,2.4888,2.3499,2.2080,20.1606,5.8764,4.4855
|
||||||
|
13,5,true,false,normal,15.0000,0.3000,5,3,23.9067,12.4726,11.2128,2.5158,2.3754,2.2349,21.1000,6.1884,6.4971
|
||||||
|
14,3,true,false,normal,5.0000,0.5000,7,2,23.3505,12.2381,11.0554,2.4291,2.2880,2.1638,18.0404,5.1278,8.0322
|
||||||
|
15,7,true,false,normal,10.0000,0.7000,5,3,23.7579,12.4185,11.1566,2.4926,2.3531,2.2097,20.3048,5.9067,6.4044
|
||||||
|
16,5,true,false,normal,15.0000,0.3000,7,2,23.9366,12.4882,11.2240,2.5103,2.3691,2.2349,21.0512,6.1764,8.4371
|
||||||
|
17,3,true,false,normal,5.0000,0.5000,3,1,23.2221,12.1836,11.0362,2.4251,2.2859,2.1636,18.0977,5.1811,4.2701
|
||||||
|
18,7,false,true,normal,10.0000,0.3000,7,1,23.7865,12.4352,11.1884,2.5154,2.3762,2.2331,20.4339,5.9379,8.4168
|
||||||
|
19,5,false,true,normal,15.0000,0.5000,3,3,23.8531,12.4417,11.1977,2.5074,2.3680,2.2295,21.1398,6.2040,4.5716
|
||||||
|
20,3,false,true,normal,5.0000,0.7000,5,2,23.3455,12.2257,11.0417,2.4463,2.3107,2.1834,18.1867,5.1787,6.1583
|
||||||
|
21,7,false,true,normal,10.0000,0.5000,7,1,23.7661,12.4257,11.1758,2.5011,2.3621,2.2171,20.3103,5.9265,8.3764
|
||||||
|
22,5,false,true,normal,15.0000,0.7000,3,3,23.8400,12.4474,11.1958,2.5232,2.3811,2.2309,21.0886,6.1686,4.5758
|
||||||
|
23,3,false,true,normal,5.0000,0.3000,5,2,23.3817,12.2242,11.0653,2.4457,2.3145,2.1733,18.2724,5.2284,6.1867
|
||||||
|
24,7,false,true,uniform,15.0000,0.5000,3,2,23.6771,12.3848,11.1518,2.4878,2.3501,2.2158,20.4269,5.9520,4.4966
|
||||||
|
25,5,false,true,uniform,5.0000,0.7000,5,1,23.2255,12.1838,11.0057,2.4267,2.2954,2.1646,17.9164,5.0859,6.0693
|
||||||
|
26,3,false,true,uniform,10.0000,0.3000,7,3,23.6568,12.3453,11.1349,2.4752,2.3366,2.1968,19.8899,5.7495,8.2448
|
||||||
|
27,7,false,false,normal,15.0000,0.5000,5,2,23.9008,12.4680,11.2055,2.5185,2.3842,2.2324,21.0758,6.1787,6.4714
|
||||||
|
28,5,false,false,normal,5.0000,0.7000,7,1,23.3699,12.2162,11.0539,2.4375,2.3057,2.1688,18.2183,5.1737,8.0625
|
||||||
|
29,3,false,false,normal,10.0000,0.3000,3,3,23.7661,12.3863,11.1735,2.5082,2.3703,2.2261,20.4958,6.0171,4.5486
|
||||||
|
30,7,false,false,uniform,15.0000,0.7000,7,2,23.7343,12.4002,11.1552,2.4928,2.3499,2.2208,20.3861,5.9198,8.3425
|
||||||
|
31,5,false,false,uniform,5.0000,0.3000,3,1,23.2069,12.1539,11.0173,2.4261,2.2949,2.1531,18.1564,5.2531,4.2924
|
||||||
|
32,3,false,false,uniform,10.0000,0.5000,5,3,23.6545,12.3541,11.1293,2.4773,2.3457,2.1979,19.8152,5.7312,6.3025
|
||||||
|
33,7,false,false,uniform,15.0000,0.3000,5,1,23.7966,12.4309,11.1808,2.5093,2.3741,2.2253,20.4918,5.9808,6.4246
|
||||||
|
34,5,false,false,uniform,5.0000,0.5000,7,3,23.2701,12.1920,11.0091,2.4265,2.2916,2.1562,17.9686,5.0829,7.9861
|
||||||
|
35,3,false,false,uniform,10.0000,0.7000,3,2,23.5493,12.3280,11.1103,2.4846,2.3451,2.1924,19.7385,5.7232,4.4177
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
Unnamed: 0.1,Unnamed: 0,mean_end_ts,mean_n_remove_firm_prod,mean_max_ts_firm_prod,mean_count_firm_prod
|
||||||
|
p1,n_sourcing,0.319,0.145,0.043,0.186
|
||||||
|
p2,is_prf_size,0.607,0.608,0.005,0.111
|
||||||
|
p3,n_max_trial,0.003,0.135,0.0,0.0
|
||||||
|
p4,is_prf_conn,0.504,0.567,0.001,0.0
|
||||||
|
p5,ex_cap_type,0.403,0.667,0.329,0.444
|
||||||
|
p6,ex_cap_para,0.0,0.0,0.0,0.0
|
||||||
|
p7,prob_new_conn,0.017,0.334,0.01,0.007
|
||||||
|
p8,t_max_trial,0.0,0.014,0.939,0.1
|
||||||
|
p9,SamplingMethod,2.614e-34,2.27e-35,1.12e-63,6.47e-64
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
自变量,level,系统恢复用时R1,产业-企业边累计扰乱次数R2,产业-企业边最大传导深度R3,产业-企业边断裂总数R4
|
||||||
|
采购策略P1,三供应商,3.549,62.11,1.715,22.14
|
||||||
|
采购策略P1,双供应商,3.743,62.43,1.759,21.71
|
||||||
|
采购策略P1,单供应商,3.668,62.21,1.736,22.17
|
||||||
|
是否规模偏好P2,倾向,3.681,62.13,1.715,22.06
|
||||||
|
是否规模偏好P2,不倾向,3.627,62.37,1.758,21.96
|
||||||
|
最大尝试次数P3,高,3.47,61.08,1.636,21.85
|
||||||
|
最大尝试次数P3,中,3.552,62.08,1.742,21.86
|
||||||
|
最大尝试次数P3,低,3.939,63.58,1.832,22.31
|
||||||
|
是否已有连接偏好P4,倾向,3.619,61.95,1.711,21.95
|
||||||
|
是否已有连接偏好P4,不倾向,3.689,62.55,1.762,22.07
|
||||||
|
额外产能分布P5,均匀分布,3.698,62.19,1.73,21.96
|
||||||
|
额外产能分布P5,正态分布,3.61,62.3,1.743,22.05
|
||||||
|
额外产能分布参数P6,高,2.949,61.48,1.808,12.41
|
||||||
|
额外产能分布参数P6,中,3.787,62.2,1.661,22.87
|
||||||
|
额外产能分布参数P6,低,4.224,63.06,1.741,30.75
|
||||||
|
新供应关系构成概率P7,低,3.882,62.41,1.749,22.2
|
||||||
|
新供应关系构成概率P7,中,3.543,62.44,1.756,22.01
|
||||||
|
新供应关系构成概率P7,高,3.535,61.9,1.705,21.82
|
||||||
|
最大尝试时间步P8,低,2.601,62.03,1.738,22.47
|
||||||
|
最大尝试时间步P8,中,3.656,62.31,1.733,21.78
|
||||||
|
最大尝试时间步P8,高,4.704,62.4,1.738,21.78
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
idx_scenario,n_max_trial,prf_size,prf_conn,cap_limit_prob_type,cap_limit_level,diff_new_conn,remove_t,netw_prf_n,mean_count_firm_prod,mean_count_firm,mean_count_prod,mean_max_ts_firm_prod,mean_max_ts_firm,mean_max_ts_prod,mean_n_remove_firm_prod,mean_n_all_prod_remove_firm,mean_end_ts,
|
||||||
|
0,7,1,1,uniform,5.0000,0.3000,3,3,59.6916,15.7589,13.3347,1.5063,1.5032,1.3842,12.3074,1.5379,2.0400
|
||||||
|
1,5,1,1,uniform,10.0000,0.5000,5,2,61.8937,17.1126,13.8095,1.7284,1.7263,1.6042,22.7779,2.9611,3.7432
|
||||||
|
2,3,1,1,uniform,15.0000,0.7000,7,1,63.9568,18.2253,14.2779,1.8263,1.8221,1.7347,30.9263,3.7842,5.6253
|
||||||
|
3,7,1,1,uniform,5.0000,0.3000,3,2,59.5811,15.7474,13.3168,1.4958,1.4937,1.3884,12.8358,1.4621,2.0221
|
||||||
|
4,5,1,1,uniform,10.0000,0.5000,5,1,61.8200,17.0116,13.8053,1.7095,1.7084,1.6032,22.5474,2.9579,3.6811
|
||||||
|
5,3,1,1,uniform,15.0000,0.7000,7,3,63.8821,18.2547,14.2432,1.8421,1.8305,1.7295,30.9474,3.7411,5.6632
|
||||||
|
6,7,1,1,normal,5.0000,0.5000,7,3,59.9116,15.7516,13.3316,1.4905,1.4884,1.3674,12.2463,1.3326,3.1600
|
||||||
|
7,5,1,1,normal,10.0000,0.7000,3,2,61.3095,16.8326,13.7716,1.7011,1.7011,1.6011,22.4779,2.9642,2.4916
|
||||||
|
8,3,1,1,normal,15.0000,0.3000,5,1,63.6568,18.1316,14.2358,1.8253,1.8232,1.7242,31.1253,3.7400,4.3474
|
||||||
|
9,7,1,0,uniform,5.0000,0.7000,5,3,59.7158,15.6811,13.3000,1.4600,1.4568,1.3537,12.4063,1.3400,2.5316
|
||||||
|
10,5,1,0,uniform,10.0000,0.3000,7,2,63.0063,17.6695,14.0432,1.8063,1.8053,1.6747,22.6916,3.0042,5.1126
|
||||||
|
11,3,1,0,uniform,15.0000,0.5000,3,1,63.6779,18.3842,14.3547,1.8621,1.8600,1.7621,31.3663,4.0253,2.9632
|
||||||
|
12,7,1,0,normal,10.0000,0.7000,3,1,60.6295,16.3884,13.5811,1.6179,1.6147,1.5147,22.5221,2.7800,2.3495
|
||||||
|
13,5,1,0,normal,15.0000,0.3000,5,3,63.3484,18.0042,14.2074,1.8316,1.8263,1.7232,30.6379,3.7747,4.2979
|
||||||
|
14,3,1,0,normal,5.0000,0.5000,7,2,64.0737,18.3684,14.3000,1.8505,1.8484,1.7589,11.4789,1.1663,4.1400
|
||||||
|
15,7,1,0,normal,10.0000,0.7000,5,3,61.0337,16.5684,13.6053,1.6358,1.6347,1.5074,22.7474,2.8937,3.5147
|
||||||
|
16,5,1,0,normal,15.0000,0.3000,7,2,63.4747,18.0568,14.1989,1.8347,1.8305,1.7263,30.4063,3.7989,5.7295
|
||||||
|
17,3,1,0,normal,5.0000,0.5000,3,1,63.7158,18.2863,14.2958,1.8547,1.8537,1.7579,14.6568,2.1432,2.8368
|
||||||
|
18,7,0,1,normal,10.0000,0.3000,7,1,61.2326,16.6442,13.6789,1.6705,1.6684,1.5495,22.5453,2.8379,4.7474
|
||||||
|
19,5,0,1,normal,15.0000,0.5000,3,3,62.3863,17.4684,13.9905,1.7874,1.7853,1.6705,31.1558,3.8189,2.7926
|
||||||
|
20,3,0,1,normal,5.0000,0.7000,5,2,62.8305,17.6074,14.0811,1.7705,1.7695,1.6768,11.7621,1.2474,3.2684
|
||||||
|
21,7,0,1,normal,10.0000,0.5000,7,1,61.1832,16.5389,13.6874,1.6505,1.6484,1.5337,22.8484,2.8147,4.7326
|
||||||
|
22,5,0,1,normal,15.0000,0.7000,3,3,62.3305,17.5337,14.0011,1.7768,1.7747,1.6495,30.6705,3.7832,2.7316
|
||||||
|
23,3,0,1,normal,5.0000,0.3000,5,2,62.8821,17.6916,14.0905,1.7821,1.7821,1.6895,12.2158,1.3442,3.3484
|
||||||
|
24,7,0,1,uniform,15.0000,0.5000,3,2,62.2463,17.4084,13.9789,1.7979,1.7958,1.6674,30.6842,3.7126,2.7589
|
||||||
|
25,5,0,1,uniform,5.0000,0.7000,5,1,60.9453,16.4442,13.6316,1.6274,1.6263,1.5032,12.2347,1.2663,2.7368
|
||||||
|
26,3,0,1,uniform,10.0000,0.3000,7,3,63.3400,17.8968,14.1147,1.8084,1.8074,1.6937,22.7768,3.0442,5.2442
|
||||||
|
27,7,0,0,normal,15.0000,0.5000,5,2,62.6505,17.5074,14.0032,1.7811,1.7800,1.6758,30.0211,3.6116,4.1263
|
||||||
|
28,5,0,0,normal,5.0000,0.7000,7,1,60.9200,16.5126,13.6168,1.6368,1.6358,1.5168,11.9432,1.2495,3.3305
|
||||||
|
29,3,0,0,normal,10.0000,0.3000,3,3,63.9074,18.4432,14.3916,1.8811,1.8779,1.7789,25.4905,3.4789,3.0295
|
||||||
|
30,7,0,0,uniform,15.0000,0.7000,7,2,62.2442,17.2747,13.9400,1.7400,1.7358,1.6253,30.5084,3.6589,5.4421
|
||||||
|
31,5,0,0,uniform,5.0000,0.3000,3,1,61.9147,17.2211,13.9347,1.7558,1.7526,1.6453,12.8168,1.6895,2.4516
|
||||||
|
32,3,0,0,uniform,10.0000,0.5000,5,3,64.1074,18.3579,14.3558,1.8579,1.8568,1.7505,22.2800,3.0684,4.0642
|
||||||
|
33,7,0,0,uniform,15.0000,0.3000,5,1,62.8737,17.5600,14.0642,1.7895,1.7874,1.6684,30.5453,3.6695,4.2147
|
||||||
|
34,5,0,0,uniform,5.0000,0.5000,7,3,61.6337,16.9042,13.7632,1.7032,1.7011,1.5716,12.0011,1.2263,3.5221
|
||||||
|
35,3,0,0,uniform,10.0000,0.7000,3,2,62.9663,17.9737,14.2221,1.8221,1.8211,1.7211,22.6979,3.1600,2.7389
|
||||||
|
|
After Width: | Height: | Size: 1.1 MiB |
|
|
@ -0,0 +1,710 @@
|
||||||
|
up_id_product,down_id_product,count
|
||||||
|
46,52,8413
|
||||||
|
48,52,8375
|
||||||
|
48,55,8345
|
||||||
|
46,55,8328
|
||||||
|
45,52,8274
|
||||||
|
44,52,8248
|
||||||
|
49,52,8246
|
||||||
|
49,55,8197
|
||||||
|
44,55,8172
|
||||||
|
45,55,8151
|
||||||
|
47,52,8077
|
||||||
|
47,55,8016
|
||||||
|
55,99,7248
|
||||||
|
52,99,7163
|
||||||
|
50,99,7085
|
||||||
|
54,99,7066
|
||||||
|
51,99,7031
|
||||||
|
53,99,7010
|
||||||
|
54,55,5570
|
||||||
|
54,52,5539
|
||||||
|
53,55,5524
|
||||||
|
52,55,5462
|
||||||
|
51,55,5441
|
||||||
|
50,55,5440
|
||||||
|
53,52,5438
|
||||||
|
55,52,5379
|
||||||
|
51,52,5312
|
||||||
|
50,52,5296
|
||||||
|
55,55,5254
|
||||||
|
52,52,5177
|
||||||
|
45,99,5036
|
||||||
|
46,99,4997
|
||||||
|
48,99,4976
|
||||||
|
44,99,4960
|
||||||
|
49,99,4941
|
||||||
|
55,95,4906
|
||||||
|
52,95,4895
|
||||||
|
47,99,4812
|
||||||
|
53,95,4643
|
||||||
|
51,95,4628
|
||||||
|
50,95,4578
|
||||||
|
54,95,4539
|
||||||
|
95,99,3147
|
||||||
|
47,95,3060
|
||||||
|
44,95,3028
|
||||||
|
46,95,3026
|
||||||
|
48,95,3021
|
||||||
|
49,95,3013
|
||||||
|
45,95,2937
|
||||||
|
46,43,2771
|
||||||
|
48,43,2748
|
||||||
|
45,43,2740
|
||||||
|
49,43,2738
|
||||||
|
44,43,2721
|
||||||
|
47,43,2720
|
||||||
|
49,39,2461
|
||||||
|
45,39,2460
|
||||||
|
48,39,2452
|
||||||
|
44,39,2427
|
||||||
|
46,39,2409
|
||||||
|
47,39,2378
|
||||||
|
54,43,2375
|
||||||
|
53,43,2366
|
||||||
|
55,43,2364
|
||||||
|
50,43,2338
|
||||||
|
52,43,2328
|
||||||
|
51,43,2327
|
||||||
|
44,40,2305
|
||||||
|
45,40,2296
|
||||||
|
48,40,2289
|
||||||
|
46,40,2287
|
||||||
|
49,40,2265
|
||||||
|
47,40,2257
|
||||||
|
47,38,2240
|
||||||
|
49,38,2224
|
||||||
|
45,38,2214
|
||||||
|
46,38,2200
|
||||||
|
54,39,2195
|
||||||
|
53,39,2184
|
||||||
|
48,38,2183
|
||||||
|
55,39,2177
|
||||||
|
51,39,2162
|
||||||
|
50,39,2156
|
||||||
|
44,38,2154
|
||||||
|
52,39,2147
|
||||||
|
48,90,2100
|
||||||
|
49,90,2092
|
||||||
|
45,90,2088
|
||||||
|
46,90,2077
|
||||||
|
47,90,2062
|
||||||
|
44,90,2054
|
||||||
|
94,99,2051
|
||||||
|
93,99,2019
|
||||||
|
91,99,1996
|
||||||
|
54,40,1977
|
||||||
|
50,40,1976
|
||||||
|
53,40,1973
|
||||||
|
55,40,1966
|
||||||
|
51,40,1964
|
||||||
|
52,40,1937
|
||||||
|
54,38,1928
|
||||||
|
50,38,1910
|
||||||
|
51,38,1900
|
||||||
|
53,38,1893
|
||||||
|
55,38,1888
|
||||||
|
52,38,1883
|
||||||
|
42,55,1788
|
||||||
|
41,52,1779
|
||||||
|
95,55,1734
|
||||||
|
95,52,1729
|
||||||
|
42,52,1717
|
||||||
|
41,55,1699
|
||||||
|
53,90,1629
|
||||||
|
55,90,1628
|
||||||
|
54,90,1623
|
||||||
|
51,90,1619
|
||||||
|
52,90,1606
|
||||||
|
50,90,1597
|
||||||
|
94,52,1207
|
||||||
|
92,99,1179
|
||||||
|
94,55,1143
|
||||||
|
94,95,1124
|
||||||
|
91,52,1084
|
||||||
|
93,55,1073
|
||||||
|
93,52,1065
|
||||||
|
91,55,1057
|
||||||
|
93,95,1005
|
||||||
|
91,95,1005
|
||||||
|
90,99,997
|
||||||
|
95,95,798
|
||||||
|
41,99,778
|
||||||
|
42,99,765
|
||||||
|
92,95,670
|
||||||
|
92,55,644
|
||||||
|
92,52,625
|
||||||
|
95,43,563
|
||||||
|
95,39,543
|
||||||
|
90,95,523
|
||||||
|
95,40,495
|
||||||
|
42,95,464
|
||||||
|
95,38,453
|
||||||
|
41,95,441
|
||||||
|
90,52,419
|
||||||
|
95,90,407
|
||||||
|
41,43,403
|
||||||
|
20,55,402
|
||||||
|
42,43,394
|
||||||
|
90,55,390
|
||||||
|
20,52,384
|
||||||
|
41,39,381
|
||||||
|
42,39,376
|
||||||
|
41,40,345
|
||||||
|
41,38,341
|
||||||
|
7,95,340
|
||||||
|
42,40,334
|
||||||
|
42,38,332
|
||||||
|
60,55,318
|
||||||
|
60,52,316
|
||||||
|
64,55,308
|
||||||
|
67,55,300
|
||||||
|
42,90,299
|
||||||
|
23,52,299
|
||||||
|
25,52,297
|
||||||
|
65,55,296
|
||||||
|
23,55,296
|
||||||
|
71,55,296
|
||||||
|
65,52,295
|
||||||
|
25,55,294
|
||||||
|
64,52,292
|
||||||
|
67,52,290
|
||||||
|
22,52,288
|
||||||
|
22,55,287
|
||||||
|
41,90,284
|
||||||
|
71,52,282
|
||||||
|
18,52,259
|
||||||
|
15,48,258
|
||||||
|
27,49,255
|
||||||
|
18,46,252
|
||||||
|
28,51,250
|
||||||
|
27,47,250
|
||||||
|
68,55,250
|
||||||
|
29,55,250
|
||||||
|
63,55,250
|
||||||
|
72,51,249
|
||||||
|
41,53,249
|
||||||
|
43,53,249
|
||||||
|
38,53,249
|
||||||
|
69,55,249
|
||||||
|
23,49,249
|
||||||
|
42,53,249
|
||||||
|
39,53,249
|
||||||
|
23,45,248
|
||||||
|
69,52,248
|
||||||
|
68,52,248
|
||||||
|
94,43,248
|
||||||
|
20,44,248
|
||||||
|
65,45,248
|
||||||
|
40,51,247
|
||||||
|
41,51,247
|
||||||
|
38,51,247
|
||||||
|
39,51,247
|
||||||
|
71,54,247
|
||||||
|
15,46,247
|
||||||
|
63,50,247
|
||||||
|
43,51,247
|
||||||
|
42,51,247
|
||||||
|
71,51,246
|
||||||
|
62,53,246
|
||||||
|
25,44,246
|
||||||
|
39,55,246
|
||||||
|
72,50,246
|
||||||
|
67,48,246
|
||||||
|
40,53,246
|
||||||
|
43,55,246
|
||||||
|
68,51,246
|
||||||
|
40,55,246
|
||||||
|
38,55,246
|
||||||
|
18,44,246
|
||||||
|
69,51,246
|
||||||
|
23,50,246
|
||||||
|
65,46,246
|
||||||
|
20,48,246
|
||||||
|
67,49,245
|
||||||
|
72,54,245
|
||||||
|
22,50,245
|
||||||
|
33,47,245
|
||||||
|
62,51,244
|
||||||
|
68,54,244
|
||||||
|
64,46,244
|
||||||
|
23,44,244
|
||||||
|
67,51,244
|
||||||
|
18,48,244
|
||||||
|
23,47,244
|
||||||
|
69,53,244
|
||||||
|
19,52,243
|
||||||
|
65,47,243
|
||||||
|
60,45,243
|
||||||
|
65,54,243
|
||||||
|
67,44,243
|
||||||
|
28,52,243
|
||||||
|
67,54,243
|
||||||
|
60,54,243
|
||||||
|
71,49,243
|
||||||
|
20,46,243
|
||||||
|
19,51,242
|
||||||
|
20,54,242
|
||||||
|
63,53,242
|
||||||
|
65,48,242
|
||||||
|
62,52,242
|
||||||
|
64,54,242
|
||||||
|
25,49,242
|
||||||
|
71,45,242
|
||||||
|
27,46,242
|
||||||
|
69,50,241
|
||||||
|
27,55,241
|
||||||
|
67,46,241
|
||||||
|
64,50,241
|
||||||
|
64,45,241
|
||||||
|
18,45,241
|
||||||
|
60,44,241
|
||||||
|
20,49,241
|
||||||
|
19,55,241
|
||||||
|
19,54,241
|
||||||
|
63,52,241
|
||||||
|
60,48,240
|
||||||
|
25,53,240
|
||||||
|
25,50,240
|
||||||
|
15,49,240
|
||||||
|
28,54,240
|
||||||
|
72,55,240
|
||||||
|
60,49,240
|
||||||
|
27,48,240
|
||||||
|
20,53,240
|
||||||
|
19,50,240
|
||||||
|
23,46,240
|
||||||
|
40,52,239
|
||||||
|
60,53,239
|
||||||
|
38,52,239
|
||||||
|
67,47,239
|
||||||
|
39,52,239
|
||||||
|
35,49,239
|
||||||
|
68,50,239
|
||||||
|
64,53,239
|
||||||
|
43,52,239
|
||||||
|
22,53,239
|
||||||
|
20,47,238
|
||||||
|
25,51,238
|
||||||
|
65,53,238
|
||||||
|
15,44,238
|
||||||
|
18,49,238
|
||||||
|
60,47,238
|
||||||
|
28,53,238
|
||||||
|
27,51,238
|
||||||
|
29,50,238
|
||||||
|
27,53,238
|
||||||
|
29,53,238
|
||||||
|
68,53,237
|
||||||
|
67,53,237
|
||||||
|
23,48,237
|
||||||
|
67,50,237
|
||||||
|
34,48,237
|
||||||
|
72,52,237
|
||||||
|
32,46,237
|
||||||
|
27,50,237
|
||||||
|
63,51,236
|
||||||
|
19,53,236
|
||||||
|
23,54,236
|
||||||
|
71,48,236
|
||||||
|
25,45,236
|
||||||
|
15,47,236
|
||||||
|
22,48,236
|
||||||
|
20,50,236
|
||||||
|
27,44,236
|
||||||
|
22,46,235
|
||||||
|
20,51,235
|
||||||
|
38,50,235
|
||||||
|
41,50,235
|
||||||
|
39,50,235
|
||||||
|
64,51,235
|
||||||
|
22,44,235
|
||||||
|
67,45,235
|
||||||
|
40,50,235
|
||||||
|
42,50,235
|
||||||
|
28,50,235
|
||||||
|
27,54,235
|
||||||
|
27,52,235
|
||||||
|
43,50,235
|
||||||
|
60,50,234
|
||||||
|
18,55,234
|
||||||
|
25,47,234
|
||||||
|
25,48,234
|
||||||
|
65,49,234
|
||||||
|
62,54,233
|
||||||
|
64,49,233
|
||||||
|
62,55,233
|
||||||
|
71,46,233
|
||||||
|
65,50,233
|
||||||
|
72,53,233
|
||||||
|
22,47,233
|
||||||
|
22,45,233
|
||||||
|
29,51,233
|
||||||
|
15,45,232
|
||||||
|
65,44,232
|
||||||
|
22,49,232
|
||||||
|
18,47,232
|
||||||
|
64,48,232
|
||||||
|
71,53,232
|
||||||
|
23,53,231
|
||||||
|
27,45,231
|
||||||
|
20,45,231
|
||||||
|
63,54,231
|
||||||
|
28,55,231
|
||||||
|
22,54,231
|
||||||
|
22,51,230
|
||||||
|
71,47,230
|
||||||
|
60,51,230
|
||||||
|
60,46,230
|
||||||
|
62,50,230
|
||||||
|
25,46,229
|
||||||
|
25,54,229
|
||||||
|
29,54,228
|
||||||
|
50,45,227
|
||||||
|
23,51,227
|
||||||
|
48,45,227
|
||||||
|
49,45,227
|
||||||
|
55,45,227
|
||||||
|
51,45,227
|
||||||
|
54,45,227
|
||||||
|
52,45,227
|
||||||
|
7,45,227
|
||||||
|
53,45,227
|
||||||
|
47,45,227
|
||||||
|
65,51,227
|
||||||
|
71,44,227
|
||||||
|
64,44,227
|
||||||
|
45,45,227
|
||||||
|
46,45,227
|
||||||
|
44,45,227
|
||||||
|
46,44,226
|
||||||
|
7,44,226
|
||||||
|
51,44,226
|
||||||
|
45,44,226
|
||||||
|
50,44,226
|
||||||
|
55,44,226
|
||||||
|
47,44,226
|
||||||
|
48,44,226
|
||||||
|
44,44,226
|
||||||
|
49,44,226
|
||||||
|
53,44,226
|
||||||
|
54,44,226
|
||||||
|
52,44,226
|
||||||
|
69,54,225
|
||||||
|
29,52,224
|
||||||
|
64,47,224
|
||||||
|
39,54,222
|
||||||
|
41,54,222
|
||||||
|
38,54,222
|
||||||
|
42,54,222
|
||||||
|
43,54,222
|
||||||
|
40,54,222
|
||||||
|
71,50,221
|
||||||
|
91,40,208
|
||||||
|
93,43,208
|
||||||
|
91,43,204
|
||||||
|
93,39,199
|
||||||
|
93,40,198
|
||||||
|
94,40,190
|
||||||
|
91,39,189
|
||||||
|
94,38,184
|
||||||
|
93,38,182
|
||||||
|
91,38,182
|
||||||
|
94,39,181
|
||||||
|
90,43,158
|
||||||
|
90,39,130
|
||||||
|
90,38,130
|
||||||
|
92,43,130
|
||||||
|
90,40,127
|
||||||
|
91,90,124
|
||||||
|
94,90,120
|
||||||
|
93,90,120
|
||||||
|
20,95,118
|
||||||
|
23,95,113
|
||||||
|
92,40,109
|
||||||
|
92,39,107
|
||||||
|
92,38,107
|
||||||
|
15,95,97
|
||||||
|
19,95,90
|
||||||
|
62,95,90
|
||||||
|
28,95,90
|
||||||
|
9,95,88
|
||||||
|
18,95,88
|
||||||
|
7,90,86
|
||||||
|
64,95,86
|
||||||
|
66,95,83
|
||||||
|
60,95,79
|
||||||
|
24,95,79
|
||||||
|
72,95,78
|
||||||
|
22,99,74
|
||||||
|
31,95,73
|
||||||
|
8,95,73
|
||||||
|
17,94,72
|
||||||
|
28,94,71
|
||||||
|
67,95,71
|
||||||
|
27,95,70
|
||||||
|
17,99,70
|
||||||
|
66,91,69
|
||||||
|
63,95,69
|
||||||
|
9,94,69
|
||||||
|
18,94,69
|
||||||
|
28,99,69
|
||||||
|
59,94,69
|
||||||
|
24,94,68
|
||||||
|
31,93,68
|
||||||
|
65,99,68
|
||||||
|
11,94,68
|
||||||
|
29,99,68
|
||||||
|
23,94,68
|
||||||
|
66,93,67
|
||||||
|
70,91,67
|
||||||
|
28,93,67
|
||||||
|
10,93,67
|
||||||
|
8,91,67
|
||||||
|
70,93,67
|
||||||
|
15,55,66
|
||||||
|
10,94,66
|
||||||
|
66,94,66
|
||||||
|
64,99,66
|
||||||
|
59,93,66
|
||||||
|
31,94,66
|
||||||
|
18,93,65
|
||||||
|
62,94,65
|
||||||
|
11,93,65
|
||||||
|
8,94,65
|
||||||
|
59,99,65
|
||||||
|
9,93,65
|
||||||
|
62,91,64
|
||||||
|
24,91,64
|
||||||
|
25,99,64
|
||||||
|
19,94,64
|
||||||
|
18,91,64
|
||||||
|
10,91,64
|
||||||
|
61,93,64
|
||||||
|
61,91,64
|
||||||
|
8,93,64
|
||||||
|
9,91,64
|
||||||
|
24,93,64
|
||||||
|
31,91,63
|
||||||
|
43,95,63
|
||||||
|
39,95,63
|
||||||
|
19,93,63
|
||||||
|
61,94,62
|
||||||
|
59,91,62
|
||||||
|
11,91,62
|
||||||
|
38,95,62
|
||||||
|
71,99,62
|
||||||
|
40,95,62
|
||||||
|
23,93,62
|
||||||
|
65,94,61
|
||||||
|
20,93,61
|
||||||
|
23,91,61
|
||||||
|
79,99,61
|
||||||
|
10,99,61
|
||||||
|
20,94,61
|
||||||
|
29,95,60
|
||||||
|
71,95,60
|
||||||
|
19,91,60
|
||||||
|
70,95,60
|
||||||
|
17,95,60
|
||||||
|
65,95,60
|
||||||
|
25,95,60
|
||||||
|
61,95,60
|
||||||
|
22,95,60
|
||||||
|
10,95,60
|
||||||
|
59,95,60
|
||||||
|
62,93,59
|
||||||
|
17,93,59
|
||||||
|
92,90,59
|
||||||
|
70,94,58
|
||||||
|
20,91,58
|
||||||
|
15,52,58
|
||||||
|
28,91,58
|
||||||
|
65,91,57
|
||||||
|
17,91,57
|
||||||
|
62,99,57
|
||||||
|
18,99,57
|
||||||
|
65,93,55
|
||||||
|
70,99,55
|
||||||
|
69,95,55
|
||||||
|
11,95,53
|
||||||
|
8,99,52
|
||||||
|
68,95,52
|
||||||
|
97,95,50
|
||||||
|
9,99,49
|
||||||
|
30,95,49
|
||||||
|
74,95,49
|
||||||
|
26,95,49
|
||||||
|
19,99,49
|
||||||
|
73,95,49
|
||||||
|
37,95,48
|
||||||
|
16,95,48
|
||||||
|
13,95,48
|
||||||
|
12,95,48
|
||||||
|
49,53,45
|
||||||
|
23,90,45
|
||||||
|
52,53,45
|
||||||
|
65,90,40
|
||||||
|
18,92,40
|
||||||
|
25,41,40
|
||||||
|
28,92,39
|
||||||
|
46,53,39
|
||||||
|
44,53,39
|
||||||
|
48,53,39
|
||||||
|
11,92,39
|
||||||
|
59,92,39
|
||||||
|
60,90,39
|
||||||
|
71,42,39
|
||||||
|
31,92,39
|
||||||
|
62,92,38
|
||||||
|
66,99,38
|
||||||
|
70,92,38
|
||||||
|
18,41,38
|
||||||
|
17,92,38
|
||||||
|
23,42,38
|
||||||
|
64,42,38
|
||||||
|
15,42,38
|
||||||
|
31,42,38
|
||||||
|
9,92,38
|
||||||
|
24,99,38
|
||||||
|
65,92,38
|
||||||
|
25,90,37
|
||||||
|
65,43,37
|
||||||
|
67,90,37
|
||||||
|
71,90,37
|
||||||
|
23,92,37
|
||||||
|
65,41,37
|
||||||
|
67,42,37
|
||||||
|
20,92,37
|
||||||
|
20,42,37
|
||||||
|
24,92,37
|
||||||
|
45,53,36
|
||||||
|
71,43,36
|
||||||
|
20,90,36
|
||||||
|
50,53,36
|
||||||
|
31,41,36
|
||||||
|
60,41,36
|
||||||
|
53,53,36
|
||||||
|
10,92,36
|
||||||
|
61,92,36
|
||||||
|
25,40,36
|
||||||
|
19,92,36
|
||||||
|
67,41,36
|
||||||
|
8,92,36
|
||||||
|
22,43,35
|
||||||
|
25,43,35
|
||||||
|
9,90,35
|
||||||
|
7,39,35
|
||||||
|
22,90,35
|
||||||
|
20,41,35
|
||||||
|
18,42,35
|
||||||
|
61,90,35
|
||||||
|
71,39,34
|
||||||
|
71,41,34
|
||||||
|
7,40,34
|
||||||
|
23,41,34
|
||||||
|
66,92,34
|
||||||
|
22,42,34
|
||||||
|
60,42,34
|
||||||
|
25,38,33
|
||||||
|
55,53,33
|
||||||
|
25,42,33
|
||||||
|
65,39,33
|
||||||
|
54,53,33
|
||||||
|
65,38,33
|
||||||
|
22,41,33
|
||||||
|
66,90,33
|
||||||
|
47,53,33
|
||||||
|
51,53,33
|
||||||
|
65,42,33
|
||||||
|
7,43,33
|
||||||
|
22,39,33
|
||||||
|
64,41,33
|
||||||
|
7,38,32
|
||||||
|
36,41,32
|
||||||
|
15,99,32
|
||||||
|
18,90,32
|
||||||
|
15,41,32
|
||||||
|
65,40,32
|
||||||
|
59,90,31
|
||||||
|
18,43,31
|
||||||
|
18,40,31
|
||||||
|
17,90,31
|
||||||
|
71,40,31
|
||||||
|
8,90,31
|
||||||
|
19,90,30
|
||||||
|
11,90,30
|
||||||
|
28,90,30
|
||||||
|
24,90,30
|
||||||
|
90,90,30
|
||||||
|
62,90,30
|
||||||
|
22,38,30
|
||||||
|
71,38,29
|
||||||
|
10,90,29
|
||||||
|
22,40,28
|
||||||
|
63,99,28
|
||||||
|
68,90,28
|
||||||
|
25,39,27
|
||||||
|
18,38,26
|
||||||
|
67,99,25
|
||||||
|
64,39,24
|
||||||
|
18,39,24
|
||||||
|
31,90,24
|
||||||
|
15,90,23
|
||||||
|
72,99,22
|
||||||
|
60,43,21
|
||||||
|
99,99,20
|
||||||
|
20,99,18
|
||||||
|
23,99,18
|
||||||
|
64,38,17
|
||||||
|
38,99,17
|
||||||
|
60,39,17
|
||||||
|
23,43,17
|
||||||
|
60,99,16
|
||||||
|
64,43,15
|
||||||
|
20,39,15
|
||||||
|
31,52,14
|
||||||
|
67,39,14
|
||||||
|
43,99,13
|
||||||
|
60,40,13
|
||||||
|
99,53,12
|
||||||
|
64,90,12
|
||||||
|
23,40,12
|
||||||
|
20,43,12
|
||||||
|
27,90,12
|
||||||
|
64,40,11
|
||||||
|
60,38,11
|
||||||
|
27,43,11
|
||||||
|
40,99,10
|
||||||
|
31,55,10
|
||||||
|
39,99,10
|
||||||
|
15,43,10
|
||||||
|
27,40,10
|
||||||
|
23,38,9
|
||||||
|
20,40,9
|
||||||
|
20,38,9
|
||||||
|
95,53,9
|
||||||
|
23,39,8
|
||||||
|
33,95,7
|
||||||
|
69,99,7
|
||||||
|
90,53,6
|
||||||
|
15,40,6
|
||||||
|
61,99,6
|
||||||
|
67,43,6
|
||||||
|
31,99,5
|
||||||
|
15,38,5
|
||||||
|
15,39,4
|
||||||
|
99,95,4
|
||||||
|
27,39,4
|
||||||
|
67,40,4
|
||||||
|
67,38,4
|
||||||
|
33,38,3
|
||||||
|
13,99,2
|
||||||
|
27,99,2
|
||||||
|
35,95,2
|
||||||
|
32,95,1
|
||||||
|
11,99,1
|
||||||
|
32,43,1
|
||||||
|
68,99,1
|
||||||
|
34,95,1
|
||||||
|
73,99,1
|
||||||
|
|
After Width: | Height: | Size: 2.6 MiB |
|
|
@ -0,0 +1,155 @@
|
||||||
|
id_firm,count
|
||||||
|
2313177432,3832
|
||||||
|
4067555184,3742
|
||||||
|
12098344,3347
|
||||||
|
37873062,1425
|
||||||
|
1104420298,1217
|
||||||
|
3339921892,1049
|
||||||
|
814834276,1047
|
||||||
|
22324879,1031
|
||||||
|
2325170042,928
|
||||||
|
10437056,876
|
||||||
|
2541265952,492
|
||||||
|
27169556,433
|
||||||
|
3346538900,431
|
||||||
|
185356903,331
|
||||||
|
777299215,306
|
||||||
|
331545755,295
|
||||||
|
350343208,283
|
||||||
|
3193516458,279
|
||||||
|
41454763,276
|
||||||
|
584019624,276
|
||||||
|
1266556718,259
|
||||||
|
22751149,255
|
||||||
|
18107611,178
|
||||||
|
2311838590,30
|
||||||
|
1452048,30
|
||||||
|
29954548,29
|
||||||
|
5849940,20
|
||||||
|
557266995,20
|
||||||
|
453289520,20
|
||||||
|
3312358902,20
|
||||||
|
2350111843,20
|
||||||
|
2326956863,20
|
||||||
|
413876805,20
|
||||||
|
930767828,16
|
||||||
|
15482118,12
|
||||||
|
27085933,12
|
||||||
|
9278530,12
|
||||||
|
314846874,10
|
||||||
|
3352578733,10
|
||||||
|
3344266702,10
|
||||||
|
3118917053,10
|
||||||
|
3120341363,10
|
||||||
|
3384021594,10
|
||||||
|
3221578464,10
|
||||||
|
3270918801,10
|
||||||
|
3164072929,10
|
||||||
|
331450699,10
|
||||||
|
3227189464,10
|
||||||
|
3306665331,10
|
||||||
|
3269940677,10
|
||||||
|
3274238529,10
|
||||||
|
333499553,10
|
||||||
|
420984285,10
|
||||||
|
354328758,10
|
||||||
|
366828854,10
|
||||||
|
892652617,10
|
||||||
|
888478182,10
|
||||||
|
80169705,10
|
||||||
|
80158773,10
|
||||||
|
78979697,10
|
||||||
|
784491064,10
|
||||||
|
762165453,10
|
||||||
|
7299120,10
|
||||||
|
708388905,10
|
||||||
|
695879282,10
|
||||||
|
648145286,10
|
||||||
|
631103677,10
|
||||||
|
61066955,10
|
||||||
|
578803019,10
|
||||||
|
4379631621,10
|
||||||
|
423388486,10
|
||||||
|
300186799,10
|
||||||
|
4208851809,10
|
||||||
|
4076786740,10
|
||||||
|
39894253,10
|
||||||
|
367669349,10
|
||||||
|
3077450214,10
|
||||||
|
1,10
|
||||||
|
1033972427,10
|
||||||
|
2343704209,10
|
||||||
|
2333843479,10
|
||||||
|
2329836516,10
|
||||||
|
2327979389,10
|
||||||
|
2316430101,10
|
||||||
|
23131812,10
|
||||||
|
2311907103,10
|
||||||
|
2311639124,10
|
||||||
|
2311352797,10
|
||||||
|
2311337085,10
|
||||||
|
2309668026,10
|
||||||
|
216898035,10
|
||||||
|
203314437,10
|
||||||
|
169978927,10
|
||||||
|
1679596339,10
|
||||||
|
16116663,10
|
||||||
|
1555364428,10
|
||||||
|
142823313,10
|
||||||
|
1270747834,10
|
||||||
|
1194436218,10
|
||||||
|
11807506,10
|
||||||
|
11169556957,10
|
||||||
|
104671744,10
|
||||||
|
1044103384,10
|
||||||
|
2340606811,10
|
||||||
|
2319266522,10
|
||||||
|
2475874929,10
|
||||||
|
2349349655,10
|
||||||
|
287006714,10
|
||||||
|
2351592628,10
|
||||||
|
27075840,10
|
||||||
|
2349616974,10
|
||||||
|
24673506,10
|
||||||
|
2353020496,10
|
||||||
|
2357759100,10
|
||||||
|
2961715231,10
|
||||||
|
2349076526,10
|
||||||
|
2348894245,10
|
||||||
|
2989649772,10
|
||||||
|
25147774,10
|
||||||
|
2347561020,10
|
||||||
|
146491012,9
|
||||||
|
3312199997,8
|
||||||
|
1237811030,8
|
||||||
|
3440374619,8
|
||||||
|
343932526,8
|
||||||
|
25685135,8
|
||||||
|
504638253,8
|
||||||
|
2311676659,8
|
||||||
|
4315536490,8
|
||||||
|
2314301730,8
|
||||||
|
891649,8
|
||||||
|
2342515031,8
|
||||||
|
519195163,7
|
||||||
|
29223617,7
|
||||||
|
29452962,7
|
||||||
|
33171435,7
|
||||||
|
3157495460,6
|
||||||
|
774611690,6
|
||||||
|
1092796483,6
|
||||||
|
951988821,6
|
||||||
|
2358215091,6
|
||||||
|
2553848709,6
|
||||||
|
24610687,6
|
||||||
|
60716715,6
|
||||||
|
591975267,6
|
||||||
|
2310296367,6
|
||||||
|
5,6
|
||||||
|
3006753238,6
|
||||||
|
2322658897,6
|
||||||
|
2329395956,6
|
||||||
|
2342518227,6
|
||||||
|
972774,6
|
||||||
|
4209347174,3
|
||||||
|
33822284,3
|
||||||
|
|
|
@ -0,0 +1,210 @@
|
||||||
|
id_firm,id_product,count
|
||||||
|
814834276,95,1047
|
||||||
|
3339921892,95,1041
|
||||||
|
22324879,95,1011
|
||||||
|
2325170042,99,928
|
||||||
|
10437056,99,876
|
||||||
|
2541265952,90,492
|
||||||
|
27169556,90,433
|
||||||
|
3346538900,90,431
|
||||||
|
2313177432,52,431
|
||||||
|
4067555184,52,426
|
||||||
|
2313177432,53,415
|
||||||
|
2313177432,55,411
|
||||||
|
4067555184,55,402
|
||||||
|
4067555184,53,402
|
||||||
|
2313177432,51,398
|
||||||
|
2313177432,54,397
|
||||||
|
4067555184,54,397
|
||||||
|
4067555184,50,395
|
||||||
|
2313177432,50,394
|
||||||
|
12098344,52,385
|
||||||
|
4067555184,51,383
|
||||||
|
12098344,53,377
|
||||||
|
12098344,54,368
|
||||||
|
12098344,50,361
|
||||||
|
12098344,55,354
|
||||||
|
12098344,51,346
|
||||||
|
185356903,93,331
|
||||||
|
777299215,94,306
|
||||||
|
331545755,92,295
|
||||||
|
350343208,91,283
|
||||||
|
3193516458,92,279
|
||||||
|
584019624,93,276
|
||||||
|
41454763,92,276
|
||||||
|
1266556718,91,259
|
||||||
|
22751149,93,255
|
||||||
|
2313177432,48,238
|
||||||
|
2313177432,49,237
|
||||||
|
4067555184,48,234
|
||||||
|
37873062,91,234
|
||||||
|
2313177432,46,233
|
||||||
|
1104420298,39,228
|
||||||
|
4067555184,46,225
|
||||||
|
2313177432,47,225
|
||||||
|
2313177432,45,223
|
||||||
|
4067555184,47,222
|
||||||
|
1104420298,40,222
|
||||||
|
2313177432,44,220
|
||||||
|
4067555184,49,219
|
||||||
|
37873062,39,219
|
||||||
|
37873062,38,218
|
||||||
|
4067555184,45,215
|
||||||
|
1104420298,43,214
|
||||||
|
4067555184,44,212
|
||||||
|
37873062,40,206
|
||||||
|
12098344,47,202
|
||||||
|
1104420298,38,202
|
||||||
|
37873062,43,200
|
||||||
|
12098344,49,196
|
||||||
|
37873062,41,192
|
||||||
|
12098344,48,191
|
||||||
|
12098344,45,189
|
||||||
|
12098344,46,186
|
||||||
|
1104420298,41,184
|
||||||
|
12098344,44,182
|
||||||
|
18107611,94,178
|
||||||
|
1104420298,42,167
|
||||||
|
37873062,42,156
|
||||||
|
557266995,36,20
|
||||||
|
1452048,30,20
|
||||||
|
2326956863,34,20
|
||||||
|
453289520,37,20
|
||||||
|
2350111843,11,20
|
||||||
|
2311838590,97,20
|
||||||
|
5849940,26,20
|
||||||
|
29954548,10,19
|
||||||
|
930767828,9,16
|
||||||
|
9278530,9,12
|
||||||
|
15482118,9,12
|
||||||
|
27085933,9,12
|
||||||
|
3312358902,59,10
|
||||||
|
3221578464,9,10
|
||||||
|
3227189464,27,10
|
||||||
|
3269940677,28,10
|
||||||
|
3270918801,32,10
|
||||||
|
3274238529,23,10
|
||||||
|
3306665331,11,10
|
||||||
|
3384021594,67,10
|
||||||
|
333499553,12,10
|
||||||
|
3352578733,29,10
|
||||||
|
892652617,19,10
|
||||||
|
3312358902,61,10
|
||||||
|
3344266702,10,10
|
||||||
|
331450699,17,10
|
||||||
|
366828854,29,10
|
||||||
|
354328758,62,10
|
||||||
|
420984285,18,10
|
||||||
|
367669349,20,10
|
||||||
|
4067555184,7,10
|
||||||
|
423388486,66,10
|
||||||
|
413876805,67,10
|
||||||
|
4379631621,73,10
|
||||||
|
3164072929,63,10
|
||||||
|
78979697,74,10
|
||||||
|
578803019,10,10
|
||||||
|
80158773,69,10
|
||||||
|
413876805,60,10
|
||||||
|
4076786740,17,10
|
||||||
|
80169705,61,10
|
||||||
|
7299120,32,10
|
||||||
|
888478182,31,10
|
||||||
|
762165453,72,10
|
||||||
|
61066955,23,10
|
||||||
|
631103677,15,10
|
||||||
|
648145286,35,10
|
||||||
|
695879282,33,10
|
||||||
|
4208851809,16,10
|
||||||
|
39894253,25,10
|
||||||
|
708388905,10,10
|
||||||
|
784491064,10,10
|
||||||
|
1,10,10
|
||||||
|
11169556957,70,10
|
||||||
|
1194436218,15,10
|
||||||
|
2347561020,68,10
|
||||||
|
2343704209,69,10
|
||||||
|
2340606811,28,10
|
||||||
|
2333843479,70,10
|
||||||
|
2329836516,18,10
|
||||||
|
11807506,60,10
|
||||||
|
2327979389,13,10
|
||||||
|
314846874,11,10
|
||||||
|
2319266522,15,10
|
||||||
|
2316430101,74,10
|
||||||
|
23131812,11,10
|
||||||
|
2313177432,7,10
|
||||||
|
2311907103,79,10
|
||||||
|
2311838590,11,10
|
||||||
|
2311639124,72,10
|
||||||
|
2349076526,68,10
|
||||||
|
2311352797,71,10
|
||||||
|
2311337085,9,10
|
||||||
|
12098344,7,10
|
||||||
|
2309668026,12,10
|
||||||
|
22324879,71,10
|
||||||
|
22324879,63,10
|
||||||
|
216898035,13,10
|
||||||
|
1270747834,25,10
|
||||||
|
142823313,20,10
|
||||||
|
203314437,22,10
|
||||||
|
169978927,8,10
|
||||||
|
1679596339,66,10
|
||||||
|
16116663,10,10
|
||||||
|
1555364428,19,10
|
||||||
|
2348894245,8,10
|
||||||
|
1452048,11,10
|
||||||
|
2349349655,11,10
|
||||||
|
104671744,16,10
|
||||||
|
3120341363,11,10
|
||||||
|
3118917053,35,10
|
||||||
|
3077450214,65,10
|
||||||
|
300186799,10,10
|
||||||
|
29954548,27,10
|
||||||
|
2989649772,64,10
|
||||||
|
2961715231,31,10
|
||||||
|
287006714,25,10
|
||||||
|
2349616974,73,10
|
||||||
|
27075840,65,10
|
||||||
|
1044103384,62,10
|
||||||
|
1033972427,59,10
|
||||||
|
2357759100,33,10
|
||||||
|
2353020496,24,10
|
||||||
|
25147774,64,10
|
||||||
|
2475874929,24,10
|
||||||
|
24673506,10,10
|
||||||
|
2351592628,10,10
|
||||||
|
146491012,79,9
|
||||||
|
504638253,9,8
|
||||||
|
891649,9,8
|
||||||
|
2342515031,10,8
|
||||||
|
2314301730,33,8
|
||||||
|
343932526,10,8
|
||||||
|
1237811030,9,8
|
||||||
|
3312199997,10,8
|
||||||
|
4315536490,12,8
|
||||||
|
2311676659,9,8
|
||||||
|
25685135,9,8
|
||||||
|
3440374619,9,8
|
||||||
|
3339921892,10,8
|
||||||
|
519195163,9,7
|
||||||
|
29452962,9,7
|
||||||
|
33171435,9,7
|
||||||
|
29223617,9,7
|
||||||
|
1092796483,9,6
|
||||||
|
951988821,9,6
|
||||||
|
774611690,9,6
|
||||||
|
3157495460,9,6
|
||||||
|
2322658897,9,6
|
||||||
|
60716715,9,6
|
||||||
|
591975267,10,6
|
||||||
|
5,10,6
|
||||||
|
2310296367,9,6
|
||||||
|
2329395956,10,6
|
||||||
|
2342518227,9,6
|
||||||
|
2358215091,9,6
|
||||||
|
24610687,9,6
|
||||||
|
2553848709,9,6
|
||||||
|
3006753238,9,6
|
||||||
|
972774,9,6
|
||||||
|
4209347174,9,3
|
||||||
|
33822284,9,3
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
id_product,count
|
||||||
|
95,3099
|
||||||
|
99,1804
|
||||||
|
90,1356
|
||||||
|
52,1242
|
||||||
|
53,1194
|
||||||
|
55,1167
|
||||||
|
54,1162
|
||||||
|
50,1150
|
||||||
|
51,1127
|
||||||
|
93,862
|
||||||
|
92,850
|
||||||
|
91,776
|
||||||
|
48,663
|
||||||
|
49,652
|
||||||
|
47,649
|
||||||
|
46,644
|
||||||
|
45,627
|
||||||
|
44,614
|
||||||
|
94,484
|
||||||
|
39,447
|
||||||
|
40,428
|
||||||
|
38,420
|
||||||
|
43,414
|
||||||
|
41,376
|
||||||
|
42,323
|
||||||
|
9,232
|
||||||
|
10,159
|
||||||
|
11,90
|
||||||
|
7,30
|
||||||
|
15,30
|
||||||
|
25,30
|
||||||
|
12,28
|
||||||
|
33,28
|
||||||
|
37,20
|
||||||
|
8,20
|
||||||
|
69,20
|
||||||
|
30,20
|
||||||
|
70,20
|
||||||
|
71,20
|
||||||
|
72,20
|
||||||
|
73,20
|
||||||
|
74,20
|
||||||
|
29,20
|
||||||
|
67,20
|
||||||
|
17,20
|
||||||
|
16,20
|
||||||
|
28,20
|
||||||
|
13,20
|
||||||
|
27,20
|
||||||
|
97,20
|
||||||
|
68,20
|
||||||
|
66,20
|
||||||
|
36,20
|
||||||
|
65,20
|
||||||
|
35,20
|
||||||
|
34,20
|
||||||
|
32,20
|
||||||
|
31,20
|
||||||
|
24,20
|
||||||
|
23,20
|
||||||
|
20,20
|
||||||
|
26,20
|
||||||
|
18,20
|
||||||
|
59,20
|
||||||
|
60,20
|
||||||
|
61,20
|
||||||
|
62,20
|
||||||
|
63,20
|
||||||
|
64,20
|
||||||
|
19,20
|
||||||
|
79,19
|
||||||
|
22,10
|
||||||
|
|
After Width: | Height: | Size: 5.7 MiB |
|
After Width: | Height: | Size: 5.9 MiB |
|
After Width: | Height: | Size: 13 MiB |
|
|
@ -0,0 +1,32 @@
|
||||||
|
from mesa import Agent
|
||||||
|
|
||||||
|
|
||||||
|
class ProductAgent(Agent):
|
||||||
|
def __init__(self, unique_id, model, name, type2, production_ratio):
|
||||||
|
# 调用超类的 __init__ 方法
|
||||||
|
super().__init__(unique_id, model)
|
||||||
|
|
||||||
|
# 初始化代理属性
|
||||||
|
self.name = name
|
||||||
|
self.product_network = self.model.product_network
|
||||||
|
self.production_ratio = production_ratio
|
||||||
|
if type2 == 0:
|
||||||
|
self.is_equip = True
|
||||||
|
else:
|
||||||
|
self.is_mater = True
|
||||||
|
# depreciation ratio 折旧比值
|
||||||
|
# self.depreciation ratio
|
||||||
|
|
||||||
|
def a_successors(self):
|
||||||
|
# 从 product_network 中找到当前代理的后继节点
|
||||||
|
successors = list(self.model.product_network.successors(self.unique_id))
|
||||||
|
|
||||||
|
# 通过 unique_id 查找后继节点对应的代理对象,从 self.product_agents 中获取
|
||||||
|
return [agent for agent in self.model.product_agents if agent.unique_id in successors]
|
||||||
|
|
||||||
|
def a_predecessors(self):
|
||||||
|
# 找到当前代理的前驱节点
|
||||||
|
predecessors = list(self.model.product_network.predecessors(self.unique_id))
|
||||||
|
|
||||||
|
# 通过 unique_id 查找前驱节点对应的代理对象,直接从 self.product_agents 列表中获取
|
||||||
|
return [agent for agent in self.model.product_agents if agent.unique_id in predecessors]
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
agentpy==0.1.5
|
||||||
|
alabaster==0.7.13
|
||||||
|
Babel==2.12.1
|
||||||
|
certifi @ file:///C:/b/abs_85o_6fm0se/croot/certifi_1671487778835/work/certifi
|
||||||
|
charset-normalizer==3.0.1
|
||||||
|
colorama==0.4.6
|
||||||
|
cycler==0.11.0
|
||||||
|
decorator==5.1.1
|
||||||
|
dill==0.3.6
|
||||||
|
docutils==0.19
|
||||||
|
greenlet==2.0.2
|
||||||
|
idna==3.4
|
||||||
|
imagesize==1.4.1
|
||||||
|
importlib-metadata==6.0.0
|
||||||
|
Jinja2==3.1.2
|
||||||
|
joblib==1.2.0
|
||||||
|
kiwisolver==1.4.4
|
||||||
|
MarkupSafe==2.1.2
|
||||||
|
matplotlib==3.3.4
|
||||||
|
matplotlib-inline==0.1.6
|
||||||
|
multiprocess==0.70.14
|
||||||
|
mysqlclient==2.1.1
|
||||||
|
networkx==2.5
|
||||||
|
numpy==1.20.3
|
||||||
|
numpydoc==1.1.0
|
||||||
|
packaging==23.0
|
||||||
|
pandas==1.4.1
|
||||||
|
pandas-stubs==1.2.0.39
|
||||||
|
Pillow==9.4.0
|
||||||
|
Pygments==2.14.0
|
||||||
|
pygraphviz @ file:///C:/Users/ASUS/Downloads/pygraphviz-1.9-cp38-cp38-win_amd64.whl
|
||||||
|
pyparsing==3.0.9
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
pytz==2022.7.1
|
||||||
|
PyYAML==6.0
|
||||||
|
requests==2.28.2
|
||||||
|
SALib==1.4.7
|
||||||
|
scipy==1.10.1
|
||||||
|
six==1.16.0
|
||||||
|
snowballstemmer==2.2.0
|
||||||
|
Sphinx==6.1.3
|
||||||
|
sphinxcontrib-applehelp==1.0.4
|
||||||
|
sphinxcontrib-devhelp==1.0.2
|
||||||
|
sphinxcontrib-htmlhelp==2.0.1
|
||||||
|
sphinxcontrib-jsmath==1.0.1
|
||||||
|
sphinxcontrib-qthelp==1.0.3
|
||||||
|
sphinxcontrib-serializinghtml==1.1.5
|
||||||
|
SQLAlchemy==2.0.5.post1
|
||||||
|
traitlets==5.9.0
|
||||||
|
typing_extensions==4.5.0
|
||||||
|
urllib3==1.26.14
|
||||||
|
wincertstore==0.2
|
||||||
|
yapf @ file:///tmp/build/80754af9/yapf_1615749224965/work
|
||||||
|
zipp==3.15.0
|
||||||
|
mesa==2.1.5
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
agentpy==0.1.5
|
||||||
|
matplotlib==3.7.5
|
||||||
|
matplotlib-inline==0.1.6
|
||||||
|
networkx==2.5
|
||||||
|
numpy==1.20.3
|
||||||
|
numpydoc==1.1.0
|
||||||
|
pandas==1.4.1
|
||||||
|
pandas-stubs==1.2.0.39
|
||||||
|
pygraphviz==1.9
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
count = pd.read_csv("output_result/risk/count.csv",
|
||||||
|
dtype={'s_id': str, 'id_firm': str})
|
||||||
|
print(count)
|
||||||
|
print(len(count['s_id'].unique()))
|
||||||
|
count_max_ts = count.groupby('s_id')['ts'].max()
|
||||||
|
print(count_max_ts.value_counts())
|
||||||
|
|
@ -0,0 +1,128 @@
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import networkx as nx
|
||||||
|
|
||||||
|
plt.rcParams['font.sans-serif'] = 'SimHei'
|
||||||
|
|
||||||
|
# count firm category
|
||||||
|
count_firm = pd.read_csv("output_result/risk/count_firm.csv")
|
||||||
|
print(count_firm.describe())
|
||||||
|
|
||||||
|
count_dcp = pd.read_csv("output_result/risk/count_dcp.csv",
|
||||||
|
dtype={
|
||||||
|
'up_id_firm': str,
|
||||||
|
'down_id_firm': str
|
||||||
|
})
|
||||||
|
count_dcp = count_dcp[count_dcp['count'] > 130]
|
||||||
|
|
||||||
|
list_firm = count_dcp['up_id_firm'].tolist(
|
||||||
|
) + count_dcp['down_id_firm'].tolist()
|
||||||
|
list_firm = list(set(list_firm))
|
||||||
|
|
||||||
|
# init graph firm
|
||||||
|
Firm = pd.read_csv("input_data/input_firm_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_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv")
|
||||||
|
firm_industry_relation['Firm_Code'] = firm_industry_relation['Firm_Code'].astype('string')
|
||||||
|
firm_product = []
|
||||||
|
grouped = firm_industry_relation.groupby('Firm_Code')['Product_Code'].apply(list)
|
||||||
|
firm_product.append(grouped)
|
||||||
|
Firm_attr['Product_Code'] = Firm_attr['Code'].map(grouped)
|
||||||
|
Firm_attr.set_index('Code', inplace=True)
|
||||||
|
|
||||||
|
G_firm = nx.MultiDiGraph()
|
||||||
|
G_firm.add_nodes_from(list_firm)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
count_max = count_dcp['count'].max()
|
||||||
|
count_min = count_dcp['count'].min()
|
||||||
|
k = 15 / (count_max - count_min)
|
||||||
|
for _, row in count_dcp.iterrows():
|
||||||
|
# print(row)
|
||||||
|
lst_add_edge = [(
|
||||||
|
row['up_id_firm'],
|
||||||
|
row['down_id_firm'],
|
||||||
|
{
|
||||||
|
'up_id_product': row['up_id_product'],
|
||||||
|
'down_id_product': row['down_id_product'],
|
||||||
|
'edge_label': f"{row['up_id_product']} - {row['down_id_product']}",
|
||||||
|
'edge_width': k * (row['count'] - count_min),
|
||||||
|
'count': (row['count'])*18
|
||||||
|
})]
|
||||||
|
G_firm.add_edges_from(lst_add_edge)
|
||||||
|
|
||||||
|
# dcp_networkx
|
||||||
|
pos = nx.nx_agraph.graphviz_layout(G_firm, prog="twopi", args="")
|
||||||
|
node_label = nx.get_node_attributes(G_firm, '企业名称')
|
||||||
|
# desensitize
|
||||||
|
node_label = {key: f"{key} " for key, value in node_label.items()}
|
||||||
|
node_label = {
|
||||||
|
'343012684': '59',
|
||||||
|
'2944892892': '165',
|
||||||
|
'3269039233': '194',
|
||||||
|
'503176785': '73',
|
||||||
|
'3111033905': '178',
|
||||||
|
'3215814536': '190',
|
||||||
|
'413274977': '64',
|
||||||
|
'2317841563': '131',
|
||||||
|
'2354145351': '157',
|
||||||
|
'653528340': '88',
|
||||||
|
'888395016': '104',
|
||||||
|
'3069206426': '174',
|
||||||
|
'3299144127': '197',
|
||||||
|
'2624175': '8',
|
||||||
|
'25685135': '24',
|
||||||
|
'2348941764': '151',
|
||||||
|
'750610681': '95',
|
||||||
|
'2320475044': '133',
|
||||||
|
'571058167': '78',
|
||||||
|
'152008168': '44',
|
||||||
|
'448033045': '66',
|
||||||
|
'2321109759': '134',
|
||||||
|
'3445928818': '213'
|
||||||
|
}
|
||||||
|
|
||||||
|
node_size = list(nx.get_node_attributes(G_firm, 'Revenue_Log').values())
|
||||||
|
node_size = list(map(lambda x: x * 10, node_size))
|
||||||
|
edge_label = nx.get_edge_attributes(G_firm, "edge_label")
|
||||||
|
edge_label = {(n1, n2): label for (n1, n2, _), label in edge_label.items()}
|
||||||
|
edge_width = nx.get_edge_attributes(G_firm, "edge_width")
|
||||||
|
edge_width = [w for (n1, n2, _), w in edge_width.items()]
|
||||||
|
colors = nx.get_edge_attributes(G_firm, "count")
|
||||||
|
colors = [w for (n1, n2, _), w in colors.items()]
|
||||||
|
vmin = min(colors)
|
||||||
|
vmax = max(colors)
|
||||||
|
cmap = plt.cm.Blues
|
||||||
|
fig = plt.figure(figsize=(10, 8), dpi=500)
|
||||||
|
nx.draw(G_firm,
|
||||||
|
pos,
|
||||||
|
node_size=node_size,
|
||||||
|
labels=node_label,
|
||||||
|
font_size=8,
|
||||||
|
width=2,
|
||||||
|
edge_color=colors,
|
||||||
|
edge_cmap=cmap,
|
||||||
|
edge_vmin=vmin,
|
||||||
|
edge_vmax=vmax)
|
||||||
|
# nx.draw_networkx_edge_labels(G_firm, pos, font_size=6)
|
||||||
|
nx.draw_networkx_edge_labels(
|
||||||
|
G_firm,
|
||||||
|
pos,
|
||||||
|
edge_labels=edge_label,
|
||||||
|
font_size=5
|
||||||
|
)
|
||||||
|
|
||||||
|
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))
|
||||||
|
sm._A = []
|
||||||
|
position = fig.add_axes([0.95, 0.05, 0.01, 0.3])
|
||||||
|
cb = plt.colorbar(sm, fraction=0.01, cax=position)
|
||||||
|
cb.ax.tick_params(labelsize=4)
|
||||||
|
cb.outline.set_visible(False)
|
||||||
|
plt.savefig("output_result\\risk\\count_dcp_network")
|
||||||
|
plt.close()
|
||||||
|
|
@ -0,0 +1,223 @@
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import networkx as nx
|
||||||
|
|
||||||
|
plt.rcParams['font.sans-serif'] = 'SimHei'
|
||||||
|
|
||||||
|
count_prod = pd.read_csv("output_result/risk/count_prod.csv")
|
||||||
|
print(count_prod)
|
||||||
|
|
||||||
|
# category
|
||||||
|
print(count_prod.describe())
|
||||||
|
|
||||||
|
# prod_networkx
|
||||||
|
# BomNodes = pd.read_csv('input_data/input_product_data/BomNodes.csv', index_col=0)
|
||||||
|
# BomNodes.set_index('Code', inplace=True)
|
||||||
|
# BomCateNet = pd.read_csv('input_data/input_product_data/BomCateNet.csv', index_col=0)
|
||||||
|
# BomCateNet.fillna(0, inplace=True)
|
||||||
|
|
||||||
|
bom_nodes = pd.read_csv('input_data/input_product_data/BomNodes.csv')
|
||||||
|
bom_nodes['Code'] = bom_nodes['Code'].astype(str)
|
||||||
|
bom_nodes.set_index('Index', inplace=True)
|
||||||
|
|
||||||
|
bom_cate_net = pd.read_csv('input_data/input_product_data/合成结点.csv')
|
||||||
|
g_bom = nx.from_pandas_edgelist(bom_cate_net, source='UPID', target='ID', create_using=nx.MultiDiGraph())
|
||||||
|
|
||||||
|
labels_dict = {}
|
||||||
|
for code in g_bom.nodes:
|
||||||
|
node_attr = bom_nodes.loc[code].to_dict()
|
||||||
|
index_list = count_prod[count_prod['id_product'] == code].index.tolist()
|
||||||
|
index = index_list[0] if len(index_list) == 1 else -1
|
||||||
|
node_attr['count'] = count_prod['count'].get(index, 0)
|
||||||
|
node_attr['node_size'] = (count_prod['count'].get(index, 0))/10
|
||||||
|
node_attr['node_color'] = count_prod['count'].get(index, 0)
|
||||||
|
labels_dict[code] = node_attr
|
||||||
|
nx.set_node_attributes(g_bom, labels_dict)
|
||||||
|
# print(labels_dict)
|
||||||
|
|
||||||
|
pos = nx.nx_agraph.graphviz_layout(g_bom, prog="twopi", args="")
|
||||||
|
dict_node_name = nx.get_node_attributes(g_bom, 'Name')
|
||||||
|
node_labels = {}
|
||||||
|
for node in nx.nodes(g_bom):
|
||||||
|
node_labels[node] = f"{node} {str(dict_node_name[node])}"
|
||||||
|
# node_labels[node] = f"{str(dict_node_name[node])}"
|
||||||
|
colors = list(nx.get_node_attributes(g_bom, 'node_color').values())
|
||||||
|
vmin = min(colors)
|
||||||
|
vmax = max(colors)
|
||||||
|
cmap = plt.cm.Blues
|
||||||
|
# 创建绘图对象
|
||||||
|
fig = plt.figure(figsize=(10, 10), dpi=300)
|
||||||
|
ax = fig.add_subplot(111)
|
||||||
|
|
||||||
|
# 绘制网络图(优化样式参数)
|
||||||
|
nx.draw(g_bom, pos,
|
||||||
|
node_size=list(nx.get_node_attributes(g_bom, 'node_size').values()),
|
||||||
|
labels=node_labels,
|
||||||
|
font_size=3,
|
||||||
|
node_color=colors,
|
||||||
|
cmap=cmap,
|
||||||
|
vmin=vmin,
|
||||||
|
vmax=vmax,
|
||||||
|
edge_color='#808080', # 中性灰
|
||||||
|
width=0.3,
|
||||||
|
edgecolors='#404040',
|
||||||
|
linewidths=0.2)
|
||||||
|
|
||||||
|
# 创建颜色条(修正实现方式)
|
||||||
|
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))
|
||||||
|
sm.set_array([])
|
||||||
|
|
||||||
|
# 设置颜色条位置和样式
|
||||||
|
cax = fig.add_axes([0.88, 0.3, 0.015, 0.4]) # 右侧垂直对齐
|
||||||
|
cb = plt.colorbar(sm, cax=cax)
|
||||||
|
cb.ax.tick_params(labelsize=4, width=0.5, colors='#333333')
|
||||||
|
cb.outline.set_linewidth(0.5)
|
||||||
|
cb.set_label('Risk Level', fontsize=5, labelpad=2)
|
||||||
|
|
||||||
|
# 添加图元信息
|
||||||
|
ax.set_title("Production Risk Network", fontsize=6, pad=8, color='#2F2F2F')
|
||||||
|
plt.text(0.5, 0.02, 'Data: USTB Production System | Viz: DeepSeek-R1',
|
||||||
|
ha='center', fontsize=3, color='#666666',
|
||||||
|
transform=fig.transFigure)
|
||||||
|
|
||||||
|
# 调整边界和保存
|
||||||
|
plt.subplots_adjust(left=0.05, right=0.85, top=0.95, bottom=0.1) # 适应颜色条
|
||||||
|
plt.savefig(r"output_result/risk/count_prod_network.png", # 规范路径格式
|
||||||
|
dpi=600,
|
||||||
|
bbox_inches='tight',
|
||||||
|
pad_inches=0.05,
|
||||||
|
transparent=False)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
# dcp_prod
|
||||||
|
count_dcp = pd.read_csv("output_result/risk/count_dcp.csv",
|
||||||
|
dtype={
|
||||||
|
'up_id_firm': str,
|
||||||
|
'down_id_firm': str
|
||||||
|
})
|
||||||
|
count_dcp_prod = count_dcp.groupby(
|
||||||
|
['up_id_product',
|
||||||
|
'down_id_product'])['count'].sum()
|
||||||
|
count_dcp_prod = count_dcp_prod.reset_index()
|
||||||
|
count_dcp_prod.sort_values('count', inplace=True, ascending=False)
|
||||||
|
count_dcp_prod.to_csv('output_result\\risk\\count_dcp_prod.csv',
|
||||||
|
index=False,
|
||||||
|
encoding='utf-8-sig')
|
||||||
|
count_dcp_prod = count_dcp_prod[count_dcp_prod['count'] > 1000]
|
||||||
|
# print(count_dcp_prod)
|
||||||
|
|
||||||
|
list_prod = count_dcp_prod['up_id_product'].tolist(
|
||||||
|
) + count_dcp['down_id_product'].tolist()
|
||||||
|
list_prod = list(set(list_prod))
|
||||||
|
|
||||||
|
# init graph bom
|
||||||
|
|
||||||
|
BomNodes = pd.read_csv('input_data/input_product_data/BomNodes.csv')
|
||||||
|
BomNodes.set_index('Index', inplace=True)
|
||||||
|
|
||||||
|
g_bom = nx.MultiDiGraph()
|
||||||
|
g_bom.add_nodes_from(list_prod)
|
||||||
|
|
||||||
|
bom_labels_dict = {}
|
||||||
|
for code in list_prod:
|
||||||
|
dct_attr = BomNodes.loc[code].to_dict()
|
||||||
|
bom_labels_dict[code] = dct_attr
|
||||||
|
nx.set_node_attributes(g_bom, bom_labels_dict)
|
||||||
|
|
||||||
|
count_max = count_dcp_prod['count'].max()
|
||||||
|
count_min = count_dcp_prod['count'].min()
|
||||||
|
k = 5 / (count_max - count_min)
|
||||||
|
for _, row in count_dcp_prod.iterrows():
|
||||||
|
# print(row)
|
||||||
|
lst_add_edge = [(
|
||||||
|
row['up_id_product'],
|
||||||
|
row['down_id_product'],
|
||||||
|
{
|
||||||
|
'count': row['count']
|
||||||
|
})]
|
||||||
|
g_bom.add_edges_from(lst_add_edge)
|
||||||
|
|
||||||
|
# dcp_networkx
|
||||||
|
pos = nx.nx_agraph.graphviz_layout(g_bom, prog="twopi", args="")
|
||||||
|
node_labels = nx.get_node_attributes(g_bom, 'Name')
|
||||||
|
|
||||||
|
temp = {}
|
||||||
|
for key, value in node_labels.items():
|
||||||
|
temp[key] = str(key) + " " + value
|
||||||
|
node_labels = temp
|
||||||
|
node_labels ={
|
||||||
|
38: 'SiC Substrate',
|
||||||
|
39: 'GaN Substrate',
|
||||||
|
40: 'Si Substrate',
|
||||||
|
41: 'AlN Substrate',
|
||||||
|
42: 'DUV LED Substrate',
|
||||||
|
43: 'InP Substrate',
|
||||||
|
44: 'Mono-Si Wafer',
|
||||||
|
45: 'Poly-Si Wafer',
|
||||||
|
46: 'InP Cryst./Wafer',
|
||||||
|
47: 'SiC Cryst./Wafer',
|
||||||
|
48: 'GaAs Wafer',
|
||||||
|
49: 'GaN Cryst./Wafer',
|
||||||
|
50: 'Si Epi Wafer',
|
||||||
|
51: 'SiC Epi Wafer',
|
||||||
|
52: 'AlN Epi',
|
||||||
|
53: 'GaN Epi',
|
||||||
|
54: 'InP Epi',
|
||||||
|
55: 'LED Epi Wafer',
|
||||||
|
90: 'Power Devices',
|
||||||
|
91: 'Diode',
|
||||||
|
92: 'Transistor',
|
||||||
|
93: 'Thyristor',
|
||||||
|
94: 'Rectifier',
|
||||||
|
95: 'IC Fab',
|
||||||
|
99: 'Wafer Test'
|
||||||
|
}
|
||||||
|
colors = nx.get_edge_attributes(g_bom, "count")
|
||||||
|
colors = [w for (n1, n2, _), w in colors.items()]
|
||||||
|
vmin = min(colors)
|
||||||
|
vmax = max(colors)
|
||||||
|
cmap = plt.cm.Blues
|
||||||
|
|
||||||
|
pos_new = {node: (p[1], p[0]) for node, p in pos.items()} # 字典推导式优化
|
||||||
|
|
||||||
|
fig = plt.figure(figsize=(8, 8), dpi=300)
|
||||||
|
plt.subplots_adjust(right=0.85) # 关键调整:右侧保留15%空白
|
||||||
|
|
||||||
|
# 使用Axes对象精准控制
|
||||||
|
main_ax = fig.add_axes([0.1, 0.1, 0.75, 0.8]) # 主图占左75%宽,上下各留10%边距
|
||||||
|
nx.draw(g_bom, pos_new,
|
||||||
|
ax=main_ax,
|
||||||
|
node_size=50,
|
||||||
|
labels=node_labels,
|
||||||
|
font_size=5,
|
||||||
|
width=1.5,
|
||||||
|
edge_color=colors,
|
||||||
|
edge_cmap=cmap,
|
||||||
|
edge_vmin=vmin,
|
||||||
|
edge_vmax=vmax,
|
||||||
|
)
|
||||||
|
main_ax.axis('off')
|
||||||
|
|
||||||
|
# 颜色条定位系统
|
||||||
|
cbar_ax = fig.add_axes([0.86, 0.15, 0.015, 0.3]) # 右边缘86%位置,底部15%起,占30%高度
|
||||||
|
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))
|
||||||
|
sm._A = [] # 必需的空数组
|
||||||
|
|
||||||
|
# 微调颜色条样式
|
||||||
|
cbar = fig.colorbar(sm, cax=cbar_ax, orientation='vertical')
|
||||||
|
cbar.ax.tick_params(labelsize=4,
|
||||||
|
width=0.3, # 刻度线粗细
|
||||||
|
length=1.5, # 刻度线长度
|
||||||
|
pad=0.8) # 标签与条间距
|
||||||
|
cbar.outline.set_linewidth(0.5) # 边框线宽
|
||||||
|
|
||||||
|
# 输出前验证边界
|
||||||
|
print(f"Colorbar position: {cbar_ax.get_position().bounds}") # 应输出(0.86,0.15,0.015,0.3)
|
||||||
|
|
||||||
|
# 专业级保存参数
|
||||||
|
plt.savefig("output_result/risk/count_dcp_prod_network.png",
|
||||||
|
dpi=900,
|
||||||
|
bbox_inches='tight', # 自动裁剪白边
|
||||||
|
pad_inches=0.05, # 保留0.05英寸边距
|
||||||
|
metadata={'CreationDate': None}) # 避免时间戳污染元数据
|
||||||
|
plt.close()
|
||||||
|
|
@ -0,0 +1,491 @@
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
from sqlalchemy import text
|
||||||
|
from orm import engine, connection
|
||||||
|
import pandas as pd
|
||||||
|
import networkx as nx
|
||||||
|
import json
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
# Prepare data
|
||||||
|
Firm = pd.read_csv("input_data/input_firm_data/Firm_amended.csv")
|
||||||
|
Firm['Code'] = Firm['Code'].astype('string')
|
||||||
|
Firm.fillna(0, inplace=True)
|
||||||
|
BomNodes = pd.read_csv('input_data/input_product_data/BomNodes.csv', index_col=0)
|
||||||
|
|
||||||
|
# SQL query
|
||||||
|
with open('SQL_analysis_risk.sql', 'r') as f:
|
||||||
|
str_sql = text(f.read())
|
||||||
|
|
||||||
|
result = pd.read_sql(sql=str_sql, con=connection)
|
||||||
|
result.to_csv('output_result/risk/count.csv', index=False, encoding='utf-8-sig')
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
# G_bom
|
||||||
|
plt.rcParams['font.sans-serif'] = 'SimHei'
|
||||||
|
|
||||||
|
exp_id = 1
|
||||||
|
G_bom_df = pd.read_sql(
|
||||||
|
sql=text(f'select g_bom from iiabmdb.without_exp_experiment where id = {exp_id};'),
|
||||||
|
con=connection
|
||||||
|
)
|
||||||
|
|
||||||
|
if G_bom_df.empty:
|
||||||
|
raise ValueError(f"No g_bom found for exp_id = {exp_id}")
|
||||||
|
|
||||||
|
G_bom_str = G_bom_df['g_bom'].tolist()[0]
|
||||||
|
if G_bom_str is None:
|
||||||
|
raise ValueError(f"g_bom data is None for exp_id = {exp_id}")
|
||||||
|
|
||||||
|
G_bom = nx.adjacency_graph(json.loads(G_bom_str))
|
||||||
|
pos = nx.nx_agraph.graphviz_layout(G_bom, prog="twopi", args="")
|
||||||
|
node_labels = nx.get_node_attributes(G_bom, 'Name')
|
||||||
|
node_labels = {
|
||||||
|
7: 'Si Raw Mtl.',
|
||||||
|
8: 'Photoresist & Reagents',
|
||||||
|
9: 'Etch Solution',
|
||||||
|
10: 'SiF4',
|
||||||
|
11: 'Developer',
|
||||||
|
12: 'PCE Superplasticizer',
|
||||||
|
13: 'Metal Protectant',
|
||||||
|
14: 'Deep Hole Cu Plating',
|
||||||
|
15: 'Thinner',
|
||||||
|
16: 'HP Boric Acid (Nuc.)',
|
||||||
|
17: 'E-Grade Epoxy',
|
||||||
|
18: 'Stripper',
|
||||||
|
19: 'HP-MOC',
|
||||||
|
20: 'CMP Slurry & Consumables',
|
||||||
|
21: 'PR Remover',
|
||||||
|
22: 'Poly-Si Cutting Fluid',
|
||||||
|
23: 'Passivation',
|
||||||
|
24: 'E-Grade Phenolic',
|
||||||
|
25: 'Surfactant',
|
||||||
|
26: 'Mag. Carrier',
|
||||||
|
27: 'Wet Chems.',
|
||||||
|
28: 'Plating Chems.',
|
||||||
|
29: 'E-FR Materials',
|
||||||
|
30: 'LC Alignment Agent',
|
||||||
|
31: 'Func. Wet Chems.',
|
||||||
|
32: 'InP',
|
||||||
|
33: 'SiC',
|
||||||
|
34: 'GaAs',
|
||||||
|
35: 'GaN',
|
||||||
|
36: 'AlN',
|
||||||
|
37: 'Si3N4',
|
||||||
|
38: 'SiC Substrate',
|
||||||
|
39: 'GaN Substrate',
|
||||||
|
40: 'Si Wafer',
|
||||||
|
41: 'AlN Substrate',
|
||||||
|
42: 'DUV LED Substrate',
|
||||||
|
43: 'InP Substrate',
|
||||||
|
44: 'Mono-Si Wafer',
|
||||||
|
45: 'Poly-Si Wafer',
|
||||||
|
46: 'InP Cryst./Wafer',
|
||||||
|
47: 'SiC Cryst./Wafer',
|
||||||
|
48: 'GaAs Wafer',
|
||||||
|
49: 'GaN Cryst./Wafer',
|
||||||
|
50: 'Si Epi Wafer',
|
||||||
|
51: 'SiC Epi Wafer',
|
||||||
|
52: 'AlN Epi',
|
||||||
|
53: 'GaN Epi',
|
||||||
|
54: 'InP Epi',
|
||||||
|
55: 'LED Epi',
|
||||||
|
56: 'EDA/IP',
|
||||||
|
57: 'MPW Service',
|
||||||
|
58: 'IC Design',
|
||||||
|
59: 'Track System',
|
||||||
|
60: 'Wafer Grinder',
|
||||||
|
61: 'Etcher',
|
||||||
|
62: 'Ox/Diff Furnace',
|
||||||
|
63: 'Wafer Metrology',
|
||||||
|
64: 'Crystal Grower',
|
||||||
|
65: 'CMP Tool',
|
||||||
|
66: 'Stepper',
|
||||||
|
67: 'Wafer Dicer',
|
||||||
|
68: 'Deposition System',
|
||||||
|
69: 'Edge Profiler',
|
||||||
|
70: 'Descum Tool',
|
||||||
|
71: 'Clean System',
|
||||||
|
72: 'SAF',
|
||||||
|
73: 'Plating Eqpt.',
|
||||||
|
74: 'Implanter',
|
||||||
|
75: 'Trim/Form',
|
||||||
|
76: 'Probe Card',
|
||||||
|
77: 'ATE',
|
||||||
|
78: 'PCM Eqpt.',
|
||||||
|
79: 'Inspection Sys.',
|
||||||
|
80: 'Prober',
|
||||||
|
81: 'Dicing Saw',
|
||||||
|
82: 'Handler',
|
||||||
|
83: 'Backgrinder',
|
||||||
|
84: 'Die Bonder',
|
||||||
|
85: 'Reflow Oven',
|
||||||
|
86: 'FT Tester',
|
||||||
|
87: 'Wire Bonder',
|
||||||
|
88: 'BGA Mounter',
|
||||||
|
89: 'Molding Press',
|
||||||
|
90: 'Power Devices',
|
||||||
|
91: 'Diode',
|
||||||
|
92: 'Transistor',
|
||||||
|
93: 'Thyristor',
|
||||||
|
94: 'Rectifier',
|
||||||
|
95: 'IC Fab',
|
||||||
|
96: 'IC PKG',
|
||||||
|
97: 'DV',
|
||||||
|
98: 'IPM',
|
||||||
|
99: 'CP Test',
|
||||||
|
100: 'FT Test',
|
||||||
|
101: 'Bumping',
|
||||||
|
102: 'DA Materials',
|
||||||
|
103: 'Leadframe',
|
||||||
|
104: 'Solder Ball',
|
||||||
|
105: 'Substrate',
|
||||||
|
106: 'EMC',
|
||||||
|
107: 'Bond Wire',
|
||||||
|
108: 'Underfill',
|
||||||
|
109: 'Dicing Tape'
|
||||||
|
}
|
||||||
|
plt.figure(figsize=(12, 12), dpi=500)
|
||||||
|
plt.axis('off') # 关闭坐标轴边框
|
||||||
|
|
||||||
|
# 优化节点绘制参数
|
||||||
|
nx.draw_networkx_nodes(
|
||||||
|
G_bom, pos,
|
||||||
|
node_size=100, # 优化节点尺寸
|
||||||
|
linewidths=0.0 # 去除节点边框
|
||||||
|
)
|
||||||
|
# 优化边绘制参数
|
||||||
|
nx.draw_networkx_edges(
|
||||||
|
G_bom, pos,
|
||||||
|
width=0.3, # 更细的边宽
|
||||||
|
alpha=0.5 # 半透明边
|
||||||
|
)
|
||||||
|
# 优化标签参数
|
||||||
|
nx.draw_networkx_labels(
|
||||||
|
G_bom, pos,
|
||||||
|
labels=node_labels,
|
||||||
|
font_size=3, # 适当增大字号
|
||||||
|
font_family='sans-serif', # 使用无衬线字体
|
||||||
|
font_weight='bold', # 增强可读性
|
||||||
|
)
|
||||||
|
|
||||||
|
# 专业级保存参数设置
|
||||||
|
plt.savefig(
|
||||||
|
f"output_result/risk/g_bom_exp_id_{exp_id}.png",
|
||||||
|
bbox_inches='tight', # 去除图像白边
|
||||||
|
pad_inches=0.1, # 适当内边距
|
||||||
|
facecolor='white' # 保证背景纯白
|
||||||
|
)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
# G_firm
|
||||||
|
plt.rcParams['font.sans-serif'] = 'SimHei'
|
||||||
|
|
||||||
|
sample_id = 1
|
||||||
|
# G_firm_df = pd.read_sql(
|
||||||
|
# sql=text(f'select g_firm from iiabmdb.without_exp_sample where id = {sample_id};'),
|
||||||
|
# con=connection
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# if G_firm_df.empty:
|
||||||
|
# raise ValueError(f"No g_firm found for sample_id = {sample_id}")
|
||||||
|
#
|
||||||
|
# G_firm_str = G_firm_df['g_firm'].tolist()[0]
|
||||||
|
# if G_firm_str is None:
|
||||||
|
# raise ValueError(f"g_firm data is None for sample_id = {sample_id}")
|
||||||
|
#
|
||||||
|
# G_firm = nx.adjacency_graph(json.loads(G_firm_str))
|
||||||
|
|
||||||
|
with open("firm_network.pkl", 'rb') as f:
|
||||||
|
G_firm = pickle.load(f)
|
||||||
|
print(f"Successfully loaded cached data from firm_network.pkl")
|
||||||
|
|
||||||
|
# 1. 移除孤立节点
|
||||||
|
isolated_nodes = list(nx.isolates(G_firm)) # 找出所有没有连接的孤立节点
|
||||||
|
G_firm.remove_nodes_from(isolated_nodes) # 从图中移除这些节点
|
||||||
|
|
||||||
|
# 2. 重新布局和绘图
|
||||||
|
pos = nx.nx_agraph.graphviz_layout(G_firm, prog="twopi", args="")
|
||||||
|
node_label = {key: key for key in nx.get_node_attributes(G_firm, 'Revenue_Log').keys()}
|
||||||
|
# node_label = {
|
||||||
|
# "7": "1",
|
||||||
|
# "9": "2",
|
||||||
|
# "829768": "4",
|
||||||
|
# "863079": "5",
|
||||||
|
# "1452048": "6",
|
||||||
|
# "2010673": "7",
|
||||||
|
# "2624175": "8",
|
||||||
|
# "2728939": "9",
|
||||||
|
# "5278074": "10",
|
||||||
|
# "5849940": "11",
|
||||||
|
# "7299120": "12",
|
||||||
|
# "9746245": "13",
|
||||||
|
# "11807506": "14",
|
||||||
|
# "15613202": "15",
|
||||||
|
# "24284343": "19",
|
||||||
|
# "24673506": "20",
|
||||||
|
# "25036634": "21",
|
||||||
|
# "25685135": "24",
|
||||||
|
# "25945288": "25",
|
||||||
|
# "26162741": "26",
|
||||||
|
# "26516263": "27",
|
||||||
|
# "27075840": "28",
|
||||||
|
# "27731896": "29",
|
||||||
|
# "29954548": "30",
|
||||||
|
# "43407343": "33",
|
||||||
|
# "70634828": "36",
|
||||||
|
# "71271700": "37",
|
||||||
|
# "80158773": "39",
|
||||||
|
# "118882692": "40",
|
||||||
|
# "145511905": "42",
|
||||||
|
# "151606446": "43",
|
||||||
|
# "152008168": "44",
|
||||||
|
# "159511306": "45",
|
||||||
|
# "191912252": "46",
|
||||||
|
# "194210021": "47",
|
||||||
|
# "203314437": "48",
|
||||||
|
# "213386023": "49",
|
||||||
|
# "218633337": "50",
|
||||||
|
# "251189644": "53",
|
||||||
|
# "271860868": "55",
|
||||||
|
# "278221281": "56",
|
||||||
|
# "301209792": "57",
|
||||||
|
# "343012684": "59",
|
||||||
|
# "354897041": "60",
|
||||||
|
# "400488703": "62",
|
||||||
|
# "400692942": "63",
|
||||||
|
# "413274977": "64",
|
||||||
|
# "420984285": "65",
|
||||||
|
# "448033045": "66",
|
||||||
|
# "453289520": "67",
|
||||||
|
# "474279224": "68",
|
||||||
|
# "483081978": "69",
|
||||||
|
# "495782506": "70",
|
||||||
|
# "503176785": "73",
|
||||||
|
# "549184982": "75",
|
||||||
|
# "560866402": "76",
|
||||||
|
# "561545339": "77",
|
||||||
|
# "571058167": "78",
|
||||||
|
# "581407487": "79",
|
||||||
|
# "591452402": "80",
|
||||||
|
# "593312758": "81",
|
||||||
|
# "594378026": "82",
|
||||||
|
# "607512171": "83",
|
||||||
|
# "615763365": "84",
|
||||||
|
# "620220747": "85",
|
||||||
|
# "631449822": "86",
|
||||||
|
# "644292599": "87",
|
||||||
|
# "653528340": "88",
|
||||||
|
# "654825436": "89",
|
||||||
|
# "688155470": "92",
|
||||||
|
# "695995052": "93",
|
||||||
|
# "750610681": "95",
|
||||||
|
# "762985858": "96",
|
||||||
|
# "771821595": "97",
|
||||||
|
# "857978527": "100",
|
||||||
|
# "868012326": "101",
|
||||||
|
# "887840774": "102",
|
||||||
|
# "888356483": "103",
|
||||||
|
# "888395016": "104",
|
||||||
|
# "888478182": "105",
|
||||||
|
# "930767828": "107",
|
||||||
|
# "996174506": "108",
|
||||||
|
# "1033972427": "110",
|
||||||
|
# "1128343125": "111",
|
||||||
|
# "1217957486": "113",
|
||||||
|
# "1307012237": "115",
|
||||||
|
# "1375606900": "116",
|
||||||
|
# "1549474227": "118",
|
||||||
|
# "1606833003": "120",
|
||||||
|
# "1679596339": "121",
|
||||||
|
# "2310825263": "122",
|
||||||
|
# "2311838590": "124",
|
||||||
|
# "2312490120": "125",
|
||||||
|
# "2316990095": "128",
|
||||||
|
# "2317245827": "129",
|
||||||
|
# "2317841563": "131",
|
||||||
|
# "2320102626": "132",
|
||||||
|
# "2320475044": "133",
|
||||||
|
# "2321109759": "134",
|
||||||
|
# "2324787028": "137",
|
||||||
|
# "2324844174": "138",
|
||||||
|
# "2326478786": "139",
|
||||||
|
# "2327031723": "140",
|
||||||
|
# "2327979389": "141",
|
||||||
|
# "2329375731": "142",
|
||||||
|
# "2333843479": "143",
|
||||||
|
# "2337952436": "146",
|
||||||
|
# "2339188563": "147",
|
||||||
|
# "2339684065": "148",
|
||||||
|
# "2341555098": "149",
|
||||||
|
# "2343704209": "150",
|
||||||
|
# "2348941764": "151",
|
||||||
|
# "2352036411": "155",
|
||||||
|
# "2354145351": "157",
|
||||||
|
# "2424229017": "159",
|
||||||
|
# "2545430247": "161",
|
||||||
|
# "2820140348": "163",
|
||||||
|
# "2944892892": "165",
|
||||||
|
# "3025036704": "168",
|
||||||
|
# "3026382513": "169",
|
||||||
|
# "3045721313": "171",
|
||||||
|
# "3047163873": "172",
|
||||||
|
# "3048263744": "173",
|
||||||
|
# "3069206426": "174",
|
||||||
|
# "3070859372": "175",
|
||||||
|
# "3072715478": "176",
|
||||||
|
# "3103797386": "177",
|
||||||
|
# "3111033905": "178",
|
||||||
|
# "3113895788": "179",
|
||||||
|
# "3120341363": "180",
|
||||||
|
# "3122923980": "181",
|
||||||
|
# "3127420424": "182",
|
||||||
|
# "3133307899": "183",
|
||||||
|
# "3147511625": "184",
|
||||||
|
# "3177507356": "185",
|
||||||
|
# "3188903709": "186",
|
||||||
|
# "3195502499": "187",
|
||||||
|
# "3203777710": "188",
|
||||||
|
# "3211956484": "189",
|
||||||
|
# "3215814536": "190",
|
||||||
|
# "3221190269": "191",
|
||||||
|
# "3226664625": "192",
|
||||||
|
# "3267688490": "193",
|
||||||
|
# "3269039233": "194",
|
||||||
|
# "3269940677": "195",
|
||||||
|
# "3271705843": "196",
|
||||||
|
# "3299144127": "197",
|
||||||
|
# "3312358902": "198",
|
||||||
|
# "3344297292": "200",
|
||||||
|
# "3372913783": "201",
|
||||||
|
# "3373311444": "202",
|
||||||
|
# "3384021594": "203",
|
||||||
|
# "3395900897": "205",
|
||||||
|
# "3398677646": "206",
|
||||||
|
# "3407754893": "207",
|
||||||
|
# "3433628561": "209",
|
||||||
|
# "3445244192": "212",
|
||||||
|
# "3445928818": "213",
|
||||||
|
# "4208851809": "216",
|
||||||
|
# "5007015990": "218",
|
||||||
|
# "11164476478": "219",
|
||||||
|
# "517717050": "223",
|
||||||
|
# "737770776": "224",
|
||||||
|
# "872394725": "225",
|
||||||
|
# "2311581270": "226",
|
||||||
|
# "2313209417": "227",
|
||||||
|
# "2347013470": "228",
|
||||||
|
# "2350418059": "229",
|
||||||
|
# "3031009366": "234",
|
||||||
|
# "3089095447": "235",
|
||||||
|
# "3100891962": "236",
|
||||||
|
# "3188352290": "238",
|
||||||
|
# "3288105727": "239",
|
||||||
|
# "3462551351": "240"
|
||||||
|
# }
|
||||||
|
|
||||||
|
node_size = [value * 5 for value in nx.get_node_attributes(G_firm, 'Revenue_Log').values()]
|
||||||
|
edge_label = {(n1, n2): label for (n1, n2, _), label in nx.get_edge_attributes(G_firm, "Product").items()}
|
||||||
|
|
||||||
|
plt.figure(figsize=(15, 15), dpi=500)
|
||||||
|
plt.axis('off') # 完全关闭坐标轴系统
|
||||||
|
|
||||||
|
# 分层绘制网络组件
|
||||||
|
nodes = nx.draw_networkx_nodes(
|
||||||
|
G_firm, pos,
|
||||||
|
node_size=node_size, # 保持原始尺寸设置
|
||||||
|
)
|
||||||
|
|
||||||
|
edges = nx.draw_networkx_edges(
|
||||||
|
G_firm, pos,
|
||||||
|
width=0.3, # 保持原始线宽设置
|
||||||
|
)
|
||||||
|
|
||||||
|
# 优化节点标签
|
||||||
|
labels = nx.draw_networkx_labels(
|
||||||
|
G_firm, pos,
|
||||||
|
labels=node_label,
|
||||||
|
font_size=6, # 保持原始字号
|
||||||
|
)
|
||||||
|
|
||||||
|
# 增强边标签可读性
|
||||||
|
edge_labels = nx.draw_networkx_edge_labels(
|
||||||
|
G_firm, pos,
|
||||||
|
edge_labels=edge_label,
|
||||||
|
font_size=2,
|
||||||
|
label_pos=0.5, # 标签沿边偏移量
|
||||||
|
rotate=False, # 禁止自动旋转
|
||||||
|
)
|
||||||
|
|
||||||
|
# 专业级输出配置
|
||||||
|
plt.savefig(
|
||||||
|
f"output_result/risk/g_firm_sample_id_{sample_id}_de.png",
|
||||||
|
bbox_inches='tight',
|
||||||
|
pad_inches=0.05, # 更紧凑的边距
|
||||||
|
facecolor='white', # 强制白色背景
|
||||||
|
metadata={
|
||||||
|
'Title': f"Supply Chain Risk Map - Sample {sample_id}",
|
||||||
|
'Author': 'USTB Risk Analytics',
|
||||||
|
'Copyright': 'Confidential'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
# Count firm product
|
||||||
|
count_firm_prod = result.value_counts(subset=['id_firm', 'id_product'])
|
||||||
|
count_firm_prod.name = 'count'
|
||||||
|
count_firm_prod = count_firm_prod.to_frame().reset_index()
|
||||||
|
count_firm_prod.to_csv('output_result/risk/count_firm_prod.csv', index=False, encoding='utf-8-sig')
|
||||||
|
print(count_firm_prod)
|
||||||
|
|
||||||
|
# Count firm
|
||||||
|
count_firm = count_firm_prod.groupby('id_firm')['count'].sum()
|
||||||
|
count_firm = count_firm.to_frame().reset_index()
|
||||||
|
count_firm.sort_values('count', inplace=True, ascending=False)
|
||||||
|
count_firm.to_csv('output_result/risk/count_firm.csv', index=False, encoding='utf-8-sig')
|
||||||
|
print(count_firm)
|
||||||
|
|
||||||
|
# Count product
|
||||||
|
count_prod = count_firm_prod.groupby('id_product')['count'].sum()
|
||||||
|
count_prod = count_prod.to_frame().reset_index()
|
||||||
|
count_prod.sort_values('count', inplace=True, ascending=False)
|
||||||
|
count_prod.to_csv('output_result/risk/count_prod.csv', index=False, encoding='utf-8-sig')
|
||||||
|
print(count_prod)
|
||||||
|
|
||||||
|
# DCP disruption causing probability
|
||||||
|
result_disrupt_ts_above_0 = result[result['ts'] > 0]
|
||||||
|
print(result_disrupt_ts_above_0)
|
||||||
|
result_dcp = pd.DataFrame(columns=[
|
||||||
|
's_id', 'up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product'
|
||||||
|
])
|
||||||
|
|
||||||
|
result_dcp_list = [] # 用列表收集数据,避免DataFrame逐行增长的问题
|
||||||
|
for sid, group in result.groupby('s_id'):
|
||||||
|
ts_start = max(group['ts'])
|
||||||
|
while ts_start >= 1:
|
||||||
|
ts_end = ts_start - 1
|
||||||
|
while ts_end >= 0:
|
||||||
|
up = group.loc[group['ts'] == ts_end, ['id_firm', 'id_product']]
|
||||||
|
down = group.loc[group['ts'] == ts_start, ['id_firm', 'id_product']]
|
||||||
|
for _, up_row in up.iterrows():
|
||||||
|
for _, down_row in down.iterrows():
|
||||||
|
result_dcp_list.append([sid] + up_row.tolist() + down_row.tolist())
|
||||||
|
ts_end -= 1
|
||||||
|
ts_start -= 1
|
||||||
|
|
||||||
|
# 转换为DataFrame
|
||||||
|
result_dcp = pd.DataFrame(result_dcp_list, columns=[
|
||||||
|
's_id', 'up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product'
|
||||||
|
])
|
||||||
|
|
||||||
|
# 统计
|
||||||
|
count_dcp = result_dcp.value_counts(
|
||||||
|
subset=['up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product']
|
||||||
|
).reset_index(name='count')
|
||||||
|
|
||||||
|
# 保存文件
|
||||||
|
count_dcp.to_csv('output_result/risk/count_dcp.csv', index=False, encoding='utf-8-sig')
|
||||||
|
|
||||||
|
# 输出结果
|
||||||
|
print(count_dcp)
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
# 读取数据
|
||||||
|
df = pd.read_csv('input_data/input_firm_data/firm_amended.csv') # 替换为你的 CSV 文件路径
|
||||||
|
|
||||||
|
# 要分析的列
|
||||||
|
columns = [
|
||||||
|
"固定资产原值(万元人民币)",
|
||||||
|
"固定资产净值(万元人民币)",
|
||||||
|
"资产总和(万元人民币)",
|
||||||
|
"存货(万元人民币)"
|
||||||
|
]
|
||||||
|
|
||||||
|
# 字段类型定义(可人工定义,也可自动判断)
|
||||||
|
column_types = {
|
||||||
|
"固定资产原值(万元人民币)": "连续型",
|
||||||
|
"固定资产净值(万元人民币)": "连续型",
|
||||||
|
"资产总和(万元人民币)": "连续型",
|
||||||
|
"存货(万元人民币)": "连续型"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 统计分析
|
||||||
|
summary = []
|
||||||
|
|
||||||
|
for col in columns:
|
||||||
|
data = df[col].dropna()
|
||||||
|
summary.append({
|
||||||
|
"字段名": col,
|
||||||
|
"类型": column_types[col],
|
||||||
|
"计数(非空)": data.count(),
|
||||||
|
"均值": data.mean(),
|
||||||
|
"标准差": data.std(),
|
||||||
|
"最小值": data.min(),
|
||||||
|
"中位数": data.median(),
|
||||||
|
"最大值": data.max()
|
||||||
|
})
|
||||||
|
|
||||||
|
# 转为 DataFrame 展示
|
||||||
|
summary_df = pd.DataFrame(summary)
|
||||||
|
|
||||||
|
# 设置列顺序
|
||||||
|
summary_df = summary_df[["字段名", "类型", "计数(非空)", "均值", "标准差", "最小值", "中位数", "最大值"]]
|
||||||
|
|
||||||
|
# 打印结果
|
||||||
|
print(summary_df)
|
||||||
|
# 保存为 Excel 文件
|
||||||
|
output_path = "企业规模数据描述性统计表.xlsx"
|
||||||
|
summary_df.to_excel(output_path, index=False)
|
||||||
|
|
||||||
|
print(f"统计结果已保存为 Excel 文件:{output_path}")
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
from matplotlib import rcParams, pyplot as plt
|
||||||
|
from sqlalchemy import func
|
||||||
|
from orm import db_session, Sample
|
||||||
|
|
||||||
|
# 创建全局绘图对象和轴
|
||||||
|
fig, ax = plt.subplots(figsize=(8, 5))
|
||||||
|
plt.ion() # 启用交互模式
|
||||||
|
|
||||||
|
def visualize_progress():
|
||||||
|
"""
|
||||||
|
可视化 `is_done_flag` 的分布,动态更新进度条。
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 设置全局字体
|
||||||
|
rcParams['font.family'] = 'Microsoft YaHei' # 黑体,适用于中文
|
||||||
|
rcParams['font.size'] = 12
|
||||||
|
|
||||||
|
# 查询数据库中各 is_done_flag 的数量
|
||||||
|
result = db_session.query(
|
||||||
|
Sample.is_done_flag, func.count(Sample.id)
|
||||||
|
).group_by(Sample.is_done_flag).all()
|
||||||
|
|
||||||
|
# 转换为字典
|
||||||
|
data = {flag: count for flag, count in result}
|
||||||
|
|
||||||
|
# 填充缺失的标志为 0
|
||||||
|
for flag in [-1, 0, 1]:
|
||||||
|
data.setdefault(flag, 0)
|
||||||
|
|
||||||
|
# 准备数据
|
||||||
|
labels = ['未完成 (-1)', '计算中(0)', '完成 (1)']
|
||||||
|
values = [data[-1], data[0], data[1]]
|
||||||
|
|
||||||
|
# 清空之前的绘图内容
|
||||||
|
ax.clear()
|
||||||
|
|
||||||
|
# 创建柱状图
|
||||||
|
ax.bar(labels, values, color=['red', 'orange', 'green'])
|
||||||
|
ax.set_title('任务进度分布', fontsize=16)
|
||||||
|
ax.set_xlabel('任务状态', fontsize=14)
|
||||||
|
ax.set_ylabel('数量', fontsize=14)
|
||||||
|
ax.tick_params(axis='both', labelsize=12)
|
||||||
|
|
||||||
|
# 显示具体数量
|
||||||
|
for i, v in enumerate(values):
|
||||||
|
ax.text(i, v + 0.5, str(v), ha='center', fontsize=12)
|
||||||
|
|
||||||
|
# 刷新绘图
|
||||||
|
plt.pause(0) # 暂停一段时间以更新图表
|
||||||
|
|
||||||
|
# 关闭窗口时,停止交互模式
|
||||||
|
# plt.ioff()
|
||||||
|
visualize_progress()
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
import networkx as nx
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
# 1. 读取并处理数据
|
||||||
|
bom_nodes = pd.read_csv('input_data/input_product_data/BomNodes.csv')
|
||||||
|
bom_nodes['Code'] = bom_nodes['Code'].astype(str)
|
||||||
|
bom_nodes.set_index('Index', inplace=True)
|
||||||
|
|
||||||
|
bom_cate_net = pd.read_csv('input_data/input_product_data/合成结点.csv')
|
||||||
|
|
||||||
|
# 2. 构建图结构
|
||||||
|
g_bom = nx.from_pandas_edgelist(bom_cate_net, source='UPID', target='ID', create_using=nx.MultiDiGraph())
|
||||||
|
|
||||||
|
# 填充每一个结点的具体内容
|
||||||
|
bom_labels_dict = {}
|
||||||
|
for index in g_bom.nodes:
|
||||||
|
try:
|
||||||
|
bom_labels_dict[index] = bom_nodes.loc[index].to_dict()
|
||||||
|
except KeyError:
|
||||||
|
print(f"节点 {index} 不存在于 bom_nodes 中")
|
||||||
|
|
||||||
|
# 分配属性给每一个结点
|
||||||
|
nx.set_node_attributes(g_bom, bom_labels_dict)
|
||||||
|
|
||||||
|
# 3. 计算每个节点的度数
|
||||||
|
degrees = dict(g_bom.degree()) # 总度数(适用于有向图)
|
||||||
|
|
||||||
|
# 4. 统计每个度数的节点数量
|
||||||
|
degree_counts = {}
|
||||||
|
for degree in degrees.values():
|
||||||
|
if degree in degree_counts:
|
||||||
|
degree_counts[degree] += 1
|
||||||
|
else:
|
||||||
|
degree_counts[degree] = 1
|
||||||
|
|
||||||
|
# 转换为排序后的列表(横坐标:度数,纵坐标:节点数)
|
||||||
|
sorted_degrees = sorted(degree_counts.keys())
|
||||||
|
sorted_counts = [degree_counts[d] for d in sorted_degrees]
|
||||||
|
|
||||||
|
# 5. 绘制度分布图
|
||||||
|
plt.figure(figsize=(12, 8)) # 增大画布尺寸
|
||||||
|
bars = plt.bar(sorted_degrees, sorted_counts, width=0.8)
|
||||||
|
plt.title('Degree Distribution In Industrial Chain', fontsize=16)
|
||||||
|
plt.xlabel('Degree', fontsize=14)
|
||||||
|
plt.ylabel('Number of Nodes', fontsize=14)
|
||||||
|
plt.grid(True, linestyle='--', alpha=0.5)
|
||||||
|
plt.xticks(rotation=45) # 如果度数较多,可以旋转x轴标签
|
||||||
|
plt.tight_layout() # 防止标签重叠
|
||||||
|
|
||||||
|
# 6. 在每个柱子上方标注数值
|
||||||
|
for bar in bars:
|
||||||
|
height = bar.get_height()
|
||||||
|
plt.text(
|
||||||
|
bar.get_x() + bar.get_width() / 2, # x坐标:柱子中心
|
||||||
|
height + max(sorted_counts) * 0.02, # y坐标:柱子顶部上方(留出空间)
|
||||||
|
f'{int(height)}', # 显示数值(转换为整数)
|
||||||
|
ha='center', # 水平居中
|
||||||
|
va='bottom', # 垂直底部对齐
|
||||||
|
fontsize=10, # 字体大小
|
||||||
|
color='black' # 字体颜色
|
||||||
|
)
|
||||||
|
|
||||||
|
# 7. 保存超高清图片(300 DPI)
|
||||||
|
output_path = "degree_distribution_with_labels.png" # 输出文件名
|
||||||
|
plt.savefig(output_path, dpi=500, bbox_inches='tight') # dpi=300 确保高分辨率
|
||||||
|
print(f"图片已保存至: {output_path}")
|
||||||
|
|
||||||
|
# 1. 加载企业网络数据
|
||||||
|
with open("firm_network.pkl", 'rb') as f:
|
||||||
|
G_firm = pickle.load(f)
|
||||||
|
print(f"Successfully loaded cached data from firm_network.pkl")
|
||||||
|
|
||||||
|
# 2. 计算企业网络的度分布
|
||||||
|
degrees_firm = dict(G_firm.degree()) # 总度数
|
||||||
|
degree_counts_firm = {}
|
||||||
|
for degree in degrees_firm.values():
|
||||||
|
if degree in degree_counts_firm:
|
||||||
|
degree_counts_firm[degree] += 1
|
||||||
|
else:
|
||||||
|
degree_counts_firm[degree] = 1
|
||||||
|
|
||||||
|
# 转换为排序后的列表
|
||||||
|
sorted_degrees_firm = sorted(degree_counts_firm.keys())
|
||||||
|
sorted_counts_firm = [degree_counts_firm[d] for d in sorted_degrees_firm]
|
||||||
|
|
||||||
|
# 3. 绘制企业网络的度分布图
|
||||||
|
plt.figure(figsize=(12, 6)) # 单独画布尺寸
|
||||||
|
plt.bar(sorted_degrees_firm, sorted_counts_firm, width=0.8)
|
||||||
|
plt.title('Degree Distribution of Firm Network', fontsize=16)
|
||||||
|
plt.xlabel('Degree (Number of Connections)', fontsize=14)
|
||||||
|
plt.ylabel('Number of Firms', fontsize=14)
|
||||||
|
plt.grid(True, linestyle='--', alpha=0.5)
|
||||||
|
plt.xticks(rotation=45)
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
# 在柱子上方标注数值
|
||||||
|
for bar in plt.gca().containers[0]: # 获取当前图中的柱子对象
|
||||||
|
height = bar.get_height()
|
||||||
|
plt.text(
|
||||||
|
bar.get_x() + bar.get_width() / 2,
|
||||||
|
height + max(sorted_counts_firm) * 0.02,
|
||||||
|
f'{int(height)}',
|
||||||
|
ha='center',
|
||||||
|
va='bottom',
|
||||||
|
fontsize=10,
|
||||||
|
color='black'
|
||||||
|
)
|
||||||
|
|
||||||
|
# 保存图片
|
||||||
|
plt.savefig("degree_distribution_firm.png", dpi=500, bbox_inches='tight')
|
||||||
|
print("企业度分布图已保存至: degree_distribution_firm.png")
|
||||||
|
|
||||||