1using LotSizingDataModel.Instance;
23 _variableBuilder = variableBuilder ??
throw new ArgumentNullException(nameof(variableBuilder));
24 _objectiveBuilder = objectiveBuilder ??
throw new ArgumentNullException(nameof(objectiveBuilder));
25 _constraintBuilder = constraintBuilder ??
throw new ArgumentNullException(nameof(constraintBuilder));
26 _options = options?.
Clone() ??
throw new ArgumentNullException(nameof(options));
27 _applicability = applicability ??
throw new ArgumentNullException(nameof(applicability));
28 _options.EnsureValid();
32 public override string Name =>
"GLSP macro/micro MILP formulation";
34 "Solver-independent single-resource GLSP with variable-length micro-periods, exact setup states and sequence-dependent changeovers.";
35 public override bool CanBuild(LotSizingInstance instance) => _applicability.CanBuild(instance);
38 string.IsNullOrWhiteSpace(instance.Name) ?
FormulationId : $
"{instance.Name.Trim()} - {FormulationId}";
41 LotSizingInstance instance,
43 CancellationToken cancellationToken) =>
44 _variableBuilder.BuildAsync(instance, context, _options, cancellationToken);
47 LotSizingInstance instance,
49 CancellationToken cancellationToken) =>
50 _objectiveBuilder.BuildAsync(instance, context, _options, cancellationToken);
53 LotSizingInstance instance,
55 CancellationToken cancellationToken) =>
56 _constraintBuilder.BuildAsync(instance, context, _options, cancellationToken);
Provides the shared state required while constructing a solver-independent mathematical model.