Используя реальные расстояния между точками в optaplanner


Привет

Я новичок в optaplanner. Я пытаюсь использовать пример vrp (tw).

Я хотел бы установить реальные расстояния (маршрутные расстояния), чтобы получить реальное решение.

У меня есть реальные расстояния между всеми точками в двойной матрице NXN (расстояние (a,b)<> расстояние (b,a)), поэтому, как я могу использовать матрицу во входном файле.xml (.vrp) для решения vrp проблема?

Примечание: моя матрица составляет от 2X10X10 до 2X100X100.

Заранее спасибо.

ОПП

1 ответ

Вот мой путь. Возможно, есть гораздо лучшие решения, чем это - я должен признать, что я только начал играть с Optaplanner. Любые предложения по улучшению приветствуются.

Надеюсь это поможет. Бргдс, Пол

Моя матрица имеет вид "От клиента", "До клиента", "Расстояние", и я создал класс "Расстояние". * В Importer я строю карту расстояний для каждого местоположения: *

 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);
}

Начиная с 2019 г., начните с https://github.com/kiegroup/optaweb-vehicle-routing

Другие вопросы по тегам