基于遗传算法的路径规划
- 算法原理
- 主要过程:选择、交叉、变异
- 路径规划过程
- 种群初始化
遗传算法中每个个体基因随机生成,因此需要定义种群数量、基因长度、基因的取值范围等。在本路径规划中:
- 每行选择一个栅格
- 判断相邻栅格是否连续
- 不连续时进行插入栅格操作直到连续,比如图中的6(2,2),13(4,3)就可以用相加除以2取整来插入格,反复执行直到连续,如果被占据找周围四个格子是否有未被占据
- 计算适应度函数(评估个体解的好坏,需要定义适应度函数)——选择
比如在此例子中可以直观利用距离作为适应度函数,还可以用平滑度(从角度入手),fit=afit1+bfit2,然后可以计算得出轮盘概率:pi=fiti/
可以计算出个体保留概率
- 交叉
用于产生下一代个体的子代,如图所示两条路径通过交叉点可以形成新路径,丰富个体。
- 变异
通常为随机变异,用于产生下一代个体的变异体。
- 随机选择路径中两个栅格
- 采用种群初始化中方法在两栅格间产生新路径,例如1-13可以(1,7,13)
Python中面向对象
- 三大特征
- 封装性
将数据与方法封装在一个单独的单元,可以用一个类来描述一个对象,对象中可以有公共成员变量(允许外部访问)、私有成员变量(只允许内部访问)、成员函数
- 继承性
子类可以继承父类的属性与方法并扩展,减少代码冗余
如class cat(animal)中cat为子类,animal为父类
- 多态性
同一方法可以被不同对象调用,一般来说父类中可以定义一个抽象函数在多个子类中进行不同的重写,即为多态
- 类与对象的关系
类是模板,对象是按照模板创建的具体示例。如类是蛋糕模具,对象是蛋糕
- 类与对象的创建 代码基础
在类中先定义初始化方法init,在初始化方法中定义类的属性,在类中还可以定义其他方法。
在Python中,定义类方法需要使用‘@classmethod’装饰器。类方法的第一个参数必须是‘cls’,表示类本身,可以通过‘cls’来调用类属性和类方法。类方法可以用类调用,而在类中定义的普通方法只能用实例调用,示例如下。
在Python中,定义静态方法需要使用‘@staticmethod’装饰器。静态方法没有参数限制,它只是一个普通函数,涉及到类和对象的问题,都需要在函数内部进行处理,静态方法通常不依赖于类也不依赖于实例,就是普通的一个函数方法,可以通过类调用也可以通过实例调用。
关于子类继承:dog通过super()._init_(name)继承name属性并添加了bark方法
多重继承:从多个父类中继承属性和方法,从而实现更加灵活的代码设计。但是,多重继承也可能会导致一些问题,例如方法名冲突、类的复杂性增加等等。
基本是才开始系统学习代码,从大四到现在一直在逃避,逃避的事情终究会找上门来...就比如到现在才好好学习类是什么,唉...遗传算法打算先学习到这里了,只掌握了一些基本的理论,和matlab代码,后面如果要用到再深入学习吧。下周打算学习一下Dijstra和A*算法,看一篇论文,学习一下vue.“比起已经搞砸的过去和大概率会搞砸的未来,更重要的是现在。”