update
This commit is contained in:
parent
a0045c341b
commit
f4c2cd9532
|
@ -84,6 +84,7 @@ class FMSEnv(ap.Model):
|
||||||
if self.t >= self.int_stop_time:
|
if self.t >= self.int_stop_time:
|
||||||
self.running = False
|
self.running = False
|
||||||
self.stop()
|
self.stop()
|
||||||
|
|
||||||
# else:
|
# else:
|
||||||
#
|
#
|
||||||
# # print(f"running the {self.t} step")
|
# # print(f"running the {self.t} step")
|
||||||
|
@ -121,22 +122,9 @@ def GA_run(inventory_bound=None):
|
||||||
S = tuple(tuple([i, j]) for i, j in zip(material, inventory_bound[
|
S = tuple(tuple([i, j]) for i, j in zip(material, inventory_bound[
|
||||||
len(pd.read_excel("initial_material.xlsx").to_numpy()): len(
|
len(pd.read_excel("initial_material.xlsx").to_numpy()): len(
|
||||||
pd.read_excel("initial_material.xlsx").to_numpy()) * 2]))
|
pd.read_excel("initial_material.xlsx").to_numpy()) * 2]))
|
||||||
# print(s)
|
|
||||||
# print(S)
|
|
||||||
dct_para = {
|
dct_para = {
|
||||||
'time': 300, # 进行总时间数
|
'time': 300, # 进行总时间数
|
||||||
# 'xv_int_max_order': random.randint(30, 50),
|
|
||||||
# 'xv_dlv_product_para': tuple([(30, 100), (30, 50)]),
|
|
||||||
# 'xv_dlv_product_para': tuple([30,40,30,20]), # 读取生产率 np.read.
|
|
||||||
# 'xv_int_dlv_period_lam': 8.5,
|
|
||||||
# 'xv_int_create_order_lam': 2,
|
|
||||||
# 'xv_ary_price_product': tuple([0.3,0.2,0.5,1]),
|
|
||||||
# 'xv_ary_cost_material_per': tuple([0.1,0.1,0.2,0.4]),
|
|
||||||
# 'xv_ary_volume_material': tuple([1.0, 1.5]),
|
|
||||||
# 'xv_ary_volume_product': tuple([3.0, 5.0]),
|
|
||||||
# 'xv_array_lead_time': 2, # 读取原材料表格 np.read, 暂时不读 变量代表的含义
|
|
||||||
# 'xv_int_lead_time_c': 3,
|
|
||||||
# 'xv_int_lead_time_d': 1,
|
|
||||||
'xv_ary_product_id': tuple(pd.read_excel("initial_product.xlsx").iloc[:, 0]), # 产成品id顺序
|
'xv_ary_product_id': tuple(pd.read_excel("initial_product.xlsx").iloc[:, 0]), # 产成品id顺序
|
||||||
'xv_ary_material_id': tuple(pd.read_excel("initial_material.xlsx").iloc[:, 0]), # 原材料id顺序
|
'xv_ary_material_id': tuple(pd.read_excel("initial_material.xlsx").iloc[:, 0]), # 原材料id顺序
|
||||||
'xv_product_num': len(pd.read_excel("initial_product.xlsx").to_numpy()), # 产成品个数
|
'xv_product_num': len(pd.read_excel("initial_product.xlsx").to_numpy()), # 产成品个数
|
||||||
|
@ -150,43 +138,8 @@ def GA_run(inventory_bound=None):
|
||||||
'xv_ary_s': s, # s
|
'xv_ary_s': s, # s
|
||||||
'xv_ary_S': S, # S
|
'xv_ary_S': S, # S
|
||||||
# 应读取遗传算法中随机生成的s,暂写为'1' 创建两个excel分别存储产品和原材料的库存 每个excel中存系统代码和库存
|
# 应读取遗传算法中随机生成的s,暂写为'1' 创建两个excel分别存储产品和原材料的库存 每个excel中存系统代码和库存
|
||||||
# 'xv_flt_initial_cash': 50000.0,
|
|
||||||
# 'dct_status_info': json.dumps({ #需要引入生产状态表
|
|
||||||
# "0": {"xv_flt_produce_rate": tuple([0.0, 0.0]),
|
|
||||||
# "xv_ary_mat_material": tuple([0.0, 0.0]),
|
|
||||||
# "xv_flt_broken_rate": 0,
|
|
||||||
# "xv_flt_run_cost": 0.0,
|
|
||||||
# "name": "wait"
|
|
||||||
# },
|
|
||||||
# "1": {"xv_flt_produce_rate": tuple([90.0, 0.0]),
|
|
||||||
# "xv_ary_mat_material": tuple([4.0, 1.0]),
|
|
||||||
# "xv_flt_broken_rate": 0.03,
|
|
||||||
# "xv_flt_run_cost": 40.0,
|
|
||||||
# "name": "produceA"
|
|
||||||
# },
|
|
||||||
# "2": {"xv_flt_produce_rate": tuple([0.0, 60.0]),
|
|
||||||
# "xv_ary_mat_material": tuple([1.5, 5.0]),
|
|
||||||
# "xv_flt_broken_rate": 0.05,
|
|
||||||
# "xv_flt_run_cost": 50.0,
|
|
||||||
# "name": "produceB"
|
|
||||||
# },
|
|
||||||
# "3": {"xv_flt_produce_rate": tuple([55.0, 30.0]),
|
|
||||||
# "xv_ary_mat_material": tuple([2.0, 1.5]),
|
|
||||||
# "xv_flt_broken_rate": 0.07,
|
|
||||||
# "xv_flt_run_cost": 60.0,
|
|
||||||
# "name": "produceAB"
|
|
||||||
# },
|
|
||||||
# "-1": {"xv_flt_produce_rate": 0.0,
|
|
||||||
# "xv_ary_mat_material": tuple([0.0, 0.0]),
|
|
||||||
# "xv_flt_broken_rate": 0.1,
|
|
||||||
# "xv_flt_run_cost": 100.0,
|
|
||||||
# "name": "failed"
|
|
||||||
# }
|
|
||||||
# })
|
|
||||||
|
|
||||||
}
|
}
|
||||||
sample = ap.Sample(dct_para)
|
sample = ap.Sample(dct_para)
|
||||||
|
|
||||||
exp = ap.Experiment(FMSEnv, sample, iterations=1, record=True)
|
exp = ap.Experiment(FMSEnv, sample, iterations=1, record=True)
|
||||||
results = exp.run()
|
results = exp.run()
|
||||||
return results['variables']['FMSEnv']['op_os_all_delay_time'][dct_para['time']] / 2
|
return results['variables']['FMSEnv']['op_os_all_delay_time'][dct_para['time']] / 2
|
||||||
|
|
15
ga_new.py
15
ga_new.py
|
@ -42,7 +42,7 @@ class GeneticAlgorithm:
|
||||||
:ivar function: Object that can be used to evaluate the objective function
|
:ivar function: Object that can be used to evaluate the objective function
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, function, dim, lb, ub, int_var=None, pop_size=20, num_gen=300, start="Random"):
|
def __init__(self, function, dim, lb, ub, int_var=None, pop_size=6, num_gen=300, start="Random"):
|
||||||
|
|
||||||
self.nvariables = dim # column
|
self.nvariables = dim # column
|
||||||
self.nindividuals = pop_size + (pop_size % 2) # Make sure this is even row
|
self.nindividuals = pop_size + (pop_size % 2) # Make sure this is even row
|
||||||
|
@ -102,6 +102,11 @@ class GeneticAlgorithm:
|
||||||
ind = np.where(population[:, i] > self.upper_boundary[i])
|
ind = np.where(population[:, i] > self.upper_boundary[i])
|
||||||
population[ind, i] -= 1
|
population[ind, i] -= 1
|
||||||
|
|
||||||
|
for pop in population:
|
||||||
|
for i in range(len(pop) // 2):
|
||||||
|
if pop[i] >= pop[i + len(pop) // 2]:
|
||||||
|
pop[i], pop[i + len(pop) // 2] = pop[i + len(pop) // 2], pop[i]
|
||||||
|
|
||||||
# Evaluate all individuals
|
# Evaluate all individuals
|
||||||
# function_values = self.function(population) we cannot compute in this way to ensure x is one-dim in policy
|
# function_values = self.function(population) we cannot compute in this way to ensure x is one-dim in policy
|
||||||
n_row, n_dim = population.shape
|
n_row, n_dim = population.shape
|
||||||
|
@ -125,7 +130,8 @@ class GeneticAlgorithm:
|
||||||
for _ in range(self.ngenerations):
|
for _ in range(self.ngenerations):
|
||||||
print('------------------------------')
|
print('------------------------------')
|
||||||
print("当前为第{}代".format(_))
|
print("当前为第{}代".format(_))
|
||||||
print("最优个体为:{}".format(best_individual))
|
print("最优s为:{}".format(best_individual[0:115]))
|
||||||
|
print("最优S为:{}".format(best_individual[115:230]))
|
||||||
print("最优值为:{}".format(best_value))
|
print("最优值为:{}".format(best_value))
|
||||||
print("------------------------------")
|
print("------------------------------")
|
||||||
# Do tournament selection to select the parents
|
# Do tournament selection to select the parents
|
||||||
|
@ -174,6 +180,11 @@ class GeneticAlgorithm:
|
||||||
# Keep the best individual
|
# Keep the best individual
|
||||||
population[0, :] = best_individual
|
population[0, :] = best_individual
|
||||||
|
|
||||||
|
for pop in population:
|
||||||
|
for i in range(len(pop) // 2):
|
||||||
|
if pop[i] >= pop[i + len(pop) // 2]:
|
||||||
|
pop[i], pop[i + len(pop) // 2] = pop[i + len(pop) // 2], pop[i]
|
||||||
|
|
||||||
# Evaluate all individuals
|
# Evaluate all individuals
|
||||||
# function_values = self.function(population) we cannot compute in this way to ensure x is one-dim in policy
|
# function_values = self.function(population) we cannot compute in this way to ensure x is one-dim in policy
|
||||||
n_row, n_dim = population.shape
|
n_row, n_dim = population.shape
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue