# πŸš€ Q-Table ν˜‘μƒ μ „λž΅ 데λͺ¨ μ‹œμž‘ κ°€μ΄λ“œ ## λΉ λ₯Έ μ‹œμž‘ ### 1. ν™˜κ²½ μ„€μ • #### Poetry μ‚¬μš© (ꢌμž₯) ```bash # Poetry μ„€μΉ˜ (λ―Έμ„€μΉ˜μ‹œ) curl -sSL https://install.python-poetry.org | python3 - # μ˜μ‘΄μ„± μ„€μΉ˜ poetry install # κ°€μƒν™˜κ²½ ν™œμ„±ν™” poetry shell ``` #### pip μ‚¬μš© ```bash # κ°€μƒν™˜κ²½ 생성 (ꢌμž₯) python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # μ˜μ‘΄μ„± μ„€μΉ˜ pip install -r requirements.txt ``` ### 2. ν™˜κ²½ λ³€μˆ˜ μ„€μ • ```bash # .env 파일 생성 cp .env.example .env # ν•„μš”μ— 따라 .env 파일 μˆ˜μ • nano .env ``` ### 3. μ‹œμŠ€ν…œ μ‹€ν–‰ #### 방법 1: 전체 μ‹œμŠ€ν…œ λ™μ‹œ μ‹€ν–‰ ```bash python run_both.py ``` #### 방법 2: κ°œλ³„ μ‹€ν–‰ ```bash # 터미널 1 - API μ„œλ²„ python run_api.py # 터미널 2 - ν”„λ‘ νŠΈμ—”λ“œ python run_frontend.py ``` #### 방법 3: Make μ‚¬μš© ```bash make run-both ``` ### 4. 접속 - **ν”„λ‘ νŠΈμ—”λ“œ**: http://localhost:8501 - **API λ¬Έμ„œ**: http://localhost:8000/docs ## μ£Όμš” κΈ°λŠ₯ μ‚¬μš©λ²• ### 1. μ½œλ“œ μŠ€νƒ€νŠΈ 확인 - ν”„λ‘ νŠΈμ—”λ“œμ˜ "μ½œλ“œ μŠ€νƒ€νŠΈ" νƒ­μ—μ„œ 초기 Q-Table μƒνƒœ 확인 - λͺ¨λ“  Q값이 0인 μƒνƒœμ—μ„œ μ‹œμž‘ ### 2. 데이터 μˆ˜μ§‘ - "데이터 μˆ˜μ§‘" νƒ­μ—μ„œ μ—ν”Όμ†Œλ“œ 생성 - νƒν—˜μœ¨κ³Ό μ—ν”Όμ†Œλ“œ 수λ₯Ό μ‘°μ •ν•˜μ—¬ κ²½ν—˜ 데이터 μˆ˜μ§‘ ### 3. Q-Learning ν•™μŠ΅ - "Q-Learning" νƒ­μ—μ„œ μˆ˜μ§‘λœ λ°μ΄ν„°λ‘œ Q-Table μ—…λ°μ΄νŠΈ - ν•™μŠ΅λ₯ , ν• μΈμœ¨ λ“± ν•˜μ΄νΌνŒŒλΌλ―Έν„° μ‘°μ • κ°€λŠ₯ ### 4. FQI+CQL ν•™μŠ΅ - "FQI+CQL" νƒ­μ—μ„œ μ˜€ν”„λΌμΈ ν•™μŠ΅ μˆ˜ν–‰ - 보수적 Q-Learning으둜 μ•ˆμ „ν•œ μ •μ±… ν•™μŠ΅ ### 5. μ •μ±… 비ꡐ - "ν•™μŠ΅λœ μ •μ±…" νƒ­μ—μ„œ Q-Learningκ³Ό FQI+CQL μ •μ±… 비ꡐ - μ‹€μ œ ν˜‘μƒ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 행동 μΆ”μ²œ λ°›κΈ° ## Docker μ‚¬μš© ### Docker Compose둜 μ‹€ν–‰ ```bash # 이미지 λΉŒλ“œ docker-compose build # μ‹œμŠ€ν…œ μ‹€ν–‰ docker-compose up # λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ docker-compose up -d # 쀑지 docker-compose down ``` ## 개발 ν™˜κ²½ μ„€μ • ### μ½”λ“œ ν’ˆμ§ˆ 도ꡬ ```bash # μ½”λ“œ ν¬λ§·νŒ… make format # λ¦°νŒ… make lint # ν…ŒμŠ€νŠΈ make test ``` ### 개발 μ„œλ²„ μ‹€ν–‰ ```bash # API μ„œλ²„ (Hot Reload) uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 # ν”„λ‘ νŠΈμ—”λ“œ (Hot Reload) streamlit run frontend/app.py --server.port 8501 ``` ## 문제 ν•΄κ²° ### 포트 좩돌 - 8000번 ν¬νŠΈλ‚˜ 8501번 ν¬νŠΈκ°€ μ‚¬μš© 쀑인 경우 .env νŒŒμΌμ—μ„œ 포트 λ³€κ²½ ### μ˜μ‘΄μ„± 였λ₯˜ ```bash # μ˜μ‘΄μ„± μž¬μ„€μΉ˜ pip install --force-reinstall -r requirements.txt # λ˜λŠ” Poetry μ‚¬μš©μ‹œ poetry install --no-cache ``` ### API μ—°κ²° 였λ₯˜ - API μ„œλ²„κ°€ μ‹€ν–‰ 쀑인지 확인 - http://localhost:8000/api/v1/health μ—μ„œ μƒνƒœ 확인 ## μΆ”κ°€ 정보 ### ν”„λ‘œμ νŠΈ ꡬ쑰 ``` qtable_negotiation_demo/ β”œβ”€β”€ app/ # FastAPI λ°±μ—”λ“œ β”‚ β”œβ”€β”€ api/ # API μ—”λ“œν¬μΈνŠΈ β”‚ β”œβ”€β”€ core/ # μ„€μ • 및 μœ ν‹Έλ¦¬ν‹° β”‚ β”œβ”€β”€ models/ # 데이터 λͺ¨λΈ β”‚ └── services/ # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 β”œβ”€β”€ frontend/ # Streamlit ν”„λ‘ νŠΈμ—”λ“œ β”œβ”€β”€ tests/ # ν…ŒμŠ€νŠΈ μ½”λ“œ β”œβ”€β”€ run_*.py # μ‹€ν–‰ 슀크립트 └── docker-compose.yml # Docker μ„€μ • ``` ### 핡심 κ°œλ… - **λ³΄μƒν•¨μˆ˜**: R(s,a) = W Γ— (A/P) + (1-W) Γ— End - **μƒνƒœκ³΅κ°„**: (μΉ΄λ“œ, μ‹œλ‚˜λ¦¬μ˜€, 가격ꡬ간) μ‘°ν•© - **Q-Learning**: 온라인 κ°•ν™”ν•™μŠ΅ - **FQI+CQL**: μ˜€ν”„λΌμΈ 보수적 κ°•ν™”ν•™μŠ΅ ### 지원 및 문의 - 이슈 λ°œμƒμ‹œ API λ¬Έμ„œ μ°Έμ‘°: http://localhost:8000/docs - 둜그 파일 확인: app.log