Project_FIN_ForLifeBelowRiver

Yesl·2022년 12월 5일
0

자료구조(실습)

목록 보기
8/8

📌 문제 소개

📖 내가 생각한 하천 부유 쓰레기의 문제?

출처 : 생태계 위협하는 하천 쓰레기...AI 차단막으로 막는다, SBS 서동균 기자, 22.10.15


위 링크의 기사 내용을 요약하자면,

차단막 양 끝에 설치된 카메라로 AI가 쓰레기의 양과 종류까지 높은 정확도로 판별해 알려주는 기술,

그리고 이들을 차단막이 막는 기술을 국내 연구진이 개발하였다는 내용이다.

내가 '여기서 어떻게 하면 이렇게 좋은 내용을 더 발전시킬 수 있을까?' 라는 고민을 해본 결과,

1. 고정된 카메라 위치를 탈피해 드론을 활용한다면 더 퀄리티가 높은 image data를 얻을 수 있을 것 같다. 그리고 뉴스에 나온 모델을 적용시킨다.

2. 뉴스에 나온 모델을 적용시켜 쓰레기를 판별하고 해양으로 흘러들어가는 것을 잘 막았다면, 이제는 수거를 할 차례다. 그 수거는 로봇을 활용하면 좋을 것 같다.

는 것이 나의 아이디어다.

여기서 2번 아이디어를 조금 더 디벨롭하면,

1개의 로봇이 더 효율적으로 많은 쓰레기를 수거하기 위해

쓰레기를 수거하는데 프로그램이 우선순위를 제공하여 스케줄링 한다면

하천 오염도를 더 줄이고, 에너지 효율과 재정적인 측면에서 이득을 볼 것이라고 예상한다.

📖 프로그래밍을 위한 가정!

출처 : Pixar's 'WALL-E' Dystopian Predictions Came True

1. 이 무인 로봇처럼 움직이며, 더 많은 양의 수거를 위해 이 무인 로봇이 뒤에 달고 있는 1개의 그물뿐만 아니라 양쪽으로 1개씩 그물을 더 단다고 가정한다.

2. 1번처럼 양쪽에 그물을 단다면 로봇의 속도와 배터리 효율에 한계가 있음을 고려하여, 로봇의 진행방향과 일치하는(물리적으로 가장 저항을 덜 받는 방향) 기존 위치 그물에 가장 무거운 쓰레기들을 넣고, 로봇 진행에 방해가 되지 않도록 양쪽 그물에 무게 균형을 잘 맞춰서 그 다음으로 무거운 쓰레기들을 집어넣는다.

3. 2번처럼 집어넣을 때, 효율적인 동선을 고려하기 위해 수거하는 쓰레기의 우선순위를 로봇에게 알려주게 된다.

📌 구현하는 방법?

📖 프로그램에서 사용하는 자료구조!

선택한 자료구조?

AVL Tree!

AVL Tree를 선택한 이유?


위와 같은 상황에서는 균형 트리가 최적이라고 생각했다.

그중에서도 Red-Black 트리와 AVL 트리 사이에서 고민했다.

AVL트리는 더욱 엄격한 균형을 이루고 있기 때문에 Red-Black 트리보다 더 빠른 조회를 제공하지만, 이에 비해 Red-Black 트리는 상대적으로 느슨한 균형으로 인해 회전이 거의 이루어지지 않기 때문에 AVL트리보다 빠르게 삽입 및 제거 작업을 수행한다는 장점이 있었다.

그래서 보통은 Red-Black 트리를 더 많이 사용하지만, 나는 물 위에 있는 기계의 수평을 맞춰야 하기 때문에 엄격한 균형을 이루는 것이 더 중요하다고 판단했다. 그래서 AVL Tree를 선택하게 되었다.

AVL Tree는 무엇인가?

제가(글쓴이가) 정리해놓은 글을 참고바랍니다!

https://velog.io/@iamyesl/augmentation

AVL Tree를 로봇 프로그램에 적용하는 방법?


Python을 사용했습니다.

1. 위경도 Data를 활용해 주변(예를 들면, 1개의 하천 내)에 있는 쓰레기들을 Groupping합니다.

2. 그 Data들의 (유리, 플라스틱, 캔, 종이순의 무거운 순위)*(입력값으로 받은 플라스틱·캔·유리·종이별 무게)를 곱하여 값을 도출합니다.

3. 2번의 값을 기준으로 가장 무거운 쓰레기들은 중간그물로, 남은 data들은 2번의 값을 기준으로 AVL트리를 만든다.

4. 3번을 기준으로 중간 그물중 로봇과 가장 가까이 있는 쓰레기, 그 다음으로 왼쪽 그물에서 가장 가까이 있는 쓰레기, 오른쪽 그물에서 가장 가까이 있는 쓰레기, 중간 그물 중 로봇과 그 다음으로 가까이 있는 쓰레기,... 이와 같은 순으로 우선순위를 부여하고, 우선순위 순으로 쓰레기의 이름을 출력한다.

📌 Data 소개

내가 정의한 문제에 따르면, 위경도 소수점 아래 자리수가 많은 데이터가 필요하다. 따라서 그에 맞는 학우 총 10명의 Data를 사용했다.

하천별로 그루핑한 Data가 필요했으므로, 그에 맞게 직접 그루핑하였고, 그 파일들을 기준으로 코드에 사용하였다.

📌 코드 결과?

https://8iggy.tistory.com/111

이 블로그에 소개되어있는 AVL트리 Python코드를 바탕으로 구현해보았다.

구현 중 문제는, data들의 이름이 문자가 아닌 숫자여야 더 사용하기 좋다는 점이다. 그래서 data들의 이름을 숫자로 바꿔주었다.

이처럼 결과값이 나오는 것을 확인할 수 있다. 총 30개의 data를 넣어봤을때, 가장 무거운 10개의 값들은 뒤로 가고, 그다음으로 무거운 순서대로 path를 출력했다. 이제 로봇은 path로 나오는 내용들 순서대로 왼쪽과 오른쪽을 번갈아 가며 쓰레기를 넣어주기만 하면 된다.

📌 기대되는 효과?

유형 효과

로봇을 효과적으로 움직일 수 있게 하기 때문에, 배터리와 에너지 효율을 높일 수 있고, 그 자체가 바로 실제 로봇 가동 비용을 줄일 수 있다.

무형 효과

꽤 비싼 값의 쓰레기 로봇의 수명을 늘릴 수 있고, 길게 보아서는 다른 쓰레기 로봇들이 생길 때 이를 참고한다면 더 좋은 결과의 로봇이 생길 것이라고 생각한다.

단점으로는 avl트리의 값들에다 위경도와 이름들도 함께 하여 출력하고 싶은데, 아직 거기까지는 구현을 하지 못했다. 좀 더 코드를 보완할 필요가 있다.

profile
Studying for "Good Health & Well-Being"...

0개의 댓글