View on GitHub

SPOKC Project Page for RIN

Project ID: 130018
Project Supervisor: Faisal Rahman
Project Contributors: Michael Hutt, Faisal Rahman.

Download this project as a .zip file Download this project as a tar.gz file

Important Note

This project is a open-source project and distributed under the MIT license. Anyone who wants to contribute to this project must agree that their contributions will also be open-source and be distributed under the same license.

About SPOKC

SPOKC stands for Serial-Parallel Optimization Kit in C. This project was started to provide a standard for implementing the optimization algorithms. As the project will grow, we will add more of the well known optimization algorithms to it. Researchers who develop new optimization algorithms, can compare the performance of their algorithms with the existing SPOKC standard algorithms without having to re-implement them, and when they are done, they can contribute their algorithms to the SPOKC project. This project is distributed under the MIT license and anyone has the full right to do anything with it.

About RIN

RIN is the abbreviated form of Research INterface, which is a nonprofit organization for making an interface between graduate and undergraduate folks in Bangladesh with the graduate students studying abroad to provide a flavor of world class research.

Why should you (an undergrad) contribute to this project?

Project Description

SPOKC supports a wide range of optimization algorithms. The SPOKC standard algorithms minimize the following function: f:RnR given a set of constraints. What it means is that the input of the function f is of dimension n of real numbers and the output is a real number. In programming terms, the function will look like this: double f(double x[]). Since there are already very efficient libraries for linear optimization algorithms, SPOKC mainly targets algorithms for solving non-linear, discontinuous, weird optimization problems.

The algorithms are of iterative nature. At each iteration, the algorithm picks a value of x, the input, and pass it to the function. If the output of the function is smaller than the minimum of the previous iterations then the minimum is updated and the algorithm continues until the algorithms knows that it has found the overall minimum for all possible values of x. Obviously, if x is part of a discrete set then this brute force approach will work. However, normally x is continuous that means, even if 0x1 there are infinitely many possible values of x. That is when these algorithms are handy. You have already delt with these sort of algorithms. Remember during your higher secondary studies, you had to find maximam or minimam of a function. You differentiate the function and set it to zero, to calculate where maximum and minimum is. Or remember linear programming where you would draw a graph with the constraints and try to locate the minimum in the boundary points. You can think of this research as the extension of those. This library implements similar algorithms.

This project is still in its initial phase. So, I will write down the initial objectives of this project: