🛵탄소 배출량 산정 방법 - 라이더

CarbonMiner는 각 배달 경로에 대한 탄소 배출량을 계산하기 위해 거리 기반 접근 방식을 채택한다. 이 시스템은 배송 회사에서 제공하는 GPS 데이터 포인트를 활용하여 이동한 거리를 정확하게 측정한 후 관련 탄소 배출량을 추정한다. 계산 방법론은 다음 단계로 구성된다.

1. Data Collection

CarbonMiner에 참여하는 배달 업체는 배송 과정에서 각 배송 차량의 좌표 및 타임스탬프에 대한 정보가 포함된 GPS 데이터에 대한 액세스를 제공한다. 이 데이터는 이동한 거리와 그에 따른 탄소 배출량을 계산하는 데 필수적이다.

배달 업체에서 제공받는 정보는 다음과 같다:

  • 배달 출발지와 도착지점의 GPS 좌표

  • 배달원의 이동수단

2. 거리 계산

CarbonMiner는 GPS 데이터를 사용하여 알고리즘을 적용하여 두 GPS 지점 사이 거리를 계산한다. 거리 계산 시 타사의 네비게이션 API 서비스를 이용하면 두 API에 문제가 생길 경우 서비스에 차질이 생길 수 있기 때문에, 별개로 거리 계산 알고리즘을 개발해 사용한다. CarbonMiner에서 채택한 방법은 배달의 민족에서 사용했던 방법과 유사하게 거리 측정을 진행한다.

2.1. Hexagon 좌표 변환

위도 경도 좌표를 Hexagon 좌표로 변환한다. 하나의 유닛은 6방향으로 이동할수 있고 모든 방향의 거리는 동일하다고 가정해서 좌표계를 단순화한다.

위도와 경도를 입력받아 헥사곤 코드로 변환하는 과정은 아래 코드를 참조한다:

https://www.redblobgames.com/grids/hexagons/#field-of-view

2.2. 길찾기 알고리즘 적용

A Star algorithm을 이용해 6방향에 대한 길찾기를 진행한다.

아래는 A star 알고리즘의 핵심 부분의 pseudo code이다.

				PriorityQueue<HexDepth> frontier = new PriorityQueue<>(10000, (o1, o2) -> o1.priority - o2.priority);
        frontier.add(new HexDepth(nearStart, 0));
        HashMap<Hex, Hex> cameFrom = new HashMap<>(2500);
        HashMap<Hex, Integer> costSoFar = new HashMap<>(2500);
        cameFrom.put(nearStart, null);
        costSoFar.put(nearStart, 0);

        HexDepth currentDepth;
        while ((currentDepth = frontier.poll()) != null) {
            Hex current = currentDepth.hex;
            if (current.equals(nearGoal)) {
                break;
            }

            // 6방향
            List<Hex> neighbors = new ArrayList<>();
            for (Hex direction : Hex.directions) {
                Hex neighbor = current.add(direction);
                neighbors.add(neighbor);
            }

            for (Hex next : neighbors) {
                int nextHexCost = findHexCost(cacheCosts, bigHexCosts, next);
                int newCost = costSoFar.get(current).intValue() + nextHexCost;
                Integer nextCost = costSoFar.get(next);
                if (nextCost == null || newCost < nextCost.intValue()) {
                    costSoFar.put(next, newCost);

                    int priority = newCost + heuristic(nearGoal, next);
                    frontier.add(new HexDepth(next, priority));
                    cameFrom.put(next, current);
                }
            }
        }

2.3. 배달 데이터 수집 후 거리 비용 계산

Apache Hive에 있는, 배달원들의 배달 중 GPS 데이터들을 모두 수집해 어디가 갈 수 있는 길인지 막힌 길인지에 대한 정보를 구한다. 배달원이 많이 이동한 지점은 거리비용이 낮고, 아닌 지점은 거리 비용이 높다고 설정한다.

2.1.에서 구한 각 Hexagon에 대해 거리 비용을 계산하면 다음과 같다:

2.4. 도로 정보 보강

위를 통해 책정한 거리 비용은 모든 길이 포함되어있지 않다는 문제점과 GPS 위치 추적이 불가한 지역 (터널 등) 의 데이터가 없다는 한계점이 있다.

도로명 주소 데이터와 OSM을 이용해 실제 도로 데이터를 보강한다. 아래는 추가된 도로 데이터를 통해 update한 Hexagon들의 거리비용을 나타낸 것이다.

위 도로정보와 배달원들이 이동한 GPS 기록을 합쳐 각 위치의 최종 거리비용을 결정한다.

최종 거리비용이 계산된 map을 통해 아래와 같이 최단 거리를 구할 수 있다.

3. 탄소 배출량 산정

각각의 연속적인 GPS 지점 쌍 사이의 거리가 결정되면 CarbonMiner는 다양한 유형의 차량 및 연료와 관련된 사전 정의된 배출 계수를 활용하여 탄소 배출을 추정한다. 이러한 배출 계수는 잘 정립된 산업 표준을 기반으로 하며 기술 및 배출 감소 노력의 발전을 반영하기 위해 정기적으로 업데이트된다.

4. 집계 및 검증

각 배달 경로에 대해 계산된 탄소 배출량은 집계되어 CarbonMiner 블록체인에 저장된다. 블록체인의 불변성과 투명성은 기록된 배출 데이터가 변조 방지 및 감사 가능한 상태로 유지되도록 한다. 또한 참여 배달 업체가 제공하는 배출 데이터를 교차 검증하는 검증 메커니즘을 구현하여 시스템의 정확성과 신뢰성을 높인다.

Last updated