In a location problem, we seek to find an optimal location of a service, or a set of them, so that the quality that the service provides to a set of demand points is, according to a given performance measure, optimal.
Some examples of localization problems are:
There are numerous contexts in which location problems arise, due to this, the location theory has been object of great attention in recent years, being able to say that it is a subject of great importance. The appearance of new facets of the problem, didn’t handle until now, contributes to this. For example, along with the already classic criteria for minimizing costs, new criterias appear: environmental, social, quality of life, etc. These new aspects of the problem make it an open field of study.
The package presented is devoted to solving the problem of locating a single point in the plane, using as an objective the minimization of the sum of the weighted distances to the demand points. New versions of the package will include new location models.
The package RcmdrPlugin.UCA adds a set of options to the Rcmdr menu to solve planar location problems. The main entry for this menu is Orloca, and the options in this menu are:
In a planar location problem the set of demand points is given by the coordinates of said points. Optionally, a set of weights can be assigned to said points, which gives more importance to some points than to others, since the objective considered is to minimize the weighted sum of the distances between the service point and said requesting assembly. For example, if the location of a regional hospital is sought, the demand points can be the localities to which the hospital must attend and the weights of the population of each locality.
For the resolution of these problems, a class of objects designated
loca.p
has been defined, so that a loca.p
object stores the coordinates of the demand points and the weights of
each of the points. Each object loca.p
has three slots,
x
and y
that store the coordinates and
w
that stores the weights. When the weights are not given
explicitly, all the points of demand will be considered equally
important.
The rest of this section will explain how to do basic operations with
loca.p
objects.
Consider a localization problem in which the set of demand points is
(0, 0), (4, 0) and (2, 2). To create a loca.p
object that represents that set, the options “Orloca” -> “New loca.p”
are selected in the menu, obtaining the dialog:
Changing the name and clicking on “OK” accesses the data editor
window. In the x
column the values 0, 4, 2 and 0,
0, 2
are entered in the y
column, and finally, three ones are
entered in the w
column. When leaving the editor, a new
data set loca1
representing a loca.p
object
has been created and activated.
The necessary conversions between the data.frame
type
and the loca.p
type are done automatically.
You can create random objects of class loca.p
using the
options “Orloca” -> “New loca.p Random Instance”, obtaining the
dialog:
Changing the dialog fields as shown in the figure, a new object
loca.p
of name loca2
is generated with 100
demand points with both coordinates between 0 and 100 and with three
groups. After clicking on OK in the instructions window you get:
loca2 <- rloca.p(n = 100, xmin = 0, xmax = 10, ymin = 0, ymax = 10, groups = 3)
loca2 <- as(loca2, "data.frame")
The new active data set becomes loca2
and can be viewed
using the “Display data set” button.
A numeric summary of a loca.p
object can be obtained.
The summary shows the minimum, maximum and average values of both
coordinates, in addition to the weighted averages of the coordinates of
the points for each component.
By previously activating the data set loca1
and
selecting “Orloca” -> “Summary”, you get:
Given a loca.p
object, we can evaluate the weighted
average distance from a given point. Likewise, the gradient of said
function can be evaluated and the problem of minimizing said objective
can be solved.
The weighted average distance function is called distsum
in the package. Given a point, for example: (3, 1) to evaluate the weighted average
distance to loca1
, chose from the menu “Orloca” ->
“Evaluation of the Objective Function of the weighted sum Location
Problem” and the dialog is obtained:
By entering the values shown you get:
distsum(as(loca1, "loca.p"), x = 3, y = 1) # Weighted sum of the distances
#> [1] 5.990705
distsumgra(as(loca1, "loca.p"), x = 3, y = 1) # Gradient of the weighted sum function of the distances
#> [1] 0.9486833 0.3162278
Note that the gradient at that point of the objective function has also been obtained.
To find the optimal solution to the previous location problem, select “Orloca” -> “Solve weighted sum Location Problem”, obtaining the dialog box:
And clicking on “OK” you get:
.sol <- distsummin(as(loca1, "loca.p"), x = 0, y = 0, eps = 0.001, algorithm = "Weiszfeld") # Solve the location problem minsum
.sol # Show the solution
#> [1] 2.00000 1.15332
distsum(as(loca1, "loca.p"), x = 2.00000022259505, y = 1.15332010901434) # Weighted sum of the distances
#> [1] 5.464102
remove(.sol)
Where it is shown that the solution is the point (2, 1.15), the function is evaluated in it, resulting in a value of 5.46 and a virtually zero gradient, which indicates that the point is an extreme point. The solution found is a local optimum and since the convex objective function is a global optimum.
Both the objects loca.p
and the objective function can
be represented in a graph. For the objective function, a representation
based on level curves and another one on a 3D graph is provided.
loca.p
The graph of a loca.p
object consists of plotting the
dispersion diagram on the plane of the set of demand points. Choosing
“Orloca” -> “Graphs” -> “Graph of the set of demand points”, you
get:
The graph of contours is done by choosing “Orloca” -> “Graphs” -> “Graph of contours of distsum”, obtaining:
In the graph you can see how the function reaches the minimum at the point previously calculated. Selecting “Orloca” -> “Graphs” -> “Demand graphs and contour lines” you get the two previous graphs superimposed:
The norm that is used by default is the Euclidean norm or l2 norm. Through the options “Orloca” -> “Options” -> “Show/Set norm” you can display the norm in use or choose a new norm within the lp family of norms.
When choosing those options from the menu, we get the dialog:
In this dialog you can specify a new value for p greater than or equal to 1, and that otherwise, lp would not be a norm. All calculations and graphs will be made using this norm until a new value is specified or the norm l2 is chosen again.
The new contour graph is:
The presented package allows solving the problem of planar location of a single service with norm lp using an user friendly menus.