Mike Deffenbaugh

OpenCV | SciKit-Learn

Computer Vision and Machine Learning are both important subjects to know for advanced Robotics. Fortunately other people have written open-source Python Modules for these two subjects that anyone can use.

For a quick introduction to Machine Learning you can visit my page about SciKit - Learn.

For additional Computer Vision content similar to the Sudoku Solver on my home page you can visit my OpenCV page.

High-Speed MATLAB (and Python)

Someone came to me with a Bio-Engineering problem that involved a set of non-linear differential equations. He wrote a program in MATLAB that was using computational methods (Euler Method) to solve the problem. His program worked well, but the program took around 30 minutes to test 30^4 combinations of parameters over 1000 time steps. So I gave him some advice about writing programs that will execute quickly. After giving my initial advice though I continued to research and test various methods of writing optimized code. In the process I found a few surprises and learned a lot about optimizing code.

However one thing that didn't surprise me is how powerful a GPU (Graphics Processor) is at crunching through parallel for-loop code. Below is a figure from MATLAB to demonstrate how much quicker the GPU is than the CPU in MATLAB (the lower time/z-value is better). I was now able to do what used to take 30 minutes in a little under 60 seconds on the GPU.

Here is a general guide for learning how to speed up this and other similar code.

Or click on the image to see the final results for speeding up the Bio-Engineering problem.

Graphing MDOF Systems

In the Vibrations section of my website I have a graph of a MDOF (Multiple Degree of Freedom) system's frequency response plot and an explanation of how to graph a SDOF in MATLAB. Well someone recently sent me an email asking if I could help them graph a MDOF system. Here is the one on SDOF and you can click on the image below to take you to a new page I created to explain graphing a MDOF system.

MATLAB Global Optimization

A lot of people spend a lot of time to try to figure out to write clever global optimization algorithms. So it won't be easy, but my goal is to eventually figure out a way to write a Global Optimizer that can beat MATLAB's built in Genetic Algorithm -> ga(). I have written my own simple versions of a real-value GA, a bit-string GA, and a Particle Swarm (modeled after TRIBES) algorithm. So far there are some situations where my TRIBES can beat MATLAB's GA, however I still have a long way to go. In most situations none of my algorithms come anywhere close to MATLAB's GA as the number of variables increases.

To put it simply the goal of these algorithms is to find the minimum value of a function within a certain allowable range for the variables. After each algorithm is done running it outputs the lowest function value it can find and the point at which it finds this function value. In this graph you can see that my P-TRIBE algorithm seems to be outperforming (the minimum is f=0) everything else even at 10 variables. There is one run (run 44) where MATLABs GA finds a lower minimum than my P-TRIBEs ever found, but in general for any given run the P-TRIBEs has everything else beat.

Below is a plot of the Ackley Function with 2 variables. As you can maybe tell from this surface plot, the Ackley function has a lot of local minima which makes finding the global minimum more difficult. It is easy to see from this graph where the global minimum would be, but that is because 2D surface plots are easy to visualize. With more variables graphing becomes less viable. Additionally, in order to create this graph the program had to evaluate the function more than 10000 times. The methods shown in the first plot were capped at 1500 calls to the function. In this case additional function calls take a fraction of a second, but function calls could be a many hours long simulation.

Click on the image for more analysis.

Flow-Search Project

I would like to write a lot more about this project because I can see it as being a detailed and complex long-term project for me to work on to continue to build my web development skills. For now here is what I have:

With this project I set out to accomplish two tasks. The first task was to learn how to build websites using HTML, PHP, and Javascript/jQuery. The second task was to see If I could come up with a more interesting way to search and organize information online. There is still a lot of work to do but I have a lot of the basic features complete. As of now it may be difficult to understand the idea behind this project. A few examples for possible uses would be:

  • A way to organize links to videos or websites in a way that creates a path from simple ideas towards more complicated topics
  • Object oriented programming interface where the objects are tiles and their methods and attributes are connected tiles. Objects and functions that interact with each other will show connections and each individual function or object can be clicked on and edited.
  • Interactive flow charts that can be shared and viewed online
  • Family tree diagrams
  • and maybe others...

Here is a video demonstrating what version 2 of the site could do. Soon I will be releasing version 3 which will actually be a useable service.

Additionally I made this page as my final project for my Vehicle Dynamics class. However you probably need the context of the class to be able to understand what everything means. But this could be an example of the type of content that one of those tile-like objects from my Subject Search website would link to. Youtube videos or wikipedia style pages would be another example of the type of content that these tile objects would link you to.