LotSizingDataModel.Instance 2.0.1
Lot-sizing instance representation, descriptors and problem characterization.
Loading...
Searching...
No Matches
LotSizingProblemFeatures.cs
Go to the documentation of this file.
1using System;
2using System.Xml.Serialization;
3using LotSizingDataModel.Core.Common;
4using LotSizingDataModel.Core.DecisionModel.Objectives;
5using LotSizingDataModel.Core.DecisionModel.Scheduling;
7
9
10/// <summary>
11/// Describes the factual structural and modeling features
12/// detected in a lot-sizing supply-chain instance.
13/// </summary>
14/// <remarks>
15/// This class does not assign a known problem-family code.
16///
17/// Its properties form the input of the automatic
18/// lot-sizing problem classifier.
19/// </remarks>
20[Serializable]
21[XmlType(TypeName = "lotSizingProblemFeatures")]
22public sealed partial class LotSizingProblemFeatures : ModelObject
23{
24 private int _itemCount;
25 private int _planningHorizon;
26 private int _plantCount;
27 private int _workCenterCount;
28 private int _warehouseCount;
29 private int _supplierCount;
30 private int _distributionCenterCount;
31 private int _transportResourceCount;
32
33 private int _productStructureRelationshipCount;
34 private int _maximumProductStructureDepth;
35
36 private ProductStructureType _productStructureType =
38
39 private bool _hasDemand;
40 private bool _hasDeterministicDemand;
41 private bool _hasTimeVaryingDemand;
42
43 private bool _hasInitialInventory;
44 private bool _hasSafetyStockRequirements;
45 private bool _hasBacklogging;
46 private bool _hasLostSales;
47
48 private bool _hasProduction;
49 private bool _hasProductionCapacityConstraints;
50 private bool _hasSharedProductionCapacity;
51 private bool _hasTimeVaryingProductionCapacity;
52
53 private bool _hasSetupCosts;
54 private bool _hasSetupTimes;
55 private bool _hasStartUpCosts;
56 private bool _hasStartUpTimes;
57
58 private bool _hasProductionLeadTimes;
59 private bool _hasMinimumLotSizes;
60 private bool _hasMaximumLotSizes;
61 private bool _hasLotSizeMultiples;
62 private bool _hasGroupingConstraints;
63
64 private bool _hasAdditionalProductionCapacity;
65 private bool _hasAdditionalWarehouseCapacity;
66 private bool _hasAdditionalTransportCapacity;
67
68 private bool _hasPurchasing;
69 private bool _hasSupplierCapacityConstraints;
70 private bool _hasSupplierLeadTimes;
71
72 private bool _hasTransportation;
73 private bool _hasTransportCapacityConstraints;
74 private bool _hasTransportLeadTimes;
75
76 private bool _hasDistribution;
77 private bool _hasWarehouseCapacityConstraints;
78
79 private bool _isMultiSite;
80 private bool _hasFinancialConstraints;
81 private bool _hasMultipleObjectives;
82 private int _objectiveCriterionCount = 1;
83 private OptimizationObjectiveKind _primaryObjectiveKind =
84 OptimizationObjectiveKind.Economic;
85 private ObjectiveAggregationMode _objectiveAggregationMode =
87 private bool _hasIntegratedScheduling;
88 private SchedulingBucketMode _schedulingBucketMode;
89 private bool _hasInitialSetupState;
90 private bool _hasSetupCarryOver;
91 private SetupCarryOverPolicy _setupCarryOverPolicy;
92 private bool _hasSequenceDependentChangeoverTimes;
93 private bool _hasSequenceDependentChangeoverCosts;
94 private bool _hasMaximumSetupCountConstraints;
95 private SmallBucketProductionMode _smallBucketProductionMode;
96 private int _schedulingResourceCount;
97 private bool _hasMaximumProducedItemCountConstraint;
98 private int _maximumProducedItemCountPerBucket;
99 private int _maximumSetupTransitionsPerBucket;
100 private MicroPeriodLengthMode _microPeriodLengthMode;
101 private MicroPeriodAssignmentMode _microPeriodAssignmentMode;
102 private bool _hasExplicitMicroPeriodGrid;
103 private int _totalMicroPeriodCount;
104 private int _maximumMicroPeriodCountPerMacroPeriod;
105 private bool _hasVariableMicroPeriodCount;
106
107 /// <summary>
108 /// Initializes an empty lot-sizing problem-feature profile.
109 /// </summary>
111 {
112 }
113
114 /// <summary>
115 /// Gets or sets the number of items in the instance.
116 /// </summary>
117 [XmlAttribute("itemCount")]
118 public int ItemCount
119 {
120 get => _itemCount;
121 set => SetNonNegativeCount(
122 ref _itemCount,
123 value,
124 nameof(ItemCount));
125 }
126
127 /// <summary>
128 /// Gets or sets the number of planning periods.
129 /// </summary>
130 [XmlAttribute("planningHorizon")]
132 {
133 get => _planningHorizon;
134 set => SetNonNegativeCount(
135 ref _planningHorizon,
136 value,
137 nameof(PlanningHorizon));
138 }
139
140 /// <summary>
141 /// Gets or sets the number of production plants.
142 /// </summary>
143 [XmlAttribute("plantCount")]
144 public int PlantCount
145 {
146 get => _plantCount;
147 set => SetNonNegativeCount(
148 ref _plantCount,
149 value,
150 nameof(PlantCount));
151 }
152
153 /// <summary>
154 /// Gets or sets the total number of work centers.
155 /// </summary>
156 [XmlAttribute("workCenterCount")]
158 {
159 get => _workCenterCount;
160 set => SetNonNegativeCount(
161 ref _workCenterCount,
162 value,
163 nameof(WorkCenterCount));
164 }
165
166 /// <summary>
167 /// Gets or sets the total number of warehouses.
168 /// </summary>
169 /// <remarks>
170 /// This count may include plant warehouses and
171 /// standalone warehouses.
172 /// </remarks>
173 [XmlAttribute("warehouseCount")]
174 public int WarehouseCount
175 {
176 get => _warehouseCount;
177 set => SetNonNegativeCount(
178 ref _warehouseCount,
179 value,
180 nameof(WarehouseCount));
181 }
182
183 /// <summary>
184 /// Gets or sets the number of suppliers.
185 /// </summary>
186 [XmlAttribute("supplierCount")]
187 public int SupplierCount
188 {
189 get => _supplierCount;
190 set => SetNonNegativeCount(
191 ref _supplierCount,
192 value,
193 nameof(SupplierCount));
194 }
195
196 /// <summary>
197 /// Gets or sets the number of distribution centers.
198 /// </summary>
199 [XmlAttribute("distributionCenterCount")]
201 {
202 get => _distributionCenterCount;
203 set => SetNonNegativeCount(
204 ref _distributionCenterCount,
205 value,
207 }
208
209 /// <summary>
210 /// Gets or sets the number of transport resources.
211 /// </summary>
212 [XmlAttribute("transportResourceCount")]
214 {
215 get => _transportResourceCount;
216 set => SetNonNegativeCount(
217 ref _transportResourceCount,
218 value,
219 nameof(TransportResourceCount));
220 }
221
222 /// <summary>
223 /// Gets or sets the number of distinct bill-of-materials
224 /// relationships.
225 /// </summary>
226 [XmlAttribute("productStructureRelationshipCount")]
228 {
229 get => _productStructureRelationshipCount;
230 set => SetNonNegativeCount(
231 ref _productStructureRelationshipCount,
232 value,
234 }
235
236 /// <summary>
237 /// Gets or sets the maximum number of bill-of-materials
238 /// relationships on a directed product-structure path.
239 /// </summary>
240 [XmlAttribute("maximumProductStructureDepth")]
242 {
243 get => _maximumProductStructureDepth;
244 set => SetNonNegativeCount(
245 ref _maximumProductStructureDepth,
246 value,
248 }
249
250 /// <summary>
251 /// Gets or sets the detected product-structure category.
252 /// </summary>
253 [XmlAttribute("productStructureType")]
255 {
256 get => _productStructureType;
257 set
258 {
259 if (SetProperty(
260 ref _productStructureType,
261 value))
262 {
263 NotifyDerivedProperties();
264 }
265 }
266 }
267
268 /// <summary>
269 /// Gets or sets a value indicating whether the instance
270 /// contains demand data.
271 /// </summary>
272 [XmlAttribute("hasDemand")]
273 public bool HasDemand
274 {
275 get => _hasDemand;
276 set
277 {
278 if (SetProperty(
279 ref _hasDemand,
280 value))
281 {
282 NotifyDerivedProperties();
283 }
284 }
285 }
286
287 /// <summary>
288 /// Gets or sets a value indicating whether demand
289 /// is deterministic.
290 /// </summary>
291 [XmlAttribute("hasDeterministicDemand")]
293 {
294 get => _hasDeterministicDemand;
295 set => SetProperty(
296 ref _hasDeterministicDemand,
297 value);
298 }
299
300 /// <summary>
301 /// Gets or sets a value indicating whether demand
302 /// varies between planning periods.
303 /// </summary>
304 [XmlAttribute("hasTimeVaryingDemand")]
306 {
307 get => _hasTimeVaryingDemand;
308 set
309 {
310 if (SetProperty(
311 ref _hasTimeVaryingDemand,
312 value))
313 {
314 NotifyDerivedProperties();
315 }
316 }
317 }
318
319 /// <summary>
320 /// Gets or sets a value indicating whether at least one
321 /// positive initial-inventory value exists.
322 /// </summary>
323 [XmlAttribute("hasInitialInventory")]
325 {
326 get => _hasInitialInventory;
327 set => SetProperty(
328 ref _hasInitialInventory,
329 value);
330 }
331
332 /// <summary>
333 /// Gets or sets a value indicating whether the instance
334 /// contains safety-stock requirements.
335 /// </summary>
336 [XmlAttribute("hasSafetyStockRequirements")]
338 {
339 get => _hasSafetyStockRequirements;
340 set => SetProperty(
341 ref _hasSafetyStockRequirements,
342 value);
343 }
344
345 /// <summary>
346 /// Gets or sets a value indicating whether unmet demand
347 /// may be carried to later periods.
348 /// </summary>
349 [XmlAttribute("hasBacklogging")]
350 public bool HasBacklogging
351 {
352 get => _hasBacklogging;
353 set => SetProperty(
354 ref _hasBacklogging,
355 value);
356 }
357
358 /// <summary>
359 /// Gets or sets a value indicating whether demand may
360 /// be permanently lost.
361 /// </summary>
362 [XmlAttribute("hasLostSales")]
363 public bool HasLostSales
364 {
365 get => _hasLostSales;
366 set => SetProperty(
367 ref _hasLostSales,
368 value);
369 }
370
371 /// <summary>
372 /// Gets or sets a value indicating whether the instance
373 /// contains production decisions.
374 /// </summary>
375 [XmlAttribute("hasProduction")]
376 public bool HasProduction
377 {
378 get => _hasProduction;
379 set => SetProperty(
380 ref _hasProduction,
381 value);
382 }
383
384 /// <summary>
385 /// Gets or sets a value indicating whether production
386 /// is subject to capacity constraints.
387 /// </summary>
388 [XmlAttribute("hasProductionCapacityConstraints")]
390 {
391 get => _hasProductionCapacityConstraints;
392 set
393 {
394 if (SetProperty(
395 ref _hasProductionCapacityConstraints,
396 value))
397 {
398 NotifyDerivedProperties();
399 }
400 }
401 }
402
403 /// <summary>
404 /// Gets or sets a value indicating whether several
405 /// production activities share at least one capacity.
406 /// </summary>
407 [XmlAttribute("hasSharedProductionCapacity")]
409 {
410 get => _hasSharedProductionCapacity;
411 set => SetProperty(
412 ref _hasSharedProductionCapacity,
413 value);
414 }
415
416 /// <summary>
417 /// Gets or sets a value indicating whether at least one
418 /// production capacity varies between periods.
419 /// </summary>
420 [XmlAttribute("hasTimeVaryingProductionCapacity")]
422 {
423 get => _hasTimeVaryingProductionCapacity;
424 set
425 {
426 if (SetProperty(
427 ref _hasTimeVaryingProductionCapacity,
428 value))
429 {
430 NotifyDerivedProperties();
431 }
432 }
433 }
434
435 /// <summary>
436 /// Gets or sets a value indicating whether at least one
437 /// setup or fixed production cost exists.
438 /// </summary>
439 [XmlAttribute("hasSetupCosts")]
440 public bool HasSetupCosts
441 {
442 get => _hasSetupCosts;
443 set => SetProperty(
444 ref _hasSetupCosts,
445 value);
446 }
447
448 /// <summary>
449 /// Gets or sets a value indicating whether setups
450 /// consume production-resource capacity.
451 /// </summary>
452 [XmlAttribute("hasSetupTimes")]
453 public bool HasSetupTimes
454 {
455 get => _hasSetupTimes;
456 set => SetProperty(
457 ref _hasSetupTimes,
458 value);
459 }
460
461 /// <summary>
462 /// Gets or sets a value indicating whether the model
463 /// contains start-up costs distinct from setup costs.
464 /// </summary>
465 [XmlAttribute("hasStartUpCosts")]
466 public bool HasStartUpCosts
467 {
468 get => _hasStartUpCosts;
469 set => SetProperty(
470 ref _hasStartUpCosts,
471 value);
472 }
473
474 /// <summary>
475 /// Gets or sets a value indicating whether the model
476 /// contains start-up times distinct from setup times.
477 /// </summary>
478 [XmlAttribute("hasStartUpTimes")]
479 public bool HasStartUpTimes
480 {
481 get => _hasStartUpTimes;
482 set => SetProperty(
483 ref _hasStartUpTimes,
484 value);
485 }
486
487 /// <summary>
488 /// Gets or sets a value indicating whether production
489 /// lead times are represented.
490 /// </summary>
491 [XmlAttribute("hasProductionLeadTimes")]
493 {
494 get => _hasProductionLeadTimes;
495 set => SetProperty(
496 ref _hasProductionLeadTimes,
497 value);
498 }
499
500 /// <summary>
501 /// Gets or sets a value indicating whether at least one
502 /// positive minimum lot size is imposed.
503 /// </summary>
504 [XmlAttribute("hasMinimumLotSizes")]
506 {
507 get => _hasMinimumLotSizes;
508 set
509 {
510 if (SetProperty(
511 ref _hasMinimumLotSizes,
512 value))
513 {
514 NotifyDerivedProperties();
515 }
516 }
517 }
518
519 /// <summary>
520 /// Gets or sets a value indicating whether at least one
521 /// explicit maximum lot size is imposed.
522 /// </summary>
523 [XmlAttribute("hasMaximumLotSizes")]
525 {
526 get => _hasMaximumLotSizes;
527 set
528 {
529 if (SetProperty(
530 ref _hasMaximumLotSizes,
531 value))
532 {
533 NotifyDerivedProperties();
534 }
535 }
536 }
537
538 /// <summary>
539 /// Gets or sets a value indicating whether at least one
540 /// lot size must be an integer multiple of a base size.
541 /// </summary>
542 [XmlAttribute("hasLotSizeMultiples")]
544 {
545 get => _hasLotSizeMultiples;
546 set
547 {
548 if (SetProperty(
549 ref _hasLotSizeMultiples,
550 value))
551 {
552 NotifyDerivedProperties();
553 }
554 }
555 }
556
557 /// <summary>
558 /// Gets or sets a value indicating whether additional
559 /// production capacity can be acquired or activated.
560 /// </summary>
561 [XmlAttribute("hasAdditionalProductionCapacity")]
563 {
564 get => _hasAdditionalProductionCapacity;
565 set => SetProperty(
566 ref _hasAdditionalProductionCapacity,
567 value);
568 }
569
570 /// <summary>
571 /// Gets or sets a value indicating whether additional
572 /// warehouse capacity can be acquired or activated.
573 /// </summary>
574 [XmlAttribute("hasAdditionalWarehouseCapacity")]
576 {
577 get => _hasAdditionalWarehouseCapacity;
578 set => SetProperty(
579 ref _hasAdditionalWarehouseCapacity,
580 value);
581 }
582
583 /// <summary>
584 /// Gets or sets a value indicating whether additional
585 /// transport capacity can be acquired or activated.
586 /// </summary>
587 [XmlAttribute("hasAdditionalTransportCapacity")]
589 {
590 get => _hasAdditionalTransportCapacity;
591 set => SetProperty(
592 ref _hasAdditionalTransportCapacity,
593 value);
594 }
595
596 /// <summary>
597 /// Gets or sets a value indicating whether external
598 /// purchasing decisions are represented.
599 /// </summary>
600 [XmlAttribute("hasPurchasing")]
601 public bool HasPurchasing
602 {
603 get => _hasPurchasing;
604 set
605 {
606 if (SetProperty(
607 ref _hasPurchasing,
608 value))
609 {
610 NotifyDerivedProperties();
611 }
612 }
613 }
614
615 /// <summary>
616 /// Gets or sets a value indicating whether suppliers
617 /// are subject to capacity constraints.
618 /// </summary>
619 [XmlAttribute("hasSupplierCapacityConstraints")]
621 {
622 get => _hasSupplierCapacityConstraints;
623 set => SetProperty(
624 ref _hasSupplierCapacityConstraints,
625 value);
626 }
627
628 /// <summary>
629 /// Gets or sets a value indicating whether supplier
630 /// delivery lead times are represented.
631 /// </summary>
632 [XmlAttribute("hasSupplierLeadTimes")]
634 {
635 get => _hasSupplierLeadTimes;
636 set => SetProperty(
637 ref _hasSupplierLeadTimes,
638 value);
639 }
640
641 /// <summary>
642 /// Gets or sets a value indicating whether transportation
643 /// decisions are represented.
644 /// </summary>
645 [XmlAttribute("hasTransportation")]
647 {
648 get => _hasTransportation;
649 set
650 {
651 if (SetProperty(
652 ref _hasTransportation,
653 value))
654 {
655 NotifyDerivedProperties();
656 }
657 }
658 }
659
660 /// <summary>
661 /// Gets or sets a value indicating whether transportation
662 /// is subject to capacity constraints.
663 /// </summary>
664 [XmlAttribute("hasTransportCapacityConstraints")]
666 {
667 get => _hasTransportCapacityConstraints;
668 set => SetProperty(
669 ref _hasTransportCapacityConstraints,
670 value);
671 }
672
673 /// <summary>
674 /// Gets or sets a value indicating whether transport
675 /// lead times are represented.
676 /// </summary>
677 [XmlAttribute("hasTransportLeadTimes")]
679 {
680 get => _hasTransportLeadTimes;
681 set => SetProperty(
682 ref _hasTransportLeadTimes,
683 value);
684 }
685
686 /// <summary>
687 /// Gets or sets a value indicating whether distribution
688 /// decisions are represented.
689 /// </summary>
690 [XmlAttribute("hasDistribution")]
691 public bool HasDistribution
692 {
693 get => _hasDistribution;
694 set
695 {
696 if (SetProperty(
697 ref _hasDistribution,
698 value))
699 {
700 NotifyDerivedProperties();
701 }
702 }
703 }
704
705 /// <summary>
706 /// Gets or sets a value indicating whether storage
707 /// is subject to warehouse-capacity constraints.
708 /// </summary>
709 [XmlAttribute("hasWarehouseCapacityConstraints")]
711 {
712 get => _hasWarehouseCapacityConstraints;
713 set => SetProperty(
714 ref _hasWarehouseCapacityConstraints,
715 value);
716 }
717
718 /// <summary>
719 /// Gets or sets a value indicating whether the instance
720 /// contains several physical decision sites.
721 /// </summary>
722 [XmlAttribute("isMultiSite")]
723 public bool IsMultiSite
724 {
725 get => _isMultiSite;
726 set
727 {
728 if (SetProperty(
729 ref _isMultiSite,
730 value))
731 {
732 NotifyDerivedProperties();
733 }
734 }
735 }
736
737 /// <summary>
738 /// Gets or sets a value indicating whether explicit
739 /// financial constraints are represented.
740 /// </summary>
741 [XmlAttribute("hasFinancialConstraints")]
743 {
744 get => _hasFinancialConstraints;
745 set => SetProperty(
746 ref _hasFinancialConstraints,
747 value);
748 }
749
750 /// <summary>
751 /// Gets or sets a value indicating whether several
752 /// objective criteria are represented.
753 /// </summary>
754 [XmlAttribute("hasMultipleObjectives")]
756 {
757 get => _hasMultipleObjectives;
758 set => SetProperty(
759 ref _hasMultipleObjectives,
760 value);
761 }
762
763 /// <summary>
764 /// Gets a value indicating whether the instance contains
765 /// exactly one item.
766 /// </summary>
767 [XmlIgnore]
768 public bool IsSingleItem =>
769 ItemCount == 1;
770
771 /// <summary>
772 /// Gets a value indicating whether the instance contains
773 /// several items.
774 /// </summary>
775 [XmlIgnore]
776 public bool IsMultiItem =>
777 ItemCount > 1;
778
779 /// <summary>
780 /// Gets a value indicating whether the planning horizon
781 /// contains exactly one period.
782 /// </summary>
783 [XmlIgnore]
784 public bool IsSinglePeriod =>
785 PlanningHorizon == 1;
786
787 /// <summary>
788 /// Gets a value indicating whether the planning horizon
789 /// contains several periods.
790 /// </summary>
791 [XmlIgnore]
792 public bool IsMultiPeriod =>
793 PlanningHorizon > 1;
794
795 /// <summary>
796 /// Gets a value indicating whether at least one
797 /// bill-of-materials relationship exists.
798 /// </summary>
799 [XmlIgnore]
800 public bool HasProductStructure =>
802
803 /// <summary>
804 /// Gets a value indicating whether the items are
805 /// independent from a bill-of-materials perspective.
806 /// </summary>
807 /// <remarks>
808 /// In classical lot-sizing terminology, this corresponds
809 /// to a single-level problem.
810 /// </remarks>
811 [XmlIgnore]
812 public bool IsSingleLevel =>
814
815 /// <summary>
816 /// Gets a value indicating whether the instance contains
817 /// component-to-parent relationships.
818 /// </summary>
819 /// <remarks>
820 /// Any bill-of-materials dependency makes the lot-sizing
821 /// problem multi-level.
822 /// </remarks>
823 [XmlIgnore]
824 public bool IsMultiLevel =>
826
827 /// <summary>
828 /// Gets a value indicating whether production capacity
829 /// is constant over time.
830 /// </summary>
831 [XmlIgnore]
835
836 /// <summary>
837 /// Gets a value indicating whether at least one
838 /// capacity family constrains the problem.
839 /// </summary>
840 [XmlIgnore]
841 public bool IsCapacitated =>
846
847 /// <summary>
848 /// Gets a value indicating whether at least one special
849 /// lot-size restriction is present.
850 /// </summary>
851 [XmlIgnore]
856
857 /// <summary>
858 /// Gets a value indicating whether at least one form
859 /// of additional capacity is available.
860 /// </summary>
861 [XmlIgnore]
866
867 /// <summary>
868 /// Gets a value indicating whether the problem contains
869 /// purchasing, transport or distribution decisions.
870 /// </summary>
871 [XmlIgnore]
876
877 /// <summary>
878 /// Gets a value indicating whether demand is constant
879 /// across periods.
880 /// </summary>
881 [XmlIgnore]
882 public bool HasStationaryDemand =>
883 HasDemand &&
885
886 /// <summary>
887 /// Gets a value indicating whether the extracted feature
888 /// profile contains the minimum structural information
889 /// needed by the classifier.
890 /// </summary>
891 [XmlIgnore]
892 public bool IsStructurallyUsable =>
893 ItemCount > 0 &&
894 PlanningHorizon > 0 &&
896 ProductStructureType.Unknown;
897
898 /// <inheritdoc/>
899 public override string ToString()
900 {
901 string levelDescription =
903 ? "multi-level"
904 : "single-level";
905
906 string capacityDescription =
908 ? "capacitated"
909 : "uncapacitated";
910
911 return
912 $"{ItemCount} item(s), " +
913 $"{PlanningHorizon} period(s), " +
914 $"{levelDescription}, " +
915 $"{capacityDescription}, " +
916 $"{ProductStructureType}";
917 }
918
919 private void SetNonNegativeCount(
920 ref int storage,
921 int value,
922 string propertyName)
923 {
924 if (value < 0)
925 {
926 throw new ArgumentOutOfRangeException(
927 propertyName,
928 value,
929 "The value cannot be negative.");
930 }
931
932 if (SetProperty(
933 ref storage,
934 value,
935 propertyName))
936 {
937 NotifyDerivedProperties();
938 }
939 }
940
941 /// <summary>Gets or sets the number of enabled objective criteria.</summary>
942 [XmlAttribute("objectiveCriterionCount")]
944 {
945 get => _objectiveCriterionCount;
946 set => SetNonNegativeCount(
947 ref _objectiveCriterionCount,
948 value,
950 }
951
952 [XmlAttribute("primaryObjectiveKind")]
953 public OptimizationObjectiveKind PrimaryObjectiveKind
954 {
955 get => _primaryObjectiveKind;
956 set => SetProperty(
957 ref _primaryObjectiveKind,
958 value);
959 }
960
961 [XmlAttribute("objectiveAggregationMode")]
963 {
964 get => _objectiveAggregationMode;
965 set => SetProperty(
966 ref _objectiveAggregationMode,
967 value);
968 }
969
970 [XmlAttribute("hasIntegratedScheduling")]
972 {
973 get => _hasIntegratedScheduling;
974 set => SetProperty(ref _hasIntegratedScheduling, value);
975 }
976
977 [XmlAttribute("schedulingBucketMode")]
979 {
980 get => _schedulingBucketMode;
981 set => SetProperty(ref _schedulingBucketMode, value);
982 }
983
984 [XmlAttribute("hasInitialSetupState")]
986 {
987 get => _hasInitialSetupState;
988 set => SetProperty(ref _hasInitialSetupState, value);
989 }
990
991 [XmlAttribute("hasSetupCarryOver")]
993 {
994 get => _hasSetupCarryOver;
995 set => SetProperty(ref _hasSetupCarryOver, value);
996 }
997
998 [XmlAttribute("hasSequenceDependentChangeoverTimes")]
1000 {
1001 get => _hasSequenceDependentChangeoverTimes;
1002 set => SetProperty(
1003 ref _hasSequenceDependentChangeoverTimes,
1004 value);
1005 }
1006
1007 [XmlAttribute("hasSequenceDependentChangeoverCosts")]
1009 {
1010 get => _hasSequenceDependentChangeoverCosts;
1011 set => SetProperty(
1012 ref _hasSequenceDependentChangeoverCosts,
1013 value);
1014 }
1015
1016 [XmlAttribute("hasMaximumSetupCountConstraints")]
1018 {
1019 get => _hasMaximumSetupCountConstraints;
1020 set => SetProperty(
1021 ref _hasMaximumSetupCountConstraints,
1022 value);
1023 }
1024
1025 [XmlAttribute("smallBucketProductionMode")]
1027 {
1028 get => _smallBucketProductionMode;
1029 set => SetProperty(ref _smallBucketProductionMode, value);
1030 }
1031
1032 [XmlAttribute("schedulingResourceCount")]
1034 {
1035 get => _schedulingResourceCount;
1036 set => SetNonNegativeCount(
1037 ref _schedulingResourceCount,
1038 value,
1039 nameof(SchedulingResourceCount));
1040 }
1041
1042 [XmlAttribute("hasMaximumProducedItemCountConstraint")]
1044 {
1045 get => _hasMaximumProducedItemCountConstraint;
1046 set => SetProperty(
1047 ref _hasMaximumProducedItemCountConstraint,
1048 value);
1049 }
1050
1051 [XmlAttribute("maximumProducedItemCountPerBucket")]
1053 {
1054 get => _maximumProducedItemCountPerBucket;
1055 set => SetNonNegativeCount(
1056 ref _maximumProducedItemCountPerBucket,
1057 value,
1059 }
1060
1061 [XmlAttribute("maximumSetupTransitionsPerBucket")]
1063 {
1064 get => _maximumSetupTransitionsPerBucket;
1065 set => SetNonNegativeCount(
1066 ref _maximumSetupTransitionsPerBucket,
1067 value,
1069 }
1070
1071 [XmlAttribute("microPeriodLengthMode")]
1073 {
1074 get => _microPeriodLengthMode;
1075 set => SetProperty(ref _microPeriodLengthMode, value);
1076 }
1077
1078 [XmlAttribute("microPeriodAssignmentMode")]
1080 {
1081 get => _microPeriodAssignmentMode;
1082 set => SetProperty(ref _microPeriodAssignmentMode, value);
1083 }
1084
1085 [XmlAttribute("hasExplicitMicroPeriodGrid")]
1087 {
1088 get => _hasExplicitMicroPeriodGrid;
1089 set => SetProperty(ref _hasExplicitMicroPeriodGrid, value);
1090 }
1091
1092 [XmlAttribute("totalMicroPeriodCount")]
1094 {
1095 get => _totalMicroPeriodCount;
1096 set => SetNonNegativeCount(ref _totalMicroPeriodCount, value, nameof(TotalMicroPeriodCount));
1097 }
1098
1099 [XmlAttribute("maximumMicroPeriodCountPerMacroPeriod")]
1101 {
1102 get => _maximumMicroPeriodCountPerMacroPeriod;
1103 set => SetNonNegativeCount(ref _maximumMicroPeriodCountPerMacroPeriod, value, nameof(MaximumMicroPeriodCountPerMacroPeriod));
1104 }
1105
1106 [XmlAttribute("hasVariableMicroPeriodCount")]
1108 {
1109 get => _hasVariableMicroPeriodCount;
1110 set => SetProperty(ref _hasVariableMicroPeriodCount, value);
1111 }
1112
1113 [XmlAttribute("hasGroupingConstraints")]
1115 {
1116 get => _hasGroupingConstraints;
1117 set => SetProperty(ref _hasGroupingConstraints, value);
1118 }
1119
1120 [XmlAttribute("setupCarryOverPolicy")]
1122 {
1123 get => _setupCarryOverPolicy;
1124 set => SetProperty(ref _setupCarryOverPolicy, value);
1125 }
1126
1127 private void NotifyDerivedProperties()
1128 {
1129 OnPropertyChanged(
1130 nameof(IsSingleItem));
1131
1132 OnPropertyChanged(
1133 nameof(IsMultiItem));
1134
1135 OnPropertyChanged(
1136 nameof(IsSinglePeriod));
1137
1138 OnPropertyChanged(
1139 nameof(IsMultiPeriod));
1140
1141 OnPropertyChanged(
1142 nameof(HasProductStructure));
1143
1144 OnPropertyChanged(
1145 nameof(IsSingleLevel));
1146
1147 OnPropertyChanged(
1148 nameof(IsMultiLevel));
1149
1150 OnPropertyChanged(
1152
1153 OnPropertyChanged(
1154 nameof(IsCapacitated));
1155
1156 OnPropertyChanged(
1157 nameof(HasLotSizeRestrictions));
1158
1159 OnPropertyChanged(
1160 nameof(HasAdditionalCapacity));
1161
1162 OnPropertyChanged(
1164
1165 OnPropertyChanged(
1166 nameof(HasStationaryDemand));
1167
1168 OnPropertyChanged(
1169 nameof(IsStructurallyUsable));
1170 }
1171}
bool HasDistribution
Gets or sets a value indicating whether distribution decisions are represented.
bool HasDemand
Gets or sets a value indicating whether the instance contains demand data.
bool HasMultipleObjectives
Gets or sets a value indicating whether several objective criteria are represented.
bool HasFinancialConstraints
Gets or sets a value indicating whether explicit financial constraints are represented.
bool HasProductionLeadTimes
Gets or sets a value indicating whether production lead times are represented.
bool HasBacklogging
Gets or sets a value indicating whether unmet demand may be carried to later periods.
bool HasTransportCapacityConstraints
Gets or sets a value indicating whether transportation is subject to capacity constraints.
bool IsStructurallyUsable
Gets a value indicating whether the extracted feature profile contains the minimum structural informa...
bool HasTransportation
Gets or sets a value indicating whether transportation decisions are represented.
bool HasSupplierCapacityConstraints
Gets or sets a value indicating whether suppliers are subject to capacity constraints.
bool IsSingleLevel
Gets a value indicating whether the items are independent from a bill-of-materials perspective.
int ItemCount
Gets or sets the number of items in the instance.
bool IsMultiLevel
Gets a value indicating whether the instance contains component-to-parent relationships.
bool HasMaximumLotSizes
Gets or sets a value indicating whether at least one explicit maximum lot size is imposed.
bool IsSingleItem
Gets a value indicating whether the instance contains exactly one item.
bool IsCapacitated
Gets a value indicating whether at least one capacity family constrains the problem.
bool HasMinimumLotSizes
Gets or sets a value indicating whether at least one positive minimum lot size is imposed.
int DistributionCenterCount
Gets or sets the number of distribution centers.
bool HasStartUpCosts
Gets or sets a value indicating whether the model contains start-up costs distinct from setup costs.
bool HasLotSizeMultiples
Gets or sets a value indicating whether at least one lot size must be an integer multiple of a base s...
bool HasStartUpTimes
Gets or sets a value indicating whether the model contains start-up times distinct from setup times.
bool IsMultiPeriod
Gets a value indicating whether the planning horizon contains several periods.
bool HasInitialInventory
Gets or sets a value indicating whether at least one positive initial-inventory value exists.
bool HasProduction
Gets or sets a value indicating whether the instance contains production decisions.
bool IsMultiItem
Gets a value indicating whether the instance contains several items.
bool HasAdditionalTransportCapacity
Gets or sets a value indicating whether additional transport capacity can be acquired or activated.
bool HasStationaryDemand
Gets a value indicating whether demand is constant across periods.
bool HasSupplierLeadTimes
Gets or sets a value indicating whether supplier delivery lead times are represented.
bool HasSetupTimes
Gets or sets a value indicating whether setups consume production-resource capacity.
bool IsSinglePeriod
Gets a value indicating whether the planning horizon contains exactly one period.
bool HasSupplyChainNetworkDecisions
Gets a value indicating whether the problem contains purchasing, transport or distribution decisions.
LotSizingProblemFeatures()
Initializes an empty lot-sizing problem-feature profile.
bool HasLostSales
Gets or sets a value indicating whether demand may be permanently lost.
bool HasWarehouseCapacityConstraints
Gets or sets a value indicating whether storage is subject to warehouse-capacity constraints.
bool HasConstantProductionCapacity
Gets a value indicating whether production capacity is constant over time.
bool HasSetupCosts
Gets or sets a value indicating whether at least one setup or fixed production cost exists.
int TransportResourceCount
Gets or sets the number of transport resources.
ProductStructureType ProductStructureType
Gets or sets the detected product-structure category.
bool HasAdditionalProductionCapacity
Gets or sets a value indicating whether additional production capacity can be acquired or activated.
bool HasProductStructure
Gets a value indicating whether at least one bill-of-materials relationship exists.
bool HasSharedProductionCapacity
Gets or sets a value indicating whether several production activities share at least one capacity.
int WorkCenterCount
Gets or sets the total number of work centers.
bool IsMultiSite
Gets or sets a value indicating whether the instance contains several physical decision sites.
int ProductStructureRelationshipCount
Gets or sets the number of distinct bill-of-materials relationships.
int ObjectiveCriterionCount
Gets or sets the number of enabled objective criteria.
bool HasAdditionalCapacity
Gets a value indicating whether at least one form of additional capacity is available.
bool HasAdditionalWarehouseCapacity
Gets or sets a value indicating whether additional warehouse capacity can be acquired or activated.
bool HasProductionCapacityConstraints
Gets or sets a value indicating whether production is subject to capacity constraints.
bool HasTimeVaryingProductionCapacity
Gets or sets a value indicating whether at least one production capacity varies between periods.
bool HasSafetyStockRequirements
Gets or sets a value indicating whether the instance contains safety-stock requirements.
bool HasLotSizeRestrictions
Gets a value indicating whether at least one special lot-size restriction is present.
bool HasDeterministicDemand
Gets or sets a value indicating whether demand is deterministic.
bool HasPurchasing
Gets or sets a value indicating whether external purchasing decisions are represented.
bool HasTransportLeadTimes
Gets or sets a value indicating whether transport lead times are represented.
bool HasTimeVaryingDemand
Gets or sets a value indicating whether demand varies between planning periods.
int MaximumProductStructureDepth
Gets or sets the maximum number of bill-of-materials relationships on a directed product-structure pa...