git参考代码

# Program Name: NSGA-II.py
# Description: This is a python implementation of Prof. Kalyanmoy Deb's popular NSGA-II algorithm
# Author: Haris Ali Khan
# Supervisor: Prof. Manoj Kumar Tiwari
"""
优化目标:min(f1(x), f2(x))f1(x) = -x^2f2(X) = -(x-2)^2s.t x~[-55, 55]
pop_size = 20
max_gen  =  921"""
#Importing required modules
import math
import random
import matplotlib.pyplot as plt#First function to optimize
def function1(x):value = -x**2return value#Second function to optimize
def function2(x):value = -(x-2)**2return value#Function to find index of list
def index_of(a,list):for i in range(0,len(list)):if list[i] == a:return ireturn -1#Function to sort by values
def sort_by_values(list1, values):sorted_list = []while(len(sorted_list)!=len(list1)):if index_of(min(values),values) in list1:sorted_list.append(index_of(min(values),values))values[index_of(min(values),values)] = math.infreturn sorted_list#Function to carry out NSGA-II's fast non dominated sort
def fast_non_dominated_sort(values1, values2):S=[[] for i in range(0,len(values1))]front = [[]]n=[0 for i in range(0,len(values1))]rank = [0 for i in range(0, len(values1))]for p in range(0,len(values1)):S[p]=[]n[p]=0for q in range(0, len(values1)):if (values1[p] > values1[q] and values2[p] > values2[q]) or(values1[p] >= values1[q] and values2[p] > values2[q]) or(values1[p] > values1[q] and values2[p] >= values2[q]):if q not in S[p]:S[p].append(q)elif (values1[q] > values1[p] and values2[q] > values2[p]) or(values1[q] >= values1[p] and values2[q] > values2[p]) or(values1[q] > values1[p] and values2[q] >= values2[p]):n[p] = n[p] + 1if n[p]==0:rank[p] = 0if p not in front[0]:front[0].append(p)i = 0while(front[i] != []):Q=[]for p in front[i]:for q in S[p]:n[q] =n[q] - 1if( n[q]==0):rank[q]=i+1if q not in Q:Q.append(q)i = i+1front.append(Q)del front[len(front)-1]return front#Function to calculate crowding distance
def crowding_distance(values1, values2, front):distance = [0 for i in range(0,len(front))]sorted1 = sort_by_values(front, values1[:])sorted2 = sort_by_values(front, values2[:])distance[0] = 4444444444444444distance[len(front) - 1] = 4444444444444444for k in range(1,len(front)-1):distance[k] = distance[k]+ (values1[sorted1[k+1]] - values2[sorted1[k-1]])/(max(values1)-min(values1))for k in range(1,len(front)-1):distance[k] = distance[k]+ (values1[sorted2[k+1]] - values2[sorted2[k-1]])/(max(values2)-min(values2))return distance#Function to carry out the crossover
def crossover(a,b):r=random.random()if r>0.5:return mutation((a+b)/2)else:return mutation((a-b)/2)#Function to carry out the mutation operator
def mutation(solution):mutation_prob = random.random()if mutation_prob <1:solution = min_x+(max_x-min_x)*random.random()return solution#Main program starts here
pop_size = 20
max_gen = 921#Initialization
min_x=-55
max_x=55
# 随机生成初始种群
solution=[min_x+(max_x-min_x)*random.random() for i in range(0,pop_size)]
gen_no=0
while(gen_no<max_gen):# 自适应度计算function1_values = [function1(solution[i])for i in range(0,pop_size)]function2_values = [function2(solution[i])for i in range(0,pop_size)]# pareto等级non_dominated_sorted_solution = fast_non_dominated_sort(function1_values[:],function2_values[:])print("The best front for Generation number ",gen_no, " is")for valuez in non_dominated_sorted_solution[0]:print(round(solution[valuez],3),end=" ")print("
")# 拥挤度距离计算crowding_distance_values = []for i in range(0,len(non_dominated_sorted_solution)):crowding_distance_values.append(crowding_distance(function1_values[:],function2_values[:],non_dominated_sorted_solution[i][:]))solution2 = solution[:] # P+Q#Generating offspringswhile(len(solution2)!=2*pop_size):a1 = random.randint(0,pop_size-1)b1 = random.randint(0,pop_size-1)# 交叉变异solution2.append(crossover(solution[a1],solution[b1]))# 计算 P+Q种群的适应度function1_values2 = [function1(solution2[i])for i in range(0,2*pop_size)]function2_values2 = [function2(solution2[i])for i in range(0,2*pop_size)]# 非支配排序non_dominated_sorted_solution2 = fast_non_dominated_sort(function1_values2[:],function2_values2[:])# 拥挤度距离计算crowding_distance_values2=[]for i in range(0,len(non_dominated_sorted_solution2)):crowding_distance_values2.append(crowding_distance(function1_values2[:],function2_values2[:],non_dominated_sorted_solution2[i][:]))# 得到下一代种群P1new_solution = []   # indexfor i in range(0,len(non_dominated_sorted_solution2)):non_dominated_sorted_solution2_1 = [index_of(non_dominated_sorted_solution2[i][j],non_dominated_sorted_solution2[i]) for j in range(0,len(non_dominated_sorted_solution2[i]))]front22 = sort_by_values(non_dominated_sorted_solution2_1[:], crowding_distance_values2[i][:])front = [non_dominated_sorted_solution2[i][front22[j]] for j in range(0,len(non_dominated_sorted_solution2[i]))]front.reverse()for value in front:new_solution.append(value)if(len(new_solution)==pop_size):breakif (len(new_solution) == pop_size):breaksolution = [solution2[i] for i in new_solution]gen_no = gen_no + 1#Lets plot the final front now
function1 = [i * -1 for i in function1_values]
function2 = [j * -1 for j in function2_values]
plt.xlabel('Function 1', fontsize=15)
plt.ylabel('Function 2', fontsize=15)
plt.scatter(function1, function2)
plt.show()

NSGA2算法原理及python实现相关推荐

  1. 手把手教你EMD算法原理与Python实现(更新)

    Rose今天主要介绍一下EMD算法原理与Python实现.关于EMD算法之前介绍过<EMD算法之Hilbert-Huang Transform原理详解和案例分析>, SSVEP信号中含有自 ...

  2. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

    第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质 ...

  3. 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法-匈牙利算法,用于聚类结果分析,先用图表示我当前遇到的问题: 这两列值是我用不同算法得到的聚类结果,从肉眼可以看出第一列聚类为0的结果在第二列中对 ...

  4. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  5. LM(Levenberg–Marquardt)算法原理及其python自定义实现

    LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...

  6. PageRank算法原理与Python实现

    本文转载自https://blog.csdn.net/ten_sory/article/details/80927738 PageRank算法原理与Python实现 PageRank算法,即网页排名算 ...

  7. EMD算法原理与python实现

    目录 简介 EMD算法原理 python实现EMD案例 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 简介 SSVEP信号中含有自发脑电和大量外界干扰信号,属 ...

  8. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  9. [转载] python价值算法_PangRank算法原理及其Python实现

    参考链接: 页面排名算法Page Rank和Python实现 文章目录 算法来源 早期搜索引擎采用分类目录的方法,通过人工进行网页分类,并整理出高质量的网页. 后来,随着网页的增多,人工分类已经不现实 ...

  10. K-Means聚类算法原理及其python和matlab实现

    (一)何谓聚类 还是那句"物以类聚.人以群分",如果预先知道人群的标签(如文艺.普通.2B),那么根据监督学习的分类算法可将一个人明确的划分到某一类:如果预先不知道人群的标签,那就 ...

最新文章

  1. php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
  2. SpringtMVC中配置 mvc:annotation-driven/ 与 mvc:default-servlet-handler/ 的作用
  3. OpenWrite的渠道顺序你说了算!来支持你最喜欢的技术类平台吧!
  4. 【算法知识】详解希尔排序算法
  5. addrinfo 结构
  6. 信息学奥赛一本通(1263:【例9.7】友好城市)
  7. pip更新导致ImportError: cannot import name ‘InvalidSchemeCombination‘ from ‘pip._internal.exceptions‘
  8. 使用python爬虫批量下载美女图片
  9. 向日葵远程控制第一人称3D鼠标无法操作旋转问题
  10. 《啊哈!算法》第一章 - 第三节 - 快速排序(Java实现)
  11. 华为手机卡在升级界面_华为手机停在开机界面,进入不了主界面,该怎么办?...
  12. 杭州2022年中级职称评审业绩要求
  13. AIRPAK3.0用户指导手册第一部分手册简介
  14. VR场景切换-微信小程序
  15. 在腾讯的第二堂产品课——改变大河的流向
  16. 学校食堂评价系统的设想(求意见与各种喷)
  17. python从入门到实践电子版-Python编程从入门到实践PDF电子书免费下载
  18. 创新方案|3种订阅电商模式推动DTC业务高速增长
  19. 什么是离子推进器(Ion Thruster)?
  20. SAP-MM-内向外向交货单

热门文章

  1. rose服务器系统,Rose HA for windows
  2. bt709和srgb_选择用于多用途视频编辑和色彩校正的显示器— sRGB,DCI-P3,REC 709
  3. 最全最简单的dubbo教程-开篇《一》
  4. 查看服务器虚拟机版本,查看虚拟机版本命令
  5. DBeaver - 一款免费开源的通用数据库工具
  6. Programiz 中文系列教程·翻译完成
  7. android 长截图拼接,Android拼接合并图片生成长图
  8. 星痕 轻松实现大屏数据可视化_数据可视化的一些思考丨如何做出令人满意的大屏可视化设计(一)...
  9. node ajax实现登录注册,nodejs实现简易登录注册
  10. C++线程安全单例类最全总结