# 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. 의존성 설치
```bash
# Poetry를 사용한 설치
poetry install

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

### 2. 환경 설정
```bash
# .env 파일 복사 및 수정
cp .env.example .env
```

### 3. 백엔드 서버 실행
```bash
# 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. 프론트엔드 실행
```bash
# Poetry 사용
poetry run streamlit run frontend/app.py --server.port 8501

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

### 5. 데모 접속
- 프론트엔드: http://localhost:8501
- API 문서: http://localhost:8000/docs

## 핵심 개념

### 상태 공간 (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              # 이 파일
```

## 라이선스

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