Sle*_*ock 7 python algorithm routing heuristics traveling-salesman
我是整个旅行商问题以及stackoverflow的新手,所以如果我说一些不太正确的话,请告诉我.
介绍:
我正在尝试为涉及多个国家(地区)内的多个城市(节点)的游戏编写利润/时间优化的多重交易算法,其中:
问题参数:
内存中已存在一个数据库(python:sqlite),它根据源城市和目的地城市进行交易,中间的最短路径城市作为数组和金额,以及限制因素及其总资本回报率(或在没有任何因素限制的情况下,那么只是给出总资本回报最高的方法).
优化
首先,我意识到因为我对时间有限制,并且我知道每一跳需要多长时间(包括-1用于启动交易),我可以将图形限制为跳数低于或等于的所有交易max_hops=int(max_time/route_time) -1
.我删除了不属于这个时间限制的交易数据库的元素,修剪最短路径长度大于的城市max_hops
.
我再次进入交易数据库,其中包括我当前城市与所有现有交易的起始城市之间的最短路径,而不是我当前的城市,并给予他们0%的回报.我会将这些限制在城市啤酒花的数量小于的地方max_hops
,我还会计算当前城市到起始城市加上交易最短路径的啤酒花是否会超出max_hops
并删除那些超出此限制的城市.
然后我采取其余的交易,(current_city->starting_city)
并在所有目的地和起始城市之间添加0%的交易路线,因为啤酒花不会超过max_hops
然后,我为所有不在交易数据库中的城市做最后一次修剪,作为起始城市,目的地城市或最短路径城市阵列的一部分.
图搜索 我留下了一个(多)较小的交易图表,在时限内(即30分钟)可行.
因为所有连接的节点都是相邻的,所以连接默认都是加权1.我将%return除以交易中的跳数然后取倒数并加上+ 1(这意味着一个权重为1.01) 100%回程路线).在收益率为0%的情况下,我加上...... 2?
它应该返回最有利可图的路线......
大多,
当我遗留金钱或空间并通过路径离散到单一贸易路线时,如何添加获取多条路线的能力?由于在城市内以多种价格和数量出售货物的性质,将会有很多重叠的路线.
我如何惩罚启动新的贸易路线?
图搜索在这种情况下是否有用?
在旁注,
我认为您已经定义了一些适合称为库存路由问题的问题。我认为既然你既有商品又有硬币,旅行者就会沿着所选路线进行买卖。我们首先假设一切都是确定性的——所有商品的需求量、可用供应量、买卖价格等都是预先知道的。随机版本变得更加困难(显然)。
目标之一是在钱包和商品受到限制的情况下实现利润最大化。如果旅行者必须回家,它看起来就像一次旅行,如果不是,它看起来就像一条路。由于您没有要求旅行者访问每个节点,因此它不是 TSP。这很好——最短路径问题通常比 TSP 更容易解决。
由于侧面的限制和每个节点后续步骤的选择有限 - 我会考虑使用动态编程作为解决方案技术的第一次尝试。它将帮助您枚举您在每个阶段购买和出售的商品,并且阶段数量有限。此外,由于您对决策施加了时间限制,因此限制了选择的状态空间。
对于那些建议 Djikstra 算法的人来说——你可能是对的——标签约定需要包括时间、硬币、商品以及相应的利润。由于利润的复杂性增加,Djikstra 的假设可能不适用于此。还没有想清楚。
这是资本预算中类似问题的链接。
祝你好运 !