Simplex Algorithm

T

Tommy Vee

Anyone know where I can get an easy to use Python class or algorithm for
the Simplex optimization algorithm? I've tried the one in the link
below, but I can't figure out if a) I'm using it properly, or b) where
to get the solution. BTW, I tried some test scenarios using MS Excel's
"Solver" and just can't get this algorithm to match Excel's results
(which is spot on).

http://taw9.hubpages.com/hub/Simplex-Algorithm-in-Python

BTW, if I can't something to work, I'm going to be forced to use the VBA
programmatic Excel interface. That wouldn't be too bad, but the data
comes from a DB and getting it properly positioned to use Excel's
"Solver" is very painful. A Python approach would be much cleaner.

Thanks,

TommyVee
 
O

Oscar Benjamin

Anyone know where I can get an easy to use Python class or algorithm for
the Simplex optimization algorithm? I've tried the one in the link below,
but I can't figure out if a) I'm using it properly, or b) where to get the
solution. BTW, I tried some test scenarios using MS Excel's "Solver" and
just can't get this algorithm to match Excel's results (which is spot on).
http://taw9.hubpages.com/hub/Simplex-Algorithm-in-Python

BTW, if I can't something to work, I'm going to be forced to use the VBA
programmatic Excel interface. That wouldn't be too bad, but the data comes
from a DB and getting it properly positioned to use Excel's "Solver" is
very painful. A Python approach would be much cleaner.

Are you able to use scipy? It has the simplex algorithm (among many others)
in its optimize module:
http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

Oscar
 
R

Robert Kern

Simplex optimization algorithm? I've tried the one in the link below, but I
can't figure out if a) I'm using it properly, or b) where to get the solution.
BTW, I tried some test scenarios using MS Excel's "Solver" and just can't get
this algorithm to match Excel's results (which is spot on).
programmatic Excel interface. That wouldn't be too bad, but the data comes from
a DB and getting it properly positioned to use Excel's "Solver" is very painful.
A Python approach would be much cleaner.

Are you able to use scipy? It has the simplex algorithm (among many others) in
its optimize module:
http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

Careful. Confusingly, there are two optimization algorithms known as "the
simplex algorithm". The one the OP wants is for solving a linear programming
problem (minimize a linear combination of variables subject to linear inequality
constraints). The simplex algorithm that scipy implements is more properly
termed "the Nelder-Mead simplex algorithm" for unconstrained local nonlinear
minimization problems without derivative information.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 
R

Robert Kern

Anyone know where I can get an easy to use Python class or algorithm for the
Simplex optimization algorithm? I've tried the one in the link below, but I
can't figure out if a) I'm using it properly, or b) where to get the solution.
BTW, I tried some test scenarios using MS Excel's "Solver" and just can't get
this algorithm to match Excel's results (which is spot on).

http://taw9.hubpages.com/hub/Simplex-Algorithm-in-Python

BTW, if I can't something to work, I'm going to be forced to use the VBA
programmatic Excel interface. That wouldn't be too bad, but the data comes from
a DB and getting it properly positioned to use Excel's "Solver" is very
painful. A Python approach would be much cleaner.

Can you show some of the test scenarios that you tried? There are different
conventions in how to represent a linear programming problem, and different
solvers may choose different conventions. You may have to convert between
representations.

You may have better luck with the PuLP interface:

https://pypi.python.org/pypi/PuLP

PuLP itself is just a modelling language rather than a solver, but the sources
do contain compiled binaries for the CoinMP solver so it will work out-of-box on
popular platforms, like Windows.

https://projects.coin-or.org/CoinMP

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 
T

Tommy Vee

for the Simplex optimization algorithm? I've tried the one in the link
below, but I can't figure out if a) I'm using it properly, or b) where
to get the solution. BTW, I tried some test scenarios using MS Excel's
"Solver" and just can't get this algorithm to match Excel's results
(which is spot on).
VBA programmatic Excel interface. That wouldn't be too bad, but the data
comes from a DB and getting it properly positioned to use Excel's
"Solver" is very painful. A Python approach would be much cleaner.

Are you able to use scipy? It has the simplex algorithm (among many
others) in its optimize module:
http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

Oscar
scipy would be another possibility of last resort. I will take a
look. Thanks.
 
T

Tommy Vee

for the Simplex optimization algorithm? I've tried the one in the link
below, but I can't figure out if a) I'm using it properly, or b) where
to get the solution. BTW, I tried some test scenarios using MS Excel's
"Solver" and just can't get this algorithm to match Excel's results
(which is spot on).
VBA programmatic Excel interface. That wouldn't be too bad, but the data
comes from a DB and getting it properly positioned to use Excel's
"Solver" is very painful. A Python approach would be much cleaner.

Are you able to use scipy? It has the simplex algorithm (among many
others) in its optimize module:
http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

Oscar
scipy would be another possibility of last resort. I will take a
look. Thanks.
 
T

Tommy Vee

Can you show some of the test scenarios that you tried? There are
different conventions in how to represent a linear programming problem,
and different solvers may choose different conventions. You may have to
convert between representations.

You may have better luck with the PuLP interface:

https://pypi.python.org/pypi/PuLP

PuLP itself is just a modelling language rather than a solver, but the
sources do contain compiled binaries for the CoinMP solver so it will
work out-of-box on popular platforms, like Windows.

https://projects.coin-or.org/CoinMP

Thank you, I will definitely look at these and other options. BTW, try
the test scenario in the link I sent. Very simple, only 3 variables.

Maximize: 2x+3y+2z

Constraints: 2x+y+z <=4, x+2y+z <=7, z <= 5

The algorithm displays the Tableau after each pivot, but where is the
answer for x, y and z?

When I run this in Excel's Solver, I get x=0, y=3, z=1. which is indeed
the maximized solution (11).
 
T

Tommy Vee

Can you show some of the test scenarios that you tried? There are
different conventions in how to represent a linear programming problem,
and different solvers may choose different conventions. You may have to
convert between representations.

You may have better luck with the PuLP interface:

https://pypi.python.org/pypi/PuLP

PuLP itself is just a modelling language rather than a solver, but the
sources do contain compiled binaries for the CoinMP solver so it will
work out-of-box on popular platforms, like Windows.

https://projects.coin-or.org/CoinMP

Thank you, I will definitely look at these and other options. BTW, try
the test scenario in the link I sent. Very simple, only 3 variables.

Maximize: 2x+3y+2z

Constraints: 2x+y+z <=4, x+2y+z <=7, z <= 5

The algorithm displays the Tableau after each pivot, but where is the
answer for x, y and z?

When I run this in Excel's Solver, I get x=0, y=3, z=1. which is indeed
the maximized solution (11).
 
R

Robert Kern

Thank you, I will definitely look at these and other options. BTW, try the test
scenario in the link I sent. Very simple, only 3 variables.

Maximize: 2x+3y+2z

Constraints: 2x+y+z <=4, x+2y+z <=7, z <= 5

The algorithm displays the Tableau after each pivot, but where is the answer for
x, y and z?

You will have to read up on the Dantzig Simplex Algorithm to learn how to read
off the results from the final tableau. My understanding is that you look at the
columns representing the basic variables (in this case, the second, third, and
fourth columns represent x, y, and z, respectively). If the column is all 0s
except for a single 1, then the row with the 1 has the variable's value in the
rightmost column. If the column has other values in it, then the variable's
value is 0.
When I run this in Excel's Solver, I get x=0, y=3, z=1. which is indeed the
maximized solution (11).

The final tableau for this problem looks like this:

[[ 1. 1. 0. 0. 1. 1. 0. 11.]
[ 0. 3. 0. 1. 2. -1. 0. 1.]
[ 0. -1. 1. 0. -1. 1. 0. 3.]
[ 0. -3. 0. 0. -2. 1. 1. 4.]]

So, for x, we look in the second column and notice that it has a bunch of
different values in it, so x=0.

For y, we look in the third column and see that it has its single 1 in the third
row. Looking all the way on the right for that row, we get a 3.

For z, we look in the fourth column and see that it has its single 1 in the
second row. Looking all the way on the right for that row, we get a 1.

So this solver does reproduce the result x=0, y=3, z=1. The maximized solution
is in the upper-rightmost element of the tableau, 11.

Sound like a pain in the ass to code up that logic? It is. PuLP and other
industrial grade solver interfaces won't make you go through this.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 
T

Tommy Vee

Thank you, I will definitely look at these and other options. BTW,
try the test
scenario in the link I sent. Very simple, only 3 variables.

Maximize: 2x+3y+2z

Constraints: 2x+y+z <=4, x+2y+z <=7, z <= 5

The algorithm displays the Tableau after each pivot, but where is the
answer for
x, y and z?

You will have to read up on the Dantzig Simplex Algorithm to learn how
to read off the results from the final tableau. My understanding is that
you look at the columns representing the basic variables (in this case,
the second, third, and fourth columns represent x, y, and z,
respectively). If the column is all 0s except for a single 1, then the
row with the 1 has the variable's value in the rightmost column. If the
column has other values in it, then the variable's value is 0.
When I run this in Excel's Solver, I get x=0, y=3, z=1. which is
indeed the
maximized solution (11).

The final tableau for this problem looks like this:

[[ 1. 1. 0. 0. 1. 1. 0. 11.]
[ 0. 3. 0. 1. 2. -1. 0. 1.]
[ 0. -1. 1. 0. -1. 1. 0. 3.]
[ 0. -3. 0. 0. -2. 1. 1. 4.]]

So, for x, we look in the second column and notice that it has a bunch
of different values in it, so x=0.

For y, we look in the third column and see that it has its single 1 in
the third row. Looking all the way on the right for that row, we get a 3.

For z, we look in the fourth column and see that it has its single 1 in
the second row. Looking all the way on the right for that row, we get a 1.

So this solver does reproduce the result x=0, y=3, z=1. The maximized
solution is in the upper-rightmost element of the tableau, 11.

Sound like a pain in the ass to code up that logic? It is. PuLP and
other industrial grade solver interfaces won't make you go through this.
You nailed it. Thanks for help. And you're right. This is too
painful, I just read the PuLP doc and it may be a lot easier.
 
T

Tommy Vee

Thank you, I will definitely look at these and other options. BTW,
try the test
scenario in the link I sent. Very simple, only 3 variables.

Maximize: 2x+3y+2z

Constraints: 2x+y+z <=4, x+2y+z <=7, z <= 5

The algorithm displays the Tableau after each pivot, but where is the
answer for
x, y and z?

You will have to read up on the Dantzig Simplex Algorithm to learn how
to read off the results from the final tableau. My understanding is that
you look at the columns representing the basic variables (in this case,
the second, third, and fourth columns represent x, y, and z,
respectively). If the column is all 0s except for a single 1, then the
row with the 1 has the variable's value in the rightmost column. If the
column has other values in it, then the variable's value is 0.
When I run this in Excel's Solver, I get x=0, y=3, z=1. which is
indeed the
maximized solution (11).

The final tableau for this problem looks like this:

[[ 1. 1. 0. 0. 1. 1. 0. 11.]
[ 0. 3. 0. 1. 2. -1. 0. 1.]
[ 0. -1. 1. 0. -1. 1. 0. 3.]
[ 0. -3. 0. 0. -2. 1. 1. 4.]]

So, for x, we look in the second column and notice that it has a bunch
of different values in it, so x=0.

For y, we look in the third column and see that it has its single 1 in
the third row. Looking all the way on the right for that row, we get a 3.

For z, we look in the fourth column and see that it has its single 1 in
the second row. Looking all the way on the right for that row, we get a 1.

So this solver does reproduce the result x=0, y=3, z=1. The maximized
solution is in the upper-rightmost element of the tableau, 11.

Sound like a pain in the ass to code up that logic? It is. PuLP and
other industrial grade solver interfaces won't make you go through this.
You nailed it. Thanks for help. And you're right. This is too
painful, I just read the PuLP doc and it may be a lot easier.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,828
Latest member
LauraCastr

Latest Threads

Top