该项目主要针对特征筛选进行优化,已编写名为 “A Real-time Human Activity Recognition Approach with Generalization Performance” 会议论文发表在第39届中国控制会议(CCC2020)论文集中,如需可点击论文名查看全文,同时该项目已上传至GitHub以及码云。实现的功能包括但不限于:
在计算机科学和运筹学中,遗传算法(Genetic Algorithm,GA)是受自然选择过程启发的一种元启发法,它属于进化算法(Evolutionary Algorithms, EA)的一种。 遗传算法依赖于诸如突变,交叉和选择等受生物学启发的操作,其通常用于为优化和搜索问题提供高质量解决方案。
In computer science and operations research, a genetic algorithm (GA) is a metaheuristic inspired by the process of natural selection that belongs to the larger class of evolutionary algorithms (EA). Genetic algorithms are commonly used to generate high-quality solutions to optimization and search problems by relying on biologically inspired operators such as mutation, crossover and selection.
所以根据分析我们需要解决算法的突变操作、交叉操作以及选择操作的代码是实现。同时如果需要有中断后继续训练的需求,我们还需要暂存当前数据至文件之中。
首先需要解决染色体的编码问题,常见的染色体编码有2进制、8进制、10进制、16进制。由于其中二进制的位编辑灵活简单,所以只进行了二进制编码的实现。其次是交叉和突变,交叉的可选类型较多,针对其实用性本文实现了单点交叉以及均匀交叉。而突变则是根据突变概率对于每一位进行变异操作。同时为了实现历史计算结果存储、上一代种群计算结果存储以及历史进化曲线存储,以保证程序中断后可以在原有基础上继续搜索进化,避免重复计算,同时实现了32进制与2进制数据间转换以方便染色体字的存储,主要针对计算量较大的情况进行的改进。同时为了特征筛选的需求,对于均匀交叉以及突变操作进行了优化以保证染色体中位为1的个数在允许范围内(也就是特征个数在允许范围内)。示例代码如下:
import numpy as np
from GAToolBox import GAToolBox
def fitness(factor):
"""
用户的适应度函数
"""
if type(factor) is list:
binary = map(str, factor)
binary_str = ''.join(binary)
if len(binary_str) > 16:
print(binary_str, "chromosome is too long !")
dec = float(int(binary_str, 2)) / 65535.0 * 10.0
return dec, sum([j * np.cos((j + 1) * dec + j) for j in range(1, 6)])
else:
return factor, sum([j * np.cos((j + 1) * factor + j) for j in range(1, 6)])
def chromosome_checker(factor):
"""
用户的染色体检查器
"""
return True
if __name__ == "__main__":
GA = GAToolBox(min_value=-13, size_pop=10, max_gen=100, p_mutation=0.4, function=fitness,
chromosome_checker=chromosome_checker)
GA.run(is_show_trace=True, if_show_search=True)
使用该示例代码的搜索结果如下图,其中蓝色曲线为目标函数,红色×点为当前种群最优解的位置。可以看出该遗传算法的搜索结果接近最优解。
打印信息如下:
******************************************* Genetic Algorithm *****************************************
Information of population :
size of population : 10
length of chromosome : 16
max length : 16
min length : 0
Restore recorded history!
Path does not exist!
There is not data recorded !
**********************************Population Initialization********************************************
Progress of initialization :10/10, the number of last optimal solution:0
******************************************* Solving ***************************************************
Current best fitness_list: -12.869572985017939, current best accuracy: -12.869572985017939, progress of evolution: 100/100
Information of optimal solution :
best fitness : -12.869572985017939
best accuracy : -12.869572985017939
current best fitness : -12.586208312114682
current best accuracy : -12.586208312114682
Cost time: 15.184714317321777 s
运行后可看出遗传算法已找到最优解,现在进行参数讲解:
参考论文如下:
S. -J. Wei, B. Zhang, X. -W. Tan, X. -G. Zhao and D. Ye, “A Real-time Human Activity Recognition Approach with Generalization Performance,” 2020 39th Chinese Control Conference (CCC), 2020, pp. 6334-6339, doi: 10.23919/CCC50068.2020.9188860.