从数据集中可以看到,所有的数据是关于主对角线的对称矩阵。大小为58*58。
合理性检查指的是样本矩阵(size: 58*58)内不能同时在主对角线对策的位置同时出现数据。
例如:样本A[ i, j ]和 A[ j, i ]就是关于主对角线对应的。因为表达的意思都是城镇 i 到城镇 j 的时间,根据上文问题分析的第一条就能得到这个结论。因此如果A[ i, j ]和 A[ j, i ]都出现数据。那么需要随机删掉一个。
我的变异比例是20%,将种群内所有的样本进行变异。
通过将样本矩阵(size:58*58)内的关于主对角线上对称的非0数据进行交换。
例如:样本A[ i, j ]和 A[ j, i ]就是关于主对角线对应的。此时交换A[ i, j ]和 A[ j, i ]的值,因为表达的意思不变,所以是可行的。
其实每一次运行,结果数据都不同,不过大致都是趋于这个输出结果。这里随机运行了两次,可能存在一定偏差。
虽然从结果来看,2000次迭代的数据损失值比500次的高。但是从设施布置情况500次的可能会更加合适点。这里我就想到了是损失函数的问题。
我的损失函数的定义(对于单个样本):
从损失函数,可以看到使用的方法就是方差。其实我的初衷是想让矩阵每一行的数据都近似相等。
但是这会导致另外一个问题,如果某一行只有一个数据,那么方差就为0,但是可能并不满足最优解,因此在迭代次数多了之后,这种趋势越发明显,导致过拟合。
上面谈到了将数据集主对角线的数据设置为0,因为主对角线的元素会影响损失函数,并且是毫无意义的。那么在最后得到的结果输出的excel中其实可以观测到很多行的最大值为0,其实最大值是2也就是本身。那么设置5min的设施就能满足要求。