LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
TransportSetupCostObjectiveTermBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Linq;
3using System.Threading;
4using System.Threading.Tasks;
5using LotSizingDataModel.Core.PhysicalModel;
6using LotSizingDataModel.Core.Relationships;
7using LotSizingDataModel.Instance;
10
12
13/// <summary>
14/// Adds item-specific transport setup costs.
15/// </summary>
18{
19 /// <summary>
20 /// Gets the objective-term family identifier.
21 /// </summary>
22 public override string TermFamilyId =>
23 "transportSetupCost";
24
25 /// <summary>
26 /// Determines whether transport setup costs are enabled.
27 /// </summary>
28 public override bool IsEnabled(
29 LotSizingInstance instance,
31 {
32 ArgumentNullException.ThrowIfNull(instance);
33 ArgumentNullException.ThrowIfNull(options);
34
35 return
36 options.IncludeTransport &&
38 }
39
40 /// <summary>
41 /// Builds transport setup-cost terms.
42 /// </summary>
43 protected override ValueTask BuildTermsAsync(
44 LotSizingInstance instance,
46 LinearExpressionBuilder expressionBuilder,
48 CancellationToken cancellationToken)
49 {
50 foreach (
51 TransportCharacteristic characteristic
52 in instance.SupplyChain.TransportCharacteristics)
53 {
54 if (characteristic.FixedSetupCost is null &&
55 characteristic.SetupTime is null)
56 {
57 continue;
58 }
59
60 TransportResource resource =
61 instance.SupplyChain.TransportResources
62 .First(
63 candidate =>
64 candidate.Id ==
65 characteristic.TransportResourceId);
66
67 foreach (
68 AssignedTransportLane lane
69 in instance.SupplyChain.GetTransportLanes(resource.Id))
70 {
71 for (
72 int period = 1;
73 period <= instance.PlanningHorizon;
74 period++)
75 {
76 cancellationToken.ThrowIfCancellationRequested();
77
79 context,
80 expressionBuilder,
81 CreateKey(
83 characteristic.ItemId,
84 resource.Id,
85 lane)
86 .Add(
88 period)
89 .Build(),
90 characteristic.FixedSetupCost?[period] ??
91 0.0);
92 }
93 }
94 }
95
96 return ValueTask.CompletedTask;
97 }
98
99
100 private static MathematicalDomainKeyBuilder CreateKey(
101 string category,
102 int itemId,
103 int resourceId,
104 LotSizingDataModel.Core.PhysicalModel.AssignedTransportLane lane)
105 {
106 var keyBuilder =
108 category)
109 .Add(
111 itemId)
112 .Add(
114 resourceId);
115
117 keyBuilder,
118 lane.Origin);
119
121 keyBuilder,
122 lane.Destination);
123
124 return keyBuilder;
125 }
126
127}
Provides a fluent builder for linear expressions.
Builds stable business-domain keys for mathematical variables and constraints.
MathematicalDomainKeyBuilder Add(string name, string value)
Adds a text segment.
Provides the shared state required while constructing a solver-independent mathematical model.
Creates canonical domain-key fragments shared by standard formulation builders and provides warehouse...
static MathematicalDomainKeyBuilder AddDestinationWarehouse(MathematicalDomainKeyBuilder builder, WarehouseReference warehouse)
Adds a destination warehouse reference.
static MathematicalDomainKeyBuilder AddOriginWarehouse(MathematicalDomainKeyBuilder builder, WarehouseReference warehouse)
Adds an origin warehouse reference.
Configures the standard solver-independent mixed-integer lot-sizing formulation.
Provides common validation and helper methods for one objective-term family of the standard lot-sizin...
static void AddCostTerm(MathematicalModelBuildContext context, LinearExpressionBuilder expressionBuilder, string domainKey, double coefficient)
Adds one variable cost term to the shared objective.
override ValueTask BuildTermsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, LinearExpressionBuilder expressionBuilder, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
Builds transport setup-cost terms.
override bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether transport setup costs are enabled.
Provides the canonical mathematical domain-key categories used to identify lot-sizing decision famili...
const string TransportSetup
Identifies transport setup decision variables.
Provides the canonical mathematical domain-key segment names used by lot-sizing variables and constra...
const string TransportResource
Transport-resource identifier segment.