[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-glpk] (no subject) : Fractional Programming for Data Envelopme
From: |
Ivo van Baren |
Subject: |
Re: [Help-glpk] (no subject) : Fractional Programming for Data Envelopment Analysis among others |
Date: |
Thu, 15 Nov 2007 23:21:40 +0100 |
Hi Dan and Andrew,
This problem is an instance of what is called "fractional programming" and
is applied in Data Envelopment Analysis among others.
The general form of the problem is:
Max z = [c0 + (c1*x1) + (c2*x2) + ... + (cn * xn)] / [d0 + (d1*x1) +
(d2*x2) + ... + (dn * xn)]
s.t. (ai1*x1) + (ai2*x2) + ... + (ain * xn) = bi for i = 1,2,...,m
Under certain assumptions, the problem above can be nicely transformed to a
standard linear model without the complications of a piecewise linear
approximation.
To this purpose, define r = 1 / [d0 + (d1*x1) + (d2*x2) + ... + (dn*xn)].and
assume r > 0 for all feasible values of xj.
There are tricks to fulfil this assumption: if xj .>= 0, take a (not too)
small positive value for d0.
The objective function z cab then be rewritten as follows:
z = c0*r + (c1*x1*r) + (c2*x2*r) + ... + (cn * xn*r)]
Next define yj = r*xj. The maximization problem becomes now:
max z = c0*r + (c1*y1) + (c2*y2) + ... + (cn * yn)].
s.t. (ai1*y1) + (ai2*y2) + ... + (ain * yn) = r*bi for i = 1,2,...,m
and d0*r + (d1*y1) + (d2*y2) + ... + (dn*yn) = 1.
Success!
Best regards,
Ivo van Baren
----- Original Message -----
From: "Andrew Makhorin" <address@hidden>
To: "Dan Tulk" <address@hidden>
Cc: <address@hidden>
Sent: Thursday, November 15, 2007 10:37 AM
Subject: Re: [Help-glpk] (no subject)
I've been using GLPK to solve an optimisation with objective function of
the
form
(c1*x1) + (c2*x2) + ... + (cn * xn)
Is there any way to use GLPK to solve an objective function of the form?
[(c1*x1) + (c2*x2) + ... + (cn * xn)] / [(d1*x1) + (d2*x2) + ...
+ (dn * xn)]
You cannot use the latter objective directly, because it is non-linear
while glpk allows only linear objectives and constraints. Besides, that
objective is non-convex, so there may be multiple local optima.
Nevertheless, you can reformulate your problem using piecewise linear
approximation of the objective. For example, introducing variables
p = (c1*x1) + (c2*x2) + ... + (cn * xn)
q = (d1*x1) + (d2*x2) + ... + (dn * xn)
you can write the objective as follows:
z = p / q
Let p and q be positive, and you need to minimize z. Instead that you
can minimize the following separable function:
ln z = ln p - ln q
replacing ln p and ln q by a piecewise linear approximation.
For more details see
http://lists.gnu.org/archive/html/help-glpk/2007-06/msg00005.html .
_______________________________________________
Help-glpk mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/help-glpk