2021/9/6 课题总结(学长项目)
端到端:输入点集,输出路径 总的网络架构是clustering+GPAN 前面的loss是点分配到车,后面loss是路径长度 学长是分开做的,最终希望全部用一个loss(aloss1+bloss2) 学长左边是用的启发式算法,即两点距离够不够旅行时间长度
如何判断点划分的好不好(学长用排序算法非递减从小到大) deadline时间是分散的均匀的 车运行过程中每个点都要救下来 距离的考量,小范围(点的位置分布)
学长的点划分方法: 已知5个车,依次给它们分配车(如何判断互斥,i,k deadline<旅行时间) 互斥:A,B两个点的deadline:A:t=5, B:t=10,A->B:15min,所以A和B不能在一个点集 但学长这种方法是软限制。距离要硬限制,不能软限制
架构图: 先做embedding,context+attention layer 输出概率(取最大输出的那个点,context+attention layer 部分也就是pointer network) 强化学习训练的解码,更新网络的所有参数
代码: 1) GNN搭的模型 Attention KQV forward函数里:query输出哪一个根据reference, 决定怎么往前传 X_expand_context:泛化的,不重要 first_turn:第一次训练初始值 2) old data:数据集文件 cur_time当前系统文件 idx指生成的是几号点 第65行:旅行时间+服务时间 71行:松弛程度:每个点的deadline是当前时间+随机变量 用松弛的原因:这是生成问题所以必须要有解,也就是知道最终路线是12345 82行:shuffle是洗牌,让数据集不那么有序 98行:return后面网络要用的信息,不同的解服务时间不同
代码用了单层训练(GNNtrain.py)的和两层训练(low+high)的,都可以 1)两层效果更好 32行:记录训练结果存在哪,high要用low的训练结果 132行:给出baseline,loss均值的设定 loss.backward():有了loss怎么更新网络 137行:用了归一化,loss不能太大 175行:sample计算 验证用argmax,来知道前面的训练好不好(也就是actor-critic) high.py;36行记录high结果存放地点 选GPU设备可用torch.device 2)单层训练(GNNtrain.py)效果较好,但生成路径长度比较短
test.py:得出来的结果,验证模型怎么样
cluster.py: check_link看节点是否互斥(不能分配给同一个车) 48行:哪个模型 72行:每次输出100个点 bunchsize:每次100个5车问题 两个不同的解码方式(penalty1,penalty) 101行:让所有车的base station固定在一个点(multi-set),从而使每个车路径中固定一个点给base
思考:之前提到的multi task 多用来处理并行任务(信息采集+充电),但我们的是多个车处理同一种问题 学长推的神经网络的论文:带序号的,electric windows,GPN比较重要 怎么做好衔接点,现在主要的是clustering部分用learning的方法处理,后面GPN以后可以直接套
|