One of the more challenging modules I’ve taken at York is Constraint Programming. It’s was an interesting module to take because it was much more mathematical than other things I have done before, and also because it introduced an entirely new way to think about programming and problem solving in general.
Most of the programming I have done has been procedural or, in other words, telling the computer how to solve a problem. Constraint Programming on the other hand allows you to specify a problem through constraints and then ask a finite domain solver to solve it.
Important elements of the process that we covered were: Developing an abstract syntax of a problem; converting from an abstract syntax to a concrete syntax (The constraint programming language MinZinc); symmetry breaking, implied and dominance constraints, and configuring search through the problem space.
The complete process came together in the 100% weighted coursework, in which we developed a solution to determine the minimum number of sheets, of a given size, required to satisfy a given demand for certain sizes of ply wood.
I was given a grade of 80% for the coursework, which I was happy with 🙂 This now means that I have all of my grades for the first half of the taught part of my course:
- Model-Driven Engineering: 80%
- Concurrent and Real-Time Programming: 99%
- Evolutionary Computation: 80%
- Constraint Programming 80%
- Average: 84.75%
This means that now, short of an absolute disaster, I should achieve an overall mark of distinction in the taught part of the degree. 🙂 However, there is no rest for the wicked and I am already around half way through the coursework for my Formal Specification and Topics in Privacy and Security modules.