我正在计划一个侦察营,需要自动规划。
我有一组侦察兵需要按照一定数量的帐篷进行分组,但受到许多限制。
在约束中:
我有超过500名侦察兵和大约20个帐篷。
我正在寻找一个很好的算法来解决这个问题 我可以将它建模为MILP,但它太大而无法有效地解决,并且无法提供近似解决方案,这基本上使它成为一个禁忌。
关于我应该关注什么的任何建议?禁忌?模拟退火?其他启发式方法?
答案 0 :(得分:1)
如果你说有很多限制,那么MILP将是最好的方法。但是,如果您提到的约束是唯一的,那么可以考虑采用以下方法。
将此建模为运输问题。
首先过滤掉不可用的帐篷和不可用的侦察兵。
对于每种颜色的帐篷,计算每个颜色帐篷的总容量=总和(tentCapacity)。 这些颜色应为目的地。
根据帐篷的首选颜色对学生进行分组。这些应该是来源。
在源/目标矩阵中,将学生运送到其首选颜色帐篷的成本设为零,其他颜色的成本为1。
IMO可以使用运输问题解决技术来解决:http://www.me.utexas.edu/~jensen/models/network/net8.html
编辑:上述运输问题制定是一种非常通用的方法,您可以在其中处理不同优先级的多种偏好。如果每个侦察兵只有一个偏好,那么我认为问题是微不足道的,只需先填满所有首选的彩色帐篷,然后将剩下的侦察兵分发给其他非首选帐篷。答案 1 :(得分:1)
这与hospital bed planning(监狱病床分配和酒店房间分配)非常相似。基本上,患者是侦察员,床是睡袋,房间是帐篷。寻找INRC2011的实现,例如this one:
模拟退火,禁忌搜索和延迟接受在医院病床规划方面都很有效。一般来说,延迟接受在OptaPlanner目前针对该用例的基准测试中获胜。