Need advise on Choosing a Programming Project

Joined
1/3/12
Messages
15
Points
13
Hi all, So, I just started my first "advanced" c++ programming class as an undergraduate and the professor has given us two weeks to choose from, or modify the following programming projects as our big projects for the quarter. My professor recommended that I come on here and could get some advise on which one of these projects (or modifications) would be the best to develop my skills as a hopefully-soon-to-be-Quant. Each number represents the week and what we're expected to deliver at the end of the week. The last two weeks, 7 and 8, can be ANY deliverable that relates to our project & code.

The Projects are:

Code:
Graph Theory
 
1. DirectedGraph, GraphNode classes analogous to BinarySearchTree
 
2. GraphIterator class, define operators for traversing a graph.
 
3. Paths, Cycles, Trails
 
4. Add SimpleGraph, GraphEdge classes.
 
5. Test for connectivity, other algorithms
 
6. Trees (not just binary).  Minimal Spanning Tree.
 
7. (Graphs as a matrix)
 
8. (Random Graphs)

Code:
Probability
 
1. Coin flipping, dice rolling, and uniform numbers in the range {1,2,…,n}.

2. Discrete distributions: Poisson, Geometric, etc.

3. Continuous distributions: Normal, Exponential, etc.

4. Simple Brownian Motion

5. More complicated Brownian Motion

6. Simple algorithms for decision making with Brownian Motion

7. (Random Walks on Graphs)

8. (Random Factored Integers)

Code:
Combinatorics
 
For example, integer partitions

1. Create an IntegerPartition class (I will provide an intelligent choice for data structures)
 
2. Algorithms for listing all partitions
 
3. Algorithms for counting all partitions.

4. Simply generated Random partitions.

5. Uber-awesomely generated random partitions.

6. Partitions with restrictions.

7. (Linear transformation of partitions)

8. (Plane Partitions)

Code:
Expression Class
 
The idea is to be able to parse expressions like (x^2+5x*sin(x)-3)/(7x^2+3)

1. Create a BinaryTree and TreeNode class.  TreeNodes need to be able to store numbers, variables, and function names.

2. Create TreeNodeIterator class with operators.

3. Create a library of “known” functions, so that when the user inputs sin(x), it will know that sin is a known function, and it will attempt to evaluate sin at x.

4. Parse simple expressions separated by ‘+’ or ‘-’, no parentheses at this point.

5. Parse statements parentheses recursively.

6. Store an arithmetical expression as a tree.

7. (Interface with class objects as coefficients.  For example, be able to parse 10000000000000000000000000000000000x using a BIGInteger class someone else provides).
 
8. (Random Polynomials over finite fields).


I have a strong preference towards the Probability Assignment (or modification thereof)

Any Advise on this would be GREATLY APPRECIATED! Thank You!!
 
Hi all, So, I just started my first "advanced" c++ programming class as an undergraduate and the professor has given us two weeks to choose from, or modify the following programming projects as our big projects for the quarter. My professor recommended that I come on here and could get some advise on which one of these projects (or modifications) would be the best to develop my skills as a hopefully-soon-to-be-Quant. Each number represents the week and what we're expected to deliver at the end of the week. The last two weeks, 7 and 8, can be ANY deliverable that relates to our project & code.

The Projects are:

Code:
Graph Theory
 
1. DirectedGraph, GraphNode classes analogous to BinarySearchTree
 
2. GraphIterator class, define operators for traversing a graph.
 
3. Paths, Cycles, Trails
 
4. Add SimpleGraph, GraphEdge classes.
 
5. Test for connectivity, other algorithms
 
6. Trees (not just binary).  Minimal Spanning Tree.
 
7. (Graphs as a matrix)
 
8. (Random Graphs)

Code:
Probability
 
1. Coin flipping, dice rolling, and uniform numbers in the range {1,2,…,n}.
 
2. Discrete distributions: Poisson, Geometric, etc.
 
3. Continuous distributions: Normal, Exponential, etc.
 
4. Simple Brownian Motion
 
5. More complicated Brownian Motion
 
6. Simple algorithms for decision making with Brownian Motion
 
7. (Random Walks on Graphs)
 
8. (Random Factored Integers)

Code:
Combinatorics
 
For example, integer partitions
 
1. Create an IntegerPartition class (I will provide an intelligent choice for data structures)
 
2. Algorithms for listing all partitions
 
3. Algorithms for counting all partitions.
 
4. Simply generated Random partitions.
 
5. Uber-awesomely generated random partitions.
 
6. Partitions with restrictions.
 
7. (Linear transformation of partitions)
 
8. (Plane Partitions)

Code:
Expression Class
 
The idea is to be able to parse expressions like (x^2+5x*sin(x)-3)/(7x^2+3)
 
1. Create a BinaryTree and TreeNode class.  TreeNodes need to be able to store numbers, variables, and function names.
 
2. Create TreeNodeIterator class with operators.
 
3. Create a library of “known” functions, so that when the user inputs sin(x), it will know that sin is a known function, and it will attempt to evaluate sin at x.
 
4. Parse simple expressions separated by ‘+’ or ‘-’, no parentheses at this point.
 
5. Parse statements parentheses recursively.
 
6. Store an arithmetical expression as a tree.
 
7. (Interface with class objects as coefficients.  For example, be able to parse 10000000000000000000000000000000000x using a BIGInteger class someone else provides).
 
8. (Random Polynomials over finite fields).


I have a strong preference towards the Probability Assignment (or modification thereof)

Any Advise on this would be GREATLY APPRECIATED! Thank You!!

My first question would be: What is your current C++ level (and more importantly 'programming know how'?)

Second, the projects are interesting but IMO 1) too CS oriented 2) already done in C++ (Boost!) 3) not very relevant to daily QF work, at least not directly.

Reduce the scope and focus on the practical issues (my 2 Euro cent)

Each number represents the week and what we're expected to deliver at the end of the week.
No way is this feasible.
 
I would replace 1--3 in the Probability project with http://en.cppreference.com/w/cpp/numeric/random
and instead spend time on extending 4--6 by adding (affine) jump diffusions to your requirements (instead of just Brownian Motions): http://en.wikipedia.org/wiki/Basic_affine_jump_diffusion
I think I'd also replace 7 with pricing and 8 with calibration.
HTH!

// BTW: “Advice” is the noun, “advise” the verb. When a columnist advises people, she gives them advice.
http://www.wsu.edu/~brians/errors/advice.html
 
I think it would be a good project. One management approach could be

1. Affine w/0 jumps
2. Affine with jumps
3. 1. + calibration
4. 2. + calibration

This is a low-risk. In this way student can produce results asap and avoiding '90% complete' syndrome.
 
// BTW: “Advice” is the noun, “advise” the verb. When a columnist advises people, she gives them advice.
http://www.wsu.edu/~brians/errors/advice.html

My bad on that, I typed this up really quickly in between classes and realized my error quite quickly and undoubtedly too late

Daniel && Polter

Thanks so much for this advice! Boost is really cool!

To respond to my c++ experience, I'm currently entering my third college quarter of c++ programming, I also have a quarter of Java under my belt. I believe one can classify that as very little. I'm taking a coursera on algorithms as well as computational finance concurrently with this third class.


I really like the idea of:

I would replace 1--3 in the Probability project with http://en.cppreference.com/w/cpp/numeric/random
and instead spend time on extending 4--6 by adding (affine) jump diffusions to your requirements (instead of just Brownian Motions): http://en.wikipedia.org/wiki/Basic_affine_jump_diffusion
I think I'd also replace 7 with pricing and 8 with calibration.

But I will definitely consider this as well:

1. Affine w/0 jumps 2. Affine with jumps 3. 1. + calibration 4. 2. + calibration

Proposal is due by April 12th, so hopefully I can get some more reading in on the topics and make an appropriate decision.

Once again Thanks a lot! =)
 
So I've been doing research on the topics for my proposal and I was wondering, instead of creating a pseudo random number generator, would it be feasible to code up a QuasiRandom number generator from either of Niederreiter or Sobol sequences?

Thanks!
 
So I've been doing research on the topics for my proposal and I was wondering, instead of creating a pseudo random number generator, would it be feasible to code up a QuasiRandom number generator from either of Niederreiter or Sobol sequences?

Thanks!

What is the rationale for this? Of course, but it an extra activity on top of an already busy project? How many months do you have?
 
I have essentially 8 weeks to get all those things done, so I was thinking for weeks 1-3, I'd implement the quasi random class instead of linear_congruential_engine, or mersenne_twister_engine as Polter suggested.

Though I might be getting quite ahead of myself, I still need to find some material on Affine diffusions and Affine Jump diffusions to see if I even have the ability to code those up.

Do you think I should narrow my scope?

I remember seeing your recommendation of:

1. Affine w/0 jumps
2. Affine with jumps
3. 1. + calibration
4. 2. + calibration

I was thinking about that, though I don't know what the "1+ calibration" means and I'm unsure what to do with the reaming 4 weeks

Thanks!
 
I have essentially 8 weeks to get all those things done, so I was thinking for weeks 1-3, I'd implement the quasi random class instead of linear_congruential_engine, or mersenne_twister_engine as Polter suggested.

Though I might be getting quite ahead of myself, I still need to find some material on Affine diffusions and Affine Jump diffusions to see if I even have the ability to code those up.

Do you think I should narrow my scope?

I remember seeing your recommendation of:



I was thinking about that, though I don't know what the "1+ calibration" means and I'm unsure what to do with the reaming 4 weeks

Thanks!

I would stick to Polter's advice on mersenne etc.

Don't count your chickens before they are hatched:-) Normally one never has time over.

REDUCE
 
Back
Top Bottom