How to create a solver in python

Python scipy provides a good number of optimizers/solvers. You can use these optimizers to solve various non-linear and linear equations. However, sometimes things might get tricky and you will not be able to calculate and provide jacobian to these solvers. Well, this at-least happened with us.

 

So, we developed our own optimizer to suit our problem and got the perfect result. In this "how to" I will provide a simple way to design and develop your own solver to minimize the polynomial equations of type xˆ2 + yˆ2

 

Idea is pretty simple, we need to vary x and y in small steps and then store the result of equation for each value of x and y. We will need to run our optimizer twice to find the perfect values of x and y. So, if total number of variables are n then we will need to run optimizer n times. Once for each variable.

 

Below steps will further help you understand this.

 

First Optimization to find X.

  1. Vary x starting from 0.1 in the small steps of 0.01
  2. In an inner loop vary y starting from 0.1 in the small steps of 0.01
  3. Inside inner loop calculate the value of your objective function xˆ2 + yˆ2.
  4. At the end of each inner loop, find the minimum value of equation.
  5. This is your minimum possible objective function value for all possible values of x.
  6. Now using numpy polyfit, you can calculate the value of x for which you will get the minimum objective. Following code will help you understand this better.

 

def calcPoly(this, X, diff, deg=2):    

min_idx = diff.index(min(diff))-5    

if min_idx<0: min_idx = 0    

max_idx = min_idx + 10    

x, y = X[min_idx:max_idx], diff[min_idx:max_idx]    

co = np.polyfit(x, y, deg)    

x = abs(co[1]/(2*co[0]))    

return x

 

Second Optimization to find Y.

Similar to first optimization we need to run our two loops again. But, this time, we will not vary X. We know the value of X from our previous optimization.

 

  1. In a loop vary y starting from 0.1 in the small steps of 0.01
  2. Inside loop calculate the value of your objective function xˆ2 + yˆ2.
  3. At the end of each loop, store the value of your objective function.
  4. This is your minimum possible objective function value for all possible values of y.
  5. Now using numpy polyfit, you can calculate the value of y for which you will get the minimum objective. Above code can be used for the same purpose. Instead of X just pass array of all Y values and diff array will hold all objective function results.

 

You can now run your objective function again to check if calculated x and y values are really giving you an optimized result. If your equations are of type xˆ3 + yˆ3, you can still use the same code. Just pass deg=3 to calcPoly method. 

I hope this will help.



Was this article helpful?



You are freelancing Ninja?

Try Toogit Instant Connect today, The new virtual assistant for your freelancing world.


What is Python Script?

Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.

Python's simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance.

Python supports modules and packages, which encourages program modularity and code reuse.

What is a Python Script Freelancer?

Python is an interpreted, object-oriented and extensible programming language. Python can run on many different operating systems.

A freelancer well versed in Python can handle your workload quite easily. To hire freelance programming help for Python post a job today!

What is a Freelancer?

A freelancer or freelance worker, is a term commonly used for a person who is self-employed and is not necessarily committed to a particular employer long-term.

Why hire a Freelancer instead of full time employee?

If there is a long lead time for them to get up and running, using that investment on a full-time employee might be a better option. And if the position requires oversight, hire an employee.

A freelancer might choose to perform the work outside of normal business hours, when you're not able to monitor their progress.