您好
,我是 optaplanner 的新手。我正在尝试使用 vrp (tw) 示例。
我想设置实际距离(路线距离)以获得真正的解决方案。
我在双 NXN 矩阵中的所有点之间都有实际距离(距离(a,b)<> 距离(b,a)),那么,如何使用 .xml(.vrp)输入文件中的矩阵来解决 vrp问题 ?
注意:我的矩阵大约从 2X10X10 到 2X100X100。
提前致谢。
欧普
问问题
971 次
2 回答
2
这是我走的路。可能有比这更好的解决方案 - 我不得不承认我刚刚开始使用 Optaplanner。欢迎任何关于改进的建议。
希望这可以帮助。布鲁斯,保罗
我的矩阵采用“从客户”“到客户”“距离”的形式,我创建了一个距离类。 *在导入器中,我为每个位置构建了一个距离图:*
readConstantLine("CustFrom CustTo Distance");
long locationId = -1;
line = bufferedReader.readLine();
distanceMap = new HashMap<Long, Double>(locationListSize);
while (line != null && !line.trim().isEmpty()) {
String[] lineTokens = splitBySpacesOrTabs(line.trim(), 3);
if (locationId != Long.parseLong(lineTokens[0])){
if (distanceMap.isEmpty() == false){
Location location = new Location();
location = locationList.get((int) locationId);
distance.setDistanceMap(distanceMap);
location.setDistance(distance);
locationList.set((int) locationId, location);
}
locationId = Long.parseLong(lineTokens[0]);
distance = new Distance();
distanceMap = new HashMap<Long, Double>(locationListSize);
}
distanceMap.put( Long.parseLong(lineTokens[1]), Double.parseDouble(lineTokens[2]));
line = bufferedReader.readLine();
}
if (distanceMap.isEmpty() == false){
Location location = new Location();
location = locationList.get((int) locationId);
distance.setDistanceMap(distanceMap);
location.setDistance(distance);
locationList.set((int) locationId, location);
在位置类中,我使用以下方法获取距离:
public int getMilliDistanceDistanceMap(Location location) {
// Implementation distanceMap
return distance.getDistance(location, this) ;
距离类方法如下所示:
public int getDistance(Location fromLocation,Location toLocation )
{
double distance = toLocation.getDistance().distanceMap.get(fromLocation.getId());
return (int) (distance * 1000);
}
于 2014-01-30T16:40:58.797 回答
0
2019年起,从optaweb-vehicle-routing开始
于 2019-09-10T07:00:23.230 回答