q_table_demo/README(2).md

3.9 KiB
Raw Permalink Blame History

Q-Table 협상 전략 강화학습 데모

기업 간 협상 시뮬레이션을 위한 강화학습 에이전트의 Q-Table 기반 전략 학습 데모입니다.

주요 기능

  • Q-Table 기반 협상 전략 시뮬레이션
  • 보상함수 R(s,a) = W × (A/P) + (1-W) × End 정확한 구현
  • FQI (Fitted Q-Iteration) + CQL (Conservative Q-Learning) 시뮬레이션
  • 실시간 경험 데이터 수집 및 축적
  • Q-Table 학습 과정 시각화
  • 콜드 스타트 문제부터 학습된 정책까지 전체 여정 관찰

시스템 구성

백엔드 (FastAPI)

  • RESTful API 서버
  • Q-Table 학습 엔진
  • 협상 환경 시뮬레이터
  • 경험 데이터 관리

프론트엔드 (Streamlit)

  • 대화형 웹 인터페이스
  • 실시간 시각화
  • 단계별 학습 과정 관찰

설치 및 실행

1. 의존성 설치

# Poetry를 사용한 설치
poetry install

# 또는 pip 사용
pip install -r requirements.txt

2. 환경 설정

# .env 파일 복사 및 수정
cp .env.example .env

3. 백엔드 서버 실행

# Poetry 사용
poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

# 또는 직접 실행
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

4. 프론트엔드 실행

# Poetry 사용
poetry run streamlit run frontend/app.py --server.port 8501

# 또는 직접 실행
streamlit run frontend/app.py --server.port 8501

5. 데모 접속

핵심 개념

상태 공간 (State Space)

상태는 (현재 카드, 시나리오, 가격 구간)의 조합으로 구성됩니다:

  • 카드: C1, C2, C3, C4 (협상 전략 카드)
  • 시나리오: A, B, C, D (협상 상황별 가중치)
  • 가격 구간: PZ1, PZ2, PZ3 (목표가 대비 제안가 구간)

보상함수 (Reward Function)

R(s,a) = W × (A/P) + (1-W) × End
  • A: 앵커링 목표가 (구매자 목표 가격)
  • P: 상대방 제안가 (판매자 제시 가격)
  • End: 협상 종료 여부 (0 또는 1)
  • W: 가중치 = (S_n + PZ_n) / 2

가중치 시스템

  • 시나리오별 가중치: S_1=A, S_2=D, S_3=C, S_4=B
  • 가격 구간별 가중치: 목표가와 제안가 차이에 따른 영향도

학습 알고리즘

1. Q-Learning

전통적인 온라인 강화학습 알고리즘으로 실시간 Q-Table 업데이트

2. FQI (Fitted Q-Iteration)

배치 기반 오프라인 강화학습으로 수집된 경험 데이터 활용

3. CQL (Conservative Q-Learning)

분포 이동 문제를 해결하기 위한 보수적 Q-Learning

데모 흐름

  1. 콜드 스타트: 초기 Q-Table 상태 (모든 값 0)
  2. 데이터 수집: 무작위 탐험을 통한 경험 데이터 축적
  3. Q-Learning: 수집된 데이터로 Q-Table 실시간 업데이트
  4. FQI+CQL: 오프라인 배치 학습 시뮬레이션
  5. 학습된 정책: 최적화된 협상 전략 활용

기술 스택

  • Backend: FastAPI, Uvicorn
  • Frontend: Streamlit
  • Data: Pandas, NumPy
  • Visualization: Matplotlib, Seaborn, Plotly
  • Environment: Poetry, python-dotenv
  • Testing: Pytest

프로젝트 구조

qtable_negotiation_demo/
├── app/                    # FastAPI 백엔드
│   ├── api/               # API 라우터
│   ├── core/              # 핵심 설정
│   ├── models/            # 데이터 모델
│   └── services/          # 비즈니스 로직
├── frontend/              # Streamlit 프론트엔드
├── tests/                 # 테스트 코드
├── data/                  # 데이터 파일
├── pyproject.toml         # Poetry 설정
├── .env                   # 환경 변수
└── README.md              # 이 파일

라이선스

이 프로젝트는 교육 및 데모 목적으로 제작되었습니다.