Difference between revisions of "Martingale"

From Quantitative Analysis Software Courses
Jump to navigation Jump to search
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
==Revisions==
 
==Revisions==
  
'''2018-8-11'''
+
'''2018-8-20'''
* Project is in DRAFT.
+
* Project is finalized.
  
 
==Overview==
 
==Overview==
Line 9: Line 9:
  
 
In this project you will evaluate the actual betting strategy that Professor Balch uses at roulette when he goes to Las Vegas.  Here it is:
 
In this project you will evaluate the actual betting strategy that Professor Balch uses at roulette when he goes to Las Vegas.  Here it is:
* winnings = $0
+
* episode_winnings = $0
* while winnings < $80:
+
* while episode_winnings < $80:
 
** won = False
 
** won = False
 
** bet_amount = $1
 
** bet_amount = $1
Line 17: Line 17:
 
*** won = result of roulette wheel spin
 
*** won = result of roulette wheel spin
 
*** if won == True:
 
*** if won == True:
**** winnings = winnings + bet_amount
+
**** episode_winnings = episode_winnings  + bet_amount
 
*** else:
 
*** else:
**** winnings = winnings - bet_amount
+
**** episode_winnings = episode_winnings - bet_amount
 +
**** bet_amount = bet_amount * 2
  
 
Here are some details regarding how roulette betting works: Betting on black (or red) is considered an "even money" bet.  That means that if you bet N chips and win, you keep your N chips and you win another N chips.  If you bet N chips and you lose then those N chips are lost.  The odds of winning or losing depend on whether you're betting at an American wheel or a European wheel. For this project we will be assuming an '''American wheel'''. You can learn more about roulette and betting here: https://en.wikipedia.org/wiki/Roulette
 
Here are some details regarding how roulette betting works: Betting on black (or red) is considered an "even money" bet.  That means that if you bet N chips and win, you keep your N chips and you win another N chips.  If you bet N chips and you lose then those N chips are lost.  The odds of winning or losing depend on whether you're betting at an American wheel or a European wheel. For this project we will be assuming an '''American wheel'''. You can learn more about roulette and betting here: https://en.wikipedia.org/wiki/Roulette
Line 26: Line 27:
  
 
'''Set up your development environment'''
 
'''Set up your development environment'''
 
+
First, if you haven't yet set up your software environment, follow the instructions here: [[ML4T_Software_Setup]].  The base directory structure is used for all projects in the class, including supporting data and software are will be set up correctly when you follow those instructions.  
First, if you haven't yet set up your software environment, follow the instructions here: [[ML4T_Software_Setup]].  The base directory structure for all projects in the class, including supporting data and software are will be set up correctly when you follow those instructions.  
 
  
 
'''Get the template code for this project'''
 
'''Get the template code for this project'''
  
This project is available here: [[File:fall18_martingale.zip]]. Download and extract its contents into the base directory (ML4T_2018Fall). Once you've done this, you should see the following directory structure:
+
This project is available here: [[File:18fall_martingale.zip]]. Download and extract its contents into the base directory (ML4T_18fall). Once you've done this, you should see the following directory structure:
 
* <tt>ML4T_2018Fall/</tt>: Root directory for course
 
* <tt>ML4T_2018Fall/</tt>: Root directory for course
 
** <tt>data/</tt>: Location of data
 
** <tt>data/</tt>: Location of data
 
** <tt>grading/</tt>: Grading libraries used by the individual grading scripts for each assignment.
 
** <tt>grading/</tt>: Grading libraries used by the individual grading scripts for each assignment.
 
** <tt>util.py</tt>: Common utility library. This is the <b>only</b> allowed way to read in stock data.
 
** <tt>util.py</tt>: Common utility library. This is the <b>only</b> allowed way to read in stock data.
 +
** README.md
 
** <tt>martingale/</tt>: Root directory for this project
 
** <tt>martingale/</tt>: Root directory for this project
 
*** <tt>martingale.py</tt>: Main project file to use as a template for your code.
 
*** <tt>martingale.py</tt>: Main project file to use as a template for your code.
  
You should change ONLY <tt>martingale.py</tt>.  ALL of your code should be in that one file.  Do not create additional files.  It should always remain in and run from the directory <tt>ML4T_2018Fall/martingale/</tt>.  Leave the copyright information at the top intact.
+
You should change only <tt>martingale.py</tt>.  All of your code should be in that one file.  Do not create additional files.  It should always remain in and run from the directory <tt>ML4T_2018Fall/martingale/</tt>.  Leave the copyright information at the top intact.
  
 
'''Insert your GT User ID and GT ID number'''
 
'''Insert your GT User ID and GT ID number'''
Line 49: Line 50:
 
Revise the code in <tt>martingale.py</tt> to simulate 1000 successive bets on spins of the roulette wheel using the betting scheme outlined above.  You should test for the results of the betting events by making successive calls to the <tt>get_spin_result(win_prob)</tt> function.  Note that you'll have to update the <tt>win_prob</tt> parameter according to the correct probability of winning.  You can figure that out by thinking about how roulette works (see wikipedia link above).
 
Revise the code in <tt>martingale.py</tt> to simulate 1000 successive bets on spins of the roulette wheel using the betting scheme outlined above.  You should test for the results of the betting events by making successive calls to the <tt>get_spin_result(win_prob)</tt> function.  Note that you'll have to update the <tt>win_prob</tt> parameter according to the correct probability of winning.  You can figure that out by thinking about how roulette works (see wikipedia link above).
  
Track your winnings by storing them in a numpy array. You might call that array <tt>winnings</tt> where <tt>winnings[0]</tt> should be set to 0 (just before the first spin).  <tt>winnings[1]</tt> should reflect the total winnings after the first spin and so on.  
+
Track your winnings by storing them in a numpy array. You might call that array <tt>winnings</tt> where <tt>winnings[0]</tt> should be set to 0 (just before the first spin).  <tt>winnings[1]</tt> should reflect the total winnings after the first spin and so on. For a particular episode if you ever hit $80 in winnings, stop betting and just fill the data forward with the value 80.
 
 
'''Make some charts'''
 
 
 
For the following charts, and for all charts in this class you should use python's matplotlib library. You should configure your code to write the
 
  
Run your simple simulator 10 times, and track the winnings, starting from 0 each time.  Plot each run on one chart using <tt>matplotlib</tt> functions.
+
'''Experiment 1: Explore the strategy and make some charts'''
  
==Template==
+
Now we want you to run some experiments to determine how well the betting strategy works.  The approach we're going to take is called Monte Carlo simulation where the idea is to run a simulator over and over again with randomized inputs and to assess the results in aggregate.  Skip to the "report" section below to which specific properties of the strategy we want you to evaluate.
  
A template is provided for you to get started with the project.  The base directory structure, util.py, data, and grading modules are provided by this zip file: [[File:ML4T_2018Spring.zip]] (also linked to from the [[ML4T Software Setup]] page. Once you have extracted that zip file, the template for this project is available here: [[File:spr18_assess_portfolio.zip]]. Download and extract its contents into the base directory. Once you've done this, you should see the following directory structure:
+
For the following charts, and for all charts in this class you should use python's matplotlib library.  Your submitted project should include all of the code necessary to generate the charts listed in your report. You should configure your code to write the figures to .png files. Do not allow your code to create a window that displays images. If it does you will receive a penalty.
* <tt>ML4T_2018Spring/</tt>: Root directory for course
 
** <tt>data/</tt>: Location of data
 
** <tt>grading/</tt>: Grading libraries used by the individual grading scripts for each assignment.
 
** <tt>util.py</tt>: Common utility library. This is the <b>only</b> allowed way to read in stock data.
 
** <tt>assess_portfolio/</tt>: Root directory for this project
 
*** <tt>analysis.py</tt>: Main project script with functions you need to implement, as well as test code
 
*** <tt>grade_analysis.py</tt>: Grading script for this assignment.
 
  
You should change ONLY <tt>analysis.py</tt>.  ALL of your code should be in that one fileDo not create additional filesIt should always remain in and run from the directory <tt>ML4T_2018Spring/assess_portfolio/</tt>If you move it somewhere else and develop your code there, it may not run properly when auto graded.
+
* Figure 1: Run your simple simulator 10 times and track the winnings, starting from 0 each time.  Plot all 10 runs on one chart using <tt>matplotlib</tt> functions.  The horizontal (X) axis should range from 0 to 300, the vertical (Y) axis should range from -256 to +100Note that we will not be surprised if some of the plot lines are not visible because they exceed the vertical or horizontal scales.
 +
* Figure 2: Run your simple simulator 1000 timesPlot the mean value of winnings for each spin using the same axis bounds as Figure 1Add an additional line above and below the mean at mean+standard deviation, and mean-standard deviation of the winnings at each point.
 +
* Figure 3: Use the same data you used for Figure 2, but plot the median instead of the meanBe sure to include the standard deviation lines above and below the median as well.
  
Notes:
+
For all of the above charts and experiments, if and when the target $80 winnings is reached, stop betting and allow the $80 value to persist from spin to spin.
  
* Ignore any file named <tt>__init__.py</tt>; they are used to mark directories as Python packages.
+
'''Experiment 2: A more realistic gambling simulator'''
* The <tt>util.py</tt> shipped with the template code expects the data directory to be one level up, but this <b>will</b> change during autograding. If you hard-code paths to data files, your code will break. Use the functions provided by <tt>util.py</tt> to read data.
 
* To execute the main script, make sure your current working directory is <tt>assess_portfolio/</tt>, then run:
 
<pre>python analysis.py</pre>
 
  
==Suggestions==
+
You may have noticed that the strategy actually works pretty well, maybe better than you expected.  One reason for this is that we were allowing the gambler to use an unlimited bank roll.  In this experiment we're going to make things more realistic by giving the gambler a $256 bank roll.  If he or she runs out of money, bzzt, that's it.  Repeat the experiments above with this new condition.  Note that once the player has lost all of their money (i.e., episode_winnings = -256) stop betting and fill that number (-256) forward.  An important corner case to be sure you handle is the situation where the next bet should be $N, but you only have $M (where M<N).  Make sure you only bet $M.  Here are the two charts to create:
  
Here is a suggested high-level outline for what your code needs to do:
+
* Figure 4: Run your realistic simulator 1000 times. Plot the mean value of winnings for each spin using the same axis bounds as Figure 1. Add an additional line above and below the mean at mean+standard deviation, and mean-standard deviation of the winnings at each point.
*Read in adjusted closing prices for the equities.
+
* Figure 5: Repeat the same experiment as in Figure 4, but use the median instead of the mean. Be sure to include the standard deviation lines above and below the median as well.
*Normalize the prices according to the first day. The first row for each stock should have a value of 1.0 at this point.
 
*Multiply each column by the allocation to the corresponding equity.
 
*Multiply these normalized allocations by starting value of overall portfolio, to get position values.
 
*Sum each row (i.e. all position values for each day). That is your daily portfolio value.
 
*Compute statistics from the total portfolio value.
 
  
You will need to reuse some of your code from this project for the next project.  To make that task easier, we suggest that you create a helper function within your code that has the following prototype.  Note that we will not be testing this part of your code directly, so it isn't essential that you follow the API exactly.
+
==Contents of the report==
  
<PRE>
+
Please address each of these points/questions in your report, to be submitted as <tt>report.pdf</tt>
cr, adr, sddr, sr = \
 
    compute_portfolio_stats(prices = df_prices, \
 
    allocs=[0.1,0.2,0.3,0.4],\
 
    rfr = 0.0, sf = 252.0)
 
</PRE>
 
  
Where the returned outputs are:
+
# In Experiment 1, estimate the probability of winning $80 within 1000 sequential betsExplain your reasoning.
* cr: Cumulative return
+
# In Experiment 1, what is the expected value of our winnings after 1000 sequential bets? Explain your reasoning. Go here to learn about expected value: https://en.wikipedia.org/wiki/Expected_value
* adr: Average daily return
+
# In Experiment 1, does the standard deviation reach a maximum value then converge or stabilize as the number of sequential bets increases?  Explain why it does (or does not).
* sddr: Standard deviation of daily return
+
# In Experiment 2, estimate the probability of winning $80 within 1000 sequential bets. Explain your reasoning.
* sr: Sharpe Ratio
+
# In Experiment 2, what is the expected value of our winnings after 1000 sequential bets? Explain your reasoning.  
 
+
# In Experiment 2, does the standard deviation reach a maximum value then converge or stabilize as the number of sequential bets increases?  Explain why it does (or does not).
The input parameters are:
+
# Include figures 1 through 5.
* prices is a data frame or an ndarray of historical prices.
 
* allocs: A list of allocations to the stocks, must sum to 1.0
 
* rfr: The risk free return per sample period for the entire date rangeWe assume that it does not change.
 
* sf: Sampling frequency per year
 
 
 
Here are some notes and assumptions:
 
*When we compute statistics on the portfolio value, we do not include the first day.
 
*We assume you are using the data provided. If you use other data your results may turn out different from ours. Yahoo's online data changes every day. We cannot not build a consistent "correct" answer based on "live" Yahoo data.
 
*Assume 252 trading days/year.
 
 
 
Make sure your <tt>assess_portfolio()</tt> function gives correct output. Check it against the examples below.
 
 
 
==Example output==
 
 
 
These are actual correct examples that you can use to check your work.
 
 
 
===Example 1===
 
<pre>
 
Start Date: 2010-01-01
 
End Date: 2010-12-31
 
Symbols: ['GOOG', 'AAPL', 'GLD', 'XOM']
 
Allocations: [0.2, 0.3, 0.4, 0.1]
 
Sharpe Ratio: 1.51819243641
 
Volatility (stdev of daily returns): 0.0100104028
 
Average Daily Return: 0.000957366234238
 
Cumulative Return: 0.255646784534
 
</pre>
 
 
 
[[File:Example1.png]]
 
 
 
===Example 2===
 
<pre>
 
Start Date: 2010-01-01
 
End Date: 2010-12-31
 
Symbols: ['AXP', 'HPQ', 'IBM', 'HNZ']
 
Allocations: [0.0, 0.0, 0.0, 1.0]
 
Sharpe Ratio: 1.30798398744
 
Volatility (stdev of daily returns): 0.00926153128768
 
Average Daily Return: 0.000763106152672
 
Cumulative Return: 0.198105963655
 
</pre>
 
 
 
[[File:Example_2.png]]
 
 
 
==Example 3==
 
<PRE>
 
Start Date: 2010-06-01
 
End Date: 2010-12-31
 
Symbols: ['GOOG', 'AAPL', 'GLD', 'XOM']
 
Allocations: [0.2, 0.3, 0.4, 0.1]
 
Sharpe Ratio: 2.21259766672
 
Volatility (stdev of daily returns): 0.00929734619707
 
Average Daily Return: 0.00129586924366
 
Cumulative Return: 0.205113938792
 
</PRE>
 
  
 
==What to turn in==
 
==What to turn in==
  
''Be sure to follow these instructions diligently!''
+
Submit the following files (only) via Canvas before the deadline:
 +
* Your report as <tt>report.pdf</tt>
 +
* Your code as <tt>martingale.py</tt>
  
Submit via Canvas:
+
Do not submit any other files. Note that your charts should be included in the report, not submitted as separate files.  Also note that if we run your submitted code, it should generate all 5 figures as png files.
  
* Your code as <tt>analysis.py</tt> (please use this EXACT filename)
+
==Rubric==
  
Important: We may test against OTHER symbols and other allocations, so don't hardcode the list of symbols.
+
'''Report'''
 +
* Are the questions answered approximately correctly? (Up to -5 points for each incorrect answer)
 +
* Is the reasoning for each question correct and supported by the evidence? (Up to -5 points for each if incorrect)
 +
* Are each of the charts provided and correct? (Up to -8 points for each if incorrect)
  
Unlimited resubmissions are allowed up to the deadline for the project.
+
'''Code'''
 
+
* Does the code run without crashing? (-10 points if not)
==Rubric==
+
* Does the code generate appropriate charts written to png files? (-10 points each up to a max of -20 if not)
 
 
10 test cases: We will test your code against 10 cases (10 points per case).  Each case will be deemed "correct" if:
 
* 5 points: Sharpe ratio = reference answer +- 0.001
 
* 2.5 points: Average daily return = reference answer +- 0.00001
 
* 2.5 points: Cumulative return = reference answer +- 0.001
 
  
 
==Required, Allowed & Prohibited==
 
==Required, Allowed & Prohibited==
Line 182: Line 106:
 
Required:
 
Required:
 
* Your project must be coded in Python 2.7.x.
 
* Your project must be coded in Python 2.7.x.
* Your code must run on one of the university-provided computers (e.g. buffet02.cc.gatech.edu).
+
* This requirement is not enforced for this first project, but will be for future projects. <s>Your code must run on one of the university-provided computers (e.g. buffet02.cc.gatech.edu).</s>
* Use the code for reading in historical data provided in util.py
 
* Your code must run in less than 5 seconds on one of the university-provided computers.
 
  
 
Allowed:
 
Allowed:
* You can develop your code on your personal machine, but it must also run successfully on one of the university provided machines or virtual images.
 
 
* Your code may use standard Python libraries (except os).
 
* Your code may use standard Python libraries (except os).
 
* You may use the NumPy, SciPy, matplotlib and Pandas libraries.  Be sure you are using the correct versions.
 
* You may use the NumPy, SciPy, matplotlib and Pandas libraries.  Be sure you are using the correct versions.
Line 195: Line 116:
 
* Any use of global variables.
 
* Any use of global variables.
 
* Any libraries not listed in the "allowed" section above.
 
* Any libraries not listed in the "allowed" section above.
* Use of any code other than util.py to read in data.
 
 
* Use of Python's os module.
 
* Use of Python's os module.
 
* Any code you did not write yourself (except for the 5 line rule in the "allowed" section).
 
* Any code you did not write yourself (except for the 5 line rule in the "allowed" section).
Line 201: Line 121:
  
 
==Legacy versions==
 
==Legacy versions==
 
* [[MC1-Project-1]]
 
* [[MC1-Project-1-legacy]]
 
* [[MC1-Project-1-archive]]
 

Latest revision as of 01:34, 22 August 2018

Revisions

2018-8-20

  • Project is finalized.

Overview

The purpose of this assignment is to get you started programming in Python right away and to help provide you some initial feel for risk, probability and "betting." Purchasing a stock is, after all, a bet that the stock will increase in value.

In this project you will evaluate the actual betting strategy that Professor Balch uses at roulette when he goes to Las Vegas. Here it is:

  • episode_winnings = $0
  • while episode_winnings < $80:
    • won = False
    • bet_amount = $1
    • while not won
      • wager bet_amount on black
      • won = result of roulette wheel spin
      • if won == True:
        • episode_winnings = episode_winnings + bet_amount
      • else:
        • episode_winnings = episode_winnings - bet_amount
        • bet_amount = bet_amount * 2

Here are some details regarding how roulette betting works: Betting on black (or red) is considered an "even money" bet. That means that if you bet N chips and win, you keep your N chips and you win another N chips. If you bet N chips and you lose then those N chips are lost. The odds of winning or losing depend on whether you're betting at an American wheel or a European wheel. For this project we will be assuming an American wheel. You can learn more about roulette and betting here: https://en.wikipedia.org/wiki/Roulette

Tasks

Set up your development environment First, if you haven't yet set up your software environment, follow the instructions here: ML4T_Software_Setup. The base directory structure is used for all projects in the class, including supporting data and software are will be set up correctly when you follow those instructions.

Get the template code for this project

This project is available here: File:18fall martingale.zip. Download and extract its contents into the base directory (ML4T_18fall). Once you've done this, you should see the following directory structure:

  • ML4T_2018Fall/: Root directory for course
    • data/: Location of data
    • grading/: Grading libraries used by the individual grading scripts for each assignment.
    • util.py: Common utility library. This is the only allowed way to read in stock data.
    • README.md
    • martingale/: Root directory for this project
      • martingale.py: Main project file to use as a template for your code.

You should change only martingale.py. All of your code should be in that one file. Do not create additional files. It should always remain in and run from the directory ML4T_2018Fall/martingale/. Leave the copyright information at the top intact.

Insert your GT User ID and GT ID number

Revise the code functions author() and gtid() to correctly include your GT User ID and 9 digit GT ID respectively. Your GT User ID should be something like tbalch78 and your GTID is a 9 digit number. You should also update this information the comments section at the top.

Build a simple gambling simulator

Revise the code in martingale.py to simulate 1000 successive bets on spins of the roulette wheel using the betting scheme outlined above. You should test for the results of the betting events by making successive calls to the get_spin_result(win_prob) function. Note that you'll have to update the win_prob parameter according to the correct probability of winning. You can figure that out by thinking about how roulette works (see wikipedia link above).

Track your winnings by storing them in a numpy array. You might call that array winnings where winnings[0] should be set to 0 (just before the first spin). winnings[1] should reflect the total winnings after the first spin and so on. For a particular episode if you ever hit $80 in winnings, stop betting and just fill the data forward with the value 80.

Experiment 1: Explore the strategy and make some charts

Now we want you to run some experiments to determine how well the betting strategy works. The approach we're going to take is called Monte Carlo simulation where the idea is to run a simulator over and over again with randomized inputs and to assess the results in aggregate. Skip to the "report" section below to which specific properties of the strategy we want you to evaluate.

For the following charts, and for all charts in this class you should use python's matplotlib library. Your submitted project should include all of the code necessary to generate the charts listed in your report. You should configure your code to write the figures to .png files. Do not allow your code to create a window that displays images. If it does you will receive a penalty.

  • Figure 1: Run your simple simulator 10 times and track the winnings, starting from 0 each time. Plot all 10 runs on one chart using matplotlib functions. The horizontal (X) axis should range from 0 to 300, the vertical (Y) axis should range from -256 to +100. Note that we will not be surprised if some of the plot lines are not visible because they exceed the vertical or horizontal scales.
  • Figure 2: Run your simple simulator 1000 times. Plot the mean value of winnings for each spin using the same axis bounds as Figure 1. Add an additional line above and below the mean at mean+standard deviation, and mean-standard deviation of the winnings at each point.
  • Figure 3: Use the same data you used for Figure 2, but plot the median instead of the mean. Be sure to include the standard deviation lines above and below the median as well.

For all of the above charts and experiments, if and when the target $80 winnings is reached, stop betting and allow the $80 value to persist from spin to spin.

Experiment 2: A more realistic gambling simulator

You may have noticed that the strategy actually works pretty well, maybe better than you expected. One reason for this is that we were allowing the gambler to use an unlimited bank roll. In this experiment we're going to make things more realistic by giving the gambler a $256 bank roll. If he or she runs out of money, bzzt, that's it. Repeat the experiments above with this new condition. Note that once the player has lost all of their money (i.e., episode_winnings = -256) stop betting and fill that number (-256) forward. An important corner case to be sure you handle is the situation where the next bet should be $N, but you only have $M (where M<N). Make sure you only bet $M. Here are the two charts to create:

  • Figure 4: Run your realistic simulator 1000 times. Plot the mean value of winnings for each spin using the same axis bounds as Figure 1. Add an additional line above and below the mean at mean+standard deviation, and mean-standard deviation of the winnings at each point.
  • Figure 5: Repeat the same experiment as in Figure 4, but use the median instead of the mean. Be sure to include the standard deviation lines above and below the median as well.

Contents of the report

Please address each of these points/questions in your report, to be submitted as report.pdf

  1. In Experiment 1, estimate the probability of winning $80 within 1000 sequential bets. Explain your reasoning.
  2. In Experiment 1, what is the expected value of our winnings after 1000 sequential bets? Explain your reasoning. Go here to learn about expected value: https://en.wikipedia.org/wiki/Expected_value
  3. In Experiment 1, does the standard deviation reach a maximum value then converge or stabilize as the number of sequential bets increases? Explain why it does (or does not).
  4. In Experiment 2, estimate the probability of winning $80 within 1000 sequential bets. Explain your reasoning.
  5. In Experiment 2, what is the expected value of our winnings after 1000 sequential bets? Explain your reasoning.
  6. In Experiment 2, does the standard deviation reach a maximum value then converge or stabilize as the number of sequential bets increases? Explain why it does (or does not).
  7. Include figures 1 through 5.

What to turn in

Submit the following files (only) via Canvas before the deadline:

  • Your report as report.pdf
  • Your code as martingale.py

Do not submit any other files. Note that your charts should be included in the report, not submitted as separate files. Also note that if we run your submitted code, it should generate all 5 figures as png files.

Rubric

Report

  • Are the questions answered approximately correctly? (Up to -5 points for each incorrect answer)
  • Is the reasoning for each question correct and supported by the evidence? (Up to -5 points for each if incorrect)
  • Are each of the charts provided and correct? (Up to -8 points for each if incorrect)

Code

  • Does the code run without crashing? (-10 points if not)
  • Does the code generate appropriate charts written to png files? (-10 points each up to a max of -20 if not)

Required, Allowed & Prohibited

Required:

  • Your project must be coded in Python 2.7.x.
  • This requirement is not enforced for this first project, but will be for future projects. Your code must run on one of the university-provided computers (e.g. buffet02.cc.gatech.edu).

Allowed:

  • Your code may use standard Python libraries (except os).
  • You may use the NumPy, SciPy, matplotlib and Pandas libraries. Be sure you are using the correct versions.
  • Code provided by the instructor, or allowed by the instructor to be shared.

Prohibited:

  • Any use of global variables.
  • Any libraries not listed in the "allowed" section above.
  • Use of Python's os module.
  • Any code you did not write yourself (except for the 5 line rule in the "allowed" section).
  • Knights who say "neeee."

Legacy versions