In the Network Optimization experiment a supply chain is described as a system of linear equations and inequalities, the variables of which are:
- Size of flows (defined in the Product Flows and Production tables)
- Size of storages (defined in Product Storages table)
- Network configuration
- Custom constraints and variables
The system looks for the optimal solution, which is the best combination of values of these variables, determined by the:
- Objective function, which by default maximizes profit as profit maximization = revenue — costs — … — penalties)
- Constraints set by the user, both standard and custom
Standard constraints on product flows, product storages, and production are set up in the respective tables. The value of each variable lies within the specified range [min, max], whose borders can be specified using the hard and soft constraints.
- If max > min and min >= 0, down penalty = up penalty = 0, then the size of the flow/storage will strictly lie within the defined [min, max] range.
- If fixed = true, then the size of the flow/storage will be equal to the amount specified in the Fixed Value column.
If no feasible solution can be found, then the user will be prompted to conduct a feasibility check, which is a search for constraints that do not allow the optimizer to get a result (for example, the demand cannot be satisfied due to the insufficient product flow or storage).
Penalties are an objective function member. They help you set the desired value ranges and priorities.
Example: the production flow did not exceed 300 units per day last year. The company managements wants it to be the same next year. If this condition is impossible to meet, penalties will show the figures by which the production capacity should be increased.
These penalties are set it in the Production table the following way:
The penalty amount in the tables is indicated for a product unit. production flow = 400, penalties = (400 — 300) * 100 = 10000
Example: if there is not enough storage in a DC for all the customers, it is more important for the company to satisfy the demand of the first customer.
This can be defined in the following way in the Demand table:
If max = min = 0, down penalty = up penalty = 0, then the flow / storage limits are not taken into account.
The soft constraints can also be defined by creating a linear expression with the named flow / stock or a custom variable created in the Custom Constraints table and adding it to the Objective Members table.
A solution will always be feasible when penalties are used, but it will not necessarily be cost-efficient (due to the paid penalties). This approach will allow us to find bottlenecks in the supply chain (for example, to understand why demand can't be satisfied).
Summarizing the above, let us see the example of setting the upper constraint for a flow:
|Up penalty = 0||Up Penalty ≠ 0|
|max ≠ 0||Hard constraint||Penalty|
|max = 0||No constraint||Penalty|
If you define flows / storages for a group of objects, constraints and penalties can be set for each element of the group ( Expand= enable) or for the entire group ( Expand = disable)*.
The defined record with the flow parameters will not be considered if at least one of the expanding toggle buttons (
Expand Products) is disabled in it.
If you require to keep the toggle button disabled for this record, you should duplicate it, enable the toggle button and make sure that no limit is set for the throughput (
Min Throughput, Max Throughput).
To avoid confusion, you can add one entry to create the flow / storage that will contain all nodes / all products, then separately define the required constraints, and lastly, specify the existing paths in the Paths table.
You can select the required node states in the Inclusion Type field of the DCs and Factories table:
- Include — the object is a part of the network
- Exclude — ALX does not take this object into account when searching for a solution
- Consider — the object can change its state (open / closed) during the modeled period no more than once
You can also set an additional limit on the number of objects a network can have. Create a record with a group of objects in Assets Constraints table, then specify the required minimum and maximum number of objects in the Min and Max cells respectively.
You can define your own constraints for custom variables created in the Custom Constraints table that have Name defined in their parent tables. ALX allows a user to specify logical and arithmetic expressions:
- Linear equations and inequalities in the Custom Constraints table
- If / Then conditional statements: in the Linear Ranges table, set the range of values of the checked expression and the range of values of the executed expression, and then add the corresponding logical condition to the Indicator Constraints
Some tasks can be formulated using both custom constrains and indicator constraints. The NO DC Minimum Storage Amount (with Indicator Constraints), illustrates the mechanism of using these tables in detail.
How can we improve this article?