Re: maximization with array of constraints
- To: mathgroup at smc.vnet.net
- Subject: [mg128393] [mg128393] Re: maximization with array of constraints
- From: Dana DeLouis <dana01 at me.com>
- Date: Fri, 12 Oct 2012 00:01:07 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
> . . . my data is an array with two columns and 100 rows, I would have 100 constraints. . .
Hi. Just some fun food for thought. ;>)
Your 2-variable linear constraints makes it a little special.
If your data was all positive, you could reduce the workload of NMaximize to only 1 constraint.
Assume your data was all positive, and the following list represented 100 rows.
data = {{5,5},{5,6},{4,20}};
your 100 constraints would look like this:
const = Thread[data.{x,y}>0]
{5 x+5 y>0,5 x+6 y>0,4 x+20 y>0}
Do a region plot of the above.
RegionPlot[const,{x,-4,4},{y,-4,4},GridLines->Automatic]
You would have a hundred lines, but as you can see, if x is positive also, there is only 1 line that needs to be considered. It's the one with the smallest absolute slope.
Clear[a,x,b,y];
Reduce[a x+b y>0&&b>0,y,Reals]
b>0&& y > -((a x)/b)
So, y must be the largest of -a/b
(largest of the negative values)
-data[[All,1]] / data[[All,-1]]
{-1,-(5/6),-(1/5)}
{Min[%],Max[%]}
{-1,-(1/5)}
So, the largest of the numbers is =E2=88=921/5, so the last equation above is the only constraint one must add.
4 x+20 y>0
If your data had -x values, then you would just have to add the Min value above for an additional constraint.
(See chart as to why it changes)
5 x+5 y>0
If you wanted to carry it further, and y had negative values, you would just add 2 more constraints.
Reduce[a x+b y >0 && b<0,y,Reals]
b<0 && y < -((a x)/b)
= = = = = = = = = =
HTH :>)
=E2=80=A8Dana DeLouis
=E2=80=A8= = = = = = = = = =
On Thursday, September 27, 2012 2:14:09 AM UTC-5, Felipe wrote:
> Hi,
>
>
>
> I am trying to maximize a function using NMaximize and I have a large list of constraints that I would like to write with a loop or as an array.
>
>
>
> It looks like the following:
>
>
>
> NMaximize[{myfunction[x,y] , x*mydata[[1,row,1]] + y*mydata[[1,row,2]] >0 }]
>
>
>
> and I want the restriction to be valid for the numbers in each row of the "mydata" array. That is, if mydata is an array with two columns and 100 rows, I would have 100 constraints, which are too many to enter manually.
>
> Can I write a loop for the constraints inside NMaximize ? Do you have some suggestion on how to write this? I was not able to find it in earlier posts.
>
>
>
> Thank you very much for your help
>
> Felipe