需要求一个比较复杂的矩阵,一般方法解不出来,故尝试用多目标遗传算法(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)
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,替换第一代染色体,进入下一次迭代