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 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.
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.
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
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.