需要求一个比较复杂的矩阵,一般方法解不出来,故尝试用多目标遗传算法(Multiobjective Genetic Algorithm)求解。不是专门做研究遗传算法的,根据自己需求进行了简单学习,并做如下笔记。

i 遗传算法理解

遗传算法属于一种搜索算法,通过不断试错,当结果满足提前设置精度时,停下来。理论上而言,只要计算时间足够长,计算能力足够大,穷举法就可以实现这一目标,并不需要这些听上去高大上的算法。关键问题是,如何快速收敛。遗传算法(Genetic algorithm)是一种从生物学获得灵感(往往运用最广的算法,核心都很简单,毕竟简单才方便推广),通过选择(selection)、交叉(crossover)和变异(Mutation)等操作让收敛速度加快,具体理论和操作前辈们早已论证,详见参考文献。类似算法还有模拟退火算法(Simulated Annealing)、粒子群算法(Paricle Swarm)等。

 

ii 基本概念解释

1. 概念

染色体(chromosome):可能的解,编码化的解称为基因型(genetic type)解;实际的解称为表现型(pheno type)解

种群数(population size):随机生成的初始解的个数;

适值函数(fitness function): 评价染色体优劣性的函数,可以简单理解为与目标值的差异

目标函数(objective function):限定函数,用于限制求解变量的函数

决策变量(decision variables):所需要求解的变量,也就是求解问题的维数

遗传操作(genetic_operator)包括:

交叉(corssover):两个染色体之间部分基因互换;交叉率(crossover probability)交叉操作的概率。

变异(mutation):单个染色体中部分基因变化,保持多样性;变异率(mutaiton probability)变异操作的概率。

选择(selection):选择出适应性高的染色体,进行下一代操作。

最大代数(maximum generaiton):进化循环次数,最大迭代次数。

 

2. Pareto解或非支配解(non-dominated solution)

最大值问题,对于解X,

若不存在X1,使得F(X1)>F(X),则X为弱Pareto最优解,此时F(X1)可以等于F(X)

若不存在X1,使得F(X1)>=F(X),则X为Pareto最优解,也称非劣解

 

3. 多目标遗传算法种类

本文讨论非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm II),NSGA-II(参考文献【2】和《网络模型与多多目标遗传算法》P165)

遗传算法多目标优化实例python 多目标遗传算法matlab程序_遗传算法多目标优化实例python

 

iii NSGA-II求解步骤和MATLAB代码 

首先,根据自己的问题定义目标函数(objective_description_function)和评价函数(evaluate_objective),然后运行主函数即可。主函数由如下几个函数组成。

主函数  nsga_2 (i.e. 非支配排序遗传算法的求解步骤)

  • STEP 1: initialize_variables,随机生成染色体种群,随机解
  • STEP 2: non_domination_sort_mod,解的非支配排序
  • STEP 3: tournament_selection,精英策略的竞赛选择
  • STEP 4: genetic_operator,基因操作
  • STEP 5: replace_chromosome,替换第一代染色体,进入下一次迭代