他的回复:
分配不合法的几个原因: 1、任务书中基本的约束不满足: 1)Qos:在处理Qos时,条件没符合。例如:按照任务书规定,Qos==约束上限的,也不可分配。 2)边缘节点带宽超标:存在某个时刻,分配给某个边缘节点的带宽超过上限。 3)带宽分配有误:客户节点需要A,分配到边缘节点是B,A !=B 对于后两点,需要对每个时刻的分配值进行校验,确保需求和分配相等。 2、客户节点不正确:因处理错误,导致输出文件中,所包含的客户节点ID多了或少了,或者客户节点错误。 1)程序可以检查得到的|T|*M和最后输出的solution.txt行数是否正确 2)客户节点错误的其中一个原因,可能与输入文件的\r\n换行符处理有关 Window中,换行是\r\n,在Linux下读取时,有些处理方式会存在差异。会把\r读进来作为正常字符。这样会导致每一行的最后一个字符实际上是带了'\r'的。如:e,变为'e\r',从而导致出错。 可以自行搜索一下windows和linux下关于换行符的差异,确保处理时换行符没有造成干扰。 3、返回码问题: 1)判题程序调用选手程序进行计算,它通过程序运行返回码来判断是否运行失败。部分同学代码运行异常,但自行处理了异常,返回码是成功。判题程序会认为程序正确执行,然后取检查solution.txt中的方案是否合法,会读到空文件,返回分配不合法。本质是输出了空文件。 2)进程的exit code设置不正确。算法正常工作,但程序自身返回错误。可以在运行完后用echo $?打印检测。按照Linux的errorno处理。 4、输入文件的节点顺序,不能假设是一样的。 比如:不能假设demand.csv中出现的客户节点顺序,与qos.csv中的客户节点顺序一样。不能认为客户节点出现顺序, 在查看边缘节点和客户节点的映射表时,不能假设节点出现顺序是一样的。可能存在风险。 其它错误可能性待继续补充 请同学们持续关注https://bbs.huaweicloud.com/forum/thread-181916-1-1.html