- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
具体来说,我想最大化我的利润。我从一个前缀节点(总部)开始,每次去到不同的节点都会获得一些利润(对于一个特定的节点,我只能获得一次这个利润,但我可以去那里多次)。但是要到达任何节点,我都要付出一些代价(沿着每条路径行进)。我想最大化我的收入并返回总部。如果这会导致我的收入最大化(因为到达那里的成本),我可以不去某些节点。我也可以在路线上多次遍历路径。有这样的TSP版本吗?可以解决吗? (我在想 Warshall 的可能适用)。
最佳答案
下面是一些试图解决这个问题的未经测试的伪代码。您只需要不断尝试节点,直到达到利润限制。
Home = StartNode
Result = [Home]
MaxProfit = 0
Sub Solve(last, currentProfit, path, visitedSet)
If currentProfit + graph.Nodes.Except(visitedSet).Sum(n => n.Profit) <= MaxProfit Then
Return
End If
If node == Home AndAlso currentProfit > MaxProfit Then
Result = path
MaxProfit = currentProfit
End If
For Each node In graph.Nodes
edge = graph.Edges.FirstOrDefault(e => e.Has(last) && e.Has(node))
If edge Then
profit = -edge.Cost
If Not visitedSet.Contains(node) Then
profit += node.Profit
End If
Solve(node, currentProfit + profit, path.Copy().Add(node), visitedSet.Copy().Add(node))
End If
Next
End Sub
Call Solve(Home, 0, [Home], [])
编辑 一项改进可能是预先计算从每个节点回家的最便宜路线,并使用它来优化利润约束。
关于algorithm - Travelling Salesman 的最大化版本,您不必前往某些节点并且可以通过多条路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946447/
我目前正在研究旅行推销员的问题,想知道是否有人能够简单地解释持有的卡尔普下限。我一直在看很多论文,我正在努力理解它。如果有人可以简单地解释它,那将是很好的。 我也知道,有一种方法可以计算不包括起始顶点
具体来说,我想最大化我的利润。我从一个前缀节点(总部)开始,每次去到不同的节点都会获得一些利润(对于一个特定的节点,我只能获得一次这个利润,但我可以去那里多次)。但是要到达任何节点,我都要付出一些代价
通过尝试所有可能性,计算给定字符串的所有字符串排列可以在 O(n!) 中解决。 现在,看看旅行商问题,我们可以通过尝试城市的所有排列来解决它。假设我们有城市 A、B 和 C。 假设我们从城市 A 开始
我刚刚下载了 ai4r 库 http://ai4r.rubyforge.org/我正在使用遗传算法从多个地方获得一条好的路线,就像这样: http://ai4r.rubyforge.org/genet
我目前有一个数据库来跟踪销售团队的销售情况。我有一个查询将提取每个销售员及其相关的总数,但我希望按周对此进行分割,然后如果可能的话在一周内汇总显示。 我当前使用的查询是: SELECT ROUND(S
我是一名优秀的程序员,十分优秀!