复赛FAQ

frostbolt 2016-04-20 03:04:42
问:MAX_LINE_LEN不够用怎么办?
答:请参考此贴:http://bbs.csdn.net/topics/391945538。官方在复赛中,会在后台将编译包中的MAX_LINE_LEN定义长度修改为12000,可以容纳最多1999条边的结果输出。

问:用例中的必经顶点列表可以为空吗?
答:可以,请参见题目的描述:”DemandID里面第一行为1,第二行为2,表示路径索引,1表示P’,2表示P’’,SourceID为起始顶点s的索引,DestinationID为终止顶点t的索引,IncludingSet表示必须经过的顶点集合V’或V’’,其中不同的顶点索引之间用“ | ”分割,如果该路径没有必经顶点要求,则此处输入NA。“
初赛是我们出的用例,必经顶点为空的情况(实际业务中可能出现)没有出现,是为了保证比赛的难度。就像赛题里头有说用例可能无解(实际业务中可能出现),但是实际上初赛用例都是可以有解的。但是复赛有选手自设计用例,这一点无法保证。选手写代码时需要注意这一点。
复赛仍然禁止无解的情况出现,因为无解的情况主要看谁算得快,而判断无解很容易作弊,会导致对战环节失去意义。

问:规则中未涉及的是不是就是合法的
答:总体来说,规则没讲的都是允许的。当然,还要加一句大家很痛恨,我也很痛恨,但是事实就是这么蛋疼的一句话,”官方保留最终解释权“。

问:复赛是否允许使用开源库、商用库?
答:复赛和决赛阶段,核心算法只能使用自己写的代码,可以参考别人的实现,但是应该给出来源信息。使用STL库等不涉及核心算法的通用工具类库不受限制。

问:复赛的机器配置是什么样的?
答:跟初赛一样,还是单核的

问:复赛试题中路径重合度的现实意义是什么?
答:边对应着网络中光纤、网线的概念,在网络中,如果一根线断了(如道路施工时挖断),需要将业务切换到另外一条备用路径上。因此,主备路径重合的边越少,则网络的整体可靠性越高。

问:是否可以构造不合法的用例,让对手算不出来而失败?
答:不可以。要求所有的用例都是合法的(符合题目描述即为合法)。对未能通过用例合法性检查的,会被判定本对战局失败。双方都算不出有效解的,也会判出题方失败。
在选手上传用例时,服务器会进行用例合法性检查。

问:什么叫做”使用一套核心算法和代码“解题?
答:制定这个规则的初衷是为了避免选手的程序对于自己设计的用例”特意“优化,以至于出题人的程序优势过大。不符合”使用同一套算法和代码“的行为包括:
1、对于不同的用例,使用不同的算法处理
2、程序中,使用用例的某些特征值进行特殊处理,如识别到为自己出的用例,而进行特别的处理
3、针对不同的用例,预先设定不同的参数(如遗传算法中的参数);
补充不属于作弊的例外情况:
1、遗传算法中的代数有时需要根据规模调整,这个属于正常的算法行为。
...全文
3063 85 打赏 收藏 转发到动态 举报
写回复
用AI写文章
85 条回复
切换为时间正序
请发表友善的回复…
发表回复
frostbolt 2016-05-16
  • 打赏
  • 举报
回复
引用 84 楼 open_source_library 的回复:
官方什么时候放出决赛题目啊??复赛题目是初赛刚结束,第二天就出来了,但是决赛题目还没出来。。 另外,希望官方放出更多的case,特别是这次比赛的全部case。毕竟有更多好case,才能催生更多好算法嘛。。
赛制稍后正式公布,题目跟复赛保持一致。相关的case等决赛完后会放一些出来。
  • 打赏
  • 举报
回复
官方什么时候放出决赛题目啊??复赛题目是初赛刚结束,第二天就出来了,但是决赛题目还没出来。。 另外,希望官方放出更多的case,特别是这次比赛的全部case。毕竟有更多好case,才能催生更多好算法嘛。。
GDRetop 2016-05-10
  • 打赏
  • 举报
回复
引用 13 楼 frostbolt 的回复:
[quote=引用 11 楼 dsdsds2000 的回复:] 请问我在程序里可不可以先用一种算法找出一个解,然后再用另一种算法对找出的这个解进行优化?对于所有的用例都这样处理,不区分用例。
本来想说不可以,但是想想有些算法的确是用一种简单的方式先处理。。。 哎,你难倒我了。。。套用另外一个帖子的话说:”别过分“就行了。[/quote] ==============这里就出现问题了啊!如果我假装预处理呢?
panzhihao1992 2016-05-10
  • 打赏
  • 举报
回复
引用 75 楼 frostbolt 的回复:
[quote=引用 74 楼 sandra512 的回复:] 凭什么只有遗传算法可以设置参数??我相信任何一种算法里面肯定都会涉及到参数。众所周知,参数对结果的影响是巨大的,根据规模设置参数对于每个算法来说都很重要。我们自己设计的算法,里面有一个参数是控制宽度的,宽度越大,费时越多,但搜到的解也越好。初赛的时候就是通过不断的变换参数使自己的时间和解都比较优,然后取得不错的成绩,本质上跟遗传的代数性质上是一模一样的。现在复赛不让根据规模设计参数,我只好思考设计一个近似的公式去求参数,虽然这样求得的近似参数并不是最好。如果遗传算法可以根据规模设置参数,而不需要公式计算,那我请问比赛公平性在哪里?这样如何避免他们针对自己的用例优化?虽然我一开始就讨厌采取对战形式,但是好歹是公平的,我可以接受。但是现在赛制的坑要用比赛公平性去补,我坚决反对!一视同仁,反对特殊!
代数主要用于控制时间在给定的时间内算完,像其他的遗传变异等参数还是不能调整的。[/quote] 如果是用于时间的控制,完全可以定时退出啊
FLX_HITsz 2016-05-10
  • 打赏
  • 举报
回复
引用 77 楼 frostbolt 的回复:
[quote=引用 76 楼 sandra512 的回复:] 很多算法都有影响和控制时间的参数,不只是遗传。参数设置的太大,可能导致不能在规定时间内求到解,设置的太小,可能提前结束没有充分利用所有的时间,导致搜到的结果不是最好。如果你只让遗传算法自由设置,而不让其它算法自由设置,那明显是不公平的。要么大家都可以自由设置影响时间的参数,要么大家都只能根据程序里自己设计的一个公式自动生成参数。if case 0 set para = 1这样明显不能算”自动生成“,遗传如果可以这样设置参数,那么比赛当天修改代码的时候,他们能很容易的根据题目运行时间来调整参数,以保证大用例能够尽可能的用够10s,小用例则在求到最优解的前提下尽可能少用时间。那么这样对于其他算法来说不是很不公平吗?不管怎么样,我请求一视同仁。
复赛因为要先判断重合度,再判断权重,最后看时间。我们的经验是,走到通过时间判断胜败的概率极小,而由于时间控制不好而超时导致无解并不是我们想看到的。所以这一块儿才稍微放松了点。 另外,就是复赛用例,官方用例的规模并没有太大的区别,不像初赛那样规模差别特别大(故意如此,前5题为送分题)[/quote] 上面说官方案例的规模差别不大,那会不会有会多坑呢?我觉得在实际业务中,坑很多的情况应该很少很少吧
sandra512 2016-05-09
  • 打赏
  • 举报
回复
同时还要反驳你说的一点,由于大家可以自己设计用例,故意用时间去取胜的概率极大!
sandra512 2016-05-09
  • 打赏
  • 举报
回复
还是没有说到重点,我的要求是一视同仁,遗传如果可以自由设置影响到时间的参数,其他算法必须也要允许!因为谁都想恰好用够十秒!
frostbolt 2016-05-09
  • 打赏
  • 举报
回复
引用 76 楼 sandra512 的回复:
很多算法都有影响和控制时间的参数,不只是遗传。参数设置的太大,可能导致不能在规定时间内求到解,设置的太小,可能提前结束没有充分利用所有的时间,导致搜到的结果不是最好。如果你只让遗传算法自由设置,而不让其它算法自由设置,那明显是不公平的。要么大家都可以自由设置影响时间的参数,要么大家都只能根据程序里自己设计的一个公式自动生成参数。if case 0 set para = 1这样明显不能算”自动生成“,遗传如果可以这样设置参数,那么比赛当天修改代码的时候,他们能很容易的根据题目运行时间来调整参数,以保证大用例能够尽可能的用够10s,小用例则在求到最优解的前提下尽可能少用时间。那么这样对于其他算法来说不是很不公平吗?不管怎么样,我请求一视同仁。
复赛因为要先判断重合度,再判断权重,最后看时间。我们的经验是,走到通过时间判断胜败的概率极小,而由于时间控制不好而超时导致无解并不是我们想看到的。所以这一块儿才稍微放松了点。 另外,就是复赛用例,官方用例的规模并没有太大的区别,不像初赛那样规模差别特别大(故意如此,前5题为送分题)
frostbolt 2016-05-09
  • 打赏
  • 举报
回复
引用 78 楼 sandra512 的回复:
还是没有说到重点,我的要求是一视同仁,遗传如果可以自由设置影响到时间的参数,其他算法必须也要允许!因为谁都想恰好用够十秒!
可以,如果你的算法需要根据用例规模设置参数,而且只用于时间控制,算合法的情况。
frostbolt 2016-05-08
  • 打赏
  • 举报
回复
引用 74 楼 sandra512 的回复:
凭什么只有遗传算法可以设置参数??我相信任何一种算法里面肯定都会涉及到参数。众所周知,参数对结果的影响是巨大的,根据规模设置参数对于每个算法来说都很重要。我们自己设计的算法,里面有一个参数是控制宽度的,宽度越大,费时越多,但搜到的解也越好。初赛的时候就是通过不断的变换参数使自己的时间和解都比较优,然后取得不错的成绩,本质上跟遗传的代数性质上是一模一样的。现在复赛不让根据规模设计参数,我只好思考设计一个近似的公式去求参数,虽然这样求得的近似参数并不是最好。如果遗传算法可以根据规模设置参数,而不需要公式计算,那我请问比赛公平性在哪里?这样如何避免他们针对自己的用例优化?虽然我一开始就讨厌采取对战形式,但是好歹是公平的,我可以接受。但是现在赛制的坑要用比赛公平性去补,我坚决反对!一视同仁,反对特殊!
代数主要用于控制时间在给定的时间内算完,像其他的遗传变异等参数还是不能调整的。
sandra512 2016-05-08
  • 打赏
  • 举报
回复
引用 75 楼 frostbolt 的回复:
[quote=引用 74 楼 sandra512 的回复:] 凭什么只有遗传算法可以设置参数??我相信任何一种算法里面肯定都会涉及到参数。众所周知,参数对结果的影响是巨大的,根据规模设置参数对于每个算法来说都很重要。我们自己设计的算法,里面有一个参数是控制宽度的,宽度越大,费时越多,但搜到的解也越好。初赛的时候就是通过不断的变换参数使自己的时间和解都比较优,然后取得不错的成绩,本质上跟遗传的代数性质上是一模一样的。现在复赛不让根据规模设计参数,我只好思考设计一个近似的公式去求参数,虽然这样求得的近似参数并不是最好。如果遗传算法可以根据规模设置参数,而不需要公式计算,那我请问比赛公平性在哪里?这样如何避免他们针对自己的用例优化?虽然我一开始就讨厌采取对战形式,但是好歹是公平的,我可以接受。但是现在赛制的坑要用比赛公平性去补,我坚决反对!一视同仁,反对特殊!
代数主要用于控制时间在给定的时间内算完,像其他的遗传变异等参数还是不能调整的。[/quote] 很多算法都有影响和控制时间的参数,不只是遗传。参数设置的太大,可能导致不能在规定时间内求到解,设置的太小,可能提前结束没有充分利用所有的时间,导致搜到的结果不是最好。如果你只让遗传算法自由设置,而不让其它算法自由设置,那明显是不公平的。要么大家都可以自由设置影响时间的参数,要么大家都只能根据程序里自己设计的一个公式自动生成参数。if case 0 set para = 1这样明显不能算”自动生成“,遗传如果可以这样设置参数,那么比赛当天修改代码的时候,他们能很容易的根据题目运行时间来调整参数,以保证大用例能够尽可能的用够10s,小用例则在求到最优解的前提下尽可能少用时间。那么这样对于其他算法来说不是很不公平吗?不管怎么样,我请求一视同仁。
sandra512 2016-05-07
  • 打赏
  • 举报
回复
引用 楼主 frostbolt 的回复:
问:MAX_LINE_LEN不够用怎么办? 答:请参考此贴:http://bbs.csdn.net/topics/391945538。官方在复赛中,会在后台将编译包中的MAX_LINE_LEN定义长度修改为12000,可以容纳最多1999条边的结果输出。 问:用例中的必经顶点列表可以为空吗? 答:可以,请参见题目的描述:”DemandID里面第一行为1,第二行为2,表示路径索引,1表示P’,2表示P’’,SourceID为起始顶点s的索引,DestinationID为终止顶点t的索引,IncludingSet表示必须经过的顶点集合V’或V’’,其中不同的顶点索引之间用“ | ”分割,如果该路径没有必经顶点要求,则此处输入NA。“ 初赛是我们出的用例,必经顶点为空的情况(实际业务中可能出现)没有出现,是为了保证比赛的难度。就像赛题里头有说用例可能无解(实际业务中可能出现),但是实际上初赛用例都是可以有解的。但是复赛有选手自设计用例,这一点无法保证。选手写代码时需要注意这一点。 复赛仍然禁止无解的情况出现,因为无解的情况主要看谁算得快,而判断无解很容易作弊,会导致对战环节失去意义。 问:规则中未涉及的是不是就是合法的 答:总体来说,规则没讲的都是允许的。当然,还要加一句大家很痛恨,我也很痛恨,但是事实就是这么蛋疼的一句话,”官方保留最终解释权“。 问:复赛是否允许使用开源库、商用库? 答:复赛和决赛阶段,核心算法只能使用自己写的代码,可以参考别人的实现,但是应该给出来源信息。使用STL库等不涉及核心算法的通用工具类库不受限制。 问:复赛的机器配置是什么样的? 答:跟初赛一样,还是单核的 问:复赛试题中路径重合度的现实意义是什么? 答:边对应着网络中光纤、网线的概念,在网络中,如果一根线断了(如道路施工时挖断),需要将业务切换到另外一条备用路径上。因此,主备路径重合的边越少,则网络的整体可靠性越高。 问:是否可以构造不合法的用例,让对手算不出来而失败? 答:不可以。要求所有的用例都是合法的(符合题目描述即为合法)。对未能通过用例合法性检查的,会被判定本对战局失败。双方都算不出有效解的,也会判出题方失败。 在选手上传用例时,服务器会进行用例合法性检查。 问:什么叫做”使用一套核心算法和代码“解题? 答:制定这个规则的初衷是为了避免选手的程序对于自己设计的用例”特意“优化,以至于出题人的程序优势过大。不符合”使用同一套算法和代码“的行为包括: 1、对于不同的用例,使用不同的算法处理 2、程序中,使用用例的某些特征值进行特殊处理,如识别到为自己出的用例,而进行特别的处理 3、针对不同的用例,预先设定不同的参数(如遗传算法中的参数); 补充不属于作弊的例外情况: 1、遗传算法中的代数有时需要根据规模调整,这个属于正常的算法行为。[/quote [quote=引用 楼主 frostbolt 的回复:] 问:MAX_LINE_LEN不够用怎么办? 答:请参考此贴:http://bbs.csdn.net/topics/391945538。官方在复赛中,会在后台将编译包中的MAX_LINE_LEN定义长度修改为12000,可以容纳最多1999条边的结果输出。 问:用例中的必经顶点列表可以为空吗? 答:可以,请参见题目的描述:”DemandID里面第一行为1,第二行为2,表示路径索引,1表示P’,2表示P’’,SourceID为起始顶点s的索引,DestinationID为终止顶点t的索引,IncludingSet表示必须经过的顶点集合V’或V’’,其中不同的顶点索引之间用“ | ”分割,如果该路径没有必经顶点要求,则此处输入NA。“ 初赛是我们出的用例,必经顶点为空的情况(实际业务中可能出现)没有出现,是为了保证比赛的难度。就像赛题里头有说用例可能无解(实际业务中可能出现),但是实际上初赛用例都是可以有解的。但是复赛有选手自设计用例,这一点无法保证。选手写代码时需要注意这一点。 复赛仍然禁止无解的情况出现,因为无解的情况主要看谁算得快,而判断无解很容易作弊,会导致对战环节失去意义。 问:规则中未涉及的是不是就是合法的 答:总体来说,规则没讲的都是允许的。当然,还要加一句大家很痛恨,我也很痛恨,但是事实就是这么蛋疼的一句话,”官方保留最终解释权“。 问:复赛是否允许使用开源库、商用库? 答:复赛和决赛阶段,核心算法只能使用自己写的代码,可以参考别人的实现,但是应该给出来源信息。使用STL库等不涉及核心算法的通用工具类库不受限制。 问:复赛的机器配置是什么样的? 答:跟初赛一样,还是单核的 问:复赛试题中路径重合度的现实意义是什么? 答:边对应着网络中光纤、网线的概念,在网络中,如果一根线断了(如道路施工时挖断),需要将业务切换到另外一条备用路径上。因此,主备路径重合的边越少,则网络的整体可靠性越高。 问:是否可以构造不合法的用例,让对手算不出来而失败? 答:不可以。要求所有的用例都是合法的(符合题目描述即为合法)。对未能通过用例合法性检查的,会被判定本对战局失败。双方都算不出有效解的,也会判出题方失败。 在选手上传用例时,服务器会进行用例合法性检查。 问:什么叫做”使用一套核心算法和代码“解题? 答:制定这个规则的初衷是为了避免选手的程序对于自己设计的用例”特意“优化,以至于出题人的程序优势过大。不符合”使用同一套算法和代码“的行为包括: 1、对于不同的用例,使用不同的算法处理 2、程序中,使用用例的某些特征值进行特殊处理,如识别到为自己出的用例,而进行特别的处理 3、针对不同的用例,预先设定不同的参数(如遗传算法中的参数); 补充不属于作弊的例外情况: 1、遗传算法中的代数有时需要根据规模调整,这个属于正常的算法行为。
凭什么只有遗传算法可以设置参数??我相信任何一种算法里面肯定都会涉及到参数。众所周知,参数对结果的影响是巨大的,根据规模设置参数对于每个算法来说都很重要。我们自己设计的算法,里面有一个参数是控制宽度的,宽度越大,费时越多,但搜到的解也越好。初赛的时候就是通过不断的变换参数使自己的时间和解都比较优,然后取得不错的成绩,本质上跟遗传的代数性质上是一模一样的。现在复赛不让根据规模设计参数,我只好思考设计一个近似的公式去求参数,虽然这样求得的近似参数并不是最好。如果遗传算法可以根据规模设置参数,而不需要公式计算,那我请问比赛公平性在哪里?这样如何避免他们针对自己的用例优化?虽然我一开始就讨厌采取对战形式,但是好歹是公平的,我可以接受。但是现在赛制的坑要用比赛公平性去补,我坚决反对!一视同仁,反对特殊!
SunliyMonkey 2016-05-07
  • 打赏
  • 举报
回复
这种剪枝行不行: 1. 核心算法,可以认为是bfs变种(还是比bfs高级不少) 2. 在搜索过程,会有估价函数对路径进行评判,这里面会有多个估价函数,根据所有的估价函数得到一个最优的值。 其中某估价函数在规模小(这里的规模小,不是狭隘的总点数低,也并非针对特定case的优化,只是为了求出更精准的估价),才会启动。 好吧,就纠结该估价函数算不算违规了。 对于这种, 整体搜索,存在多个估价函数的,分情况启动估价函数。不知算违规不?
frostbolt 2016-05-06
  • 打赏
  • 举报
回复
引用 71 楼 qq_24579561 的回复:
我觉得先对一种算法定义一下好吗? 你说遗传算法是一种算法,深搜是另一种算法。那我把遗传算法和深搜组合起来算几种算法?一种,两种?我说这是我自己发明的算法,叫做基于深搜的遗传算法,不可以吗?写进一个程序的算法就叫做一种算法,毕竟之后怎么运行是程序的事,又不是我手动调整的。 所以只需要杜绝测试自己用例作弊这种行为不是就好了吗?所以直接官方最后一天放出9个题目,谁都没做过,这种方法最好,搞什么自行设计用例。
看来这个对抗PK是有人喜欢有人烦,之前把用例从3+3+3改成2+2+5就惹了一堆吐槽,现在改成0+0+9那要炸窝了喔。 一种算法的背景,除了跟对抗有关外,还跟实用性有关,请参见这个帖子的答复:http://bbs.csdn.net/topics/391946410
qq_24579561 2016-05-05
  • 打赏
  • 举报
回复
我觉得先对一种算法定义一下好吗? 你说遗传算法是一种算法,深搜是另一种算法。那我把遗传算法和深搜组合起来算几种算法?一种,两种?我说这是我自己发明的算法,叫做基于深搜的遗传算法,不可以吗?写进一个程序的算法就叫做一种算法,毕竟之后怎么运行是程序的事,又不是我手动调整的。

所以只需要杜绝测试自己用例作弊这种行为不是就好了吗?所以直接官方最后一天放出9个题目,谁都没做过,这种方法最好,搞什么自行设计用例。
FLX_HITsz 2016-05-04
  • 打赏
  • 举报
回复
再问官方大大一个问题,我目前的算法还根据我每次迭代的速度进行了一个线性函数得到一个阈值,达到这个阈值之前我一直在搜集迭代中产生的子集并不断训练,有点类似于branch and cut 的pool部分,达到阈值后将运用所有的搜索子集到算法中进行剪枝,并实时更新这个子集,然后开启无解失败检测,当搜索方向找不到解,则记录到此方向的直方图中,当直方图最大值达到恒定阈值5(经验值,所有案例都是这个值)以后,说明目前训练的子集剪枝是错误的,则回退到训练子集阶段,从新训练求解,这边有一个阈值设置的问题,是根据我的算法每次的迭代速度得到的,所有案例都是用一个线性映射,并没有对案例特殊处理,这样可以的吧,要不然就没法做了…
frostbolt 2016-05-04
  • 打赏
  • 举报
回复
引用 65 楼 HJZhuiZhe 的回复:
版主,我可以用一个算法先对用例进行判断,看它是稀疏图还是密图。我的算法要对稀疏图和密图进行不同操作,才能得到较优解,这样可以吗?
什么叫做不同的操作啊?
HJ-追夢者 2016-05-04
  • 打赏
  • 举报
回复
版主,我可以用一个算法先对用例进行判断,看它是稀疏图还是密图。我的算法要对稀疏图和密图进行不同操作,才能得到较优解,这样可以吗?
frostbolt 2016-05-04
  • 打赏
  • 举报
回复
引用 68 楼 HJZhuiZhe 的回复:
[quote=引用 66 楼 frostbolt 的回复:] [quote=引用 65 楼 HJZhuiZhe 的回复:] 版主,我可以用一个算法先对用例进行判断,看它是稀疏图还是密图。我的算法要对稀疏图和密图进行不同操作,才能得到较优解,这样可以吗?
什么叫做不同的操作啊?[/quote] 就是稀疏图剪枝少一点,密图剪枝狠一点[/quote] 貌似也可以
frostbolt 2016-05-04
  • 打赏
  • 举报
回复
引用 67 楼 SunliyMonkey 的回复:
复赛测试用例, 官方会放出几组case??? 今天发现官网发出了第三组case, 请问后续还会继续放case么? 最终会放多少case出来?
就这么多啦
加载更多回复(65)

127

社区成员

发帖
与我相关
我的任务
社区描述
华为软件精英挑战赛(Huawei Code Craft)是华为公司面向全球大学生举办的一年一度的大型软件竞赛,致力于让参赛学生感受软件改变世界魅力,展示软件设计与编程潜力,享受Coding解决问题
开源软件软件工程软件构建 技术论坛(原bbs)
社区管理员
  • HUAWEI Code Craft社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧