增加了所有解的分布图

This commit is contained in:
Hgq 2025-09-27 15:54:21 +08:00
parent 17da0c8d16
commit 8b740e2f04
1 changed files with 25 additions and 11 deletions

36
main.py
View File

@ -7,7 +7,6 @@ from GA import GA
from Instance import *
from NSGA2 import NSGA2
# 绘制甘特图
def Gantt(Machines):
M = ['red', 'blue', 'yellow', 'orange', 'green', 'palegoldenrod', 'purple', 'pink', 'Thistle', 'Magenta',
@ -29,7 +28,6 @@ def Gantt(Machines):
plt.savefig('优化后排程方案的甘特图.png')
plt.show()
if __name__ == '__main__':
# 初始化参数
g = GA()
@ -44,10 +42,18 @@ if __name__ == '__main__':
Optimal_solutions = [] # 存储非支配解
Optimal_fit_values = [] # 存储非支配解的目标值
# 新增:用于存储所有代的所有解
all_solutions = [] # 存储所有个体(染色体)
all_fitnesses = [] # 存储所有个体的目标值
for i in range(g.Max_Itertions):
print(f"iter_{i} start!")
Fit = g.fitness(C, J, Processing_time, M_num, O_num)
# 记录当前代的所有解
all_solutions.extend(C)
all_fitnesses.extend(Fit)
# 非支配排序
rank = nsga2.fast_non_dominated_sort(Fit)
current_non_dominated = [C[j] for j in range(len(C)) if rank[j] == 0]
@ -128,15 +134,23 @@ if __name__ == '__main__':
print(f"\n选中解的目标值: (最大完工时间: {final_fitness[0]}, 负载标准差: {final_fitness[1]:.2f})")
Gantt(d.Machines)
# 绘制帕累托前沿
# 绘制帕累托前沿(非支配解)
if Optimal_fit_values:
plt.figure()
cmax = [fit[0] for fit in Optimal_fit_values]
load_std = [fit[1] for fit in Optimal_fit_values]
plt.scatter(cmax, load_std, color='red')
plt.title('ParetoFront')
plt.xlabel('maxtime')
plt.ylabel('standard deviation')
plt.figure(figsize=(10, 6))
cmax_nd = [fit[0] for fit in Optimal_fit_values]
load_std_nd = [fit[1] for fit in Optimal_fit_values]
plt.scatter(cmax_nd, load_std_nd, color='red', label='Non-dominated solutions', zorder=5)
# 绘制所有解的点图(所有代的所有个体)
if all_fitnesses:
cmax_all = [fit[0] for fit in all_fitnesses]
load_std_all = [fit[1] for fit in all_fitnesses]
plt.scatter(cmax_all, load_std_all, color='blue', alpha=0.5, label='All solutions', zorder=1)
plt.title('All Solutions and Pareto Front')
plt.xlabel('Max Completion Time (Cmax)')
plt.ylabel('Load Standard Deviation')
plt.legend()
plt.grid(True)
plt.savefig('pareto.png')
plt.savefig('all_solutions_pareto.png')
plt.show()