C# Google ortools-容量受限车辆路径pb

C# Google ortools-容量受限车辆路径pb,c#,or-tools,C#,Or Tools,以下代码的问题是: 即使我只需要交付10个位置,并且在位置0处设置了一个车辆段,在本例中,车辆1、2、3、4似乎在位置10、11、12、13处设置了车辆段。这些地点不存在。我得到的10是从0到9的数字 另一方面,业务逻辑似乎还可以: 当我将离开仓库的成本和返回仓库的成本(值10)分离出来时,我得到了预期的结果:104。不包括停车场的城市之间只有4次行程 这是谷歌的bug还是工具的bug publicstaticvoidmain(字符串[]args) { 新CVRP().求解(10); } 私有类

以下代码的问题是:

即使我只需要交付10个位置,并且在位置0处设置了一个车辆段,在本例中,车辆1、2、3、4似乎在位置10、11、12、13处设置了车辆段。这些地点不存在。我得到的10是从0到9的数字

另一方面,业务逻辑似乎还可以:

当我将离开仓库的成本和返回仓库的成本(值10)分离出来时,我得到了预期的结果:104。不包括停车场的城市之间只有4次行程

这是谷歌的bug还是工具的bug

publicstaticvoidmain(字符串[]args)
{
新CVRP().求解(10);
}
私有类:NodeEvaluator2
{
公共覆盖长期运行(int第一个索引,int第二个索引)
{
如果(第一个指数=0 | |第二个指数=0)
返回10;
返回1;
}
};
私有类需求:nodeeEvaluator2
{
公共覆盖长期运行(int第一个索引,int第二个索引)
{
返回1;
}
};
专用void Solve(int位置)
{
var nr_车辆=5;
var路线=新路线模型(位置,NRU车辆,新[]{0,0,0,0,0},新[]{0,0,0,0});
Console.WriteLine(“仓库:+routing.GetDepot());
NodeEvaluator2 demandCallback=新需求();
路由.AddDimension(demandCallback,0,3,true,“容量”);
变量距离=新的随机数();
路由。设置成本(距离);
var搜索参数=
RoutingModel.DefaultSearchParameters();
searchParameters.FirstSolutions策略=
FirstSolutionStrategy.Types.Value.PathCheapestArc;
var solution=routing.SolveWithParameters(searchParameters);
如果(解决方案!=null)
{
var output=“总成本:”+solution.ObjectiveValue()+“\n”;
//放弃订单
var=”;
对于(变量顺序=0;顺序<位置;++顺序)
{
if(solution.Value(routing.NextVar(order))==订单)
{
放弃+=“”+订单;
}
}
如果(已删除。长度>0)
{
输出+=“删除的订单:“+DROPED+”\n”;
}
//路线
对于(var车辆=0;车辆”;
}
如果(route.Length>0)
路由=路由+“0”;
}
输出+=路由+“\n”;
}
控制台写入线(输出);
}
}

您必须将订单包装在

route += order + " Load(" + solution.Value(local_load) + ") -> ";
内部模型.IndexToNode(order),如下所示

route += model.IndexToNode(order) + " Load(" + solution.Value(local_load) + ") -> ";
route += model.IndexToNode(order) + " Load(" + solution.Value(local_load) + ") -> ";