Git Product home page Git Product logo

optimizer's Introduction

Optimizer

C++ solutions to optimization problems

About

The goal is to build an Optimization library for C++ which can provide solutions for single variable and multi-variable optimization, constrained and unconstrained problems. The users should be able to select the algorithm to be used and also access any intermediate data which is obtained whilst running the algorithm.

We want the contributors to learn how C++ libraries work and also learn some mathematics. Some minimal efforts are required for each good PR. Unlike other repositories hosted for Hacktoberfest, we want to create a fully utilizable product for developers and researchers over the months of October and beyond. If you wish to be a part of this we promise you that your efforts would bring over a good impact to everyone who will be utlizing this product. Best of Luck!

This repository is also hosted as a part of the Hacktoberfest. Register yourself here and submit 5 PRs to win a free T-shirt. This repository is for you to learn the github workflow, understand the community and get started with Open Source.

Watch the hacktoberfest teaser here.

Understanding the Repository

  • src contains all the code
  • Theory contains all the algorithms we need to implement
  • Features has information about current features as well as features required. New Contributors head here!

How to get this working?

For MAC/ Linux users :

  • Fork and then clone this repository from your fork
  • Install Eigen if you haven't already. Follow the instructions given here
    • Once you have downloaded the zip file from the link, extract it
    • Inside the extracted folder there will be a folder called Eigen
    • Cut and paste that into your /usr/local/include
    • If you have done brew install Eigen (or the equivalent on Linux), you can check your usr/local/include and open the eigen3 folder and move the Eigen folder here outside to usr/local/include(If this folder already has Eigen then you may skip this step).
    • Go to the Tests folder and compile and run test.cpp. If there is no error then you have succesfully installed Eigen, if not then you may get something like Eigen/Dense: No such file or directory. Revisit the previous steps and see if you have screwed up somewhere.
  • Inside test.cpp you can see the line #include "../Optimizer/optimizer" on top. This is a specific link to the Optmizer header file. You can see that if you move test.cpp somewhere outside this folder, it will not work.
  • To make sure that any .cpp file you use can include the Optmizer library by adding the line : #include <Optimizer/optimizer> you need to move the Optmizer folder in this repository into your usr/local/include. Once that is done check if it is working by moving test.cpp to some other arbitrary folder and changing this : #include "../Optimizer/optimizer" to this : #include <Optimizer/optimizer>
  • In case there are any errors, then make sure you report them as issues. Also before you report them, do check if you are using C++11. Mac OS g++ compilers use an older version of C++. You may have to compile the code like this : g++ test.cpp -o test -std=c++11

For Windows users :

  • You will have to move the optmizer.h and grad.h files to wherever you want
  • In your .cpp file you will have to add a #include "*path to Optimizer.h*"
  • Eigen you can install using the same steps for MAC/Linux

Key concepts

If you are pursuing engineering/ will be pursuing engineering/ have already pursued engineering, then this should be very easy for you to grasp. Without going too much into the mathematics you can easily code up the algorithms if you wish. But as a rule of thumb familiarity with these concepts would be helpful :

  • Basic C++
  • Basic Calculus
  • Linear Algebra
  • Polynomials and Polynomial Systems
  • Linear Programming
  • Quadratic Programming

DON'T BE INTIMIDATED! YOU DON'T HAVE TO STUDY ALL THIS! Read on to get started ...

How to Contribute

  • Read this README completely.
  • Checkout Features and Issues
  • Choose one which interests you, if it's already an Issue then add a comment claiming it. Else create a new issue.
  • Read the respective section from Theory to understand how to get the code right
  • Add the code and submit the PR by following the github workflow which you can find here

Your first PR!

Go and add your name to the contributors.md file.

Important

optimizer's People

Contributors

sudz123 avatar vinnya3 avatar madoxen avatar captain-darko avatar debodirno avatar pokinawa avatar champagnepappi avatar parammittal16 avatar samarthkathal avatar srinathkp avatar tulikavijay avatar yashbhutoria avatar zatinme avatar bittukumarray avatar kiranbzenith avatar krupalraj avatar felicia-goh avatar quinny avatar kembolino avatar pablo0910 avatar nileshpatra avatar kojiadrianojr avatar elschilling avatar claire-lovisa avatar ananthavijay avatar alsd4git avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.