Difference between revisions of "Optimization"

From Heureka Wiki
Jump to navigation Jump to search
Line 46: Line 46:
 
By default, the x[i,j] variables are continuous (non-integer) and bounded between 0 and 1. You can change the variable to binary (0/1-integer) by changing its RangeType to Binary.
 
By default, the x[i,j] variables are continuous (non-integer) and bounded between 0 and 1. You can change the variable to binary (0/1-integer) by changing its RangeType to Binary.
  
A constraint called <code>maxArea[i] </code> is also added automatically. It ensures that a the area managed for each treatment unit is correct, so that whole area (no more and no less) is assigned a schedule. Each treatment unit must be fully assigned a management. "No management" may be counted as an alternative, depending on what control categories are used when generating the alternative with the Treatment Program Generator.
+
A constraint called <code>maxArea </code> is also added automatically. It ensures that a the area managed for each treatment unit is correct, so that whole area (no more and no less) is assigned a schedule. Each treatment unit must be fully assigned a management. "No management" may be counted as an alternative, depending on what control categories are used when generating the alternative with the Treatment Program Generator.
  
 
====Adding an accounting variable====
 
====Adding an accounting variable====

Revision as of 13:05, 21 January 2010


About the optimization tool

Assignment problem

The optimization problem solved in Heureka can be categorized as an assignment problem: Each treatment unit should be assigned a treatment schedule. The problem types handled are linear programming (LP) and 0/1 mixed-integer linear programming (MIP or MILP). The difference between the two is how treatment schedules are assigned. If a treatment unit can be assigned one and only one alternative, then the associated decision variables are set to binary (by the user). If the management of a treatment unit can be "split" and spatial integrity is not an issue, then these variables can be treated as continuous variables (default). In this case the value of the decision variables refers to the proportion of treatment unit area that should be managed with a certain schedule. More information on decision variables is given below.

ZIMPL

The optimization tool is basically a graphical user interface to the ZIMPL optimization modelling language. For solving a problem, external third-party solvers are used and directly linked to the optimization tool. Currently, the solvers available are

Solvers

  • LPSolve, which is freely available, and
  • ILOG CPLEX, which is a very efficient, state-of-the-art solver. However, it is commercial and requires that the user has a licence.

The linking to SCIP/Soplex is currently under development.

Integration with prognosis data

The optimization model is linked to a Heureka-formatted SQL Server database used for storing input data, simulation data, and result data. This enables a seamless integration with the input data required by the optimization model, as well as direct presentation of optimization results in the form of tables, graphs, and maps. This simplifies the analysis and visualization of scenarios or plans of forest development and outputs.

AIMMS

As an alternative to the integrated optimization tool, an AIMMS model has been developed, which may be more suitable for a OR researcher or the very advanced user who needs maximum flexibility or maximum optimization performance. This model is also linked to the same database, but is run as a separate application. It also requires an AIMMS licence.

Settings

Applying a LP-optimization model in forest management planning, integer solutions are sometimes of interest. A stand is usually regarded as a treatment unit to be completely treated according to a certain treatment in a certain period. This might be of special interest when it comes to short term-planning, i.e. what to do now and in the next year - couple of years.

The most straightforward way to obtain integer solutions is to allow only integer values of the decision variable, i.e. constrain the range type of xi, j to "Binary". However, this might lead to infeasible solutions. Another way is to round off to closest integer value (0 or 1), hence forcing the results to be a set of complete treatment programmes for each stand in the analysis area. In menu "Optimization" > "Settings...":

  • The General-tab allows the user to, e.g., selecting "Round to integer solution". Do observe that this is done after solving the optimization problem. Any results shown in the output window will not be rounded off (except the decision variable, with its actual value within parentheses). Results derived from the result database will however be of integer solutions, if this was selected. Optimization results are saved to the database by pressing the "Save"-button in the optimization model builder-window. As an alternative to rounding off, the "Mip Gap" gives an opportunity to accept a solution not certainly optimal. A relative gap of 1% imply that the solution might be one percentage from the optimum. An absolute gap is defined in the same unit as the objective function. The "Time Limit" defines the time, in seconds, for the optimization model to search for a feasible solution.
    • Relative mip gap: Relative optimization tolerance. The optimization algorithm stops when an integer solution is quaranteed to be within this percentage of the true optimal solution.
    • Absolute mip gap: Absolute optimization tolerance (not available in Lp_Solve). The optimization algorithm stops when an integer solution is proven to be within this absolute difference of the optimal solution.
    • Time limit: The maximum time for the solving a problem. If the time limit has been passed but an optimal solutions has not been found, the best solution found is returned. For difficult problems it is possible that no feasible solution is found.
    • Round to integer: If check, decision variables are rounded to the nearest 0/1 integer value.
  • The SCIP/SoPlex Settings-tab: Here you select the SCIp/SoPlex binary file (.exe) that you must have on your disk, see Optimization.

Managing models

To create and save models, used the buttons at the top of Optimization Model window.

Editing an optimization model

Sets

When you create a new model, the following set are added automatically:

  • treatmentUnits: Set of all treatment units. Index = i.
  • alternatives: Set of all management schedule numbers. Index = j. Note: Alternative j for one treatment unit has nothing to with alternative j for another unit. The number of available j:s varies between treatment units.
  • periods: Time periods. Index = p. The length of a period is five years in strategic planning, and one year in tactical planning.
  • rowNo: Index for the treatment number in a time period that a treatment unit alternative refers to.

When adding opening size constraints (from the menu Optimization > Add Opening Size Constraint), additional sets are added.

Currently, you cannot add sets manually.

Decision variables

When you create a new model, some basic problem elements are added automatically (the sets and some constraints), including the most important decision variables. The decision variable x[i,j] is always added:

x[i,j] = proportion of the area of treatment unit i that is managed with management schedule j.

By default, the x[i,j] variables are continuous (non-integer) and bounded between 0 and 1. You can change the variable to binary (0/1-integer) by changing its RangeType to Binary.

A constraint called maxArea is also added automatically. It ensures that a the area managed for each treatment unit is correct, so that whole area (no more and no less) is assigned a schedule. Each treatment unit must be fully assigned a management. "No management" may be counted as an alternative, depending on what control categories are used when generating the alternative with the Treatment Program Generator.

Adding an accounting variable

Accounting variables are preferrably added to the optimization model to improve readability and simplify the writing of constratints. An accounting variable is a defined - it is function of other decision variable in the model. The definition is actually an equality constraint in the the optimization model.

One example of a useful accounting variable is total harvested volume in a period. This variable can then be used in other constraints.

To add an accounting variable:

  1. In the Optimization Model window, right-click in the "Variables" section and Select "Add new variable"
  2. Right-click on the variable and change its name from "DefaultName..." to something more proper, in the example below <ocde>volTot.
  3. To define an indexed variable, for example to have one variable for each time period, click on Data binding > Sets, and add the index set, for example "periods". After that the variable name should have a suffix ([p]).
  4. In the syntax window, type the definition with the the expression on the left side and the name of the variable on the right-hand side of a equality-symbol marked as "==". Example: An ccounting variable for total stand volume is defined, with an index p for time period. Note that before adding the variable, the parameter volume[i,j,p] (which is linked to the Heureka result variable Forest Data.Volume Before) must have been added. Syntax:
FORALL <p> IN periods DO
SUM <i,j> IN treatmentunits * alternatives WITH altIncluded[i,j] == 1:
volume[i,j,p] * area[i] * x[i,j] == volTot[p];
  1. Important! By default, a variable (decision or accounting) has the property RangeType set to non-negative. This means that negative values are considered infeasible. For example, a volume cannot be negative. However, some accounting variable should be allowed to take negative values, for example the net revenue in a can be negative if costs are larger that revenues. In this case you must changed its RangeType to "All".

Adding a parameter which is linked to a prognosis variable

The coefficients in the LP-models (the coefficient matrix is usually denoted as A) are constant values in the optimization model. In Heureka, these coefficients are generated by the Treatment Program Generator and referred to as Herueka result variables. A coefficient may represent for example stand volume for a given treatment unit, management schedule alternative, and time period. Hence, stand volume is a variable in a prognosis, but a constant in the optimization model.

  1. In the Optimization Model window, right-click in the "Parameters"-section and Select "Add new parameter"
  2. Type a name, for example "pulpWood" (without apostrophes)
  3. Let "Heureka result variable" be selected
  4. Click Next
  5. Select Financial Value > PulpWood Volume Total (if this is the variable you are interested in)
  6. Click Finish

To check what Heureka variable a certain parameter is linked to:

  1. Select the parameter
  2. In the Properties window for the parameter (under the syntax window), under Databinding > ResultProperty, you can see what Heureka variable the parameter is bounded to. If you click on it you can change the binding.

Adding a parameter that has a definition

  1. In the Optimization Model window, right-click in "Parameters" section and Select "Add new parameter"
  2. Type a name, for example "totalArea" (without apostrophes)
  3. Select "Formula" as parameter type
  4. Click Next
  5. In the syntax window, type the defiintion, for example
sum <i> in treatmentunits: area[i];
(This can be edited later)
  1. Click Finish

Note: When defining an accounting variable (see above), you would also add a definition to the variable itself, such as == VariableName. For a defined parameter, you only type the expression.

Adding a constraint

Adding opening size constraints

The generation of an EARM-model (see Goycoolea et al 2005) [1] is automated. The original model have been adapted to suit the way management alternatives are handled in Heureka (decisoon variables are defined for complete treatment schedules insted of single treatment activities). To formualate and EARM-model, select Add Opening Size Constraints from menu Optimization.

To use this functionality, you must have provided a forest map. The program can then automatically compute pairwise adjacencies, calculate all feasible combinations of treatment units (that form harvest clusters), compute all so called cliques, and all constraints necessary. For more info, se [1]

A very fast algorithm has been developed in Heureka to compute what Goycoolea et al (2005) refer to as cliques and clusters.

Solving problems and saving optimization results

Sharing and downloading models

References

  1. 1.0 1.1 Goycoolea, M., Murray, A. T., Barahona, F., Epstein, R., Weintraub, A. 2005. Harvest scheduling subject to maximum area restrictions: Exploring exact approaches. Operations Research, 2005. Volume 53. Number 3.[1]