free variables

Free variables are variables that have no lower or upper bound. By default, variables don't have an upper bound, but they do have a lower bound of zero. So they can only take positive values. Free variables can also become negative until -infinite.

lp_solve supports free variables since a long time. Internally, these variables are split in a positive and negative part. So the result of using free variables is that the number of columns increases. However this is transparent to the user. The API call set_unbounded can be used to define a variable as free.

In the mps format, free variables can be specified in the BOUNDS section. See mps-format.

Example:

NAME
ROWS
 N  R0
 L  R1
 G  R2
 G  R3
 G  R4
COLUMNS
    x1        R0        -1.000000000   R1        1.0000000000
    x1        R2        2.0000000000   R3        -1.000000000
    x2        R0        -2.000000000   R1        1.0000000000
    x2        R2        -1.000000000   R3        3.0000000000
    x3        R0        4.0000000000   R4        1.0000000000
    x4        R0        3.0000000000   R4        1.0000000000
RHS
    RHS       R1        5.0000000000   R4        0.5000000000
BOUNDS
 FR BND       x2
 UP BND       x3        10.000000000
 LO BND       x3        1.1000000000
 FR BND       x4
ENDATA
The red lines specify that variables x2 and x4 are free variables.

In the lp format, free variables can be specified in the free section. See lp-format.

Example:

max: x1 + 2x2 - 4x3 -3x4;
x1 + x2 <= 5;
2x1 - x2 >= 0;
-x1 + 3x2 >= 0;
x3 + x4 >= .5;
x3 >= 1.1;
x3 <= 10;

free x2, x4;

The red line specifies that variables x2 and x4 are free variables. The solution of this model is:
Value of objective function: 5.73333

Actual values of the variables:
x1                        1.66667
x2                        3.33333
x3                            1.1
x4                           -0.6

As can be seen, the value of x4 is -0.6, a negative value. If the variable would not be set as free, it would not be negative.