How to select your SCV!?

์ด ์žฅ์—์„œ ๋ฐฐ์šธ ๊ฒƒ

SCV๋ฅผ ์„ ํƒํ•˜๊ณ , ์ƒ๋Œ€๋ฐฉ์˜ ์ง„์˜์œผ๋กœ SCV๋ฅผ ์ •์ฐฐ๋ณด๋‚ด๊ณ  ๋น™๋น™ ๋Œ๋ฆฌ๋Š” ํ–‰์œ„๋ฅผ ํ•ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Let's Start!

์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ง€๋‚œ๋ฒˆ์˜ agent๋Š” no_op()์„ ํ†ตํ•ด ์•„๋ฌด action์—†์ด ๋Œ€๊ธฐํ•˜๋Š” agent๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ SCV๋ฅผ ์„ ํƒํ•˜๊ณ , ์ƒ๋Œ€๋ฐฉ ์ง„์˜์— ๋ณด๋‚ด๊ณ , ์ž์›์ด ๋  ๋•Œ, ์ปค๋งจ๋“œ ์„ผํ„ฐ๋ฅผ ์ง€์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ด์ „์˜ step function์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

class Agent(base_agent.BaseAgent):
    def step(self,obs):
        super(Agent,self).step(obs)
        return actions.FUNCTIONS.no_op()

return์„ ํ†ตํ•ด action์„ output์œผ๋กœ ์ฃผ๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋จผ์ €, SCV๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ observation์—์„œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

from pysc2.lib import units
scvs = [unit for unit in obs.observation.feature_units if unit.unit_type == units.Terran.SCV]

์ด๋ ‡๊ฒŒ input์œผ๋กœ ํ˜„์žฌ ํ™”๋ฉด์—์„œ ๋ณด์ด๋Š” scvs๋“ค์„ ์žก์Šต๋‹ˆ๋‹ค. ์ด์ œ, ๊ทธ์ค‘ scv ์•„๋ฌด ๋†ˆ์„ ์žก์•„์„œ, ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

scv = scvs[0]
return actions.FUNCTIONS.select_point("select",(scv.x,scv.y))

3select_point๋ฅผ ํ†ตํ•ด scv์˜ ์ขŒํ‘œ๋ฅผ ์„ ํƒํ•ด scv๋ฅผ ์ฝ• ์ฐ์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ step์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๊ทธ scv์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ ค์•ผ ํ•˜๊ฒ ์ฃ ! ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ scv๋ฅผ ์žก๋Š” ํ–‰์œ„๋Š” ๊ทธ๋งŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ํ–‰๋™๋“ค์„ ํ•ฉ์ณ SCV๋ฅผ ์žก์€์ฑ„๋กœ ๊ฐ€๋งŒํžˆ ์žˆ๋„๋ก ํ•˜๋Š” Agent๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ๋Š” agent๋ฅผ ๊ณจ๋ž์„ ๋•Œ, ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๋Š”๊ฒŒ ์•„๋‹Œ, SCV๋ฅผ ์„ ํƒ๋œ ์  starting point๋กœ ์ •์ฐฐ์„ ๋ณด๋‚ด๊ณ , ๋น™๋น™๋Œ๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„ ,

  1. SCV ํ•œ ๊ธฐ๋ฅผ ํด๋ฆญ(์œ„์—์„œ์ง„ํ–‰)

  2. SCV๋ฅผ ๋ถ€๋Œ€์ง€์ •

  3. SCV๋ฅผ ์นด๋ฉ”๋ผ๋กœ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋ฉฐ ๋ฐ ์ปจํŠธ๋กค

์•„๋ž˜์ฒ˜๋Ÿผ ๋ถ€๋Œ€์ง€์ •์ด 1๋ฒˆ์ด ๋˜์–ด์žˆ์ง€์•Š๋Š” ๊ฒฝ์šฐ์— ์•„๋ž˜์ฒ˜๋Ÿผ ๊ทธ๋ฃน์ง€์ •์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€, ์นด๋ฉ”๋ผ๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋„๋ก ํ•ด์•ผํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ํŽธ๋ฒ•(?)์„ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. FUNCTIONS์— camera move๊ฐ€ ์žˆ๊ธดํ•˜์ง€๋งŒ ๋ฏธ๋‹ˆ๋งต์„ ์ชผ๊ฐœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๋ถ€๋Œ€์ง€์ •ํ•œ ์œ ๋‹›์œผ๋กœ ์ด๋™ํ•˜๋Š”๊ฒŒ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— pynput ์„ ์ด์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ถ€๋Œ€์ง€์ •ํ•œ ์œ ๋‹›์ด ๋งต์—์„œ ์‚ฌ๋ผ์ง€๋ฉด SCV๋ถ€๋Œ€์ง€์ • ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๊ทธ๊ณณ์œผ๋กœ camera๋ฅผ ์ด๋™ํ•˜๊ณ , SCV๊ฐ€ ์•„๋ฌด๊ฒƒ๋„์•ˆํ•˜๋ฉด random์œผ๋กœ ์ด๋™์‹œ์ผœ ๋บ‘๋บ‘ ๋Œ๊ฒŒ ๋งŒ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

์ ์˜ ๋ณธ์ง„์œผ๋กœ ์ •์ฐฐ์„ ๋ณด๋‚ด์•ผํ•˜๋Š”๋ฐ, ์‹œ์ž‘์ „์— ์ž์‹ ์˜ ๋ณธ์ง„์ด ์–ด๋А ๋ฐฉํ–ฅ์ผ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, step๋‚ด์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ผ์ธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

step function์˜ ์ „์ฒด๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ „์ฒด์˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Last updated