调整比例
This commit is contained in:
parent
2d359c80f1
commit
11b7b738f9
|
@ -136,6 +136,13 @@
|
|||
</Attribute>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="\input_data\产品消耗制造比例.csv">
|
||||
<value>
|
||||
<Attribute>
|
||||
<option name="separator" value="," />
|
||||
</Attribute>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="\output_result\risk\count.csv">
|
||||
<value>
|
||||
<Attribute>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -148,7 +148,7 @@ class Computation:
|
|||
# 归一化生成 lst_prob
|
||||
lst_prob = [size / sum_pred_firm_size for size in lst_pred_firm_size]
|
||||
# 使用 np.isclose() 确保概率总和接近 1
|
||||
if not np.isclose(sum(lst_prob), 1.0):
|
||||
if not pd.np.isclose(sum(lst_prob), 1.0):
|
||||
# print(f"警告: 概率总和为 {sum(lst_prob)},现在进行修正")
|
||||
lst_prob = [prob / sum(lst_prob) for prob in lst_prob]
|
||||
# 确保没有负值或 0
|
||||
|
@ -234,7 +234,7 @@ class Computation:
|
|||
# 归一化生成 lst_prob
|
||||
lst_prob = [size / sum_pred_firm_size for size in lst_succ_firm_size]
|
||||
# 使用 np.isclose() 确保概率总和接近 1
|
||||
if not np.isclose(sum(lst_prob), 1.0):
|
||||
if not pd.np.isclose(sum(lst_prob), 1.0):
|
||||
# print(f"警告: 概率总和为 {sum(lst_prob)},现在进行修正")
|
||||
lst_prob = [prob / sum(lst_prob) for prob in lst_prob]
|
||||
|
||||
|
|
2
firm.py
2
firm.py
|
@ -45,7 +45,7 @@ class FirmAgent(Agent):
|
|||
self.c_consumption = demand_quantity
|
||||
# 设备c购买价格(初始值)
|
||||
# self.c_price = c_price
|
||||
# 资源r补货库存阈值
|
||||
# 资源r补货库存阈值 很重要设置
|
||||
self.s_r = 40
|
||||
self.S_r = 120
|
||||
# 设备补货阙值 可选
|
||||
|
|
|
@ -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
|
|
2
main.py
2
main.py
|
@ -44,7 +44,7 @@ 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('--job', type=int, default='3')
|
||||
parser.add_argument('--reset_sample', type=int, default='0')
|
||||
parser.add_argument('--reset_db', type=bool, default=False)
|
||||
|
||||
|
|
65
my_model.py
65
my_model.py
|
@ -316,21 +316,23 @@ class MyModel(Model):
|
|||
|
||||
for ag_node, attr in self.product_network.nodes(data=True):
|
||||
# 产业种类
|
||||
production_ratio = self.data_production_ratio[self.data_production_ratio['IndustryID'] == ag_node]['Production_ratio']
|
||||
# 转换为字典
|
||||
if not production_ratio.empty: # 检查 Series 是否为空
|
||||
production_ratio_dict = production_ratio.iloc[0] # 提取第一个值
|
||||
else:
|
||||
# 如果 Series 是空的,返回一个空字典
|
||||
production_ratio_dict = {}
|
||||
|
||||
# type2 = self.type2[self.type2["Index"] == ag_node]["产业种类"]
|
||||
# depreciation ratio 折旧比值
|
||||
# product_id = product_id.iloc[0]
|
||||
product = ProductAgent(ag_node, self, name=attr['Name'], type2=0)
|
||||
product = ProductAgent(ag_node, self, name=attr['Name'], type2=0, production_ratio=production_ratio_dict)
|
||||
self.add_agent(product)
|
||||
# self.grid.place_agent(product, ag_node)
|
||||
##print(f"Product agent created: {product.name}, ID: {product.unique_id}")
|
||||
|
||||
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['Product_Code']]
|
||||
|
||||
demand_quantity = self.data_consumed[self.data_consumed['Firm_Code'] == ag_node]
|
||||
demand_quantity = self.data_materials[self.data_materials['Firm_Code'] == ag_node]
|
||||
|
||||
production_output = self.data_produced[self.data_consumed['Firm_Code'] == ag_node]
|
||||
production_output = self.data_produced[self.data_materials['Firm_Code'] == ag_node]
|
||||
|
||||
# c购买价格? 数据预处理
|
||||
# c_price = self.Firm.loc[self.Firm['Code'] == ag_node, 'c_price'].values[0]
|
||||
|
@ -418,24 +420,26 @@ class MyModel(Model):
|
|||
|
||||
def j_comp_consumed_produced(self):
|
||||
# 着重修改这 然后考虑逻辑 如何传递值
|
||||
data_consumed = pd.read_csv('input_data/input_firm_data/firms_materials.csv')
|
||||
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_not_consumed = data_consumed.groupby('Firm_Code')[['材料id', '材料数量']] \
|
||||
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='Material_not_Consumed')
|
||||
|
||||
# 这里简单设置为折半 考虑 企业的设备量
|
||||
# 可以引入 换算率 也就是 材料——计算产品比例 通过上游产业 现在假设为 2:1 的比例
|
||||
data_consumed0 = data_consumed.groupby('Firm_Code')[['材料id', '材料数量']] \
|
||||
.apply(lambda x: dict(zip(x['材料id'], x['材料数量'] / 2))) \
|
||||
.reset_index(name='Material_not_Consumed')
|
||||
data_produced = data_consumed.groupby('Firm_Code')[['材料id', '材料数量']] \
|
||||
.apply(lambda x: dict(zip(x['材料id'], x['材料数量'] / 4))) \
|
||||
data_not_produced = data_produced.groupby('Firm_Code')[['产品id', '产品数量']] \
|
||||
.apply(lambda x: dict(zip(x['产品id'], x['产品数量']))) \
|
||||
.reset_index(name='Material_not_Consumed')
|
||||
|
||||
self.data_consumed = data_consumed0
|
||||
self.data_produced = data_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
|
||||
|
||||
def step(self):
|
||||
# 1. Remove edge to customer and disrupt customer up product
|
||||
|
@ -538,16 +542,25 @@ class MyModel(Model):
|
|||
C_list[2] = C0_list[2]
|
||||
# 消耗资源过程
|
||||
# 这里需要修改
|
||||
k = 0.6
|
||||
# 特定的产业
|
||||
firm_consumed_nums_dct = {}
|
||||
for indus_i in firm.indus_i:
|
||||
print("这是 公司产业 编码:" + indus_i)
|
||||
print(type(indus_i))
|
||||
for p_id, p_nums in firm.P.items():
|
||||
print("这是 产品 编码:" + p_id)
|
||||
print(type(p_id))
|
||||
if p_id == indus_i.unique_id:
|
||||
consumed_nums = p_nums * k
|
||||
firm_consumed_nums_dct[indus_i] = consumed_nums
|
||||
for r_id, r_nums in firm.R.items():
|
||||
for consumed_id, consumed_nums in firm.c_consumption:
|
||||
if consumed_id == r_id:
|
||||
r_nums = r_nums - consumed_nums
|
||||
|
||||
for i, value in firm_consumed_nums_dct.items():
|
||||
if r_id in i:
|
||||
r_nums = r_nums - i[r_id] * value
|
||||
# 生产产品过程
|
||||
for p_id, p_nums in firm.P.items():
|
||||
for product_id, product_nums in firm.c_consumption:
|
||||
if product_id == p_id:
|
||||
p_nums = p_nums + product_nums
|
||||
p_nums = p_nums * 1.6
|
||||
|
||||
firm.refresh_R()
|
||||
# 刷新 C状态
|
||||
|
|
|
@ -2,13 +2,14 @@ from mesa import Agent
|
|||
|
||||
|
||||
class ProductAgent(Agent):
|
||||
def __init__(self, unique_id, model, name, type2):
|
||||
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:
|
||||
|
|
Loading…
Reference in New Issue