修改部分内容,包括变量名子,化为 小写,能运行的mesa的完整程序,不包括模型更改和结果输出。
This commit is contained in:
		
							parent
							
								
									ede00b0403
								
							
						
					
					
						commit
						356582e2f3
					
				
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -44,9 +44,9 @@ class ControllerDB: | ||||||
|         self.fill_sample_table() |         self.fill_sample_table() | ||||||
| 
 | 
 | ||||||
|     def fill_experiment_table(self): |     def fill_experiment_table(self): | ||||||
|         Firm = pd.read_csv("input_data/Firm_amended.csv") |         firm = pd.read_csv("input_data/Firm_amended.csv") | ||||||
|         Firm['Code'] = Firm['Code'].astype('string') |         firm['Code'] = firm['Code'].astype('string') | ||||||
|         Firm.fillna(0, inplace=True) |         firm.fillna(0, inplace=True) | ||||||
| 
 | 
 | ||||||
|         # fill dct_lst_init_disrupt_firm_prod |         # fill dct_lst_init_disrupt_firm_prod | ||||||
|         # 存储 公司-在供应链结点的位置.. 0 :‘1.1’ |         # 存储 公司-在供应链结点的位置.. 0 :‘1.1’ | ||||||
|  | @ -63,7 +63,8 @@ class ControllerDB: | ||||||
|         else: |         else: | ||||||
|             # 行索引 (index):这一行在数据帧中的索引值。 |             # 行索引 (index):这一行在数据帧中的索引值。 | ||||||
|             # 行数据 (row):这一行的数据,是一个 pandas.Series 对象,包含该行的所有列和值。 |             # 行数据 (row):这一行的数据,是一个 pandas.Series 对象,包含该行的所有列和值。 | ||||||
|             for _, row in Firm.iterrows(): | 
 | ||||||
|  |             for _, row in firm.iterrows(): | ||||||
|                 code = row['Code'] |                 code = row['Code'] | ||||||
|                 row = row['1':] |                 row = row['1':] | ||||||
|                 for product_code in row.index[row == 1].to_list(): |                 for product_code in row.index[row == 1].to_list(): | ||||||
|  | @ -72,18 +73,18 @@ class ControllerDB: | ||||||
| 
 | 
 | ||||||
|         # fill g_bom |         # fill g_bom | ||||||
|         # 结点属性值 相当于 图上点的 原始 产品名称 |         # 结点属性值 相当于 图上点的 原始 产品名称 | ||||||
|         BomNodes = pd.read_csv('input_data/BomNodes.csv', index_col=0) |         bom_nodes = pd.read_csv('input_data/BomNodes.csv', index_col=0) | ||||||
|         BomNodes.set_index('Code', inplace=True) |         bom_nodes.set_index('Code', inplace=True) | ||||||
| 
 | 
 | ||||||
|         BomCateNet = pd.read_csv('input_data/BomCateNet.csv', index_col=0) |         bom_cate_net = pd.read_csv('input_data/BomCateNet.csv', index_col=0) | ||||||
|         BomCateNet.fillna(0, inplace=True) |         bom_cate_net.fillna(0, inplace=True) | ||||||
|         # 创建 可以多边的有向图 同时 转置操作 使得 上游指向下游结点 也就是 1.1.1 - 1.1 类似这种 |         # 创建 可以多边的有向图 同时 转置操作 使得 上游指向下游结点 也就是 1.1.1 - 1.1 类似这种 | ||||||
|         g_bom = nx.from_pandas_adjacency(BomCateNet.T, |         g_bom = nx.from_pandas_adjacency(bom_cate_net.T, | ||||||
|                                          create_using=nx.MultiDiGraph()) |                                          create_using=nx.MultiDiGraph()) | ||||||
|         # 填充每一个结点 的具体内容 通过 相同的 code 并且通过BomNodes.loc[code].to_dict()字典化 格式类似 格式 { code(0) :  {level: 0 ,name: 工业互联网   }} |         # 填充每一个结点 的具体内容 通过 相同的 code 并且通过BomNodes.loc[code].to_dict()字典化 格式类似 格式 { code(0) :  {level: 0 ,name: 工业互联网   }} | ||||||
|         bom_labels_dict = {} |         bom_labels_dict = {} | ||||||
|         for code in g_bom.nodes: |         for code in g_bom.nodes: | ||||||
|             bom_labels_dict[code] = BomNodes.loc[code].to_dict() |             bom_labels_dict[code] = bom_nodes.loc[code].to_dict() | ||||||
|         # 分配属性 给每一个结点 获得类似 格式:{1: {'label': 'A', 'value': 10}, |         # 分配属性 给每一个结点 获得类似 格式:{1: {'label': 'A', 'value': 10}, | ||||||
|         nx.set_node_attributes(g_bom, bom_labels_dict) |         nx.set_node_attributes(g_bom, bom_labels_dict) | ||||||
|         # 改为json 格式 |         # 改为json 格式 | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								firm.py
								
								
								
								
							
							
						
						
									
										4
									
								
								firm.py
								
								
								
								
							|  | @ -229,7 +229,3 @@ class FirmAgent(Agent): | ||||||
|                 return False |                 return False | ||||||
|         else: |         else: | ||||||
|             return False |             return False | ||||||
| 
 |  | ||||||
|     def step(self): |  | ||||||
|         # 在每个时间步进行的操作 |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
							
								
								
									
										31
									
								
								my_model.py
								
								
								
								
							
							
						
						
									
										31
									
								
								my_model.py
								
								
								
								
							|  | @ -15,7 +15,7 @@ from product import ProductAgent | ||||||
| class MyModel(Model): | class MyModel(Model): | ||||||
|     def __init__(self, params): |     def __init__(self, params): | ||||||
| 
 | 
 | ||||||
|         # self.num_agents = N |         # 属性 | ||||||
|         self.is_prf_size = params['prf_size'] |         self.is_prf_size = params['prf_size'] | ||||||
|         self.prf_conn = params['prf_conn'] |         self.prf_conn = params['prf_conn'] | ||||||
|         self.cap_limit_prob_type = params['cap_limit_prob_type'] |         self.cap_limit_prob_type = params['cap_limit_prob_type'] | ||||||
|  | @ -35,10 +35,10 @@ class MyModel(Model): | ||||||
|         self.data_collector = DataCollector( |         self.data_collector = DataCollector( | ||||||
|             agent_reporters={"Product": "name"} |             agent_reporters={"Product": "name"} | ||||||
|         ) |         ) | ||||||
|  | 
 | ||||||
|         # initialize graph bom |         # initialize graph bom | ||||||
|         self.G_bom = nx.adjacency_graph(json.loads(params['g_bom'])) |         self.G_bom = nx.adjacency_graph(json.loads(params['g_bom'])) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|         # Create the firm-product network graph |         # Create the firm-product network graph | ||||||
|         self.G_FirmProd = nx.MultiDiGraph() |         self.G_FirmProd = nx.MultiDiGraph() | ||||||
|         # Create the firm network graph |         # Create the firm network graph | ||||||
|  | @ -54,13 +54,13 @@ class MyModel(Model): | ||||||
|         self.int_stop_ts = 0 |         self.int_stop_ts = 0 | ||||||
|         self.int_n_iter = int(params['n_iter']) |         self.int_n_iter = int(params['n_iter']) | ||||||
|         self.dct_lst_init_disrupt_firm_prod = params['dct_lst_init_disrupt_firm_prod'] |         self.dct_lst_init_disrupt_firm_prod = params['dct_lst_init_disrupt_firm_prod'] | ||||||
|  | 
 | ||||||
|         # external variable |         # external variable | ||||||
|         self.int_n_max_trial = int(params['n_max_trial']) |         self.int_n_max_trial = int(params['n_max_trial']) | ||||||
|         self.is_prf_size = bool(params['prf_size']) |         self.is_prf_size = bool(params['prf_size']) | ||||||
| 
 |  | ||||||
|         self.remove_t = int(params['remove_t']) |         self.remove_t = int(params['remove_t']) | ||||||
|         self.int_netw_prf_n = int(params['netw_prf_n']) |         self.int_netw_prf_n = int(params['netw_prf_n']) | ||||||
| 
 |         # 方法执行 | ||||||
|         self.initialize_product_network(params) |         self.initialize_product_network(params) | ||||||
|         self.initialize_firm_network() |         self.initialize_firm_network() | ||||||
|         self.initialize_firm_product_network() |         self.initialize_firm_product_network() | ||||||
|  | @ -76,27 +76,25 @@ class MyModel(Model): | ||||||
|             print(f"Failed to initialize product network: {e}") |             print(f"Failed to initialize product network: {e}") | ||||||
| 
 | 
 | ||||||
|     def initialize_firm_network(self): |     def initialize_firm_network(self): | ||||||
|         """ Initialize the firm network by reading firm data from a CSV file """ |  | ||||||
|         # Read the firm data |         # Read the firm data | ||||||
|         Firm = pd.read_csv("input_data/Firm_amended.csv") |         firm = pd.read_csv("input_data/Firm_amended.csv") | ||||||
|         Firm['Code'] = Firm['Code'].astype('string') |         firm['Code'] = firm['Code'].astype('string') | ||||||
|         Firm.fillna(0, inplace=True) |         firm.fillna(0, inplace=True) | ||||||
|         Firm_attr = Firm.loc[:, ["Code", "Type_Region", "Revenue_Log"]] |         firm_attr = firm.loc[:, ["Code", "Type_Region", "Revenue_Log"]] | ||||||
| 
 | 
 | ||||||
|         firm_product = [] |         firm_product = [] | ||||||
|         for _, row in Firm.loc[:, '1':].iterrows(): |         for _, row in firm.loc[:, '1':].iterrows(): | ||||||
|             firm_product.append(row[row == 1].index.to_list()) |             firm_product.append(row[row == 1].index.to_list()) | ||||||
|         Firm_attr.loc[:, 'Product_Code'] = firm_product |         firm_attr.loc[:, 'Product_Code'] = firm_product | ||||||
|         Firm_attr.set_index('Code', inplace=True) |         firm_attr.set_index('Code', inplace=True) | ||||||
| 
 | 
 | ||||||
| 
 |         self.G_Firm.add_nodes_from(firm["Code"]) | ||||||
|         self.G_Firm.add_nodes_from(Firm["Code"]) |  | ||||||
| 
 | 
 | ||||||
|         # Assign attributes to the firm nodes |         # Assign attributes to the firm nodes | ||||||
|         firm_labels_dict = {code: Firm_attr.loc[code].to_dict() for code in self.G_Firm.nodes} |         firm_labels_dict = {code: firm_attr.loc[code].to_dict() for code in self.G_Firm.nodes} | ||||||
|         nx.set_node_attributes(self.G_Firm, firm_labels_dict) |         nx.set_node_attributes(self.G_Firm, firm_labels_dict) | ||||||
| 
 | 
 | ||||||
|         self.Firm = Firm |         self.Firm = firm | ||||||
| 
 | 
 | ||||||
|     def initialize_firm_product_network(self): |     def initialize_firm_product_network(self): | ||||||
|         """ Initialize the firm-product network """ |         """ Initialize the firm-product network """ | ||||||
|  | @ -244,7 +242,6 @@ class MyModel(Model): | ||||||
|         # 更新 self.dct_lst_init_disrupt_firm_prod 字典,存储公司及其受干扰的产品 |         # 更新 self.dct_lst_init_disrupt_firm_prod 字典,存储公司及其受干扰的产品 | ||||||
|         self.dct_lst_init_disrupt_firm_prod = t_dct |         self.dct_lst_init_disrupt_firm_prod = t_dct | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|         # 设置初始受干扰的公司产品状态 |         # 设置初始受干扰的公司产品状态 | ||||||
|         for firm, a_lst_product in self.dct_lst_init_disrupt_firm_prod.items(): |         for firm, a_lst_product in self.dct_lst_init_disrupt_firm_prod.items(): | ||||||
|             for product in a_lst_product: |             for product in a_lst_product: | ||||||
|  |  | ||||||
|  | @ -23,6 +23,3 @@ class ProductAgent(Agent): | ||||||
|         # 通过 unique_id 查找前驱节点对应的代理对象,直接从 self.product_agents 列表中获取 |         # 通过 unique_id 查找前驱节点对应的代理对象,直接从 self.product_agents 列表中获取 | ||||||
|         return [agent for agent in self.model.product_agents if agent.unique_id in predecessors] |         return [agent for agent in self.model.product_agents if agent.unique_id in predecessors] | ||||||
| 
 | 
 | ||||||
|     def step(self): |  | ||||||
|         # 在每个时间步 进行的操作 |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue