ﯾﺎﻟﻄﯿﻒ ﻫﻮش ﻣﺼﻨﻮﻋ ﻧﯿﻢﺳﺎل دوم ٩٢٩١ ﻣﺪرس :دﮐﺘﺮ ﺳﻠﯿﻤﺎﻧ داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ﺳﻮم ﻣﻬﻠﺖ ارﺳﺎل ٣٠ :ﻓﺮوردﯾﻦ ﺗﻮﺿﯿﺢ ﺗﻤﺮﯾﻦ • ﺗﻤﺮﯾﻦ ﺷﻤﺎ دارای دو ﺑﺨﺶ اﺳﺖ :ﺑﺨﺶ ﺗﺌﻮری و ﺑﺨﺶ ﻋﻤﻠ .در ﺑﺨﺶ ﺗﺌﻮری ﺑﺎﯾﺪ ﺑﻪ ﺗﻌﺪادی ﺳﻮال در راﺑﻄﻪ ﺑﺎ ﻓﺼﻞ ﭘﻨﺠﻢ درسﺗﺎن ﭘﺎﺳﺦ دﻫﯿﺪ .در ﺑﺨﺶ ﻋﻤﻠ ﺑﺎﯾﺪ ﺑﺮای ﺑﺎزی اﺗﻠﻮ ﯾ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﻃﺮاﺣ ﮐﻨﯿﺪ. • اﯾﻦ ﺗﻤﺮﯾﻦ در ﻣﺠﻤﻮع ١١۵ﻧﻤﺮه دارد ﮐﻪ ١۵ﻧﻤﺮهی آن اﻣﺘﯿﺎزی اﺳﺖ و ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺶ ﻋﻤﻠ اﺳﺖ .از ١٠٠ﻧﻤﺮهی اﺟﺒﺎری ٣٠ ،ﻧﻤﺮه ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺶ ﺗﺌﻮری اﺳﺖ و ٧٠ﻧﻤﺮه ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺶ ﻋﻤﻠ اﺳﺖ. • در ﺻﻮرت ﻣﺸﺎﻫﺪهی ﺗﻘﻠﺐ ﺑﺮای ﻫﺮ دو ﻃﺮف ﻧﻤﺮهی ﺻﻔﺮ ﻣﻨﻈﻮر ﻣ ﺷﻮد. • ﺑﻪ ازای ﻫﺮ روز دﯾﺮﮐﺮد در ﺗﺤﻮﯾﻞ ﺗﻤﺮﯾﻦ ١٠٪ ،از ﻧﻤﺮهی آن ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ. • ﺟﻮاب ﺗﻤﺮﯾﻦﻫﺎی ﺧﻮد را ﺑﻪ آدرس [email protected]ﺑﺎ ﻣﻮﺿﻮع ] HW3-[student-IDارﺳﺎل ﮐﻨﯿﺪ .ﺑﺮای ﻫﺮ ﺑﺨﺶ ﻓﺎﯾﻞﻫﺎی ﻻزم ﺑﺮای ارﺳﺎل ﺗﻮﺿﯿﺢ داده ﺷﺪه اﺳﺖ. • در ﺻﻮرﺗ ﮐﻪ در راﺑﻄﻪ ﺑﺎ ﺗﻤﺮﯾﻦ ﺳﻮاﻟ دارﯾﺪ آن را در ﮔﺮوه درس ﺑﻪ آدرس زﯾﺮ ﻣﻄﺮح ﮐﻨﯿﺪ: https://groups.google.com/forum/#!forum/sharif_ai_91-92_2 .١ﺑﺨﺶ ﻋﻤﻠ ١۵ + ٧٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ﻧﻤﺮه در اﯾﻦ ﺑﺨﺶ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺮای ﺑﺎزی دو ﻧﻔﺮهی اﺗﻠﻮ )ﺑﺎ اﻧﺪﮐ ﺗﻐﯿﯿﺮ( ﺑﺎ اﺳﺘﻔﺎده از اﻟ ﻮرﯾﺘﻢ M inimaxو روش ﺑﻬﯿﻨﻪﺳﺎزی Alpha − Betaﯾ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺑﻪ زﺑﺎن ﺟﺎوا ﻃﺮاﺣ ﮐﻨﯿﺪhttp://en.wikipedia.org/wiki/Reversi : ﻗﻮاﻧﯿﻦ در ﻟﯿﻨ ﺑﺎﻻ ،ﻗﻮاﻧﯿﻦ ﺑﺎزی ﺑﻪ ﻫﻤﺮاه ﻧ ﺎﺗ ﻣﻔﯿﺪ در راﺑﻄﻪ ﺑﺎ اﺳﺘﺮاﺗﮋیﻫﺎی ﺑﺎزی وﺟﻮد دارد .در اﯾﻨﺠﺎ ﺑﻪ ﻃﻮر ﺧﻼﺻﻪ ﻗﻮاﻧﯿﻦ ﺑﺎزی را ﻣﺮور ﻣ ﮐﻨﯿﻢ: • ﺑﺎزی روی ﯾ ﺟﺪول ٨ × ٨اﻧﺠﺎم ﻣ ﺷﻮد ﮐﻪ در اﺑﺘﺪا ۴ﺧﺎﻧﻪی ﻣﺮﮐﺰی آن ﻣﻄﺎﺑﻖ ﺷ ﻞ ١زﯾﺮ ﭘﺮ ﺷﺪه اﺳﺖ. • ﺑﺎزﯾ ﻦ ﺳﯿﺎه ﺑﺎزی را آﻏﺎز ﻣ ﮐﻨﺪ .او ﺑﺎﯾﺪ ﻣﻬﺮهاش را ﺟﺎﯾ ﺑ ﺬارد ﮐﻪ ﺣﺪاﻗﻞ در ﯾ از راﺳﺘﺎﻫﺎی ﻋﻤﻮدی ،اﻓﻘ ﯾﺎ ﻗﻄﺮی ﻣﻬﺮهی ﺳﯿﺎه دﯾ ﺮی ﺑﺎﺷﺪ و ﻓﺎﺻﻠﻪی ﺑﯿﻦ اﯾﻦ دو ﻣﻬﺮهی ﺳﯿﺎه را ﺗﻤﺎﻣﺎ ﻣﻬﺮهﻫﺎی ﺳﻔﯿﺪ )ﮐﻪ ﺗﻌﺪاد آﻧﻬﺎ ﺣﺪاﻗﻞ ﯾ اﺳﺖ( ﭘﺮ ﮐﺮده ﺑﺎﺷﺪ .ﺑﻌﺪ از اﯾﻦ ﺣﺮﮐﺖ ﺗﻤﺎﻣ اﯾﻦ ﻣﻬﺮهﻫﺎی ﺳﻔﯿﺪ )در ﻫﻤﻪی راﺳﺘﺎﻫﺎی ﻋﻤﻮدی ،اﻓﻘ و ﻗﻄﺮی( رﻧ ﺷﺎن ﺳﯿﺎه ﻣ ﺷﻮد. • ﺑﻌﺪ از ﺑﺎزﯾ ﻦ ﺳﯿﺎه ،ﻧﻮﺑﺖ ﺑﺎزﯾ ﻦ ﺳﻔﯿﺪ ﻣ ﺷﻮد و ﺑﻪ ﺷ ﻞ ﻣﺸﺎﺑﻪ ﺣﺮﮐﺖ ﺧﻮد را اﻧﺠﺎم ﻣ دﻫﺪ و ﻫﻤﯿﻨﻄﻮر ﺑﺎزی ﺑﻪ ﺷ ﻞ ﻧﻮﺑﺘ اداﻣﻪ ﭘﯿﺪا ﻣ ﮐﻨﺪ. • اﮔﺮ ﯾ از ﺑﺎزﯾ ﻨﺎن ﻧﺘﻮاﻧﺪ ﺣﺮﮐﺘ اﻧﺠﺎم دﻫﺪ ﺑﺎزی را ﺑﺎزﯾ ﻦ دﯾ ﺮ اداﻣﻪ ﻣ دﻫﺪ. • ﺑﺎزی وﻗﺘ ﺗﻤﺎم ﻣ ﺷﻮد ﮐﻪ ﻫﯿﭻ ﯾ از ﺑﺎزﯾ ﻨﺎن ﻧﺘﻮاﻧﺪ ﺣﺮﮐﺘ اﻧﺠﺎم دﻫﺪ .در اﯾﻦ ﺻﻮرت ﺑﺮﻧﺪهی ﺑﺎزی ﮐﺴ اﺳﺖ ﮐﻪ ﺗﻌﺪاد ﻣﻬﺮهﻫﺎی ﺑﯿﺸﺘﺮی داﺷﺘﻪ ﺑﺎﺷﺪ. ١ ﻗﺎﻧﻮن اﺿﺎﻓﻪ دارﯾﻢ و آن اﯾﻦ اﺳﺖ ﮐﻪ ﺣﻖ ﮔﺬاﺷﺘﻦ ﻣﻬﺮه در ۴ﺧﺎﻧﻪی ﮔﻮﺷﻪی ﺟﺪول را ﻧﺪارﯾﻢ. • ﺑﺮای اﯾﻦ ﺗﻤﺮﯾﻦ ،ﯾ ﺷ ﻞ :١ﺻﻔﺤﻪی ﺑﺎزی در ﻟﺤﻈﻪی ﺷﺮوع ﺗﻮﺿﯿﺢ ﮐﺪﻫﺎ و ﮐﻼسﻫﺎ در ﻓﺎﯾﻞ othello.zipﯾ ﭘﺮوژهی ﺟﺎوا وﺟﻮد دارد ﮐﻪ از ﻗﺴﻤﺖﻫﺎی زﯾﺮ ﺗﺸ ﯿﻞ ﺷﺪه اﺳﺖ: • ﭘ ﯿﺞ :othello.aiدر اﯾﻦ ﭘﯿ ﯿﺞ ﮐﻼسﻫﺎی ﻣﺮﺑﻮط ﺑﻪ ﻫﻮشﻣﺼﻨﻮﻋ ﺑﺎزی وﺟﻮد دارد .ﮐﻼس MyPlayerAI.java ﺟﺎﯾ اﺳﺖ ﮐﻪ ﺷﻤﺎ ﺑﺎﯾﺪ ﮐﺪ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺧﻮد را ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﺪ و ﺗﻨﻬﺎ اﯾﻦ ﮐﻼس را ارﺳﺎل ﻣ ﮐﻨﯿﺪ .در اداﻣﻪ در ﻣﻮرد اﯾﻦ ﮐﻼس ﺗﻮﺿﯿﺢ ﺑﯿﺸﺘﺮی داده ﺧﻮاﻫﺪ ﺷﺪ .ﮐﻼسﻫﺎی GreedyAI.javaو RandomAI.javaﻫﻢ ﻋﺎﻣﻞﻫﺎی ﻧﻤﻮﻧﻪ ﻫﺴﺘﻨﺪ ﮐﻪ ﻣ ﺗﻮاﻧﯿﺪ ﺑﺮای ﺗﺴﺖ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺧﻮدﺗﺎن از آﻧﻬﺎ اﺳﺘﻔﺎده ﮐﻨﯿﺪ. • ﭘ ﯿﺞ :othello.modelدر اﯾﻦ ﭘﯿ ﯿﺞ ﮐﻼس Board.javaوﺟﻮد داردﮐﻪ ﺑﺮای ﻧ ﻪداری اﻃﻼﻋﺎت وﺿﻌﯿﺖ ﺑﺎزی اﺳﺖ. • ﭘ ﯿﺞ :othello.controllerدر اﯾﻦ ﭘﯿ ﯿﺞ ﮐﻨﺘﺮﻟﺮﻫﺎی ﺑﺎزی ﻗﺮار دارﻧﺪ .ﺷﻤﺎ ﺑﺎ اﺳﺘﻔﺎده از اﯾﻦ ﮐﻨﺘﺮﻟﺮﻫﺎ ﻣ ﺗﻮاﻧﯿﺪ در ٣ ﺣﺎﻟﺖ ﻣﺨﺘﻠﻒ ﺑﺎزی را اﺟﺮا ﮐﻨﯿﺪ ﮐﻪ در اداﻣﻪ ﺗﻮﺿﯿﺢ داده ﺧﻮاﻫﺪ ﺷﺪ. • ﭘ ﯿﺞ :othello.viewدر اﯾﻦ ﭘﯿ ﯿﺞ ﮐﻼسﻫﺎی ﻣﺮﺑﻮط ﺑﻪ ﮔﺮاﻓﯿ ﺑﺎزی ﻗﺮار دارد. ﺑﺮای اﯾﻨ ﻪ ﺑﺘﻮاﻧﯿﺪ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺧﻮد را ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﺪ ،ﺗﻨﻬﺎ ﻻزم اﺳﺖ ﺑﺎ ﮐﻼسﻫﺎی MyPlayerAI.javaو Board.java آﺷﻨﺎ ﺑﺎﺷﯿﺪ ،اﻣﺎ ﻣﻄﺎﻟﻌﻪی ﺑﻘﯿﻪی ﻓﺎﯾﻞﻫﺎ )ﻣﺨﺼﻮﺻﺎ ﮐﻨﺘﺮﻟﺮﻫﺎ( ﺑﻪ ﺷﻤﺎ درک ﺑﻬﺘﺮی از ﭘﺮوژه ﻣ دﻫﺪ .ﺗﻐﯿﯿﺮدادن ﻓﺎﯾﻞﻫﺎی ﭘﺮوژه ﺑﺮای ﺗﺴﺖ ﮐﺮدن ﺗﻮﺻﯿﻪ ﻣ ﺷﻮد اﻣﺎ ﺑﻪ اﯾﻦ ﻧ ﺘﻪ ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺷﻤﺎ در اﻧﺘﻬﺎ ،ﺗﻨﻬﺎ ﻓﺎﯾﻞ MyPlayerAI.javaرا ارﺳﺎل ﻣ ﮐﻨﯿﺪ و ﻧﺒﺎﯾﺪ روی ﺗﻐﯿﯿﺮاﺗﺘﺎن در ﻓﺎﯾﻞﻫﺎی دﯾ ﺮ ﺣﺴﺎب ﮐﻨﯿﺪ. در ﻓﺎﯾﻞ MyPlayerAI.javaﺷﻤﺎ ﺑﺎﯾﺪ دو ﺗﺎﺑﻊ را زﯾﺮ را ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﺪ. • )( :public String getNameﺧﺮوﺟ اﯾﻦ ﺗﺎﺑﻊ ﺑﺎﯾﺪ ﺷﻤﺎره داﻧﺸﺠﻮﯾ ﺷﻤﺎ ﺑﺎﺷﺪ. • ) :public Point nextMove(Board bاﯾﻦ ﺗﺎﺑﻊ ﺑﻪ ﻋﻨﻮان ورودی وﺿﻌﯿﺖ ﻓﻌﻠ ﺑﺎزی را درﯾﺎﻓﺖ ﻣ ﮐﻨﺪ و ﺣﺮﮐﺖ ﻋﺎﻣﻞ را ﺑﻪ ﺷ ﻞ ﯾ Pointﮐﻪ دارای ﻣﺨﺘﺼﺎت xو yاﺳﺖ ﺑﺮﻣ ﮔﺮداﻧﺪ. ﺑﺮای ﭘﯿﺎدهﺳﺎزی ﺗﺎﺑﻊ ) nextMove(Board bﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ ﺗﻮاﺑﻊ زﯾﺮ را روی ﻣﺘﻐﯿﺮ bﺻﺪا ﺑﺰﻧﯿﺪ: • ) :b.isCapturedByMe(x, yﻧﺸﺎن ﻣ دﻫﺪ ﺧﺎﻧﻪی ) (x, yﺑﺮای ﺷﻤﺎ ﻫﺴﺖ ﯾﺎ ﺧﯿﺮ. ٢ • ) :b.isCapturedByMyOppoenet(x, yﻧﺸﺎن ﻣ دﻫﺪ ﺧﺎﻧﻪی ) (x, yﺑﺮای ﺣﺮﯾﻒ ﻫﺴﺖ ﯾﺎ ﺧﯿﺮ. • ) :b.isEmptySquare(x, yﻧﺸﺎن ﻣ دﻫﺪ ﺧﺎﻧﻪی ) (x, yﺧﺎﻟ ﻫﺴﺖ ﯾﺎ ﺧﯿﺮ. • ) :b.move(x, yدر ﺻﻮرت اﻣ ﺎن ﯾ ﻣﻬﺮه ﺑﺮای ﮐﺴ ﮐﻪ ﻧﻮﺑﺘﺶ اﺳﺖ در ﻣﺤﻞ ﻣﻮرد ﻧﻈﺮ ﻗﺮار ﻣ دﻫﺪ و ﻣﻘﺪار trueﺑﺮﻣ ﮔﺮداﻧﺪ .در ﺻﻮرﺗ ﮐﻪ اﯾﻦﮐﺎر اﻣ ﺎنﭘﺬﯾﺮ ﻧﺒﺎﺷﺪ ،ﻣﻘﺪار falseﺑﺮﻣ ﮔﺮداﻧﺪ. • )( :b.turnﻧﻮﺑﺖ را ﺑﻪ ﺑﺎزﯾ ﻦ دﯾ ﺮ ﻣ دﻫﺪ. • )( :b.printﺟﺪول ﺑﺎزی را ﺑﻪ ﺷ ﻞ ASCIIﭼﺎپ ﻣ ﮐﻨﺪ) .ﺑﺮای دﯾﺒﺎگ ﮐﺮدن( • )( :b.getActiveدر ﺻﻮرﺗ ﮐﻪ ﻧﻮﺑﺖ ﺑﺎزﯾ ﻦ ﺳﯿﺎه ﺑﺎﺷﺪ ﻣﻘﺪار Board.BLACKرا ﺑﺮﻣ ﮔﺮداﻧﺪ .در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﻣﻘﺪار Board.WHITEرا ﺑﺮﻣ ﮔﺮداﻧﺪ. • ) :b.getMoveCount(trueﺗﻌﺪاد ﺣﺮﮐﺎت ﻣﻤ ﻦ ﺑﺮای ﺑﺎزﯾ ﻦ ﻓﻌﻠ را ﺑﺮﻣ ﮔﺮداﻧﺪ. • ) :b.getMoveCount(falseﺗﻌﺪاد ﺣﺮﮐﺎت ﻣﻤ ﻦ ﺑﺮای ﺑﺎزﯾ ﻦ ﺑﻌﺪی را ﺑﺮﻣ ﮔﺮداﻧﺪ. • ) :b.getTotal(trueﺗﻌﺪاد ﻣﻬﺮهﻫﺎی ﺑﺎزﯾ ﻦ ﻓﻌﻠ را ﺑﺮﻣ ﮔﺮداﻧﺪ. • ) :b.getTotal(falseﺗﻌﺪاد ﻣﻬﺮهﻫﺎی ﺑﺎزﯾ ﻦ ﺣﺮﯾﻒ را ﺑﺮﻣ ﮔﺮداﻧﺪ. ﺷﻤﺎ در ﺗﺎﺑﻊ nextMoveﻣ ﺗﻮاﻧﯿﺪ ﻣﺘﻐﯿﺮ ) bﭘﺎراﻣﺘﺮ ورودی ﺗﺎﺑﻊ (nextMoveرا ﻫﺮﭼﻘﺪر ﮐﻪ ﺧﻮاﺳﺘﯿﺪ ﺗﻐﯿﯿﺮ دﻫﯿﺪ و ﻣﺜﻼ ﻗﺒﻞ از ﺑﺮﮔﺮداﻧﺪن ﺧﺮوﺟ ،ﺗﺎ ﭘﻨﺞ ﻣﺮﺣﻠﻪ ﺑﺎزی را روی آن ﭘﯿﺶ ﺑﺒﺮﯾﺪ .در واﻗﻊ اﯾﻦ ﻣﺘﻐﯿﺮ ﺻﺮﻓﺎ ﺑﺮای ﺗﺎﺑﻊ ﺷﻤﺎﺳﺖ و در ﺑﯿﺮون از آن ﺗﺎﺛﯿﺮی ﻧﺪارد.ﺑﺮای ﻫﻤﯿﻦ ﺧﺮوﺟ ﺗﺎﺑﻊ ،nextMoveﻣﺴﺘﻘﻞ از ﮐﺎرﻫﺎﯾ ﮐﻪ روی bاﻧﺠﺎم دادهاﯾﺪ ،ﺑﺎﯾﺪ اوﻟﯿﻦ ﺣﺮﮐﺖ ﻋﺎﻣﻞﺗﺎن ﺑﺎﺷﺪ .ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﻋﺎﻣﻞ GreedyAI.javaرو ﺑﺒﯿﻨﯿﺪ. ﻧﺤﻮهی اﺟﺮای ﺑﺎزی ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ ﺑﺎ اﺳﺘﻔﺎده از ٣ﮐﻨﺘﺮﻟﺮ زﯾﺮ ،ﺑﺎزی را در ﺳﻪ ﺣﺎﻟﺖ ﻣﺨﺘﻠﻒ اﺟﺮا ﮐﻨﯿﺪ: • :TwoPlayerController.javaاﯾﻦ ﮐﻨﺘﺮﻟﺮ ﺑﺮای اﻧﺠﺎم ﯾ ﺑﺎزی دوﻧﻔﺮه ﺑﺪون دﺧﺎﻟﺖ ﻋﺎﻣﻞﻫﺎی ﻣﺼﻨﻮﻋ اﺳﺖ! ﭘﯿﺸﻨﻬﺎد ﻣ ﺷﻮد ﻗﺒﻞ از ﺷﺮوع ﮐﺪ زدن ،ﺑﺎ ﻫﻢ ﭼﻨﺪﺑﺎزی اﻧﺠﺎم دﻫﯿﺪ ﺗﺎ ﺑﺎ اﺳﺘﺮاﺗﮋیﻫﺎی ﺑﺎزی آﺷﻨﺎ ﺷﻮﯾﺪ. • :OnePlayerController.javaاﯾﻦ ﮐﻨﺘﺮﻟﺮ ﺑﺮای اﻧﺠﺎم ﯾ اﺳﺖ. ﺑﺎزی ﺑﯿﻦ ﺷﻤﺎ و ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪﺗﺎن )MyPlayerAI.java • :AIControllerSinglePlay.javaاﯾﻦ ﮐﻨﺘﺮﻟﺮ ﺑﺮای اﻧﺠﺎم ﯾ ﺑﺎزی ﺑﯿﻦ دو ﻋﺎﻣﻞ ﻣﺼﻨﻮﻋ ﻣﺨﺘﻠﻒ اﺳﺖ .ﺑﺎ اﺟﺮای ﺗﺎﺑﻊ mainاﯾﻦ ﮐﻨﺘﺮﻟﺮ ،ﯾ ﺻﻔﺤﻪی ﮔﺮاﻓﯿ ﺑﺎز ﻣ ﺷﻮد ﮐﻪ ﺑﺮای ﻫﺮ ﯾ از رﻧ ﻫﺎ ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ ﯾ از ﻋﺎﻣﻞﻫﺎی ﻣﺼﻨﻮﻋ ﻣﻮﺟﻮد را اﻧﺘﺨﺎب ﮐﻨﯿﺪ .ﻟﯿﺴﺖ اﯾﻦ ﻋﺎﻣﻞﻫﺎ در ﻓﺎﯾﻞ AIListﻗﺮار دارد .ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ ﺑﻪ ﺟﺰ MyPlayerAI.javaﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ دﯾ ﺮی ﺑﻨﻮﯾﺴﯿﺪ و ﺑﺎ اﺿﺎﻓﻪ ﮐﺮدن اﺳﻢ آن ﺑﻪ اﯾﻦ ﻟﯿﺴﺖ ،ﯾ ﺑﺎزی ﺑﯿﻦ ﻋﺎﻣﻞﻫﺎی ﺧﻮدﺗﺎن اﺟﺮا ﮐﻨﯿﺪ. ﻫﻤﻪی اﯾﻦ ﮐﻨﺘﺮﻟﺮﻫﺎ ،ﮐﻼسﻫﺎﯾ ﻫﺴﺘﻨﺪ ﮐﻪ در آﻧﻬﺎ ﺗﺎﺑﻊ mainوﺟﻮد دارد .ﺑﻨﺎﺑﺮاﯾﻦ اﮔﺮ ﺷﻤﺎ ﺑﺎ eclipseﭘﺮوژه را ﺑﺎز ﮐﻨﯿﺪ و وﻗﺘ ﻓﺎﯾﻞ ﮐﻨﺘﺮﻟﺮ ﻣﻮرد ﻧﻈﺮ ﺑﺎز اﺳﺖ ،دﮐﻤﻪی Ctrl + F ١١را ﻓﺸﺎر دﻫﯿﺪ ،ﺑﺎزی در ﺣﺎﻟﺖ ﻣﻮرد ﻧﻈﺮ اﺟﺮا ﻣ ﺷﻮد. ﻧﻤﺮهدﻫ ،ﺗﻮﺿﯿﺤﺎت ﺗ ﻤﯿﻠ و ﻧﺤﻮهی ارﺳﺎل ﺗﻤﺮﯾﻦ • ٢٠ﻧﻤﺮهی اﯾﻦ ﺑﺨﺶ ﻣﺮﺑﻮط ﺑﻪ ﺗﺎﺑﻊ ارزﯾﺎﺑ ﺷﻤﺎ اﺳﺖ .ﻟﻄﻔﺎ ﺗﻮﺿﯿﺢ ﻣﺨﺘﺼﺮی در ﺣﺪ دو-ﺳﻪ ﭘﺎراﮔﺮاف در ﻣﻮرد ﺗﺎﺑﻊ ارزﯾﺎﺑ ﺧﻮد ﺑﺪﻫﯿﺪ و در ﯾ ﻓﺎﯾﻞ pdfﺟﺪاﮔﺎﻧﻪ ارﺳﺎل ﮐﻨﯿﺪ .ﻫﻤﭽﻨﯿﻦ در ﺻﻮرﺗ ﮐﻪ ﺗ ﻨﯿ ﺧﺎﺻ ﺑﺮای ﺑﻬﺒﻮد ﺳﺮﻋﺖ ﺟﺴﺘﺠﻮ )ﻣﺜﻞ Move-Orderingﯾﺎ ( Lookup Tableاﻧﺠﺎم دادهاﯾﺪ در اﯾﻦ ﻓﺎﯾﻞ ذﮐﺮ ﮐﻨﯿﺪ. • ۶۵ﻧﻤﺮهی اﯾﻦ ﺑﺨﺶ ﻣﺮﺑﻮط ﺑﻪ ﻋﻤﻠ ﺮد ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺷﻤﺎ در ﻣﻘﺎﺑﻞ ﻋﺎﻣﻞ ﺳﺎﯾﺮ دوﺳﺘﺎنﺗﺎن اﺳﺖ .درواﻗﻊ ﻫﻤﻪی ﻋﺎﻣﻞﻫﺎﯾ ﮐﻪ داﻧﺸﺠﻮﯾﺎن ارﺳﺎل ﻣ ﮐﻨﻨﺪ ﺑﺎ ﻫﻢ ﺑﺎزی ﻣ ﮐﻨﻨﺪ و ﺑﺮاﺳﺎس ﺗﻌﺪاد دﻓﻌﺎت ﺑﺮد ﻫﺮ ﻋﺎﻣﻞ ،اﻣﺘﯿﺎزی ﺑﻪ آن ﺗﻌﻠﻖ ﻣ ﮔﯿﺮد. ٣ • ﮐﺪ ﺷﻤﺎ ﺑﺎﯾﺪ ﻫﺮ ﺣﺮﮐﺖ ﺧﻮد را در زﻣﺎن ﺣﺪاﮐﺜﺮ ﯾ ﺛﺎﻧﯿﻪ )روی ﺳﯿﺴﺘﻤ ﺑﺎ ﭘﺮدازﺷ ﺮ core i7و ۴ﮔﯿ ﺎﺑﺎﯾﺖ رم( اﻧﺠﺎم دﻫﺪ .در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﺑﺎزﻧﺪهی ﺑﺎزی ﻣﺤﺴﻮب ﻣ ﺷﻮد .ﺑﻪ ﻫﻤﯿﻦ ﻋﻠﺖ ﺑﺮای اﻃﻤﯿﻨﺎن ﺗﻮﺻﯿﻪ ﻣ ﺷﻮد ﺣﺪ ﮐﻤﺘﺮی را درﻧﻈﺮ ﺑ ﯿﺮﯾﺪ. • ﻋﺎﻣﻞ ﺷﻤﺎ ﻧﺒﺎﯾﺪ ﺑﻪ ﻫﯿﭻ ﻧﺤﻮی ﺑﻪ ﺷ ﻞ Multi Threadﮐﺎر ﮐﻨﺪ .ﻫﻤﭽﻨﯿﻦ ﻧﺒﺎﯾﺪ ﻗﺴﻤﺖﻫﺎی دﯾ ﺮ ﮐﺪ را ﺗﻐﯿﯿﺮ دﻫﺪ )ﻣﺜﻼ ﺑﺎ اﺳﺘﻔﺎده از .( Reflectionﺑﻪ ﻃﻮر ﮐﻠ ﻫﯿﭻ ﮐﺎر ﻣﺸ ﻮک و ﺧﺎرج از ﻋﺮﻓ اﻧﺠﺎم ﻧﺪﻫﯿﺪ! (: • در ﺻﻮرﺗ ﮐﻪ در ﮐﺪﺗﺎن از ﻣﻮﻟﺪ اﻋﺪاد ﺗﺼﺎدﻓ اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﺪ ،ﺣﺘﻤﺎ ﺑﺮای آن ﯾ seedﺛﺎﺑﺖ ﺗﻌﺮﯾﻒ ﮐﻨﯿﺪ ﺗﺎ ﻋﺎﻣﻞﺗﺎن در اﺟﺮاﻫﺎی ﻣﺨﺘﻠﻒ ﺑﺮﻧﺎﻣﻪ ،ﻋﻤﻠ ﺮد ﯾ ﺴﺎن داﺷﺘﻪ ﺑﺎﺷﺪ) .ﺑﻪ ﻋﻨﻮان ﻧﻤﻮﻧﻪ ﮐﺪ RandomAI.javaرا ﺑﺒﯿﻨﯿﺪ(. • در ﺻﻮرت ﻣﺸﺎﻫﺪهی ﺑﺎگ و ﯾﺎ ﺑﺮوز ﻣﺸ ﻠ در ﮐﺪ ﭘﺮوژه ،ﻟﻄﻔﺎ ﺑﻪ دﺳﺘﯿﺎر ﻣﺮﺑﻮﻃﻪی ﺗﻤﺮﯾﻦ )ﻋﻠ ﺑﺎﺑﺎﯾ ( ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ و ﯾﺎ ﺑﺎ ﻣﻮﺿﻮع HW3-prblemاﯾﻤﯿﻞ ﺑﺰﻧﯿﺪ. • ﺑﺮای ﺑﺨﺶ ﻋﻤﻠ ﺑﺎﯾﺪ دو ﻓﺎﯾﻞ ارﺳﺎل ﮐﻨﯿﺪ .ﯾ ﻓﺎﯾﻞ MyPlayerAI.javaو دﯾ ﺮی ﯾ ﻓﺎﯾﻞ pdfﮐﻪ در آن ﺗﺎﺑﻊ ارزﯾﺎﺑ ﺧﻮد ﺑﻪ ﻫﻤﺮاه ﺑﻘﯿﻪی روشﻫﺎﯾ ﮐﻪ ﺑﺮای ﺑﻬﯿﻨﻪ اﺳﺘﻔﺎده ﮐﺮدهاﯾﺪ را ﺣﺪاﮐﺜﺮ در ﯾ ﺻﻔﺤﻪ ﺗﻮﺿﯿﺢ دادهاﯾﺪ. .٢ﺑﺨﺶ ﺗﺌﻮری ٣٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ﻧﻤﺮه ﺑﺮای اﯾﻦ ﺑﺨﺶ ﺗﻌﺪادی ﺳﻮال ﺗﺸﺮﯾﺤ وﺟﻮد دارد .ﻟﻄﻔﺎ ﭘﺎﺳﺦ ﺑﻪ ﻫﻤﻪی ﺳﻮالﻫﺎ را در ﯾ ﻓﺎﯾﻞﻫﺎی ﺑﺨﺶ ﻋﻤﻠ ارﺳﺎل ﮐﻨﯿﺪ .ﻟﻄﻔﺎ ﺑﺮای ﻫﺮ ﺳﻮال ﺣﺪاﮐﺜﺮ ﯾ ﭘﺎرﮔﺮاف ﺗﻮﺿﯿﺢ دﻫﯿﺪ. ﻓﺎﯾﻞ pdfﺑﻨﻮﯾﺴﯿﺪ و ﺑﻪ ﻫﻤﺮاه ﺳﻮال :١ در ﻣﻮرد درﺳﺖ ﯾﺎ ﻧﺎدرﺳﺖ ﺑﻮدن اﯾﻦ ﻋﺒﺎرات زﯾﺮ ﺗﻮﺿﯿﺢ دﻫﯿﺪ: • در درﺧﺖ ﺟﺴﺘﺠﻮی minimaxﺑﺎ اﺳﺘﻔﺎده از ﻫﺮس ،Alpha-Betaﭼﻮن ﺑﻌﻀ از ﮔﺮهﻫﺎ را ﺑﺮرﺳ ﻧﻤ ﮐﻨﯿﻢ ،ﻣﻘﺪاری ﮐﻪ ﺑﺮای رﯾﺸﻪ ﺑﻪ دﺳﺖ ﻣ آورﯾﻢ ﻣ ﺗﻮاﻧﺪ ﮐﻤﺘﺮ ﯾﺎ ﺑﯿﺸﺘﺮ از ﺣﺎﻟﺘ ﺑﺎﺷﺪ ﮐﻪ از اﯾﻦ ﻫﺮس اﺳﺘﻔﺎده ﻧﻤ ﮐﻨﯿﻢ. • در درﺧﺖ ﺟﺴﺘﺠﻮی minimaxﺑﺎ اﺳﺘﻔﺎده از ﻫﺮس ،Alpha-Betaﭼﻮن ﺳﺮﻋﺖ ﺟﺴﺘﺠﻮ ﺑﯿﺸﺘﺮ ﻣ ﺷﻮد ،ﻣﻘﺪاری ﮐﻪ ﺑﺮای رﯾﺸﻪ ﺑﺪﺳﺖ ﻣ آورﯾﻢ ﻧﺰدﯾ ﺗﺮ ﺑﻪ ﻣﻘﺪار واﻗﻌ رﯾﺸﻪ اﺳﺖ. ﺳﻮال :٢ ﻓﺮض ﮐﻨﯿﺪ در ﺑﺎزی اﺗﻠﻮ ﺣﺮﯾﻒ ﺷﻤﺎ RandomAI ،ﺑﺎﺷﺪ .ﯾﻌﻨ از ﺑﯿﻦ ﻫﻤﻪی اﻧﺘﺨﺎبﻫﺎی ﻣﻤ ﻦ ﯾ را ﺑﺎ اﺣﺘﻤﺎل ﻣﺴﺎوی اﻧﺘﺨﺎب ﮐﻨﺪ .در اﯾﻦ ﺣﺎﻟﺖ ،ﺑﺮای ﻣﺤﺎﺳﺒﻪی ارزش وﺿﻌﯿﺖ ﺑﺎزی ﺑﺎﯾﺪ از اﻟ ﻮرﯾﺘﻢ expectimaxﺑﻪ ﺟﺎی minimaxاﺳﺘﻔﺎده ﮐﻨﯿﻢ .آﯾﺎ ارزش وﺿﻌﯿﺖ ﺑﺎزی در اﯾﻦ ﺣﺎﻟﺖ )ﺣﺎﻟﺘ ﮐﻪ ﺣﺮﯾﻒ ﺗﺼﺎدﻓ ﺑﺎزی ﻣ ﮐﻨﺪ( ،ﻣ ﺗﻮاﻧﺪ اﮐﯿﺪا ﮐﻤﺘﺮ از ﺣﺎﻟﺘ ﺑﺎﺷﺪ ﮐﻪ ﺣﺮﯾﻒ ﮐﺎﻣﻼ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺪ )و ﺷﻤﺎ درﺧﺖ minimaxرا ﺣﺴﺎب ﻣ ﮐﻨﯿﺪ(؟ ﺳﻮال :٣ ﻓﺮض ﮐﻨﯿﺪ ﯾ ﺑﺎزی ﺳﻪ ﻧﻔﺮه دارﯾﻢ .ﻫﻤﭽﻨﯿﻦ ﯾ ﺗﺎﺑﻊ ارزﯾﺎﺑ دارﯾﻢ ﮐﻪ ﺑﻪ ازای ﻫﺮ وﺿﻌﯿﺖ ﺳﻪ ﻋﺪد ﺑﺮﻣ ﮔﺮداﻧﺪ ﮐﻪ ﻧﺸﺎﻧ ﺮ ﻣﯿﺰان ارزش آن وﺿﻌﯿﺖ ﺑﺮای ﻫﺮﯾ از ﺑﺎزﮐﻨﺎن اﺳﺖ .ﺑﺎ ﻓﺮض اﯾﻨ ﻪ ﻫﺮ ﺳﻪ ﺑﺎزﯾ ﻦ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﻨﺪ ،اﻟ ﻮرﯾﺘﻤ ﻣﺸﺎﺑﻪ اﻟ ﻮرﯾﺘﻢ minimaxاراﺋﻪ ﮐﻨﯿﺪ ﮐﻪ در ﯾ وﺿﻌﯿﺖ ﻣﺸﺨﺺ ،ﺑﻬﺘﺮﯾﻦ ﺣﺮﮐﺖ را ﺑﺮای ﺑﺎزﯾ ﻦ اول ﻣﺸﺨﺺ ﮐﻨﺪ. ﺳﻮال :۴ در ﺳﻮال ﻗﺒﻞ ،اﮔﺮ ﺑﺪاﻧﯿﻢ ﺑﺎزﯾ ﻦ اول ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺪ ،وﻟ ﺑﺎزﯾ ﻨﺎن دوم و ﺳﻮم ﻏﯿﺮ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺘﺪ ،آﯾﺎ اﻟ ﻮرﯾﺘﻢ داده ﺷﺪه ﻣ ﺗﻮاﻧﺪ ﺗﻀﻤﯿﻦ ﮐﻨﺪ ﮐﻪ ﻧﺘﯿﺠﻪی ﺑﺎزی ﺑﺪﺗﺮ از ﺣﺎﻟﺘ ﮐﻪ ﺑﺪاﻧﯿﻢ ﻫﻤﻪ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﻨﺪ ﻧﻤ ﺷﻮد؟ ﯾﻌﻨ ﺑﺎزﯾ ﻦ اول ﺣﺪاﻗﻞ ﺑﻪ ﻣﯿﺰاﻧ ﮐﻪ در ﺣﺎﻟﺖ ﻗﺒﻞ ﺳﻮد ﻣ ﮐﺮد ،در اﯾﻦ ﺣﺎﻟﺖ ﺳﻮد ﻣ ﮐﻨﺪ؟ ۴ ﺳﻮال :۵ ﺷ ﻞ زﯾﺮ ﯾ درﺧﺖ minimaxرا ﻧﺸﺎن ﻣ دﻫﺪ ﮐﻪ ﻣﻘﺪار ﯾ از ﺑﺮگﻫﺎی آن ﻧﺎﻣﻌﻠﻮم ) (xاﺳﺖ .ﺑﺎ ﻓﺮض اﯾﻨ ﻪ ﺑﺎزﯾ ﻦ اول ،ﺑﺎزﯾ ﻦ ﺑﯿﺸﯿﻨﻪ ﺑﺎﺷﺪ و ﺑﺎزﯾ ﻦ دوم ،ﺑﺎزﯾ ﻦ ﮐﻤﯿﻨﻪ ،ﺑﻪ ازای ﭼﻪ ﻣﻘﺎدﯾﺮی از ،xﺑﺎزﯾ ﻦ اول Action1را اﻧﺠﺎم ﻣ دﻫﺪ؟ ﺷ ﻞ :٢درﺧﺖ minimaxﯾ ﻣﻮﻓﻖ و ﭘﺎﯾﺪار ﺑﺎﺷﯿﺪ. ۵ ﺑﺎزی
© Copyright 2025 Paperzz