Smajl
Smajl

Reputation: 7995

Formatting equations for linprog in MATLAB

I have to solve a simple problem using function linprog in matlab math toolbox. The problem is that I don't know how to format my equations so this function solves the problem.

This is the function I am trying to minimize (a_i are some given coefficients, x is in R^5):

x = argmax min{a1*x1 + a2*x2, a2*x2 + a3*x3 + a4*x4, a4*x4 + a5*x5}

subject to:

sum(x_i) = 3000
all x_i >= 0

This could be rephrased as:

(x, lambda) = argmin(-lambda)

subject to:

a1*x1 + a2*x2 >= lambda
a2*x2 + a3*x3 + a4*x4 >= lambda
a4*x4 + a5*x5 >= lambda
sum(x_i) = 3000
all x_i >= 0

I could only find examples of minimization of simple linear functions without min/max arguments in it. Could you give me a hint how to make my structures as arguments for linprog function?

Upvotes: 3

Views: 2232

Answers (2)

Shai
Shai

Reputation: 114826

Let's try the following your x vector is now

[x1 x2 x3 x4 x5 lambda]

the objective vector

f = [0 0 0 0 0 -1]

equality constraint:

Aeq = [1 1 1 1 1 0] beq = 3000

Inequality constraint:

A = [-a1 -a2 0 0 0  1; 0 -a2 -a3 -a4 0 1; 0 0 0 -a4 -a5 1] b = [0;0;0]

lower bound:

lb = [0 0 0 0 0 -inf]

now try

linprog( f, A, b, Aeq, beq, lb )

up to some transposing of arguments should do the trick.

Upvotes: 1

Pete
Pete

Reputation: 2344

I don't believe you can pose the question as you phrased it as a linprog problem. The "MIN" operation is the problem. Since the objective function can't be phrased as

y = f'x.

Even though your constraints are linear, your objective function isn't.

Maybe with some trickery you can linearize it. But if so, that's a math problem. See: https://math.stackexchange.com/

Upvotes: 1

Related Questions