2014 ASEE Final Geometric Programming

Embed Size (px)

DESCRIPTION

sdd dfh

Citation preview

  • Paper ID #10708

    Geometric Programming - A Tool for Design and Cost Optimization

    Dr. Robert C. Creese, West Virginia University

    cAmerican Society for Engineering Education, 2014

  • Geometric Programming - a Tool for Design and Cost Optimization

    Introduction

    Geometric programming is a mathematical optimization technique which was developed

    in 1961 and has unique features which make it a excellent tool for design and cost optimization.

    Geometric programming can be used not only to provide a specific solution to a problem, but in

    many instances it can give a general solution with specific design relationships. These design

    relationships, based upon the design parameters and constraints, can then be used for the optimal

    solution without having to resolve the original problem. A second concept is that the dual

    solution gives a constant cost ratio between the terms of the primal objective function which

    appears to be unique to geometric programming.

    Geometric programming is a mathematical optimization technique credited to Clarence

    Zener in 1961 when he was Director of Science at Westinghouse Electric in Pittsburgh, who is

    also credited with the invention of the Zener Diode. He wrote the paper "A Mathematical Aid in

    Optimizing Engineering Designs1"

    . He later collaborated with Richard J. Duffin and Elmor L.

    Peterson of the Carnegie Institute of Technology to write the book Geometric Programming2 in

    1967and in 1971 he wrote the book Engineering Design by Geometric Programming3. Other

    early pioneers in the development of geometric programming were Professor Doug Wilde at

    Stanford University and Professor Charles Beightler at the University of Texas.

    Although geometric programming has been known for over 50 years, it has primarily

    been used as a solution technique for a specific solution to complex non-linear problems. It is

    rarely used to develop specific design relationships and cost ratios in the literature and these are

    significant advantages of this technique. The purpose of this paper is to help educators bring

    geometric programming into the classroom as most of the literature on geometric programming

    does not focus on the development of design relationships and cost ratios. Other problems,

    which are more complex, have been developed for riser design in casting, inventory models,

    furnace design, Cobb-Douglas Profit function, metal cutting economics, liquid propane gas

    cylinder design, journal bearing design, and gas transmission pipe line design.

    This technique has many similarities to linear programming such as primal and dual

    solutions, but has the advantages over linear programming in that:

    (1) A non-linear objective function is used;

    (2) The constraints are non-linear:

    (3) The objective function can be solved using the dual formulation, which is much easier to

    solve than the primal formulation; and most importantly

    (4) Generalized design relationships can often be obtained for the primal variables in terms of

    the constants.

  • It is called geometric programming because it is based upon the arithmetic-geometric

    inequality where the arithmetic mean is always greater than or equal to the geometric mean.

    That is:

    (X1 + X2 + Xn) / n (X1 x X2x x Xn) (1/n)

    (1)

    and this can be illustrated by the example

    (1+3+5)/3 = 3 (1x3x5)(1/3) = 2.46

    Theoretical Considerations and Problem Formulation

    Geometric programming requires that the expressions used are posynomials4. A.

    posynomial is a combination of positive and polynomial and implies a positive

    polynomial. Four examples of posynomials are:

    5 + xy, (x + 2yz)2, x+2y +3z + t x/y + 35zx

    1.5 + 72y

    3

    Three examples of expressions which are not posynomials are:

    x 2y + 3z (negative sign)

    (2 + 2yz)3.2

    (fractional power of multiple term which cannot be expanded)

    x + sin(x) (sine expression can be negative)

    The coefficients of the constant terms must be positive, but the coefficients of the exponents can

    be negative.

    The mathematics of geometric programming are rather complex, however the basic

    equations are presented and followed by an illustrative example. The theory of geometric

    programming is presented in more detail in the references2,3,4,5

    . The primal problem is

    complex, but the dual version is much simpler to solve. The dual is the version typically solved,

    but the relationships between the primal and dual are needed to determine the specific values of

    the primal variables.

    The primal problem is formulated as:

    Tm N amtn

    Ym(X) = mt Cmt Xn ; m = 0,1,2,..M and t = 1,2,...Tm (2)

    t=1 n=1

    With

    Cmt > 0 (positive constant coefficients)

    Ym(X) m for m=1, M for the constraints

  • Cmt = positive constant coefficients in the cost and constraint equations

    Y0(X) = primal objective function and often expressed as Y

    mt = signum function used to indicate sign of term in the equation(either +1 or -1)

    (If a term is to be negative, then the signum function would be negative)

    The dual is the problem formulation that is typically solved to determine the dual

    variables and value of the objective function. The dual objective function is expressed as:

    M Tm mt mt

    Y = d() = [ (Cmt m0 /mt) ] m=0,1,.M and t=1,2,..Tm (3)

    m=0 t=1

    where

    = signum function to indicate minimization(+1) or maximization(-1)

    Cmt = constant coefficient

    m0 = dual variables from the linear inequality constraints

    mt = dual variables of dual constraints, and

    mt = signum function for dual constraints

    00 = 1(the sum of the cost ratios is unity)

    d() = dual objective function which is also the same as Y

    M = number of constraints

    Tm = number of terms in constraint m

    The dual is formulated from four conditions:

    (I) a normality condition

    Tm

    0t 0t = where = 1 (4)

    t=1

    where

    0t = signum of objective function terms

    0t = dual variables for objective function terms

    00 = 1

    (II) N orthogonal conditions

    M Tm

    mt amtn mt = 0 m=0,1M and t=1,2Tm (5)

    m=0 t=1

    where

    mt = signum of constraint term

    amtn = exponent of design variable term

    mt =dual variable of dual constraint

  • (III) T non-negativity conditions (dual variables must be positive)

    mt 0 m=0,1M and t=1,2Tm (6)

    (IV) M linear inequality constraints

    Tm

    mo = m mt mt 0 m=1,.M and t=1,2,..Tm (7)

    t=1

    The dual variables, mt, are restricted to being positive, which is similar to the linear

    programming concept of all variables being positive. If the number of independent equations

    and variables in the dual are equal, the degrees of difficulty are zero. The degrees of difficulty is

    the difference between the number of dual variables and the number of independent linear

    equations; and the greater this degrees of difficulty, the more difficult the solution. The degrees

    of difficulty(D) can be expressed as:

    D = T (N + 1) (8)

    where

    D = degrees of difficulty

    T = total number of terms (of the primal)

    N = number of orthogonality conditions plus normality condition (which is equivalent

    to the number of primal variables)

    Once the dual variables are found, the primal variables can be determined from the

    relationships between the primal and dual by:

    N amtn

    Cot Xn = otYo t= 1,..To (9)

    n=1

    and

    N amtn

    Cmt Xn = mt/mo t= 1,..To and m = 1,.M (10)

    n=1

    The theory may appear to be overwhelming with all the various terms, but two examples

    are presented to illustrate the application of the various equations. Two examples with zero

    degrees of difficulty are considered as problems with zero degrees of difficulty have a linear

    dual formulation with an equal number of equations and dual variables and can be easily solved.

    When there are more than zero degrees of difficulty, the solution is much more difficult and this

    type of problem will not be considered in this paper.

  • The Cardboard Box Shipping Package

    A box manufacturer wants to determine the optimal dimensions for making boxes to sell

    to customers. This problem is a version of the problem in Geometric Programming for Design

    and Cost Optimization6

    . The cost for production of the sides of the box is C1(0.20 $/ft2) and for

    the top and bottom of the box is C2(0.30 $/ft2) as more cardboard is consumed in the manufacture

    of the top and bottom of the box. The volume of the box is to be set at a minimum limit of

    "V"(4 ft3) and it can be varied for different customer requirements. What should be the

    dimensions of the box, that is the height(H), width(W), and length(L) to minimize the box cost

    and meet the volume(V) requirement? The primal problem formulation would be:

    Minimize Cost Y = 2C1H(W+L) + 2C2W L (11)

    (six sides total, two sides, two ends, and top and bottom)

    Subject to: WLH V (12)

    However, in geometric programming the inequalities must be written in the form of and the right hand side must be 1. Thus the primal constraint becomes:

    Minimize Cost Y = 2C1HW +2C1HL +2C2WL (13)

    Subject to -LWH/V -1 (14)

    From the coefficients and signs, the values for the dual are:

    01 =1, 02 = 1, 03=1 and 11 = -1 and 1 =-1.

    There are 4 terms(3 in the objective function & 1 for constraint) and 3 variables(H,W,L)

    and thus from Equation 8 the degrees of difficulty is:

    D = 4 - (3 + 1) = 0 (15)

    The dual formulation is:

    Objective Function 01 + 02 + 03 = 1 (16) L terms 02 + 03 - 11 = 0 (17) H terms 01 + 02 - 11 = 0 (18) W terms 01 + 03 - 11 = 0 (19)

    The dual formulation has four dual variables and four dual equations. The degrees of

    difficulty can also be expressed as the number of dual variables minus the number of dual

    equations, which is :

    D = number of dual variables - number of dual equations = 4 - 4 = 0 (20)

    Solving for the dual variables in Equations 16 to 19, one obtains the values for the dual

    variables which are:

    01 = 02 = 03 = 1/3 and 11 = 2/3

  • Using the linearity inequality equation, Equation 7, for the constraint, one obtains

    10 = m mt mt =1 *[11 *11] =(-1) * [-1 *2/3] = 2/3 >0 where m=1 and t =1

    The dual variables must be greater than zero for a feasible solution or tight constraint. If

    a negative dual variable is obtained for the constraint, it is loose and the problem can be resolved

    deleting that constraint.

    Since the dual variables are all 1/3, this means that each of the terms of the primal

    objective function will contribute 1/3 (equally) to the primal objective function. The dual

    objective function can be found with:

    M Tm mt mt d() =Y= [ (Cmt mo /mt) ]

    (3)

    m=0 t=1

    d() =Y=1[{(2C2*1)/(1/3)}(1)*(1/3)

    *{(2C1*1)/(1/3)}(1)*(1/3)

    *{(2C1*1)/(1/3)}(1)*(1/3)

    *{((1/V)*1)/2/3)}(-1)*(2/3)

    ]1

    = 1[{ (6C2)1/3

    } * { (6C1)1/3

    } * { (6C1)1/3

    *[{ (1/V)-2/3

    }

    Y(dual) = 6 C21/3

    C12/3

    V2/3

    (21)

    For the problem presented where C2 =0.30$/ft2, C1 = 0.20$/ft

    2 and V = 4 ft

    3 and thus

    Y = 6 C21/3

    C12/3

    V2/3

    = 6 (0.30)1/3

    (0.20)2/3

    (4)2/3

    =$ 3.461 (22)

    Note the solution has been determined without finding the values for the primal variables

    of L,W, or H. To find the values of L, W, and H. The primal-dual relationships are used as

    follows:

    2C2 WL = 01 Y = Y/3, (23) 2C1WH = 02Y = Y/3 and (24) 2C1 HL = 03Y = Y/3 (25) LWH/V = 11 / 10 (26)

    Combining Equations 23 and 24 one obtains:

    H = (C2/C1) L (27)

    Combining Equations 24 and 25 one obtains:

    W = L (28)

    Since V = HWL = (C2/C1)L L L =(C2/C1)L3

    Thus

    L = [V(C1/C2)]1/3

    (29)

    W = L = [V(C1/C2)]1/3

    (30)

    H = (C2/C1)L = (C2/C1) [V(C1/C2)]1/3

    = [V(C22/C1

    2)]

    1/3 (31)

    For this particular problem

    L = [V(C1/C2)]1/3

    = [4(0.20/0.30)]1/3

    = 1.387 ft (32)

    W = L = [V(C1/C2)]1/3

    = [4(0.20/0.30)]1/3

    = 1.387 ft (33)

    H = [V(C22/C1

    2)]

    1/3 =[4(0.30)

    2/(0.20)

    2]1/3

    = 2.081 ft (34)

  • To verify the results, the parameters are used in the primal problem to make certain the

    solution obtained is the same. It also is noted that:

    L x W x H = (1.387) x (1.387) x (2.081) = 4.00(the desired package volume)

    and

    Y(Primal) = 2C1HW+2C1HL + 2C2WL (13)

    Y = 2C1 [V(C22/C1

    2)]

    1/3 [V(C1/C2)]

    1/3 +2C1 [V(C2

    2/C1

    2)]

    1/3[V(C1/C2)]

    1/3

    +2C2 [V(C1/C2)]1/3

    [V(C1/C2)]1/3

    Y =2 C12/3

    (V2/3

    )C21/3

    + 2 C12/3

    (V2/3

    )C21/3

    +2 C12/3

    (V2/3

    )C21/3

    Y = 6 C12/3

    (V2/3

    )C21/3

    (35)

    For the primal solution using the values of the example problem, one has:

    Y(Primal) = 2C1HW+2C1HL + 2C2WL

    = 2(0.20)(1.387)(2.081) + 2(0.20)(1.387)(2.081) +2(0.30)(1.387)(1.387)

    = 1.154 + 1.154 + 1.154

    = 3.462 (36)

    The expressions for the primal and from the dual are equivalent as indicated by the

    results of Equations 21 and 35 and the specific values illustrated by Equations 22 and 36. The

    geometric programming solution is in general terms, and thus can be used for any values of C1,

    C2, and V. Note that the dual variables were equal to 1/3 which implied that all the terms of the

    primal represented 1/3 of the total cost. This indicates that for whatever values of C1, C2 and V

    that each of the primal terms will have identical values. The design equations for H, W, and L

    are also the same regardless of the values of C1, C2 and V. The ability for determining design

    relationships and the cost ratios represented by the dual variables appear to be unique to

    geometric programming.

    This ability to obtain general relationships makes the use of Geometric Programming a

    very valuable tool for cost engineers. If we select another set of variables whereC1 = 5$/m2,

    C2=3$/m2, and V = 20m

    3, then

    From the dual

    Y = 6(5)2/3

    202/3

    31/3

    = $186.4 (without finding L,W, or H) (37)

    From the equations obtained from the primal-dual relationships;

    L=W= [20(5/3)]1/3

    = 3.22 m (38)

    H =[20 32/5

    2]1/3

    = 1.93 m (39)

    V = L x W x H = 20 m3

    (40)

    From the primal

    Y = C1 H W + C1 H L + C2 W L

    = 2 x 5 x 1.93 x 3.22 + 2 x 5 x 1.93 x3.22 +2x 3 x 3.22 x 3.22

    = $ 62.1 + $ 62.1 +$ 62.2

    = $ 186.4 (41)

  • All three terms contribute equally to the objective function as indicated by the equal

    values of the dual variables. In summary, note that:

    1) Cost are in proportion to the dual variables for the total cost.

    2) Shapes can change drastically as coefficients change, but cost proportions remains

    constant. For this problem, each primal term represented 1/3 of the total cost.

    3) The Primal and Dual objective functions give same values.

    4) When the constants change, the problem does not need to be resolved as the dual

    variables were independent of the design constants and the design equations can be used to

    determine the values of Y, H, W, and L using the new values of C1, C2, and V.

    5) Since the terms are non-linear, linear programming could not be utilized to solve the

    problem.

    The Open Cargo Shipping Box Problem

    The Open Cargo Shipping Box Problem is the classic geometric programming problem as

    it was the first illustrative problem presented in the first geometric programming book. This

    problem presented here is slightly expanded as not only is the minimum total cost required, but

    also the dimensions of the box. The problem is: Suppose that 400 cubic yards (V) of gravel

    must be ferried across a river. The gravel is to be shipped in an open cargo box of length L,

    width W and height H. The sides and bottom of the box cost $ 10 per square yard (A1) and the

    ends of the box cost $ 20 per square yard (A2). The cargo box will have no salvage value and

    each round trip of the box on the ferry will cost 10 cents (A3). The questions are:

    a) What is the minimum total cost of transporting the 400 cubic yards of gravel?

    b) What are the dimensions of the cargo box?

    c) What is the number of ferry trips to transport the 400 cubic yards of gravel?

    Figure 1 illustrates the parameters of the open cargo shipping box.

    L = Length of the Box W = Width of the Box H = Height of the Box

    Figure 1. Open Cargo Shipping Box with Parameters L,W, and H.

    End

    Bottom Side

    W

    L

    H

  • The first issue is to determine the various cost components to make the objective

    function, that is the ferry transportation cost, the cost of the two box ends, the cost of the two box

    sides, and the cost of the box bottom. The ferry transportation cost can be determined by:

    T1 = V x A3 /(L x W x H) = 400 x 0.10 / (L x W x H) = 40 /(L x W x H) (42)

    The cost for the two ends of the box is determined by:

    T2 = 2 x (W x H) x A2 = 2 x (W x H) x 20 = 40 x (W x H) (43)

    The cost for the two sides of the box is determined by:

    T3 = (L x H) x A1 = 2 x (L x H) x 10 = 20 x (L x H) (44)

    The cost for the bottom of the box is determined by:

    T4 = (L x W) xA1 = (L x W) x 10 = 10 x(L x W) (45)

    The objective function (Y) is the sum of the four components and is:

    Y = T1 + T2 + T3 + T4 (46)

    Y = 40 / (L x W x H) + 40 x (W x H) + 20 x (L x H) + 10 x (L x W) (47)

    The primal objective function can be written in terms of generic constants for the cost

    variables to obtain a generalized solution. There are no constraints for this problem.

    Y = C1 / (L x W x H) + C2 x (W x H) + C3 x (L x H) + C4 x (L x W) (48)

    Where C1 = 40, C2=40, C3=20 and C4=10

    From the coefficients and signs, the signum values for the dual are:

    01 = 1 02 = 1 03 = 1 04 = 1

    The degrees of difficulty for this problem from the primal information is:

    D = T (N + 1) = 4 - (3+1) = 0 (49)

    The dual formulation is:

    Objective Function 01 + 02 + 03 + 04 = 1 (50)

    L terms -01 + 03 + 04 = 0 (51)

    W terms -01 + 02 + 04 = 0 (52)

    H terms -01 + 02 + 03 = 0 (53)

    Using theses equations, the values of the dual variables are found to be:

    01 = 2/5

    02 = 1/5

    03 = 1/5

    04 = 1/5

    and by definition 00 = 1

  • Thus the dual variables indicate that the first term of the primal expression is twice as

    important as the other three terms. The dual objective function can be found using the dual

    expression:

    M Tm mt mt

    Y = d() = [ (Cmt mo /mt) ] (3)

    m=0 t=1

    Y(dual) =1[[{(C1x1/(2/5))}(1x2/5)

    ] [{C2x1/(1/5))} (1x1/5)

    ][{C3x1/(1/5)}(1x1/5)

    ][{C4x1/(1/5)}(1x1/5)

    ] ]1

    = 1002/5

    x 2001/5

    x

    1001/5

    x 501/5

    = 1002/5

    x

    10000001/5

    = $ 100

    Thus the minimum cost for transporting the 400 cubic yards of gravel across the river is $

    100. Note that the dimensions of the box have not been determined and these will be determined

    from the primal-dual relationships. The values for the primal variables can be determined from

    the relationships between the primal and dual as:

    Primal Term = Dual Term

    C1/(L x W x H) = 01 Y = (2/5) Y (54)

    C2 x W x H = 02 Y = (1/5) Y (55)

    C3 x L x H = 03 Y = (1/5) Y (56)

    C4 x L x W = 04 Y = (1/5) Y (57)

    If one combines Equations 55 and 56 one can obtain the relationship:

    W = L x (C3 / C2) (58)

    If one combines Equations 55, 56 and 57, one can obtain the relationship:

    H = W x (C4 / C3) = L x (C3 / C2) x (C4 / C3) = L x (C4 / C2) (59)

    If one combines Equations 54 and 55 one can obtain the relationship:

    L x W2 x H

    2 = (1/2) x (C1 / C2) (60)

    Using the values for W and H from Equations 58 and 59 in Equation 60, one can obtain:

    L = [(1/2)x(C1 C23/( C3

    2 C4

    2)) ]

    1/5 (61)

    Similarly, one can solve for W and H and the equations obtained are:

    W = [(1/2)x(C1 C33/ (C2

    2 C4

    2)) ]

    1/5 (62)

    and

    H = [(1/2)x(C1 C43/ (C2

    2 C3

    2)) ]

    1/5 (63)

    Now using the values of C1 = 40, C2=40, C3=20 and C4=10, the values of L, W, and H

    can be determined using Equations 61, 62, and 63 as:

  • L = [(1/2) x (40 x 403 /(20

    2 10

    2)) ]

    1/5 = [ 32]

    1/5 = 2 yards (64)

    W = [(1/2) x (40 x 203 /(40

    2 10

    2)) ]

    1/5 = [ 1]

    1/5 = 1 yard (65)

    H = [(1/2) x (40 x 103 /(40

    2 20

    2)) ]

    1/5 = [ 0.03125]

    1/5 = 0.5 yard (66)

    Thus the box is 2 yards in length, 1 yard in width, and 0.5 yard in height. The total box

    volume is the product of the three dimensions, which is 1 cubic yard. The number of trips the

    ferry must make is 400 cubic yards/1 cubic yard/trip = 400 trips, which at 10 cents per trip is $

    40. If one uses the primal variables in the primal equation, the values are:

    Y = 40 / (L x W x H ) + 40 x(W x H) + 20 x(L x H) + 10 x(L x W) (67)

    Y = 40 / ( 2 x 1 x 1/2) + 40 x(1 x1/2) + 20 x(2 x1/2) + 10 x(2 x1)

    Y = 40 + 20 + 20 + 20

    Y = $ 100

    Note that the primal and dual give the same result for the objective function. Note that

    the components of the primal solution (40, 20, 20, 20) are in the same ratio as the dual

    variables(2/5, 1/5, 1/5, 1/5). This ratio will remain constant even as the values of the constants

    change and this is important in the ability to determine which of the terms are dominant in the

    total cost. Thus the transportation cost is twice the cost of the box bottom and the box bottom is

    the same as the cost of the box sides and the same as the cost of the box ends. This indicates the

    optimal design relationships between the costs of the various box components and the

    transportation cost associated with the design. If the constants are changed, the design equations

    for the box dimensions in Equations 64-66 do not change, only the value of the constants

    selected change and the dimensions change according to the changes in the constants. This is the

    great advantage of geometric programming over the other optimization techniques is that design

    relationships can be formulated in many instances. Geometric programming does not solve

    traditional linear programming problems and is not a replacement for linear programming. It has

    similarities with linear programming, but solves non-linear problems.

    Conclusions

    The primal and dual problem formulations for geometric programming have been

    presented and two example problems have been presented and solved for general design

    equations. Geometric programming is similar to linear programming in that both primal and

    dual formulations can be utilized. The variables of the dual objective function give the cost

    ratios for the terms in the primary objective function which is important information for cost

    analysis. Geometric programming is able to not only solve a problem but is able in many

    instances to produce design equations that can be utilized and thus avoid resolving problems

    when the input parameters change.

  • The design equations for the two problems presented are summarized as:

    Cardboard Box Design Equations

    L(box length) = [V x (C1/C2 ]1/3

    W(box width) = [V x (C1/C2) ]1/3

    H(box height)= [V x (C2 /C1)

    2) ]

    1/3 Y(Total Cost)= [6 x C1

    2/3 C2

    1/3V

    2/3 ]

    Open Cargo Shipping Box Design Equations

    L(box length) = [1/2 x (C1C33/(C2

    2C4

    2)) ]

    1/5 W(box width) =[1/2 x (C1C3

    3/(C2

    2C4

    2)) ]

    1/5

    H(box height) =[1/2 x (C1C43/(C2

    2C3

    2)) ]

    1/5

    Y(Total Cost) = [(5C1/2)2/5

    x (5C2)1/5

    x (5C3)1/5

    x (5C4)1/5

    ]

    All of the equations summarized are in terms of the input constants. None of the other

    solution procedures such as linear programming allow design equations to be developed in a

    manner similar to that of geometric programming and this is a significant advantage for

    geometric programming. For cost estimating, the dual variables are important in evaluating the

    importance of the individual terms in the primal objective function and this is another important

    result of geometric programming.

    Bibliography

    1. C. Zener, A Mathematical Aid in Optimizing Engineering Design, Proceedings of the National Academy of

    Science, Vol. 47, 1961, p 537.

    2. 1. R.J. Duffin, E.L. Peterson and C. Zener, Geometric Programming, John Wiley and Sons, New York, 1967, pp.

    278.

    3. C. Zener, Engineering Design by Geometric Programming, John Wiley and Sons, New York, 1971, pp 98.

    ISBN 0-471-98200-8.

    4. . D.J. Wilde and C.S. Beighler, Foundations of Optimization, Prentice-Hall, Englewood Cliffs, New Jersey, 1967.

    5. C.S. Beightler, D.T. Phillips and D.J. Wilde, Foundations of Optimization, 2nd

    Edition, Prentice Hall, Englewood

    Cliffs, New Jersey, 1979.

    6. Robert C. Creese, Geometric Programming for Design and Cost Optimization, 2nd Edition, Morgan & Claypool

    Publishers, 2011, pp 128. ISBN 9781608456109(paperback).