取决于MSF中的决策的参数

时间:2012-06-14 19:40:04

标签: c# .net optimization constraint-programming ms-solver-foundation

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

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

以下是模型:

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

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

我有一个属性timeToTravel,该属性绑定到一个属性,该属性根据Order值计算路由的发生时间,并返回包含当天该时间的流量的旅行时间

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

最初我问了这个问题on the MSF forum,但我认为它会更多关注Stack Overflow。此外,我对MSF以外的其他解决方案持开放态度,但我更愿意留在.NET环境中。

1 个答案:

答案 0 :(得分:1)

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

这是上述文章的目标公式:

// 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[,]数组重新表示为一组依赖于已经行进的总距离/时间的函数。

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