Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: About linear programming

  • To: mathgroup at smc.vnet.net
  • Subject: [mg126252] Re: About linear programming
  • From: Dana DeLouis <dana01 at me.com>
  • Date: Fri, 27 Apr 2012 06:49:14 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

Hi.  A little off topic, but I always get confused with the basic input to the function - LinearProgramming.
Here's a little program to take an input that might be easier to read, and put it into the form required by the function.
There's lots of variations one could make.  Here's a simple example...
Here, the constraints are definitely not in the required form for the function:

obj = {30,40,20,10,-15,-20,-10,-8};

const =
{
{.3,.3,.25,.15,0,0,0,0} <=1000,
{.25,.35,.3,.1,0,0,0,0} <=1000,
{.45,.5,.4,.22,0,0,0,0} <=1000,
{.15,.15,.1,.05,0,0,0,0} <=1000,
{1,0,0,0,1,0,0,0} ==800,
{0,1,0,0,0,1,0,0} ==750,
{0,0,1,0,0,0,1,0} ==600,
{0,0,0,1,0,0,0,1} ==500
};

LinearProgMax[obj,Rationalize[const]]
{64625, {800,750,775/2,500,0,0,425/2,0}}

%//N
{64625., {800.,750.,387.5,500.,0.,0.,212.5,0.}}

LinearProgMin[obj_,const_]:=Module[{v,sol},
v=const/.(Less|LessEqual)[x_,y_]->{x,{y,-1}};
v=v/.(Greater|GreaterEqual)[x_,y_]->{x,{y,+1}};
v=v/.Equal[x_,y_]->{x,{y,0}};
v=Transpose[v];
sol = LinearProgramming[obj,First[v],Last[v] ];
{sol.obj,sol}]

LinearProgMax[obj_,const_]:=LinearProgMin[-obj,const]/.{x_,y_}->{-x,y}


After copying a table of cells from a Spread Sheet, a macro could convert it into the form above.
One could even include First[v].sol to get the values of the Right hand side to make sure the constraints were met (or calculate slack).
ie  change to:   {sol.obj, sol, First[v].sol}

= = = = = = = = = =
HTH  :>)
Dana DeLouis
Mac & Math 8
= = = = = = = = = =



On Apr 25, 12:35 am, Marcela Villa Marulanda <mavim... at gmail.com> wrote:
> Hi,
> 
> I attempt to solve these linear programming problems in Mathematica,
> but its result is "Maximize::natt: The maximum is not attained at any
> point satisfying the given constraints", why? I've solved this problem
> in other applications and the solution is achieved.
> 
> I don't know the reasons about it. I'll thank to whom give me some
> clues!
> 
> Problem 1
> 
> Maximize[{5 Subscript[x, 1] + 4 Subscript[x, 2] + 3 Subscript[x, 3],
>    Subscript[x, 1] + Subscript[x, 3] <= 15 &&
>     Subscript[x, 2] + 2 Subscript[x, 3] <= 25}, {Subscript[x, 1],
>    Subscript[x, 2], Subscript[x, 3]}];
> 
> Problem 2
> 
> Maximize[{30 Subscript[x, 1] + 40 Subscript[x, 2] +
>    20 Subscript[x, 3] + 10 Subscript[x, 4] - 15 Subscript[x, 5] -
>    20 Subscript[x, 6] - 10 Subscript[x, 7] - 8 Subscript[x, 8],
>   0.3 Subscript[x, 1] + 0.3 Subscript[x, 2] + 0.25 Subscript[x, 3] +
>      0.15 Subscript[x, 4] <= 1000 &&
>    0.25 Subscript[x, 1] + 0.35 Subscript[x, 2] +
>      0.3 Subscript[x, 3] + 0.1 Subscript[x, 4] <= 1000 &&
>    0.45 Subscript[x, 1] + 0.5 Subscript[x, 2] + 0.4 Subscript[x, 3] +
>      0.22 Subscript[x, 4] <= 1000 &&
>    0.15 Subscript[x, 1] + 0.15 Subscript[x, 2] +
>      0.1 Subscript[x, 3] + 0.05 Subscript[x, 4] <= 1000 &&
>    Subscript[x, 1] + Subscript[x, 5] == 800 &&
>    Subscript[x, 2] + Subscript[x, 6] == 750 &&
>    Subscript[x, 3] + Subscript[x, 7] == 600 &&
>    Subscript[x, 4] + Subscript[x, 8] == 500}, {Subscript[x, 1],
>   Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5],
>   Subscript[x, 6], Subscript[x, 7], Subscript[x, 8]}]





  • Prev by Date: Re: Print out an Expression Letter by Letter on the same line
  • Next by Date: Re: Instability with Dynamic content
  • Previous by thread: Re: About linear programming
  • Next by thread: FindFit and squared residuals