Solving Models

This chapter covers the following topics:

Solving Models Overview

Solve Times

Depending on the size, complexity, and constraints of the model, and the solver algorithm and heuristics that you select, a solve can take from a few seconds to several hours to complete.

For best results, solve a model incrementally as it is being built. This process helps find possible problem areas in the model and provides an indication of how long a solve takes when the model is complete.

Heuristic Solves

If a solve uses heuristics, the Solving Model window shows the following:

Field Description
Iterations The total number of simplex and barrier iterations during this solve.
CPU Time The total CPU time spent during this solve.
Phase The name of the current heuristic.
Upper Bound The upper bound for the total cost in the current solver phase. This number is often the cost value of the best solution at this point.
Lower Bound The lower bound for the total cost in the current solver phase. This number is often the cost value of the best solution in the previous phase.
Graph A graphic representation of the lower and upper bound value over the last 60 seconds.
Cancel Solve / End Solve Phase button The text on the button changes to End Solve Phase when a solution that satisfies the constraints associated with the current heuristics phase has been found. Clicking the End Solve Phase button at this point installs the best solution for the current phase and then moves the solver on to the next heuristic phase.

Heuristic Resolve Algorithms

The Primal solve method can use a solution from a previous solve as a starting point. This procedure is useful for most heuristics because there are usually only small changes to the problem matrix between solves.

For some heuristics, however, the problem matrices differ so much for a new solve that starting from the previous solution is not faster than solving the model again with one of the faster linear programming solving algorithms (Network or Barrier).

For these situations, you can select the algorithm to use after the heuristic has been applied. Generally, if the solver makes few changes, choosing a Simplex solve is better. If many changes are made, applying a Network or Barrier solve might be beneficial. As with any use of heuristics, select these options with care and be sure you have expert advice.

Tips for Advanced Users

Some models might benefit from a different order of nonlinear algorithms. For example, if you would like to solve the limiter problem first and then use one of the single sourcing algorithms, nonlinear algorithms in a different order might be a good choice. This process can be done as follows:

After a heuristic solve phase has finished, the decisions are stored in the model. If you cancel a solve before some previous heuristic solve phases finish, those phases can be set in Use Old mode. As a result, you do not have to solve the phases again if you finish the solve at a later time.

On/Off/Use Old Solve Options

In the Solve Configuration window, you can select one of the following solve options:

Option What the System Does
On The nonlinear constraints for this process must be satisfied during the next solve. Uses the algorithms as configured in the options dialog for this node.
Off Does not call the algorithms associated with these nonlinear constraints.
Use Old Looks in the model for the decisions for the nonlinear constraints from a previous solve. If these decisions are still valid, installs these decisions in the linear programming formulation. If these decisions are not present or have become invalid, uses the algorithms to make new decisions for these processes.

Solve Reports

There are two types of solve reports: summary reports and detailed reports. They both display the results of a solve and statistics about the solve, but detailed reports display more information than summary reports. The reports are based on either cost, risk adjusted cost, or profit, depending on which button is selected in the report window.

Risk adjusted costs are calculated using real costs and allow the user to model the relative risks of choosing one solution over another.

The Summary Report window displays the following information for a report that is based on Cost or Risk Adjusted Cost:

Field Meaning
Total Total cost of the model. The total cost is the real cost plus the penalty cost. It is the objective value of the linear program that was solved. The amount by which the cost has changed since the last solve is shown in brackets.
Real Real cost is the total of the basic model costs, such as storage cost and machine cost. The amount the cost has changed since the last solve is shown in brackets.
Penalty Total penalty costs for the model, such as the penalty for going over maximum or under minimum and for stocking out. The amount that the penalty has changed since the last solve is shown in brackets.
Currency The currency used to calculate cost.
Solve Time Time in seconds to solve the model.
Solver Algorithm The linear programming algorithm used.
Variables Total number of variables in the model.
Constraints Total number of constraints.
NonZeroCoefs Number of nonzero coefficients in the solve matrix. This field contains one way of stating the size of the model.
Last Solved Date and time when the model was last solved.

The Summary Report window displays the following information for a report that is based on Profit:

Field Meaning
Total The total profit of the model. It is the sum of the real and penalty values.
The amount by which the profit has changed since the last solve is shown in brackets.
Real Real profit is the total of the basic model profits, where profit is the sum of revenues minus the sum of costs.
The amount the profit has changed since the last solve is shown in brackets.
Penalty For consistency with real profit, this is the total penalty cost expressed as a negative number.
Total penalty costs for the model include such costs as the penalty for going over maximum or under minimum and for stocking out.
The amount that the penalty has changed since the last solve is shown in brackets.
Currency The currency used to calculate profit.
Solve Time Time in seconds to solve the model.
Solver Algorithm The linear programming algorithm used.
Variables Total number of variables in the model.
Constraints Total number of constraints.
NonZeroCoefs Number of nonzero coefficients in the solve matrix. This field contains one way of stating the size of the model.
Last Solved Date and time when the model was last solved.

The Detailed Report window displays the following information for a report that is based on Cost or Risk Adjusted Cost:

Field Meaning
Object Type The node or arc in the model that generates the cost.
Total Cost Total cost of the model, the total of all costs in the Real Cost and Penalty cost columns.
Currency The currency used to calculate cost.
Real Cost Real costs are basic model costs, such as storage cost and machine cost.
Real % The real cost generated by this object, expressed as a percentage of the total amount of real costs.
Penalty Cost Penalty costs for the model, such as the penalty for going over maximum or under minimum and for stocking out.
Penalty % The penalty cost generated by this object, expressed as a percentage of the total amount of penalty costs.

The Detailed Report window displays the following information for a report that is based on Profit:

Field Meaning
Object Type The node or arc in the model that generates the revenue or cost.
Total Revenue The total revenue generated by all objects in the Revenue area of the report.
Total Cost The total cost generated by all objects in the Cost area of the report
Total Profit The total profit generated by the model, calculated by subtracting Total Cost from Total Revenue.
Currency The currency used in the model.
Real Cost Real costs are basic model costs, such as storage cost and machine cost.
Real % The real cost generated by this object, expressed as a percentage of the total amount of real costs.
Penalty Cost Penalty costs for the model, such as the penalty for going over maximum or under minimum and for stocking out.
Penalty % The penalty cost generated by this object, expressed as a percentage of the total amount of penalty costs.

Monitoring a Solve

While the system is solving a model, feedback on the solution process is displayed in the Solving Model window. This window shows the number of iterations done during the solve and the total time for the current solve.

Depending on the algorithms and heuristics used, the window provides feedback on certain objectives. This feedback is also displayed in a graph that shows the process during the last minute. This graph needs to rescale quite often because of the large range of the objective values.

You use the button at the bottom to cancel a solve or skip a heuristic. The text changes depending on the context. Skipping a heuristic is only possible once the system has found a feasible solution to constraints associated with the heuristic.

Simplex and Network Linear Programming Solves

The simplex and network algorithms for solving linear programming problems are characterized by their two phases. In the first phase, an infeasibility measure has to be minimized.

In the second phase, the objective function represents the total cost of the current solution for the primal or network primal algorithms, or the dual objective function for the dual and network dual algorithms.

Barrier Linear Programming Solves

The progress of the barrier solver can be followed by watching the primal and dual infeasibility gap decrease to zero, at which moment the crossover algorithm takes over to produce a basis. You can use the basis to solve models again quickly.

Barrier iterations take much longer than simplex or network iterations. The Solving Model window might not always appear correct because it can only be updated once every iteration.

Using Sets After a Solve

You can use sets after you solve a model to help find problems or violations in the model. You can display Backorder, Over, Under, and Infeasible sets immediately after a solve or view them any time after a solve. As well as displaying the names of sets in the Sets field of the Sets window, you can display a list of all the nodes and arcs in each set. You can view the list in the Set Browser window.

If you display the Set Browser and browse a User or Visual set, small arrows point to periods that contains elements in the browsed set. This visual help is useful when you browse a Backorder, Over, or Under set created after a solve; the indicators immediately show you the periods in which the violations occurred.

When you are using the Set Calculator, the Set Browser enables you to view the contents of sets you create. The Set Browser displays the name of the set and what kind of set it is. In the Elements field, it displays the nodes and arcs in the set and additional information, depending on the kind of set that uniquely identifies each element: the kind of node, its name, the period, and the commodity that an arc carries.

The Set Browser displays the information for the set that is selected in the Sets field of the Sets window. If you select a different set in the Sets window, the Set Browser is automatically updated. If you select a set that does not have any nodes or arcs in it, Empty is displayed in the Elements field of the Set Browser.

Strategic Network Optimization creates User Sets that contain nodes and arcs that violate constraints, make the solve infeasible, or have been corrected by the system. User sets created after a solve include:

You can use these sets to help find problems or violations in the model after you solve a model. You can display sets immediately after a solve or view them any time after a solve.

Unbounded Models

If you change costs in a model and the model subsequently becomes unbounded, you could receive the following message when solving:

Solver system error message Problem unbounded with status

A possible solution to this problem is to check areas of the model where negative infinite costs exist. This is often in the costs associated with demand-based nodes. Strategic Network Optimization cannot solve this problem because there are many solutions. A part of the model has a negative cost on a flow with no maximum, indicating that the more you produce the greater your income. You should provide a maximum value.

You should also review the costs in the model to ensure they are logical. Determine whether a recent change in the model or new or imported data could have caused the problem.

Solver Parameters

You can configure the parameters that the solver uses. However, you should configure these parameters only if you are fully aware of the consequences of doing so. It is recommended that only expert Strategic Network Optimization users change these parameters. The following table describes the parameters that you can configure:

Parameter Description
Solution Time Limit Limits the time, in seconds that the system can use to solve a model. Generally, the longer the solve takes, the better the solution. Because the improvement might be minimal after a certain length of time, you can use this parameter to restrict how long the solve takes. The default value is 1 X 10e7575.
For example, you might want to limit the solution time when you run Branch and Bound solves. Branch and Bound usually achieves the best solution in less than 30 minutes but might spend hours proving the solution is optimal. If you set the Solution Time Limit to a smaller amount, you might be able to shorten the solve time without compromising the quality of the solution.
Iteration Limit Indicates the number of iterations that the solver makes before it stops. You might want to raise the limit if you receive a message that the iteration limit has been exceeded.
Refactorization Frequency Indicates the number of iterations between refactorizing. A small value increases the number of iterations, which increases the solve time. If you often receive numerical errors, you can decrease this value; if you seldom receive numerical errors, you can increase it.
Reduced Cost Tolerance Indicates that two costs that are different but close are treated as being equal. For example, if two costs differ only in the value of the sixth decimal place, such as 1.496372 and 1.496374, the solver assumes that the two costs are equal
Upper Objective Limit The highest cost that the solver reaches before it stops. The default is 1 X 10e7575.
Lower Objective Limit The lowest cost that the solver reaches before it stops. The default is -1 X 10e7575.
Feasibility Tolerance Indicates the limit to which you can violate the constraints, yet still have the solver treat the constraints as being satisfied. Change this value only if your model has many badly scaled values.
Scale Algorithm Indicator Influences the scaling of the problem matrix. A value of 0 implements an equilibration scaling method.
A value of 1 invokes a more aggressive scaling method.
A value of -1 indicates that no scaling is done.
The default value is 0.
Simplex Display Level Determines the amount of information reported by the solver during a simplex solve. If this level is set to 0, iteration messages are written to the linx.log only when the optimal solution is reported.
If this level is set to 1, an iteration log message is written after each refactorization to indicate the iteration count and scaled infeasibility or objective value.
If this level is set to 2, an iteration log message is written after each refactorization to indicate the names of the variables, slacks, and artificials entering and leaving the basis.
The default level is 1.
Network Extraction Level Establishes the level of network extraction for network simplex optimizations.
If this level is set to 1, only the pure network is extracted.
If this level is set to 2 or 3, larger networks are extracted using reflection and general scaling.
The default level is 1.
Barrier Iteration Limit Sets the number of iterations before the barrier solve stops. You can set the value to 0 or higher. If the value is set to 0, no barrier iterations occur. Default values vary by platform.
Barrier Thread Limit Set to 1.

Currently, no reasons exist to change values for the following fields:

These values can be changed if numerical problems arise, but any changes require an advanced knowledge of linear programming.

Solving Models

Solving a Model

To solve a model:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, select a solver algorithm from the drop-down menu in the General Solver Options area.

  3. To solve the model using heuristics, select the heuristics to use from the Heuristic Specific Options area.

    Solve Configuration displays the names of the nonlinear processes, an On/Off/UseOld option for each, an algorithm choice menu, and an Options button to configure the heuristic.

    The system calls different algorithms for the different classes of nonlinear constraints in the order in which they are listed on Solve Configuration (Capital Asset Management first, Load Smoothing last). For example, the algorithms for single-sourcing do not know what the results of the algorithms for batch will be. The order of the nonlinear constraint classes is fixed in the order that is most likely to return a less costly solution.

  4. Click Solve.

If any report queries have been marked for AutoOpen, results for each report query appear after the solve.

Solving Parts of a Model

Besides solving a whole model, you can solve a selected part of a model. This process allows you to control where changes to the model are made. For example, suppose you have already solved a model and there is a change in demand. If it is too time consuming to solve the entire model again, you can select the nodes and arcs for just the last stage of production and restrict the solve to that part of the model. This process ensures that the only changes in the model from the new solve are made in the last stage of production.

To solve a selected part of a model:

  1. Select the nodes and arcs that can change.

  2. Do one of the following:

    • To solve for the selected nodes and arcs, select Solve from the Solve menu, and then select Selected Nodes and Arcs.

    • To solve for the selected nodes and arcs in all time periods, select Solve from the Solve menu, select Selected Nodes and Arcs in All Periods, and then Apply.

Solving Parts of a Model Using Sets

To solve part of a model using sets:

  1. From the Tools menu, select Sets.

  2. In the Sets window, select the set that contains the nodes and arcs.

  3. From the Solve menu, select Solve, and then select Set.

Viewing Solve Results

Solve Results Overview

After you solve a model, you can review the results of a solve by viewing solve reports or by viewing sets. After you solve a model, you can view:

You can also query nodes and arcs directly from the Corrections Report window. The corrections report is not saved with a model; and the report clears if you solve the model again, load a new model, or exit from the system.

Viewing a Summary Report

To view a Summary cost/profit report:

  1. From the Solve menu, select Cost/Profit Report.

  2. In the Cost/Profit Report window, select Summary.

Viewing a Detailed Cost/Profit Report

To view a Detailed cost/profit report:

  1. From the Solve menu, select Cost/Profit Report.

  2. In the Cost/Profit Report window, select Detailed.

Viewing a Corrections Report

To view a Corrections Report:

  1. From the Solve menu, select Corrections Report.

    If any corrections were made, the Corrections Report window appears. The window identifies the node or arc and the corrected field, including its original value (From) and the value to which it was changed (To).

  2. If you want to query a node or arc from the corrections report, select any cell in the row containing the information that you want to query, and then click Query Node or Query Arc.

Capital Asset Management Solves

Selecting Block Nodes for a CAM Solve

  1. Select the Block nodes you want to include in the CAM analysis.

  2. From the Query menu, select Multi-Period Properties, and then select Block.

  3. Enter values in the Block node data fields as shown in the following table:

Field Description
CAM Set Shows whether or not a Block node belongs to a CAM set.
This field can either state that the Block node does not belong to any sets (Not in a Set), display the name of the CAM set to which it belongs or display three dots (?) which means that the Block node belongs to more than one CAM set.
This field is not editable directly in queries.
If the Block node belongs to more than one CAM set, the CAM analysis cannot be performed.
Rationalize Whether the facility is included in the analysis and is eligible to be opened or closed. Select Yes or No from the drop-down menu.
Open at Start Whether the facility is open at the start of the first time period. Select Yes or No from the drop-down menu.
Shutdown Benefit The one-time benefit of closing the facility.
Startup Cost The one-time cost of opening the facility.
Fixed Cost The fixed operating cost of the facility for the time period when the facility is open.
Open: Whether the facility is open in the time period. Normally, this information is determined by the heuristic. To manually set this status, you must also set the Open Status Frozen field.
Open Status Frozen Determines whether the facility must remain open or closed for the time period.

Creating a CAM Set

To create a CAM set:

  1. From the Tools menu, select Sets.

  2. In the Sets window, from the Edit menu, select Set Tool.

  3. In the Set Name field, enter a name for the set.

  4. Click Structural.

  5. Click New.

  6. Click Apply and close the Set Tool window.

  7. Select the Block nodes that you want to assign to the set.

  8. In the Sets window, from the Sets list, select the newly created Structural Set to which you want to assign the Blocks.

  9. From the Actions menu, select Assign Selected to Set.

  10. In the confirmation window, click Yes.

CAM Solve Options

To configure CAM solve options and solve the model:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, select On from the Capital Asset Management On/Off/Use Old drop-down menu.

  3. If you want to change the linear programming algorithm used for resolving in the heuristic phase, select a different algorithm from the algorithm drop-down list.

  4. Click the Capital Asset Management Options button.

    If a Block is assigned to more than one structural set, a message appears. You must click OK, remove the Block from one of the sets, and make sure the Rationalize field is set to Yes.

  5. In the Capital Asset Management Options window, select a CAM set from the Show Set drop-down list.

  6. Enter CAM analysis parameters for the set in the appropriate fields.

  7. Click OK.

Working with Solves

Fixing and Unfixing Data During a Solve

You can fix information in the nodes and arcs of a model for one or more periods. When data is fixed, the commodity flow amount cannot change. When data is unfixed, the solver can change the amount to determine the optimal flow. When you fix data, all fields with the name Fix are set to Yes. When you unfix data, all fields with the name Fix are set to No.

To fix parts of a model:

  1. Select the nodes and arcs that you want to fix.

  2. From the Edit menu, select Replace, and then select Fix.

  3. Do one of the following:

    • To fix data for the selected nodes and arcs, click Selected Nodes and Arcs.

    • To fix data for the selected nodes and arcs in all periods, click Selected Nodes and Arcs in all Periods.

    • To fix data in a set, click Set.

This works if you have already chosen a set in Tools and then Set.

To unfix parts of a model:

  1. Select the nodes and arcs that you want to unfix.

  2. From the Edit menu, select Replace, and then select Unfix.

  3. Do one of the following:

    • To unfix data for all nodes and arcs select All Nodes and Arcs.

    • To unfix data for the selected nodes and arcs, select Selected Nodes and Arcs.

    • To unfix data for the selected nodes and arcs in all periods, select Selected Nodes and Arcs in all Periods.

    • To unfix data in a set, select Set.

This works if you have already selected a set in Tools and then Sets.

Fixing or Unfixing Data in a Period

To fix or unfix data in a period:

  1. From the Tools menu, select Periods.

  2. In the Periods window, click the Fix/Unfix button.

  3. In the Fix/Unfix Period window, from the Period field, select the periods that contain the data that you want to fix or unfix.

  4. Do one of the following:

    • To fix or unfix data for all nodes and arcs in the selected periods, click the All button in the Apply To area.

    • To fix or unfix data for the selected nodes and arcs in the selected periods, click the Selected button in the Apply To area.

  5. Click either the Fix button or the Unfix button.

Determining the Net Change from the Last Solve

You can set a solve baseline to compare the results of a solve with the results of subsequent solves. This process is useful for net-change reporting and "what-if" scenarios. Each node and arc has a Baseline field and Delta field.

Once set, the Baseline field holds the value of the Used, Storage, or Flow field (depending on the object type) and is not changed by subsequent solves. The Delta field shows the difference between the current value and the Baseline.

You can also create a net-change report, which allows you to make custom reports to compare different solves from the baseline in report queries. Report queries can also be made to compare the criteria that are interesting to you: manufacturing, storage, distribution, and so on. Percent differences and totals can be calculated in the report queries output if needed. This procedure works with the restricted solve because you can restore the baseline as your working solution at any time.

You can use the batch commands setbaseline and restorebaseline to set and restore the baseline.

To set the baseline, from the Solve menu, select Baseline, and then select Set. The current Used, Storage, or Flow field value is copied to the Baseline field.

To restore the baseline, from the Solve menu, select Baseline, and then select Restore. The Baseline field value is copied to the Used, Storage, or Flow field.

To create a net-change report:

  1. From the Solve menu, select Baseline, and then select Set.

    The current Used, Storage, or Flow field value is set as a baseline for your working solution.

  2. Modify supply chain data and re-solve the model.

  3. Create a report query with the following pattern for the Delta field: <>0

  4. Apply the report query and view the report in the Data Editor.

Discarding the Basis Stored in the Model

Circumstances can arise in which you want to reset the basis that is stored in the model. The next solve is then a cold solve, which does not use the basis from a previous solve. This solve usually takes much longer to complete than a warm solve, which starts from an existing basis that is usually close to optimal.

Discarding the advance basis has no effect on network and barrier solves since these algorithms do not start from an existing basis. You can also reset the basis with the batch command discardbasis.

To discard the basis stored in the model:

  1. From the Solve menu, select Discard Advance Basis.

  2. In the confirmation window, click OK.

Heuristic Results from Previous Solves

The system can use the heuristics results from previous solves. The system extracts information from the current model, and if this information is still feasible for the heuristic constraints, it installs these results. If the stored information is not present or invalid for some nodes, the heuristics are run for those nodes.

To use heuristic results from a previous solve:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, select Use Old from the On/Off/Use Old drop-down list.

Resetting Heuristic Information

You can remove information from previous solutions from parts of a model. You can use this technique to run a local heuristics solve again if the heuristics initially failed to find a good solution in some parts of the model. This technique is also useful if some local changes probably do not affect other parts of the model. You can select to solve only parts of the model again.

To reset heuristic information:

  1. Select the nodes to reset.

    If you select a Block node, all of the nodes in the Block node are reset.

  2. From the Edit menu, select Replace, then Reset.

  3. In the Fix Status area, select Ignore, Unfix, or Fix.

  4. Select the heuristics to reset in the Reset Solutions area.

  5. In the Apply Periods area, select one of the following:

    Option Description
    Selected Objects Only resets the elements in the periods where they were selected. Selecting an element in multiple periods can be done by changing periods with the period tabs on the bottom of the main system window and holding the control key when clicking an object so that the element is added to the set of selected elements.
    All Resets the selected nodes in all the periods of the model.
    Range Resets selected nodes in all the periods in the specified range. No changes are made if the From period is later than the To period.
  6. Click OK.

Determining Available System Memory

Strategic Network Optimization requires memory for a variety of functions. Memory is required for the executable; to store the model, for the solver, for buffers and pivots to solve, and to keep an extra copy resident in memory, depending on the solver algorithm.

The Barrier solve can take up to twice the amount of memory as the other solver algorithms and can be taxing on a system's memory. A useful rule of thumb is to provide five times the model size in memory (including swap space) for the model to solve. You can determine and display the total amount of memory on the system that is available to Strategic Network Optimization.

The two kinds of memory are:

If enough memory is not available, your operating system might need to be reconfigured, or more memory might have to be added to successfully run Strategic Network Optimization.

To determine available system memory for Strategic Network Optimization:

  1. From the Start menu, select Programs, select Oracle Supply Chain Planning, select Strategic Network Optimization x.x.

  2. At the prompt, enter:

    memtest

The command displays the amount in both megabytes and bytes.

Infeasible Solves

Troubleshooting Infeasible Solves

Infeasible solves can be caused by a variety of factors. If a model is infeasible, you can try the following techniques to solve the problem:

Accepting a Solution with Unscaled Infeasibilities

By default, the Strategic Network Optimization solver scales a problem before solving it in order to improve solve time performance. After the solver finds an optimal solution, it checks for any violations of optimality or feasibility in the original, unscaled problem. When a scaled problem is solved within the specified feasibility tolerance, but the corresponding unscaled solution contains one or more variables that violate the feasibility tolerance, a solve warning message appears.

This message indicates that an optimal solution has been found, but it contains unscaled infeasibilities. This could be the result of a row that has cost coefficients with different magnitudes. The user can choose to accept or reject a solution that is optimal with unscaled infeasibilities. In batch mode, a solution that is optimal with unscaled infeasibilities is automatically accepted.

The problemstats Batch Command

Strategic Network Optimization accepts a solution with unscaled infeasibilities because it is likely the feasibility violation is relatively minor. It might be possible for the solver to find a better solution even though the model contains unscaled infeasibilities, or it might be necessary to revise some of the costs in the model. The problemstats batch command can be used to locate this information. The command syntax is as follows:

problemstats

The following is an example of the data displayed after the problemstats batch command has been entered:

Variables : 36480
Linear constraints : 24840
Nonzeros : 69036
RHS nonzeros : 463
RHS nonzeros : Min: 2 Max: 184
Linear constraints nonzeros : Min: 1 Max: 100
Objective nonzeros : 20161
Objective nonzeros : Min: 0.0025 Max: 20000
Variables : Min LB: 0 Max UB: 1950000

The Min and Max values are for right-hand side (RHS) nonzeros. Linear constraints and objective nonzeros provide the range of these coefficients. For example, 2 and 184 are the are the smallest and largest coefficients of a sample problem. In most Strategic Network Optimization models, the objective nonzeros are the quantities which can be reviewed.

The objective function in a model has coefficients that represent real costs and penalty costs. Wide ranges between small real costs and large penalty costs often exist. If the range between the Min and Max value exceeds 109, you might need to revise some of the model costs that produce these numbers. In the example above, the range of coefficients in the objective function is 20000/0.0025 = 8 x 106 which is within the recommended range.

Locating Elements that Cause Infeasibility

You can select the Use IIS (irreducibly inconsistent set) Finder for Infeasible Set option in the Solve Configuration window.

If a Primal solve detects an infeasibility, a warning dialog is displayed and you can decide to create an Infeasible set. If this option has been selected, you can determine which algorithm is used to determine the Infeasible set.

If the option is not selected, you use the algorithm originally used by Strategic Network Optimization to determine infeasibilities.

This algorithm looks for the constraints in the problem that could not be satisfied with the Primal solver method. If the Use IIS Finder for Infeasible Set option is selected, the IIS finder is used. This algorithm detects an inconsistent set of elements that can be made feasible by making a change to one of the elements in the set, and isolates the cause of the infeasibility. This algorithm generally takes more time than the original infeasibility finding algorithm.

The finder takes the linear program and corresponding basis as input, and produces an irreducibly inconsistent set of constraints (IIS). An IIS is a set of constraints and column bounds that is infeasible, but becomes feasible if any one member of the set (any constraint or variable) is dropped. Once an IIS is produced, it can be inspected to determine the cause of the infeasibilities.

By reducing the problem to a smaller subset of constraints and bounds, pinpointing problems is typically much easier. An infeasible problem can contain many independent IISs. The finder finds only one. After correcting the infeasibility caused by a single IIS, a problem can remain infeasible, so it might be necessary to run the finder more than once.

You can find the elements that created certain variables and constraints, which is useful for debugging certain solver error messages that can be displayed by a network primal solve.

If an infeasibility is detected during a preprocessing phase, a solve message displays the constraint or variable that caused the infeasibility. You can then detect where in your model the infeasibility occurs.

To locate elements that cause infeasibility during a preprocessing phase:

  1. Do one of the following:

    • To display the Constraint Finder, select Find from the Edit menu, and then select Constraint.

    • To display the Variable Finder, select Find from the Edit menu, and then select Variable.

  2. In the Finder window, enter the element number in the Find element field and click Find.

For example, if the error message displays an inequality for constraint 4 (c4), enter 4.

The information, such as node, arc, period, or commodity, appears in the other field in the window. You can use this information to locate the element that is causing the problem.

To find nodes and arcs that caused violations or an infeasible solve:

  1. Solve the model. An information window appears if any solve warnings exist.

  2. If an information window appears, click OK.

The Sets and Set Browser windows display sets of nodes and arcs that caused the solve warnings.

or

  1. From the Tools menu, select Sets.

  2. In the Sets window, display User Sets.

  3. In the Sets area, select the Infeasible set, or the Over, Under, or Over or Under set in which the violations occur.

  4. Do one of the following:

    • To select nodes and arcs that belong to the set in the model, click Uncover.

    • To view nodes and arcs that belong to the set, select Browser from the Edit menu.

    • To display data for the selected Set, select a query from the Query Set menu.

Adjusting Solver Tuning Parameters

Types of Solver Tuning Parameters

Strategic Network Optimization uses linear programming to solve supply chain models. There are different types of linear programs that are used to solve models, such as Network Primal, Barrier, Dual, Network Primal, and Network Dual. While these linear programs all produce the same solution, they use different speeds and factors to perform calculations Depending on the size, complexity, and constraints of the model, and the solver algorithm and the heuristics you select, one linear program could be more optimal than another.

For example, certain models converge more quickly using Network Dual rather than Barrier. If solve time is critical, you should experiment with different linear programs to see which one produces the fastest solve. However, if time is not critical, you could base your choice of linear programs on a different set of criteria.

Strategic Network Optimization has a default set of solver parameter values such as Markowitz Pivot Tolerance and Scale Algorithm Indicator. It is also useful to adjust solver parameters in order to determine if a different set of solver parameter values reduces solve time or increases the stability of the solve.

The solutionquality Batch Command

The solutionquality command displays data about the maximum reduced-cost infeasibility and the maximum bound infeasibility. The command syntax is as follows:

solutionquality

The following is an example of the data displayed after the problemstats batch command has been entered:

Max unscaled (scaled) bound infeas.= 0(0)Max unscaled (scaled) reducedcost infeas.= 3.08553e-12(3.08553e-12)Max unscaled (scaled) primal residual (|Ax-b|)= 4.70834e-12(3.63798e-12)Max unscaled (scaled) dual residual (|c-B'Pi|)= 2.91038e-11(2.55983e-09)Max unscaled (scaled) X value = 55288.3(55288.3)Max unscaled (scaled) slack value = 55288.3(55288.3)Max unscaled (scaled) value in dual solution (pi)= 450000(2.62419e+08)Max unscaled (scaled) reduced-cost = 483965(483965) Kappa = 6.4972e+07

The solutionquality command can identify inconsistent behavior that contributes to the improper model conditioning such as:

The solutionquality batch command allows the user to search for linear programming problems. It displays the magnitude of residuals associated with the solution such as the accuracy with which the solution satisfies constraints and bounds and the condition number of the optimal basis; kappa.

Kappa, the basis condition number, measures the sensitivity of the model data. It is equivalent to the number of places in the precision that can be ignored. The kappa value provides the condition number of the optimal basis. Most computers have a precision of 1e-16and the error for the solution value is approximately equal to:

[(computer precision)* kappa].

The kappa value can be significant in determining the extent of damage caused by a round-off error. For example, if kappa = 1.3672e11, there are 5 accurate places left (for example, e-16* e11= e-5). Round-off errors of 1e-5can multiply the right side of the matrix or objective coefficients. Therefore, even small problems can magnify the round-off error.

If kappa is relatively low (e.g. =1e8), you can be confident about the solution. If kappa is high, or if reducing the tolerance does not help, then you should consider revising the model because the current model might not be able to produce a reliable result.

Turning Scaling Off

If unscaled infeasibilities occur in the primal problem, it is recommended that you turn scaling off and solve the problem using the Dual Simplex method with the previous basis solution.

To turn scaling off:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, click the Advanced button.

  3. In the Solver Parameters window, change the Scale Algorithm Indicator parameter from 0 to – 1.

Optimality and Feasibility Tolerance

Adjusting the optimality or the feasibility tolerance can produce a better solution. Although increasing these tolerances could produce a better solution, lowering these tolerances could produce unwanted side effects such as instability.

The maximum reduced cost infeasibility identifies a value for the optimality tolerance that causes the solver to perform additional iterations. If a solve terminates with an optimal or infeasible solution, and the maximum reduced-cost infeasibility is only slightly smaller in absolute value than the optimality tolerance, solving the problem with a smaller optimality tolerance could result in an improvement in the objective function.

To change the optimality tolerance:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, click the Advanced button.

  3. In the Solver Parameters window, enter a value between 1e-9 and 1e-1 (=0.1) in the Reduced Cost Tolerance field.

The default is 1e-6.

The maximum bound infeasibility identifies the largest bound violation. This information could help determine the cause of infeasibility in a linear programming problem. If the largest bound violation exceeds the feasibility tolerance of the problem by only a small amount, you might get a feasible solution to the problem by increasing the feasibility tolerance.

To change the feasibility tolerance

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, click the Advanced button.

  3. In the Solver Parameters window, enter a value between 1e-9 and and 0.1 in the Feasibility Tolerance field.

The default is 1e-6.

The Scale Algorithm Indicator

The Scale Algorithm Indicator is a solver parameter that can improve model conditioning. Setting the scaling parameter helps if you have a combination of large and small coefficients in the constraint matrix. The Markowitz Pivot Tolerance instructs the solver to use a less tolerant pivoting scheme during the basis factorization. These parameters can reduce the round-off error on numerical problems that are not well constructed.

To set the level of scaling to aggressive:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, click the Advanced button.

  3. In the Solver Parameters window, enter 1 in the Scale Algorithm Indicator field.

Problems in which even minor changes in data result in major changes in solutions could improve with different scaling settings. Scaling attempts to fix linear programming problems by multiplying rows or columns by constants without changing the original logic of the problem. If your linear programming problem cannot remain feasible during a solve, you should try a different scaling setting.

Available settings for the Scale Algorithm Indicator are:

Value Meaning
–1 No scaling.
0 Equilibration scaling. This is the default.
1 Aggressive scaling.

Increasing the Markowitz Tolerance

The Markowitz tolerance controls the kinds of pivots permitted. Increasing the Markowitz tolerance can also provide a more optimal solution to complex linear programming.

To increase the Markowitz feasibility tolerance:

  1. From the Solve menu, select Configure.

  2. In the Solve Configuration window, click the Advanced button.

  3. In the Solver Parameters window, enter the maximum value, 0.999 in the Markowitz Pivot Tolerance field.

If the Markowitz tolerance level is set near its maximum value of 0.99999, iterations could be slower, but they are more stable.

Avoiding Bounds Larger than 1e9

If you avoid variable bounds larger than 1e9, a more optimal solution could be reached. Large bounds can cause large round-off errors, and finite bounds should always be as small as possible without compromising the meaning of the associated variable and constraints. Large upper bounds could also result in excessive memory use and cause difficulties during pre-solve. For very large bounds, consider using infinity; Max = *.

Linx.log File Settings

The first phase of a solve, pre-processing, simplifies the problem using the pre-solver and aggregator. In the second phase, the solver searches for a feasible solution. In the final phase, the solver searches for the optimal, feasible solution and writes solver log messages to the linx.log file. By default, the linx.log file is located in either the \bin directory or in the directory specified by the LINXLOGDIR environment variable. The amount of detail written to the linx.log from the solver can be specified using the Simplex Display Level parameter.

Available settings for the Simplex Display Level parameter are:

Value Meaning
0 No iteration messages until solution.
1 Iteration info after each refactoring (default).
2 Iteration info for each iteration.

The linx.log file contains solver iterations that include the current iteration number and either the current scaled infeasibility during the second phase or the objective function value during the final phase. Once the optimal solution has been found, the objective function value and solution time are displayed. The information in the linx.log file is useful for monitoring the rate of solver progress.

If a problem repeatedly becomes infeasible in the final phase of a solve, it could be caused by numerical difficulties. Slow progress during the second phase is often caused by similar numerical difficulties that are less obvious because feasibility is not determined as in the final phase. In both cases, increasing the Markowitz Pivot Tolerance to 0.99999 could help.

The Feasibility Tolerance specifies the degree to which a problem's basic variables could violate their bounds. Feasibility influences the selection of an optimal basis and can be set to a higher value when a problem is having difficulty maintaining feasibility during the final phase . If you find reports of infeasibility during optimization in the linx.log file, a small increase in the feasibility tolerance could improve performance. You could also decrease the tolerance level if there is any doubt that a solution is optimal. If the feasibility tolerance is set too low, the solver could mistakenly conclude that a problem is infeasible.