Mike Deffenbaugh


Welcome to my website. Use the above menu to see some projects and guides that I have worked on. Most of the content from this site is related to projects I worked on while in school, before I started my current job.

One of my favorite projects is posted below. It is a Sudoku solver algorithm using Python and OpenCV. Feel free to contact me through email with any questions.

The Future of Engineering:

Algorithms, Optimization, and Automation

In high school I read an article about a group of engineers who used something called a genetic algorithm to optimize the design of an antenna for NASA. The algorithm was a computer program that could design an antenna better than any human could. I realized at that point that the future of engineering will probably involve a lot of programming. My only programming experience up to that point consisted of me occasionally programming my TI calculator to do my high school math homework. Over the next several years I worked hard to expand my programming experience above and beyond the required MATLAB for engineers course at Penn State.

The book Automate This, by Christopher Steiner, discusses the increasing role that automated algorithms will likely play in many aspects of our lives. As I read this book I tried to think about how I would go about writing the algorithms that are discussed in this book.

As you may know, a digital camera uses sensors to record incoming light that is then converted into a digital image. This image is stored as an array and can be read and manipulated just like any other array you might find in MATLAB (or other programming language). Although a camera can "see" the light just like our eyes can, the camera has no brain to process and make sense of the image. It is has no understanding of what any objects such as letters or faces look like. Writing these algorithms to extract important content is what the field of Computer Vision is all about. The above video is a demonstration of a Sudoku solver algorithm that I wrote. I have another page for more information about this project and a page for my other computer vision projects.

In this Sudoku solver I used a classification algorithm called K Nearest Neighbors that allows the computer to be able to decide what numbers it is seeing on the Sudoku puzzle. Classifiers belong to a group of Artificial Intelligence called Machine Learning, which is important for things such as pattern recognition and probabilistic decision making. You can learn some of the basic concepts of this subject by visiting my Machine Learning page. The image below is an example from an excellent Python module called SciKit-Learn that contains a lot of Machine Learning algorithms.

Engineers can use optimization algorithms to solve complex problems like the NASA antenna design problem mentioned above. These algorithms allow engineers to specify mathematical objectives and constraints and then let the computer carry out all of the complex problem solving steps. I'm now working on learning more about how to automate SolidWorks so that I can run optimization algorithms on SolidWorks models. Here is a demonstration video of a program so far. It creates a semiconductor heat sink and then analyzes the max steady state temperature for a given heat power, convection coefficients, and heat sink design parameters.

All of this happens with one click of a button to run my C# program, I don't have to touch anything in SolidWorks.