의외로 인류가 아직도 완전히 풀지 못한 수학 문제
코미

Lv.1 코미 (104.♡.68.24)

2024년 11월 12일 AM 10:32 · 수정됨(11:46)

조회 1,400 공감 0

The Moving sofa problem

폭이 1m이고 직각 커브가 있는 복도를 지날 수 있는 도형의 최대 넓이를 구하는 문제입니다.

2차원이어야 한다는 점을 빼면 문제 해결을 위한 도형의 형태에 전혀 제한이 없음에도 불구하고 현재까지 최대 크기가 얼마인지 밝혀내지 못했죠.

게시글 이미지

댓글 (9)

  • 제리아스

    제리아스 Lv.1

    24.11.12 · 118.♡.2.211

    이런건 그냥 ai로 헤딩시켜서 근사치를 얻은후에 공식화 하는게 낫지 않을까 싶습니다.
  • Drum

    Drum Lv.1 → 제리아스

    24.11.12 · 1.♡.144.122

    이게 실상은 최댓값을 찾는 문제라기 보다는 현재까지 발견 한 최댓값이 진짜 최댓값이 맞는지 증명을 하지 못 한 성격의 문제입니다.

    일단 여러 학자들이 보기에 이게 최댓값은 맞는 것 같은데... 정말 이게 끝일까? 하는 의문이 명확하게 밝혀지지 않은거죠.
  • 기후위기

    기후위기 Lv.1

    24.11.12 · 175.♡.225.161

    [https://s3.damoang.net/data/editor/2411/comment_2943803809_vlskC83V_88332b884927f3cff98e1336483cd081601b1c38.gif]

    이 장면 생각나는군요 ㅎㅎ
  • 이적

    이적 Lv.1 → 기후위기

    24.11.12 · 106.♡.142.153

    피벗. 피벗. 피벗.
    샷압! 피벗!
  • 벗님

    벗님 Lv.1

    24.11.12 · 106.♡.231.242

    gemini를 어르고 달랬더니, 이런 코드까지는 만들어주네요.

    *
    import numpy as np
    import matplotlib.pyplot as plt

    # 상수 정의
    CORRIDOR_WIDTH = 1 # 복도 폭
    MAX_ITERATIONS = 1000 # 유전 알고리즘 반복 횟수
    POPULATION_SIZE = 100 # 개체 수

    # 소파 표현 (다각형)
    def create_sofa(num_sides):
    # ... (생략)

    # 소파 회전
    def rotate_sofa(points, angle):
    # ... (생략)

    # 충돌 검사 (복도를 두 개의 직선으로 나누어 검사)
    def check_collision(sofa_points, corridor):
    # ... (생략)

    # 다각형 면적 계산 (가우스의 끈 공식)
    def calculate_polygon_area(points):
    x = points[:, 0]
    y = points[:, 1]
    return 0.5 * np.abs(np.dot(x, np.roll(y, 1)) - np.dot(y, np.roll(x, 1)))

    # 적합도 함수
    def calculate_fitness(sofa_points, corridor):
    area = calculate_polygon_area(sofa_points)
    if check_collision(sofa_points, corridor):
    area *= 0.5
    return area

    # 유전 알고리즘
    def genetic_algorithm(population, fitness_func, corridor, max_iterations):
    for generation in range(max_iterations):
    # 선택 (토너먼트 선택)
    # ...
    # 교차
    # ...
    # 돌연변이
    # ...
    return max(population, key=lambda x: fitness_func(x, corridor))

    # 초기 개체 생성
    def initialize_population(size, num_sides):
    return [create_sofa(np.random.randint(3, num_sides)) for _ in range(size)]

    # 시각화
    def visualize_sofa(sofa_points, corridor):
    # ... (생략)

    # 메인 함수
    if __name__ == "__main__":
    corridor = [(0, 0), (1, 1)] # 복도 좌표
    population = initialize_population(POPULATION_SIZE, 5) # 초기 개체 생성 (최대 5각형)
    best_sofa = genetic_algorithm(population, calculate_fitness, corridor, MAX_ITERATIONS)
    visualize_sofa(best_sofa, corridor)
  • todesto

    todesto Lv.1

    24.11.12 · 76.♡.120.245

    그림보면 답이 없는데....답이 있다는건가요?
  • 일리어스

    일리어스 Lv.1

    24.11.12 · 211.♡.22.79

    최대값을 못찾은게 아니라
    정확히는 최대값을 찾는 공식을 못찾은거죠.
    현재까지의 최대값은 있는데
    공식이 없다보니 이게 최대가 맞나.. 더 큰건 없나. 증명을 못한 상황
  • 제리아스

    제리아스 Lv.1 → 일리어스

    24.11.12 · 118.♡.2.211

    아하 역시 그렇군요
  • 두루미235

    두루미235 Lv.1

    24.11.12 · 222.♡.127.189

    요만큼?

댓글을 작성하려면 이 필요합니다.