This is an exceptionally difficult class. For context: I likely have more experience with Python than the average OMSCS student, but less overall CS experience. I took several related classes to prepare me for this one (KBAI, Game AI, AI4R, etc.), and it was still rough. But how difficult you find each assignment greatly depends on your familiarity with each section, and what your natural aptitudes are. Additionally, part of the difficulty comes from the strict plagiarism policy, which limits the external resources you can consult.
Here's a breakdown of each assignment:
A1 - A*. ~60 hours if you haven't taken a graduate-level class that teaches A* at a high rigor, ~20-30 with. Expect extra time if you want a 90%+. It took me ~40, and I found it to be the easiest assignment both to conceptualize and to program, despite most students saying that it's by far the hardest. The time investment comes from implementation size rather than conceptual difficulty.
A2 - Game playing. ~40h if you're not comfortable with recursion and debugging complex recursive algorithms, ~20h with. I had a terrible time with this assignment due to misinterpreting the provided documentation, but otherwise thought it was conceptually straightforward.
A3 - Bayes nets. If your understanding of graduate-level stats is solid, this assignment can be done in 5-10 hours. Otherwise, you're in for a rough couple weeks. I spent ~30 hours prepping for the assignment, and another ~30 on the assignment itself. This assignment requires a tenth of the coding of assignment 1, but it was far more difficult for me.
A4 - Machine learning. If you're comfortable with numpy and vectorization, ~20 hours, ~40 without. This was the first assignment I felt that the provided material was not enough to understand the concepts, so I had to do a lot of self study.
A5 - Gaussian mixture models. This is a very polarizing assignment. The first half requires what I thought was incomprehensibly obtuse numpy broadcasting and spatial reasoning, and it was easily the worst experience I’ve had in any CS class due to a complete mismatch with my aptitudes. The second half is comparatively trivial and doable in an hour or two. If you have strong linear algebra skills and a good working spatial memory, this will likely be a breeze. Otherwise, expect ~50 hours on the first half alone.
A6 - Hidden Markov models. I didn't do this assignment, but the folks that did said it was on par with the difficulty of assignment #4.
Difficulty: A5 > A3 >> A4 > A2 > A1
Time taken: A5 > A1 > A3 > A2 > A4
The midterms and exams are a great way to review and solidify your understanding of the material. However, you aren't really graded on your understanding of the material, but rather on how well you can solve dozens of problems without any mechanical errors. Being off by one decimal after 2 pages of math is worth 0 points, as is taking the right approach but making a minor mistake along the way. In addition, there are several ambiguously-worded questions and later-corrected solutions, and I found it to be a stressful experience. There's a 24 hour challenge period after the exam ends where you can argue your case for why your incorrect answer should be marked as correct. Expect your grade to jump as much as 1-2 letter grades (yes, 10-20%) after regrading. I asked for clarifications on a couple questions but was denied due to exam policies, so I had to guess between two answers, and later learned I chose the wrong ones. But overall, I found the TAs to be pretty generous and forgiving with points.
Effort expended on exams does not necessarily correlate with a higher grade. Don't beat yourself up if you test poorly, it doesn't correlate with how well you understand the material.
Lecture quality and usefulness varies. Some lectures were too high level, and others were better grounded in examples. I strongly recommend reading the textbook. I fully read or skimmed ~1000 pages throughout the course.
I didn't personally find the discord helpful. Due to the plagiarism policy, most students are hesitant to share any tips, so it's better for morale-checking rather than assignment help. I recommend sticking with EdStem. The TAs are responsive and usually helpful, but they're sometimes hesitant to share concrete tips. Office hours are generally one on one, and I recommend joining those if you have questions or need a code review.
If you're looking to prepare for this class, I strongly recommend these three things: brush up on A*, learn how to debug (setting breakpoints, stepping through the code, etc.), and learn how numpy broadcasting works in 1D, 2D, and 3D. Linear algebra and calculus would help too, but I didn't struggle on those portions.
And lastly: this review comes off as intimidating, because that's how I felt throughout the whole of the course. Conversely, I know many folks in discord who thought everything was review and never struggled at all. If you put in the time, you can get through this course. Due to varying assignment difficulty, I spent 10-50 hours/week on this class.