问题:我需要将(n)个雇员从办公室放到他们的家中(可用坐标)。我有(x) 7人座和(y) 4人座出租车。
例如。如果我有15名员工,则算法可能会告诉我使用1个(7人座)驾驶室和2个(4人座)驾驶室,并且每个驾驶室中都有员工,如下所示:
[(E2,E4,E6,E8),(E1,E3,E5,E7,E9,E10,E12),(E11,E13,E14,E15)]
方法:我认为这是一个旅行推销员问题,有多个推销员,每个城市可以旅行的城市数量上限。同样,推销员也无需回到原点。我想到了 Ant 的殖民地问题,但我无法真正明智地选择哪种算法
要求:我真的需要算法。无论是TSP还是 Ant 的殖民地,都没有关系。我欢迎您提出意见,但我确实需要算法。
最佳答案
这是成本最小化的问题,而不是旅行商的问题。从某种意义上说,它与TSP有关,TSP是一个非常具体的成本最小化问题。
该解决方案包括三个步骤:
cost(path) = distance(furthest node and origin) + taxi_cost(nodes) + sum(distance between nodes)
比较路径和/或蛮力所有潜在的网络。网络是路径的布局。请勿分路!!capacity
。如果您还希望选择最便宜的方式来运送员工,请使用utility(taxi) = capacity/cost
。因此,我们最简单的解决方案就是贪婪。谁在乎空的空间?如果您真的想完美地填充出租车(而不是节省成本),那么您将需要一个更加复杂的解决方案。您只需指定最小距离作为度量标准(每增加一个出租车费用乘以成本)。我认为这是说“我不想支付太多”的代理。因此:
taxi_cost(nodes) = math.floor(amount(nodes)/max(utility(taxis)+1)
。该方程式选择最便宜,最宽敞的出租车,并计算出要完全服务该路线需要多少出租车。 sum(cost(path))
上面的算法不是完美的,但是它将具有许多理想的趋势。
每一步接近完美的成本都比上一步高出许多倍,因此,如果解决方案提供所需的功能,那么返回率降低是可以接受的。尽管该算法进行了一些潜在的次优折衷,但它们具有巨大的值(value)。您的出租车路线网络变得更容易修改。
我已经为this answer写了深入的寻路指南。寻路文章很少,只是没有深入探讨很多问题空间。如果您有多个优先级,那么好的成本函数可以为您提供近乎完美的解决方案。不幸的是,好的成本函数是特定于域的,因此您需要自己识别它们。如果您不确定如何创建具有某些特征的路径,请随时告诉我,我将帮助您找到一个好的成本函数。