联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Algorithm 算法作业Algorithm 算法作业

日期:2019-07-12 07:45

Stats 102A

Midterm Project

July 2, 2019

General Notes

You will submit a minimum of three files, the core files must conform to the following naming conventions

(including capitalization and underscores). 123456789 is a placeholder, please replace these nine digits

with your nine-digit UID. The files you must submit are:

1. 123456789_stats102a_midterm.R An R script file containing all of the functions you wrote for

the homework. The first line of your .Rmd file, after loading libraries, should be sourcing this

script.

2. 123456789_stats102a_midterm.Rmd Your markdown file which generates the output file of your

submission.

3. 123456789_stats102a_midterm.html/pdf Your output file, either a PDF or an HTML file

depending on the output you choose to generate.

4. included image files You may name these what you choose, but you must include all of the

image files you generated for your structured flowcharts, otherwise your file will not knit.

If you fail to submit any of the required core files you will receive ZERO points for the assignment.

If you submit any files which do not conform to the specified naming convention, you will receive (at

most) half credit for the assignment.

Your coding should adhere to the tidyverse style guide: https://style.tidyverse.org/

All flowcharts should be done on separate sheets of paper, but be included, inline as images, in your

final markdown document.

Any functions you write should be included in a separate functions file.

Your .Rmd file must knit. If your .Rmd file does not knit you will receive (at most) half credit for the

assignment.

The two most common reasons files fail to knit are because of workspace/directory structure issues and

because of missing include files. To remedy the first, ensure all of the file paths in your document are relative

paths pointing at the current working directory. To remedy the second, simply make sure you upload any

and all files you source or include in your .Rmd file.

NOTE: Everything you need to do this assignment is here, in your class notes, or was covered in discussion

or lecture.

DO NOT look for solutions online.

EVERYTHING you submit MUST be 100% your, original, work product. Any student suspected

of plagiarizing, in whole or in part, any portion of this assignment, will be immediately referred to

the Dean of Student’s office without warning, and you will get a zero for all parts of the tainted

homework.

YOU MAY NOT collaborate on this assignment.

– Each person must MUST work INDEPENDENTLY on this assignment in its entirety.

1

Midterm Project Requirements

For each of the following problems you will:

a) Create a structured flowchart of the game and all functions/subroutines.

b) Write pseudocode sufficiently complete, clear, and concise enough to enable a person to accurately

implement the your design in any programming language they are adept with using.

c) Perform a complexity analysis of your AI functions, specifically, of your strongest AI function and the

function you write to place ships.

d) Finally, you must write the functions/subroutines which will allow your game to be played between a

human opponent and your AI player.

Battleship Specification

Rules

From Wikipedia:

Traditionally, the game is played on four grids, two for each player. The grids are typically square, usually

10 × 10, and the individual squares in the grid are identified by letter and number. On a primary grid the

player arranges their own ships and keeps a record of the shots by the opponent. On the secondary grid the

player records their own shots as hits or misses.

Before play begins, each player secretly arranges their ships on their primary grid. Each ship occupies a

number of consecutive squares on the grid, arranged either horizontally or vertically. The number of squares

for each ship is determined by the type of the ship. The ships cannot overlap (i.e., only one ship can occupy

any given square in the grid). The types and numbers of ships allowed are the same for each player. These

may vary depending on the rules.

The default ships we will use come from the 2002 Hasbro edition of the game

Ship Number Name Size

1 Aircraft Carrier 5

2 Battleship 4

3 Destroyer 3

4 Submarine 3

5 Patrol Boat 2

After the ships have been positioned, the game proceeds in a series of rounds. In each round, each player

takes a turn to announce a target square (e.g. “c-7”) in the opponent’s grid which is to be shot at. The

opponent announces whether or not the square is occupied by a ship, and if it is a “miss”, the opponent

player marks their primary grid with a white peg; if a “hit” they mark this on their own primary grid with a

red peg. The attacking player notes the hit or miss on their own “tracking” grid with the appropriate color

peg (red for “hit”, white for “miss”), in order to build up a picture of the opponent’s fleet.

When all of the squares of a ship have been hit, the ship’s owner announce the sinking of either the Carrier,

the Cruiser, the Submarine, the Destroyer, or the titular Battleship. If all of a player’s ships have been sunk,

the game is over and their opponent wins.

Our game will be a variation where the sinking of a ship is not announced.

2

(1) Create several classes of objects.

battleship: Essentially, this is the game object. Everything about the current status of the game is included here.

fleets This is a length-two list of the players’ fleets.

history This is a tibble object with three columns:

from A character vector of the admiral firing the shot.

to A character vector of the admiral who is being fired upon.

target A character vector of the target of the shot. e.g. "f-9", "b-6", etc.

fleet: An object which represents one admiral’s fleet.

admiral A character string representing the player in charge of the fleet.

ocean A length-two numeric vector specifying the size and shape of the ocean the fleet occupies.

ships A list of ship objects which are members of the fleet.

ship: An object representing one ship.

name A character string. The name of the ship.

size An integer. The number of spaces the ship occupies.

position A length-two character vector of the bow (front) and stern (back) position of the ship.

hits A length(ship$size) logical vector indicating which portions of the ship have been hit.

sunk Logical, indicating if the ship is sunk.

(2) Create functions:

Class Constructors:

ship() Creates one ship object

name A character string, the name of the ship, e.g. "Battleship," "Submarine," etc.

size An integer, the number of spaces the ship occupies.

fleet() Creates one fleet object.

admiral A character string to represent the Admiral of the fleet.

ocean Optional. Default: ocean = c(10, 10) A length-two numeric vector representing the dimensions

of the ocean the fleet will occupy. For the sake of this project you may assume ocean dimensions

will be at least 5 × 5 and at most 25 × 25

ships Optional. Default: ships = NULL A variable-length list object containing one or more ship-class

objects.

If ships = NULL, the result of default_ships() should be used.

battleship() Creates a game object.

fleets Optional. Default: fleets = list(). A list of fleet objects in the game.

If length(fleets) < 2 make either 1 or 2 default fleets (standard ships on a standard board). If a

default fleet is generated the admiral should be "Player 1" or "Player 2" as appropriate.

3

Gameplay

play_bs() The workhorse function for playing a single game of Battleship.

players Who is playing the game, this should be the names of functions which return a target string. The

default should be for a one-player game players = c("human", "ai_123456789")

The return value for this function is a list object. The minimal contents of this list should be winner =

the name of the admiral who won the game. You may need to include more data in your return object

to answer all of the questions in this project.

human The function which polls a human player for a target. It should accept a character string indicating a

row (an appropriate letter) and a column (an appropriate number). Accepted responses should be in

the form of "f-3", "J-10", etc. (Hint: The substr() or the strsplit() functions may be helpful for

processing targets.)

ai_123456789() This is your bot. It should take either the following two arguments:

battleship The current game object. Note: Though your bot has access to the entire game object which

notably includes your opponent’s ship placements, you are to limit your bot’s access to the following

items:

history The object detailing the shots and hits in the game.

ocean The objects detailing the size and shape of your opponents ocean, so you know the bounds of

the regions you need to look for ships in.

size The vector of ship sizes so you know how many ships of each size you are looking for.

Any bots which are found to access the opponent’s ship placements will be excluded from the

tournament section and receive a 0 for that portion as well as a 0 for all portions of this project

involving the AI agent you were to write. DON’T BE A CHEATER!

strength Optional. Default: strength = 9. This should be the level of play of your bot. The default

should be strength = 9, this is the best bot you have made at the time of your submission. You

should also have a strength = 0 bot which plays completely randomly, with no strategy. It is

not necessary to have more than these two levels, but it is required to have at least these two.

You may want to explore and experiment with different strength bots for a variety of reasons, but

you are not required to.

No bot shall ever fire upon the same spot twice nor shall any bot fire on a spot outside the confines

of the designated ocean.

The return value of this function should be a character string representing a target square in the

opponent’s ocean grid. E.g. "d-6", "i-7", etc.

or the function should take one argument:

fleet Optional. No default. If a fleet object is passed to your AI function it should return the same fleet

object with updated position values for the ship objects in the fleet. That is, it places the ships.

default_ships() Create a list object containing the five default ships (see rules), with no assigned positions.

position_fleet() A function to assign ships a position in the ocean.

fleet A fleet object.

positions Optional. Default: positions = NULL. A list of the same length as the ship list for the fleet.

Each list item shall comprise a length two character vector indicating the start and end position of

each ship in the ship list.

If no positions list is provided, the ships shall be randomly placed in the ocean. The return value for

this function should be a fleet object with updated ship positions.

4

(3) Create methods

For the following functions create methods for the specified classes. Unless specified, you are free to implement

these however you like, but you should think carefully about what makes sense to do, that is, for example,

what should printing a ship entail? Or a fleet? How would you summarize a game (a battleship object)?

print()

ship Print a meaningful representation of a ship object, something other than simply dumping the

contents with the default printing method.

fleet Print a meaningful representation of a fleet object, something other than simply dumping the

contents with the default printing method.

battleship Print a meaningful representation of a battleship object, something other than simply dumping

the contents with the default printing method.

plot()

fleet This should produce a graphical representation of one player’s game board, with their ships placed

appropriately, including indications where the ship has been hit.

battleship This should produce a graphical representation of the current state of the game. It should show

all the oceans for all players, along with representations of all misses and hits on each ocean, but

should only show the active player’s ships on the active player’s ocean. The plot function should

take an optional argument player, showing only the ships of the specified player. If player = 0

(the default) the ships for all players should be shown.

summary()

fleet Summarize a fleet object in some meaningful way.

battleship Summarize a battleship object in some meaningful way.

(4) Simulate 100,000 games for each of the following conditions:

naive(strength = 0) vs naive(strength = 0)

naive(strength = 0) vs smart(strength = 9)

smart(strength = 9) vs naive(strength = 0)

smart(strength = 9) vs smart(strength = 9)

Questions

A) Standard Game

Answer the following questions for each of your simulations above:

a) What is the minimum number of turns the winning player needed to win the game?

b) What is the maximum number of turns the winning player needed to win the game?

c) What is the distribution of the number of unsunk ships the winning player had remaining?

d) What is the distribution of the number of hits the losing player made?

e) In what proportion of games has the winner lost their Patrol Boat?

f) In what proportion of games is the losing player’s last ship the Patrol Boat?

5

Also answer the following questions:

g) Make a two-way relative frequency table of the proportion of times Player 1 wins (naive/smart vs

naive/smart).

h) Test the hypothesis that order of play is not a statistically significant factor in determining who wins.

Use a 5% significance level, and interpret the p-value.

i) Test the hypothesis that the type of AI player is not a statistically significant factor in determining

who wins. Use a 5% significance level, and interpret the p-value.

B) Handicapped Games

If you wrote your functions as specified in a general enough way, it should be possible to conduct a game

between two different fleets on two different oceans. Experiment with changing the setup of the game to give

one player an advantage over another. Perhaps you simply give one player a 9 × 9 board to hide their ships

in and you give the other player an 11 × 11 board to hide in. Or you trade one player’s Patrol Boat for the

other player’s submarine.

Try at least three different handicaps in favor of the naive AI against your smart AI with the goal of

making it a fair game between the two.

Run 100,000 simulations and provide some summary statistics for each set of simulations.

C) Extensions

a) Describe in as much detail as possible, what you would need to change to implement the Salvo! variant

of the game. (See rules.)

b) Identify at least two (2) ways you could modify or extend the game, other than the Salvo! variant,

and describe in as much detail as possible what you would need to change to implement each of the

extensions you identified.

D) Tournament

Your Battleship bots will be pitted against each other in a series of random, but fair, games (random ocean

size, random fleets, same for both sides). 10% of the points for the Midterm Project will be allocated to your

ranking in this tournament. For anonymity, please add an attribute (in your .R file) to your AI function

called alt which is a character string containing an alternate name to report your function’s results under.

6


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp