logo资料库

西电网信院人工智能课程实验报告,利用遗传算法解决 TSP 问题及可视化程序,基于神经网络的 MNIST 手写数字识别.pdf

第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
资料共46页,剩余部分请下载后查看
三、实验方法设计
四、实验结果展示
总结:
随着变异概率的增大,最优解会逐渐偏离好的状态,交叉部分越来越多,这可能是因为变异算法变异幅度过大或者
五、实验总结及心得
◆ numpy.random.permutation()随机排列一个序列,生成并返回该序列。
三、实验方法设计
③使用tf.nn.sparse_softmax_cross_entropy_with_logits计
④使用tf.reduce_mean(cross_entropy)+regularization,通过
四、实验结果展示
五、实验总结及心得
①实验时本来想用卷积神经网络来进行建模,但出现了一些不会调的错误改用了单隐藏层的神经网络进行建模。
②这次实验调用了很多tensorflow的库,也了解了很多的函数和方法,tensorflow是很方便
③实验中简单划分的准确率反而比其他划分的准确率高,可能是因为模型的其他缺陷造成的,虽然准确率比较高,
④从上面的分析可以看出,一个模型的好坏是需要从不同的角度去思考和测试的,这期间可能需要加上自己的逻辑
六、附录
实验过程涉及python一些库的使用,相关函数和方法总结如下:
◆numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。numpy是专
◆numpy matrix必须是2维的,但是 numpy arrays (ndarrays) 可以是
在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,
matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix o
相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的c*d运算相当于m
◆arange([start,] stop[, step,], dtype=None):根据star
◆numpy.random.permutation()随机排列一个序列,生成并返回该序列。
◆np.argmax(a, axis=0):竖着比较,返回行号(二维)。
◆np.argmax(a, axis=1):横着比较,返回列号(二维)。
◆yield:一个带有 yield 的函数就是一个 generator,虽然执行流程仍按函数的流程执
◆tf.truncated_normal(shape, mean, stddev) :shape表示
◆tf.nn.relu(features, name = None):计算激活函数 relu,即 m
◆tf.matmul(a,b):将矩阵 a 乘以矩阵 b,生成a*b,输入必须在任何转换之后是 ra
◆ tf.placeholder占位符,是TensorFlow中特有的一种数据结构。类似动态变量,函
◆tf.train.ExponentialMovingAverage():这个函数用于更新参数,就是
◆tf.nn.sparse_softmax_cross_entropy_with_logits():
◆tf.contrib.layers.l2_regularizer():规则化防止过度配合,提高模型
◆tf.reduce_mean():可跨越维度的计算张量各元素的平均值。
◆tf.train.GradientDescentOptimizer():学习率不能过高也不能过低。
◆tf.control_dependencies():指定某些操作执行的依赖关系。
◆tf.equal(A, B):对比两个矩阵或者向量的元素,如果相等,那就返回True,否则,返回F
◆random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是
◆tf.cast(x, dtype, name=None),将x的数据格式转化成dtype。
《人工智能与大数据管理》课程 实验报告(模板) 网络与信息安全学院 班 姓 学 级: 1618012 名: 陈红艳 号: 16180120012 提交时间: 2019. 6. 1
第 1 页 共 46 页 利用遗传算法解决 TSP 问题及可视化程序 一、实验目的  掌握遗传算法在实际问题中的应用方法  理解遗传算法中染色体编码和适应度函数的定义方法  熟悉遗传算法中选择、交叉、变异操作在实际问题中的适配问题  熟悉遗传算法中的控制参数设置的性能的影响  将解决方案可视化并建立和用户交互前端程序 二、实验内容 在本次实验中,我们给定了中国 34 个省会城市的二维坐标,其中部分数据 截图如下: 数据总共由 34 行组成,每一行代表一个城市名字以及对应坐标。两个城市 之间的距离可以通过对应坐标求欧氏距离得到。对于给定数据,要求选择始发城 市和剩余 33 个城市中的全部城市或部分城市作为需要遍历的城市,通过编写相 应的遗传算法代码,求解 TSP 问题中回到始发城市的路径,并且尽可能的使路 径总长度最短。 图 1. 地图可视化
第 2 页 共 46 页 设计实现相应的前端可视化程序。例如,34 个城市的可视化结果如图 1 左图 所示。两个城市之间的距离可以通过两个城市的坐标来求出,假设在旅行商问题 中,旅行商希望经过的城市为乌鲁木齐、银川、拉萨、重庆这四个城市并且起点 为重庆,那么一个可行的解的可视化结果如图 1 右图所示。设计的软件程序中包 含类似的地图可视化。 对于给定数据,要求选择始发城市和剩余 33 个城市中的全部城市或部分城 市作为需要遍历的城市,通过编写相应的遗传算法代码,求解 TSP 问题中回到 始发城市的路径,并且找到路径总长度最短的解。 可从多个方面进一步提高算法设计。比如设定在经过 A 城市之后,必须经 过 B 城市,如何设计满足该要求的遗传算法,或者研究如何采用其他方法提高 算法的收敛速度。 三、实验方法设计 1)染色体编码和适应度定义 ◆染色体编码设计方法: ①对城市从 0 开始编号,设计三个矩阵分别存储城市编号和名称、横坐标、纵坐 标之间的对应关系。后续适应度、交叉变异等函数主要以这三个矩阵为参数,进 行相应的数据处理。 ②从文件中读入城市数目,再进行迭代,读出每一行的数据返回为字符串,再把 字字符串中的城市名称、城市的两个坐标读入相应的列表。为了方便后续的操作, 统一数据结构为矩阵,把列表转换为矩阵。 ◆染色体编码源代码如下图所示:
第 3 页 共 46 页 ◆适应度设计方法: ①根据当前城市的访问顺序、相关城市的横纵坐标信息采用勾股定理遍历计算相 邻两个城市之间的距离,加和得到整条路径的总距离,计算总距离的倒数。 ②总距离的倒数作为个体适应值的评价函数以评价个体的优劣,倒数越大,个体 适应度越大,反之,越小。 ◆适应度源代码如图所示: 2)种群初始化程序设计 ◆种群初始化设计方法: ①根据原先设定的每一代的种群规模 250,利用 np.random.permutation()函数 迭代生成一个行数等于种群规模数量,列数等于城市数目的矩阵。用于存储每一 个个体的访问顺序。
第 4 页 共 46 页 ②利用 np.zeros()函数迭代生成一个行数等于种群数目,列数等于 1 的矩阵, 用于存储每一个个体的适应值。 ③利用 np.column_stack()把访问顺序矩阵和适应值矩阵进行列加成合成为一个 矩阵。 ④利用适应度函数计算每一个个体的适应值,并对矩阵的原始适应值进行修改。 ◆种群初始化源代码如图所示: 3)选择操作程序设计 ◆选择操作设计方法: ①Min_Max 函数利用 np.argmin()、np.argmax()函数计算种群的最差解的索引和 最优解。 ②选择算法 Choice_Function()利用 Min_Max()的返回值,上一代的最优解直接替 换本代种群的最差解。不进行交叉和变异运算,从而避免了优良基因被破坏。 ◆选择操作源代码如图所示: 4)交叉操作程序设计 ◆交叉操作设计方法: ①根据设定的交叉概率随机选择交叉的父代,再调用具体的交叉算法。 ②交叉算法:在两个父代访问顺序的排列中随机地选择两个交叉点,父代 1、2 两个交叉点左右两边的数据分别进行替换,再遍历子代 1、2 两个交叉点两边的 数据,当和中间部分的编号重复时,利用父代对应位置的序号进行代替,直到没 有重复为止,生成子代。 ③对生成的子代进行变异。
第 5 页 共 46 页 ④交叉变异完毕之后,把新生成的子代和未进行交叉的上一代进行合并生成新一 代的种群。 交叉过程举例如图所示: 被选中的父代 P1: 被选中的父代 P2: 9 8 8 7 | 4 5 | 1 4 6 0 7 3 1 | 3 2 | 9 2 6 0 5 生成的子代 C1: 生成的子代 C2: 8 9 7 8 | 4 | 1 5 4 6 0 7 3 1 | 9 2 | 3 6 2 5 0 查重之后的子代 C1: 8 3 查重之后的子代 C2: 9 8 ◆交叉操作源代码如图所示: | 4 | 1 5 4 6 0 7 3 1 | 9 2 | 7 0 5 2 6
第 6 页 共 46 页 变异操作程序设计 ◆变异操作设计方法: ①以设定的变异概率对生成的子代中基因的某位或者某些位作变动,从而生成新 的个体。 ②在子代访问顺序排列的前半部分中选一个倒置点,再在后半部分中选一个倒置 点,利用 reverse()函数对两点之间的数据进行顺序颠倒。 ◆变异操作源代码如图所示: 四、实验结果展示 1)可视化程序界面展示及各功能组件介绍 ◆可视化程序界面功能控件分析: ①定义主窗口控件并利用布局管理器调整窗口大小。 ②定义三十四个复选框控件,从而进行多个城市的选择,并定义控件的回调函数, 选中时调用回调函数进行相应的处理。 ③定义按钮,并定义按钮的回调函数,点击按钮时调用回调函数进而调用主函数 进行路径的分析。 ④定义文本框和相应的文本内容,对用户操作进行提示。
第 7 页 共 46 页 ◆可视化程序界面展示:
分享到:
收藏