2

在 Microsoft Solver Foundation 中,我想知道是否可以添加一个参数,其值取决于决策值。

即我想要 TSP 模型的一些东西,但它也应该考虑从一个点到另一个点的流量。请注意:交通取决于销售人员在该路线上行驶的时间。

这是模型:

我有一个城市之间所有可能组合的矩阵。

决策变量是Order销售人员的路线。0 是第一个,1 秒,...

我有一个属性timeToTravel,该属性绑定到一个属性,该属性从该值计算路线发生的时间,Order并返回行程时间,包括当天该时间的交通量。

在我看来,参数值在Solve调用函数时被读取一次并缓存,我正确吗?如果是,有没有人有任何建议来解决这个问题?

最初我在 MSF 论坛上问了这个问题,但我认为它会在 Stack Overflow 上得到更多关注。此外,我对 MSF 以外的其他求解器持开放态度,但我更愿意留在 .NET 环境中。

4

1 回答 1

1

这里有一篇关于使用 Solver Foundation 解决“静态”旅行商问题的好文章。如果您还没有自己的实现,也许您可​​以将您的解决方案基于该代码。

这是上述文章的目标表述:

// Goal: minimize the length of the tour.
Goal goal = model.AddGoal("TourLength", GoalKind.Minimize,
    Model.Sum(Model.ForEach(city, i => 
        Model.ForEachWhere(city, 
            j => dist[i, j] * assign[i, j], j => i != j))));

如果我理解正确,在您的问题中,两个城市之间旅行的时间取决于一天中的时间?

我不相信您可以dist[,] double在优化期间动态更新数组。但是,使用Model类的构建块,应该可以将dist[,]数组重新表示为一组函数,这些函数依赖于已行驶的总距离/时间。

为了完整起见,这里是另一篇关于使用 OML 制定 TSP 的有趣文章。

于 2012-06-15T05:43:14.953 回答