[ChatGPT] ChatGPT 활용기 시작

RCC.AI·2024년 7월 26일

GPT

목록 보기
1/4

이번 포스트에서는 ChatGPT 활용기에 대해 포스팅하고자 한다.

챗GPT(ChatGPT)는 OpenAI가 개발한 프로토타입 대화형 인공지능 챗봇이다. ChatGPT는 대형 언어 모델 GPT-3의 개선판인 GPT-3.5를 기반으로 만들어졌으며, 지도학습과 강화학습을 모두 사용해 파인 튜닝되었다.

현재는 GPT-4 모델 및 GPT-4o(omni) 모델을 주로 사용하고 있다.

ChatGPT는 인간과 유사한 글자를 생성하는 뛰어난 기능을 입증했지만 훈련 데이터에 존재하는 편견을 쉽게 상속하고 증폭할 수 있다. 이는 인종, 성별, 언어, 문화 집단에 따른 다양한 견해와 태도 등 다양한 인구통계에 대한 허위 진술이나 부당한 태도로 나타날 수 있다.

모른다는 답변을 내놓을 수 없어 잘못된 내용을 전달할 수도 있다는 점을 유의해야 한다.

GPT 활용기를 앞으로도 계속 포스팅할 계획이다

다각형 중첩 알고리즘

복잡한 코드가 아니라면 간단한 알고리즘은 GPT를 활용하여 짤 수 있다.

지금 설계하고자 하는 알고리즘은 2개의 다각형(사각형이 아님)이 존재할 때 서로 중첩 되는 지의 여부를 확인하는 것이다.

질문 : 파이썬으로 2개 이상의 다각형이 겹치는 알고리즘 만들어줘

GPT 답변 : 다각형이 겹치는지 확인하는 알고리즘은 Computational Geometry의 한 영역으로, "Separating Axis Theorem (SAT)"를 사용하면 2D 다각형의 충돌을 감지하는 데 유용합니다. 이 방법은 각 다각형의 에지에 대해 수직축을 계산하고, 이를 기준으로 투영된 간격이 겹치는지 확인합니다. 모든 에지에 대해 겹치지 않는 축이 하나라도 있으면 다각형이 겹치지 않는다는 것을 알 수 있습니다. 다각형을 정의하고, SAT를 사용하여 겹치는지 확인하는 파이썬 코드를 작성해보겠습니다.

from typing import List, Tuple
import numpy as np

def polygon_edges(polygon: List[Tuple[float, float]]) -> List[Tuple[Tuple[float, float], Tuple[float, float]]]:
    """Return the edges of the polygon as a list of tuples of points."""
    edges = []
    for i in range(len(polygon)):
        start = polygon[i]
        end = polygon[(i + 1) % len(polygon)]
        edges.append((start, end))
    return edges

def normalize(v: Tuple[float, float]) -> Tuple[float, float]:
    """Return the unit vector of the vector."""
    norm = np.linalg.norm(v)
    return (v[0] / norm, v[1] / norm)

def perpendicular(v: Tuple[float, float]) -> Tuple[float, float]:
    """Return a vector that is perpendicular to the given vector."""
    return (-v[1], v[0])

def project_polygon(axis: Tuple[float, float], polygon: List[Tuple[float, float]]) -> Tuple[float, float]:
    """Project a polygon onto an axis and return the minimum and maximum values."""
    dots = [np.dot(axis, point) for point in polygon]
    return (min(dots), max(dots))

def overlap(proj1: Tuple[float, float], proj2: Tuple[float, float]) -> bool:
    """Check if the projections overlap."""
    return proj1[0] <= proj2[1] and proj2[0] <= proj1[1]

def polygons_intersect(polygon1: List[Tuple[float, float]], polygon2: List[Tuple[float, float]]) -> bool:
    """Check if two polygons intersect using the Separating Axis Theorem (SAT)."""
    for polygon in [polygon1, polygon2]:
        for edge in polygon_edges(polygon):
            axis = perpendicular((edge[1][0] - edge[0][0], edge[1][1] - edge[0][1]))
            axis = normalize(axis)
            proj1 = project_polygon(axis, polygon1)
            proj2 = project_polygon(axis, polygon2)
            if not overlap(proj1, proj2):
                return False
    return True

# Example usage
polygon1 = [(0, 0), (2, 0), (2, 2), (0, 2)]
polygon2 = [(1, 1), (3, 1), (3, 3), (1, 3)]
polygon3 = [(3, 3), (5, 3), (5, 5), (3, 5)]

print(polygons_intersect(polygon1, polygon2))  # Should return True
print(polygons_intersect(polygon1, polygon3))  # Should return False

이 코드는 다각형의 에지를 기반으로 수직 축을 구하고, 각 축에 대해 다각형을 투영하여 겹치는지 확인합니다. 다각형 간에 겹침이 없으면 False를 반환하고, 그렇지 않으면 True를 반환합니다. 이 코드는 2D 다각형에 대해 SAT를 사용하여 충돌 감지를 수행합니다.

이와 같이 사람이 일일히 해야했던 구체적인 프로세스를 포함하는 알고리즘을 GPT는 단 몇 초 내에 코드와 부가 설명을 할 수 있다는 것을 알 수 있다.

앞으로도 자주 활용하여 효율이 좋을 것 같다.

profile
따라가기도 벅찬 AI Engineer 겸 부앙단

0개의 댓글