@frontlinesystems/rason-mcp-server 2026.5.1 → 2026.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +35 -35
- package/examples/EXAMPLES_REFERENCE.md +128 -128
- package/examples/{optimization → Optimization}/Conic/AirlineHubConic.json +111 -111
- package/examples/{optimization → Optimization}/Conic/AirlineHubConic2.json +108 -108
- package/examples/{optimization → Optimization}/Conic/AirlineHubConic3.json +111 -111
- package/examples/{optimization → Optimization}/Conic/AirlineHubConic4.json +99 -99
- package/examples/{optimization → Optimization}/Conic/AirlineHubConic5.json +101 -101
- package/examples/{optimization → Optimization}/DataBinding/ProductMixCsv.json +81 -81
- package/examples/{optimization → Optimization}/DataBinding/ProductMixCsv4.json +96 -96
- package/examples/{optimization → Optimization}/DataBinding/ProductMixExcel.json +73 -73
- package/examples/{optimization → Optimization}/DataBinding/ProductMixExcel1.json +86 -86
- package/examples/{optimization → Optimization}/DataBinding/ProductMixExcel11.json +108 -108
- package/examples/{optimization → Optimization}/DataBinding/ProductMixExcel2.json +77 -77
- package/examples/{optimization → Optimization}/DataBinding/ProductMixTab.json +89 -89
- package/examples/{optimization → Optimization}/DataBinding/ProductMixTab1.json +73 -73
- package/examples/{optimization → Optimization}/DataBinding/ProductMixTab2.json +77 -77
- package/examples/{optimization → Optimization}/Linear/Inventory.json +199 -199
- package/examples/{optimization → Optimization}/Linear/Matop.json +119 -119
- package/examples/{optimization → Optimization}/Linear/ProductMix.json +97 -97
- package/examples/{optimization → Optimization}/Linear/ProductMix2.json +72 -72
- package/examples/{optimization → Optimization}/Linear/ProductMix3.json +49 -49
- package/examples/{optimization → Optimization}/Linear/ProductMix4.json +56 -56
- package/examples/{optimization → Optimization}/Linear/ProductMixCsv1.json +106 -106
- package/examples/{optimization → Optimization}/Linear/ProductMixCsv2.json +106 -106
- package/examples/{optimization → Optimization}/Linear/ProductMixSQL11.json +82 -82
- package/examples/{optimization → Optimization}/Linear/Rowop.json +126 -126
- package/examples/{optimization → Optimization}/NonLinear/AirlineHub.json +63 -63
- package/examples/{optimization → Optimization}/NonLinear/AirlineHub2.json +47 -47
- package/examples/{optimization → Optimization}/NonLinear/AirlineHub3.json +47 -47
- package/examples/{optimization → Optimization}/NonSmooth/Inventory2.json +159 -159
- package/examples/{optimization → Optimization}/Quadratic/PortfolioOpt.json +55 -55
- package/examples/{optimization → Optimization}/Quadratic/PortfolioOpt2.json +65 -65
- package/examples/{optimization → Optimization}/WithUncertainty/GasCompanyChance.json +78 -78
- package/examples/{optimization → Optimization}/WithUncertainty/GasCompanyRecourse.json +78 -78
- package/examples/{optimization → Optimization}/WithUncertainty/ProjectSelect.json +77 -77
- package/examples/{optimization → Optimization}/WithUncertainty/ProjectSelect2.json +81 -81
- package/examples/{optimization → Optimization}/WithUncertainty/ProjectSelect3.json +84 -84
- package/examples/{optimization → Optimization}/WithUncertainty/ProjectSelect4.json +74 -74
- package/examples/{simulation → Simulation}/CandyStoreSalesUsingSIP.json +147 -147
- package/examples/{simulation → Simulation}/CollegeFundGrowth1.json +423 -423
- package/examples/{simulation → Simulation}/CollegeFundGrowth1SIPModel.json +27 -27
- package/examples/{simulation → Simulation}/CollegeFundGrowth2.json +415 -415
- package/examples/{simulation → Simulation}/CollegeFundGrowthSIP.json +401 -401
- package/examples/{simulation → Simulation}/GBMSimulationModel.json +236 -236
- package/examples/{simulation → Simulation}/YieldManagement(Sim).json +69 -69
- package/examples/{simulation → Simulation}/YieldManagement2(Sim).json +72 -72
- package/examples/calculation/DMNExamples/DMN Box Fun with typeDef result.json +53 -53
- package/examples/calculation/DMNExamples/DMN Context example.json +69 -69
- package/examples/calculation/DMNExamples/DMN DT with typeDef result.json +43 -43
- package/examples/calculation/DMNExamples/FEEL Date Time example.json +28 -28
- package/examples/calculation/DMNExamples/FEEL For iteration example.json +66 -66
- package/examples/calculation/DMNExamples/FEEL For with two indices.json +15 -15
- package/examples/calculation/DMNExamples/FEEL For with typeDef result.json +88 -88
- package/examples/calculation/DMNExamples/FEEL If Then Else example.json +25 -25
- package/examples/calculation/DMNExamples/FEEL List example.json +37 -37
- package/examples/calculation/DMNExamples/FEEL List operator.json +17 -17
- package/examples/calculation/DMNExamples/FEEL List with typeDef collection.json +36 -36
- package/examples/calculation/DMNExamples/FEEL Some or Every example.json +65 -65
- package/examples/calculation/DecisionTables/DT Datasource example.json +52 -52
- package/examples/calculation/DecisionTables/DT Date and Time examples.json +91 -91
- package/examples/calculation/DecisionTables/DT Expression example.json +32 -32
- package/examples/calculation/DecisionTables/DT Hit Policy examples.json +136 -136
- package/examples/calculation/DecisionTables/DT Loan Recommend model.json +81 -81
- package/examples/calculation/DecisionTables/DT Loan Strategy Model and Predictive CSV-XML.json +218 -218
- package/examples/calculation/DecisionTables/DT Loan Strategy model and Datasource.json +286 -286
- package/examples/calculation/DecisionTables/DT Loan Strategy model and Predictive.json +203 -203
- package/examples/calculation/DecisionTables/DT Loan Strategy model by scratch.json +214 -214
- package/examples/calculation/DecisionTables/DT Output Order example.json +39 -39
- package/examples/calculation/DecisionTables/DT Unique example.json +38 -38
- package/examples/calculation/TypeDefinitions/TypeDefCF.json +64 -64
- package/examples/calculation/TypeDefinitions/TypeDefDT.json +57 -57
- package/examples/datamining/AffinityAnalysis/AssociationRules.json +51 -51
- package/examples/datamining/Classification/DecisionTree.json +90 -90
- package/examples/datamining/Classification/DiscriminantAnalysis.json +81 -81
- package/examples/datamining/Classification/Ensembles/Bagging.json +66 -66
- package/examples/datamining/Classification/Ensembles/Boosting.json +67 -67
- package/examples/datamining/Classification/Ensembles/RandomTrees.json +91 -91
- package/examples/datamining/Classification/FindBestModel.json +86 -86
- package/examples/datamining/Classification/LogisticRegression.json +82 -82
- package/examples/datamining/Classification/NaiveBayes.json +78 -78
- package/examples/datamining/Classification/NearestNeighbors.json +84 -84
- package/examples/datamining/Classification/NeuralNetwork.json +92 -92
- package/examples/datamining/Clustering/Hierarchical.json +54 -54
- package/examples/datamining/Clustering/KMeans.json +71 -71
- package/examples/datamining/DataSources/DelimitedFile.json +49 -49
- package/examples/datamining/DataSources/JSONFile.json +49 -49
- package/examples/datamining/DataSources/MSAccessDatabase.json +49 -49
- package/examples/datamining/DataSources/MSExcelTable.json +50 -50
- package/examples/datamining/DataSources/MSSQLDatabase.json +49 -49
- package/examples/datamining/DataSources/ODATATable.json +49 -49
- package/examples/datamining/DataSources/ODBCDatabase.json +49 -49
- package/examples/datamining/FeatureSelection/LinearWrapping.json +53 -53
- package/examples/datamining/FeatureSelection/LogisticWrapping.json +56 -56
- package/examples/datamining/FeatureSelection/Univariate.json +78 -78
- package/examples/datamining/Regression/DecisionTree.json +82 -82
- package/examples/datamining/Regression/Ensembles/Bagging.json +62 -62
- package/examples/datamining/Regression/Ensembles/Boosting.json +62 -62
- package/examples/datamining/Regression/Ensembles/RandomTrees.json +78 -78
- package/examples/datamining/Regression/FindBestModel.json +86 -86
- package/examples/datamining/Regression/LinearRegression.json +124 -124
- package/examples/datamining/Regression/NearestNeighbors.json +77 -77
- package/examples/datamining/Regression/NeuralNetwork.json +82 -82
- package/examples/datamining/Scoring/JSONClassifier.json +62 -62
- package/examples/datamining/Scoring/JSONClassifierNN.json +62 -62
- package/examples/datamining/Scoring/JSONClusterizer.json +37 -37
- package/examples/datamining/Scoring/JSONForecaster.json +49 -49
- package/examples/datamining/Scoring/JSONLinearRegression.json +56 -56
- package/examples/datamining/Scoring/JSONPCA.json +41 -41
- package/examples/datamining/Scoring/JSONRegressor.json +56 -56
- package/examples/datamining/Scoring/JSONTransformer.json +38 -38
- package/examples/datamining/Scoring/PMMLClassifier.json +42 -42
- package/examples/datamining/Scoring/PMMLForecaster.json +43 -43
- package/examples/datamining/Scoring/PMMLRegressor.json +38 -38
- package/examples/datamining/Scoring/PMMLTransformer.json +38 -38
- package/examples/datamining/Simulation/LinearRegressionSimulation.json +117 -117
- package/examples/datamining/Simulation/SyntheticDataGeneration.json +108 -108
- package/examples/datamining/Simulation/pmml-risk-scoring.json +62 -62
- package/examples/datamining/Summarizer/Summarization.json +54 -54
- package/examples/datamining/TextMining/LatentSemanticAnalysis.json +51 -51
- package/examples/datamining/TextMining/TfIdf-FileData.json +65 -65
- package/examples/datamining/TextMining/TfIdf-InlineData.json +55 -55
- package/examples/datamining/TimeSeries/AddHoltWinters.json +79 -79
- package/examples/datamining/TimeSeries/Arima.json +74 -74
- package/examples/datamining/TimeSeries/DoubleExponential.json +65 -65
- package/examples/datamining/TimeSeries/Exponential.json +64 -64
- package/examples/datamining/TimeSeries/LagAnalysis.json +48 -48
- package/examples/datamining/TimeSeries/MovingAverage.json +65 -65
- package/examples/datamining/TimeSeries/MulHoltWinters.json +65 -65
- package/examples/datamining/TimeSeries/NoTrendHoltWinters.json +65 -65
- package/examples/datamining/Transformation/Binning.json +69 -69
- package/examples/datamining/Transformation/CanonicalVariateAnalysis.json +47 -47
- package/examples/datamining/Transformation/CategoryReduction.json +51 -51
- package/examples/datamining/Transformation/Factorization.json +50 -50
- package/examples/datamining/Transformation/MissingDataHandling.json +83 -83
- package/examples/datamining/Transformation/OneHotEncoding-DataInline.json +54 -54
- package/examples/datamining/Transformation/OneHotEncoding-DatainFile.json +48 -48
- package/examples/datamining/Transformation/PartitionTimeSeries.json +48 -48
- package/examples/datamining/Transformation/Partitioning-DF.json +72 -72
- package/examples/datamining/Transformation/Partitioning.json +46 -46
- package/examples/datamining/Transformation/PartitioningWithOversampling-DF.json +65 -65
- package/examples/datamining/Transformation/PartitioningWithOversampling.json +44 -44
- package/examples/datamining/Transformation/PrincipalComponentsAnalysis.json +52 -52
- package/examples/datamining/Transformation/Rescaling.json +67 -67
- package/examples/datamining/Transformation/Sampling.json +43 -43
- package/examples/datamining/Transformation/StratifiedSampling.json +46 -46
- package/examples/flow/SQLServerTransform.json +260 -260
- package/examples/flow/dm-calc-pipeline.json +277 -277
- package/examples/flow/dm-pipeline-simulation.json +113 -113
- package/examples/flow/opt-sim-pipeline.json +159 -159
- package/examples/flow/sim-dm-pipeline.json +106 -106
- package/examples/flow/sim-sim-pipeline.json +136 -136
- package/examples/index.json +4678 -4678
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/DataFiltering/ListwithFilter.json +52 -52
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/ProductMix5.json +57 -57
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/compoundWhileStatement.json +35 -35
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/ifThenElseStatement.json +33 -33
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/nestedLoop.json +25 -25
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/ParallelArray.json +47 -47
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/indexedArray.json +69 -69
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/nonParallelArray.json +49 -49
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/sumAggregateExample.json +337 -337
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/tsp.json +61 -61
- package/examples/rason-features/BoxIterators/Box_Fun_Loop_Iter_Sim_RASON.json +190 -190
- package/examples/rason-features/BoxIterators/Box_Fun_Loop_Sim_RASON.json +75 -75
- package/examples/rason-features/BoxIterators/Box_Fun_Sim_RASON.json +108 -108
- package/examples/rason-features/BoxIterators/Box_Iter_SIM_RASON.json +68 -68
- package/examples/rason-features/BoxIterators/Box_Iterator_Calc_Loop.json +183 -183
- package/examples/rason-features/BoxIterators/Box_Iterator_with_typeDef_partial.json +79 -79
- package/examples/rason-features/BoxLambdaExamples/BoxFunOptimize.json +154 -154
- package/examples/rason-features/BoxLambdaExamples/BoxFunSimulate.json +118 -118
- package/examples/rason-features/BoxLambdaExamples/LambdaFunOptimize.json +142 -142
- package/examples/rason-features/BoxLambdaExamples/LambdaFunSimulate.json +81 -81
- package/examples/rason-features/ReferenceGuide/RGFirehouseLocation.json +69 -69
- package/examples/rason-features/ReferenceGuide/RGFirehouseLocationConic.json +113 -113
- package/examples/rason-features/ReferenceGuide/RGProductMixCsv1.json +107 -107
- package/examples/rason-features/ReferenceGuide/RGProductMixExcel11.json +117 -117
- package/examples/rason-features/ReferenceGuide/RGProductMixSQL11.json +108 -108
- package/examples/rason-features/UserGuide/UGAirlineHubCSV.json +67 -67
- package/examples/rason-features/UserGuide/UGForecast.json +50 -50
- package/examples/rason-features/UserGuide/UGProductMix1.json +48 -48
- package/examples/rason-features/UserGuide/UGProductMix2.json +48 -48
- package/examples/rason-features/UserGuide/UGProductMixTab1.json +67 -67
- package/examples/rason-features/UserGuide/UGProductMixTab2.json +76 -76
- package/examples/rason-features/UserGuide/UGProductMixTab3.json +66 -66
- package/examples/rason-features/UserGuide/UGProductMixTab4.json +70 -70
- package/examples/rason-features/UserGuide/UGProductMixTab5.json +67 -67
- package/examples/rason-features/UserGuide/UGProjectSelect0.json +91 -91
- package/examples/rason-features/UserGuide/UGProjectSelect1.json +74 -74
- package/examples/rason-features/UserGuide/UGProjectSelect2.json +74 -74
- package/examples/rason-features/UserGuide/UGYieldManagement1.json +61 -61
- package/examples/rason-features/UserGuide/UGYieldManagement2.json +61 -61
- package/examples/rason-features/UserGuide/UGYieldManagement3.json +63 -63
- package/out/index.cjs +1 -1
- package/package.json +3 -2
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
{
|
|
2
|
-
"modelName": "ProductMixTableSparsePivotExample",
|
|
3
|
-
"modelDescription": "RASON model example of using sparse inline tables (pivoting): The difference between this model and ProductMixTab1 is that in this example, the indexSets section is used to create two index sets, part and prod. With the addition of these two indices, a pivot table can be utilized to setup the constraints in a more sustainable manner.",
|
|
4
|
-
"modelType": "optimization",
|
|
5
|
-
"indexSets": [
|
|
6
|
-
{
|
|
7
|
-
"comment": "With the addition of this section, a pivot table can be utilized to setup the constraints. Using a pivot table creates a more readable model.",
|
|
8
|
-
"name": "part",
|
|
9
|
-
"value": [ "chas", "tube", "cone", "psup", "elec" ]
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"name": "prod",
|
|
13
|
-
"value": [ "tv", "stereo", "speaker" ]
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"data": {
|
|
17
|
-
"parts": {
|
|
18
|
-
"comment": "Parts is a sparse table, only nonzero elements are included.",
|
|
19
|
-
"indexCols": [ "part", "prod" ],
|
|
20
|
-
"value": [
|
|
21
|
-
[ "chas", "tv", 1 ],
|
|
22
|
-
[ "elec", "stereo", 1 ],
|
|
23
|
-
[ "tube", "tv", 1 ],
|
|
24
|
-
[ "cone", "tv", 2 ],
|
|
25
|
-
[ "cone", "stereo", 2 ],
|
|
26
|
-
[ "chas", "stereo", 1 ],
|
|
27
|
-
[ "cone", "speaker", 1 ],
|
|
28
|
-
[ "psup", "tv", 1 ],
|
|
29
|
-
[ "psup", "stereo", 1 ],
|
|
30
|
-
[ "elec", "tv", 2 ],
|
|
31
|
-
[ "elec", "speaker", 1 ]
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
"profits": {
|
|
35
|
-
"dimensions": [ "prod" ],
|
|
36
|
-
"value": [ 75, 50, 35 ],
|
|
37
|
-
"binding": "get",
|
|
38
|
-
"finalValue": []
|
|
39
|
-
},
|
|
40
|
-
"inventory": {
|
|
41
|
-
"comment": "A new table, inventory, is created to hold the inventory levels by part. The part inventories are entered in the same sequence as the part index.",
|
|
42
|
-
"dimensions": [ "part" ],
|
|
43
|
-
"value": [ 450, 250, 800, 450, 600 ],
|
|
44
|
-
"binding": "get",
|
|
45
|
-
"finalValue": []
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"formulas": {
|
|
49
|
-
"comment": "In this section, a pivot table is created containing the part and prod data.",
|
|
50
|
-
"piv_parts": {
|
|
51
|
-
"formula": "PIVOT(parts, { 'prod' }, { 'part' })"
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"variables": {
|
|
55
|
-
"x": {
|
|
56
|
-
"dimensions": [ "prod" ],
|
|
57
|
-
"value": 0,
|
|
58
|
-
"lower": 0,
|
|
59
|
-
"finalValue": []
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
"constraints": {
|
|
63
|
-
"c": {
|
|
64
|
-
"comment": "5 constraints limiting the number of parts used, by the number of parts in inventory. The result of the Excel MMULT function generates 5 constraints with right hand sides pulled from the inventory data array.",
|
|
65
|
-
"dimensions": [ "part" ],
|
|
66
|
-
"formula": "MMULT(piv_parts, x) - inventory",
|
|
67
|
-
"upper": 0
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
"objective": {
|
|
71
|
-
"comment": "Calculates the objective function by multiplying the number of products produced (the variables in the x array) by the profit per unit values from the profit data array. The property 'finalValue' ensures that the final objective function value will be returned in the result.",
|
|
72
|
-
"total": {
|
|
73
|
-
"formula": "sumproduct(x, profits)",
|
|
74
|
-
"type": "maximize",
|
|
75
|
-
"finalValue": []
|
|
76
|
-
}
|
|
77
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"modelName": "ProductMixTableSparsePivotExample",
|
|
3
|
+
"modelDescription": "RASON model example of using sparse inline tables (pivoting): The difference between this model and ProductMixTab1 is that in this example, the indexSets section is used to create two index sets, part and prod. With the addition of these two indices, a pivot table can be utilized to setup the constraints in a more sustainable manner.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"indexSets": [
|
|
6
|
+
{
|
|
7
|
+
"comment": "With the addition of this section, a pivot table can be utilized to setup the constraints. Using a pivot table creates a more readable model.",
|
|
8
|
+
"name": "part",
|
|
9
|
+
"value": [ "chas", "tube", "cone", "psup", "elec" ]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "prod",
|
|
13
|
+
"value": [ "tv", "stereo", "speaker" ]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"data": {
|
|
17
|
+
"parts": {
|
|
18
|
+
"comment": "Parts is a sparse table, only nonzero elements are included.",
|
|
19
|
+
"indexCols": [ "part", "prod" ],
|
|
20
|
+
"value": [
|
|
21
|
+
[ "chas", "tv", 1 ],
|
|
22
|
+
[ "elec", "stereo", 1 ],
|
|
23
|
+
[ "tube", "tv", 1 ],
|
|
24
|
+
[ "cone", "tv", 2 ],
|
|
25
|
+
[ "cone", "stereo", 2 ],
|
|
26
|
+
[ "chas", "stereo", 1 ],
|
|
27
|
+
[ "cone", "speaker", 1 ],
|
|
28
|
+
[ "psup", "tv", 1 ],
|
|
29
|
+
[ "psup", "stereo", 1 ],
|
|
30
|
+
[ "elec", "tv", 2 ],
|
|
31
|
+
[ "elec", "speaker", 1 ]
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"profits": {
|
|
35
|
+
"dimensions": [ "prod" ],
|
|
36
|
+
"value": [ 75, 50, 35 ],
|
|
37
|
+
"binding": "get",
|
|
38
|
+
"finalValue": []
|
|
39
|
+
},
|
|
40
|
+
"inventory": {
|
|
41
|
+
"comment": "A new table, inventory, is created to hold the inventory levels by part. The part inventories are entered in the same sequence as the part index.",
|
|
42
|
+
"dimensions": [ "part" ],
|
|
43
|
+
"value": [ 450, 250, 800, 450, 600 ],
|
|
44
|
+
"binding": "get",
|
|
45
|
+
"finalValue": []
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"formulas": {
|
|
49
|
+
"comment": "In this section, a pivot table is created containing the part and prod data.",
|
|
50
|
+
"piv_parts": {
|
|
51
|
+
"formula": "PIVOT(parts, { 'prod' }, { 'part' })"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"variables": {
|
|
55
|
+
"x": {
|
|
56
|
+
"dimensions": [ "prod" ],
|
|
57
|
+
"value": 0,
|
|
58
|
+
"lower": 0,
|
|
59
|
+
"finalValue": []
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"constraints": {
|
|
63
|
+
"c": {
|
|
64
|
+
"comment": "5 constraints limiting the number of parts used, by the number of parts in inventory. The result of the Excel MMULT function generates 5 constraints with right hand sides pulled from the inventory data array.",
|
|
65
|
+
"dimensions": [ "part" ],
|
|
66
|
+
"formula": "MMULT(piv_parts, x) - inventory",
|
|
67
|
+
"upper": 0
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"objective": {
|
|
71
|
+
"comment": "Calculates the objective function by multiplying the number of products produced (the variables in the x array) by the profit per unit values from the profit data array. The property 'finalValue' ensures that the final objective function value will be returned in the result.",
|
|
72
|
+
"total": {
|
|
73
|
+
"formula": "sumproduct(x, profits)",
|
|
74
|
+
"type": "maximize",
|
|
75
|
+
"finalValue": []
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
78
|
}
|
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
{
|
|
2
|
-
"modelName": "inventoryExample",
|
|
3
|
-
"modelDescription": "RASON Inventory Planning Optimization Example: Example of non-smooth transformation. You are tasked with minimizing the inventory ordering and holding costs while ensuring there is enough inventory on hand to meet demand over a number of time periods, as well as with maintaining minimum inventory levels for each product. This inventory planning model was originally designed for linear programming, but to properly minimize holding costs, the objective was formulated using IF functions. When the modelSettings property 'transformNonSmooth' is set to True, RASON Decision Services will automatically transform this difficult, hard to solve nonsmooth model into a simple linear mixed integer model.",
|
|
4
|
-
"modelType": "optimization",
|
|
5
|
-
"modelSettings": {
|
|
6
|
-
"comment": "When 'transformNonSmooth' is set to True, RASON Decision Services will attempt to transform nonsmooth functions such as IF, MAX and ABS into equivalent linear formulations. A transformation will only be performed if the model is diagnosed as nonsmooth and a transformation results in a linear model. Otherwise, the model will be solved 'as is'. ",
|
|
7
|
-
"transformNonSmooth": true
|
|
8
|
-
},
|
|
9
|
-
"variables": {
|
|
10
|
-
"comment": "9 variables are created in this section representing the amount of products to order. The x variables apply to Product 1, y variables to Product 2 and z variables to Product 3. All variables are integers with upper bound=500 and lower bound=0. ",
|
|
11
|
-
"x1": {
|
|
12
|
-
"comment": "Represents the amount of Product 1 to purchase in Period 1. ",
|
|
13
|
-
"type": "int",
|
|
14
|
-
"lower": 0,
|
|
15
|
-
"upper": 500
|
|
16
|
-
},
|
|
17
|
-
"y1": {
|
|
18
|
-
"comment": "Represents the amount of Product 2 to purchase in Period 1. ",
|
|
19
|
-
"type": "int",
|
|
20
|
-
"lower": 0,
|
|
21
|
-
"upper": 500
|
|
22
|
-
},
|
|
23
|
-
"z1": {
|
|
24
|
-
"comment": "Represents the amount of Product 3 to purchase in Period 1.",
|
|
25
|
-
"type": "int",
|
|
26
|
-
"lower": 0,
|
|
27
|
-
"upper": 500
|
|
28
|
-
},
|
|
29
|
-
"x2": {
|
|
30
|
-
"comment": "Represents the amount of Product 1 to purchase in Period 2.",
|
|
31
|
-
"type": "int",
|
|
32
|
-
"lower": 0,
|
|
33
|
-
"upper": 500
|
|
34
|
-
},
|
|
35
|
-
"y2": {
|
|
36
|
-
"comment": "Represents the amount of Product 2 to purchase in Period 2.",
|
|
37
|
-
"type": "int",
|
|
38
|
-
"lower": 0,
|
|
39
|
-
"upper": 500
|
|
40
|
-
},
|
|
41
|
-
"z2": {
|
|
42
|
-
"comment": "Represents the amount of Product 3 to purchase in Period 2.",
|
|
43
|
-
"type": "int",
|
|
44
|
-
"lower": 0,
|
|
45
|
-
"upper": 500
|
|
46
|
-
},
|
|
47
|
-
"x3": {
|
|
48
|
-
"comment": "Represents the amount of Product 1 to purchase in Period 3.",
|
|
49
|
-
"type": "int",
|
|
50
|
-
"lower": 0,
|
|
51
|
-
"upper": 500
|
|
52
|
-
},
|
|
53
|
-
"y3": {
|
|
54
|
-
"comment": "Represents the amount of Product 2 to purchase in Period 3.",
|
|
55
|
-
"type": "int",
|
|
56
|
-
"lower": 0,
|
|
57
|
-
"upper": 500
|
|
58
|
-
},
|
|
59
|
-
"z3": {
|
|
60
|
-
"comment": "Represents the amount of Product 3 to purchase in Period 3.",
|
|
61
|
-
"type": "int",
|
|
62
|
-
"lower": 0,
|
|
63
|
-
"upper": 500
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
"formulas": {
|
|
67
|
-
"comment": "Formulas calculating Inventory. Initial Inventory for all products in period 1 is 0. Calculate inventory using the following formula: Initial inventory + production in period 1 - demand in period 1 + production in period 2 - demand in period 2 + production in period 3 - demand in period 3.",
|
|
68
|
-
"ix1": {
|
|
69
|
-
"comment": "Inventory for product 1 after period 1. 0 = no demand for product 1 in period 1.",
|
|
70
|
-
"formula": "x1-0"
|
|
71
|
-
},
|
|
72
|
-
"iy1": {
|
|
73
|
-
"comment": "Inventory for product 2 after period 1. 50 = demand for product 2 in period 1.",
|
|
74
|
-
"formula": "y1-50"
|
|
75
|
-
},
|
|
76
|
-
"iz1": {
|
|
77
|
-
"comment": "Inventory for product 3 after period 1. 0 = no demand for product 3 in period 1.",
|
|
78
|
-
"formula": "z1-0"
|
|
79
|
-
},
|
|
80
|
-
"ix2": {
|
|
81
|
-
"comment": "Inventory for product 1 after period 2. 20 = demand for product 1 in period 2.",
|
|
82
|
-
"formula": "ix1+x2-20"
|
|
83
|
-
},
|
|
84
|
-
"iy2": {
|
|
85
|
-
"comment": "Inventory for product 2 after period 2. 0 = no demand for product 2 in period 2.",
|
|
86
|
-
"formula": "iy1+y2-0"
|
|
87
|
-
},
|
|
88
|
-
"iz2": {
|
|
89
|
-
"comment": "Inventory for product 1 after period 2. 100 = demand for product 3 in period 2.",
|
|
90
|
-
"formula": "iz1+z2-100"
|
|
91
|
-
},
|
|
92
|
-
"ix3": {
|
|
93
|
-
"comment": "Inventory for product 1 after period 3. 0 = no demand for product 1 in period 3.",
|
|
94
|
-
"formula": "ix2+x3-0"
|
|
95
|
-
},
|
|
96
|
-
"iy3": {
|
|
97
|
-
"comment": "Inventory for product 2 after period 3. 50 = demand for product 2 in period 3.",
|
|
98
|
-
"formula": "iy2+y3-50"
|
|
99
|
-
},
|
|
100
|
-
"iz3": {
|
|
101
|
-
"comment": "Inventory for product 3 after period 3. 0 = no demand for product 3 in period 3.",
|
|
102
|
-
"formula": "iz2+z3-0"
|
|
103
|
-
},
|
|
104
|
-
"hold1": {
|
|
105
|
-
"comment": "Calculate the holding cost for period 1",
|
|
106
|
-
"formula": "IF(ix1>0,ix1*10,0)+IF(iy1>0,iy1*10,0)+IF(iz1>0,iz1*10,0)"
|
|
107
|
-
},
|
|
108
|
-
"hold2": {
|
|
109
|
-
"comment": "Calculate the holding cost for period 2",
|
|
110
|
-
"formula": "IF(ix2>0,ix2*10,0)+IF(iy2>0,iy2*10,0)+IF(iz2>0,iz2*10,0)"
|
|
111
|
-
},
|
|
112
|
-
"hold3": {
|
|
113
|
-
"comment": "Calculate the holding cost for period 3",
|
|
114
|
-
"formula": "IF(ix3>0,ix3*10,0)+IF(iy3>0,iy3*10,0)+IF(iz3>0,iz3*10,0)"
|
|
115
|
-
},
|
|
116
|
-
"purch1": {
|
|
117
|
-
"comment": "Calculate the purchasing costs for period 1",
|
|
118
|
-
"formula": "IF(x1>0,500,0)+IF(y1>0,400,0)+IF(z1>0,300,0)"
|
|
119
|
-
},
|
|
120
|
-
"purch2": {
|
|
121
|
-
"comment": "Calculate the purchasing costs for period 2",
|
|
122
|
-
"formula": "IF(x2>0,500,0)+IF(y2>0,400,0)+IF(z2>0,300,0)"
|
|
123
|
-
},
|
|
124
|
-
"purch3": {
|
|
125
|
-
"comment": "Calculate the purchasing costs for period 3",
|
|
126
|
-
"formula": "IF(x3>0,500,0)+IF(y3>0,400,0)+IF(z3>0,300,0)"
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
"constraints": {
|
|
130
|
-
"comment": "Ending inventory constraints (9) + Total product purchased constraints (3). Lower bound indicates the minimum inventory amount that must be on hand for each product at the end of each period.",
|
|
131
|
-
"c1": {
|
|
132
|
-
"comment": "Ending inventory for product 1 in period 1.",
|
|
133
|
-
"formula": "ix1",
|
|
134
|
-
"lower": 0
|
|
135
|
-
},
|
|
136
|
-
"c2": {
|
|
137
|
-
"comment": "Ending inventory for product 2 in period 1.",
|
|
138
|
-
"formula": "iy1",
|
|
139
|
-
"lower": 20
|
|
140
|
-
},
|
|
141
|
-
"c3": {
|
|
142
|
-
"comment": "Ending inventory for product 3 in period 1.",
|
|
143
|
-
"formula": "iz1",
|
|
144
|
-
"lower": 0
|
|
145
|
-
},
|
|
146
|
-
"c4": {
|
|
147
|
-
"comment": "Ending inventory for product 1 in period 2.",
|
|
148
|
-
"formula": "ix2",
|
|
149
|
-
"lower": 0
|
|
150
|
-
},
|
|
151
|
-
"c5": {
|
|
152
|
-
"comment": "Ending inventory for product 2 in period 2.",
|
|
153
|
-
"formula": "iy2",
|
|
154
|
-
"lower": 20
|
|
155
|
-
},
|
|
156
|
-
"c6": {
|
|
157
|
-
"comment": "Ending inventory for product 3 in period 2.",
|
|
158
|
-
"formula": "iz2",
|
|
159
|
-
"lower": 0
|
|
160
|
-
},
|
|
161
|
-
"c7": {
|
|
162
|
-
"comment": "Ending inventory for product 1 in period 3.",
|
|
163
|
-
"formula": "ix3",
|
|
164
|
-
"lower": 50
|
|
165
|
-
},
|
|
166
|
-
"c8": {
|
|
167
|
-
"comment": "Ending inventory for product 2 in period 3.",
|
|
168
|
-
"formula": "iy3",
|
|
169
|
-
"lower": 20
|
|
170
|
-
},
|
|
171
|
-
"c9": {
|
|
172
|
-
"comment": "Ending inventory for product 3 in period 3.",
|
|
173
|
-
"formula": "iz3",
|
|
174
|
-
"lower": 100
|
|
175
|
-
},
|
|
176
|
-
"c10": {
|
|
177
|
-
"comment": "Maximum purchased products in period 1 must not exceed 150.",
|
|
178
|
-
"formula": "x1 + y1 + z1",
|
|
179
|
-
"upper": 150
|
|
180
|
-
},
|
|
181
|
-
"c11": {
|
|
182
|
-
"comment": "Maximum purchased products in period 2 must not exceed 150.",
|
|
183
|
-
"formula": "x2 + y2 + z2",
|
|
184
|
-
"upper": 150
|
|
185
|
-
},
|
|
186
|
-
"c12": {
|
|
187
|
-
"comment": "Maximum purchased products in period 3 must not exceed 150.",
|
|
188
|
-
"formula": "x3 + y3 + z3",
|
|
189
|
-
"upper": 150
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
"objective": {
|
|
193
|
-
"obj": {
|
|
194
|
-
"comment": "The objective function minimizes the total holding costs + the total purchasing costs.",
|
|
195
|
-
"type": "minimize",
|
|
196
|
-
"finalValue": [],
|
|
197
|
-
"formula": "hold1+hold2+hold3+purch1+purch2+purch3"
|
|
198
|
-
}
|
|
199
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"modelName": "inventoryExample",
|
|
3
|
+
"modelDescription": "RASON Inventory Planning Optimization Example: Example of non-smooth transformation. You are tasked with minimizing the inventory ordering and holding costs while ensuring there is enough inventory on hand to meet demand over a number of time periods, as well as with maintaining minimum inventory levels for each product. This inventory planning model was originally designed for linear programming, but to properly minimize holding costs, the objective was formulated using IF functions. When the modelSettings property 'transformNonSmooth' is set to True, RASON Decision Services will automatically transform this difficult, hard to solve nonsmooth model into a simple linear mixed integer model.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"modelSettings": {
|
|
6
|
+
"comment": "When 'transformNonSmooth' is set to True, RASON Decision Services will attempt to transform nonsmooth functions such as IF, MAX and ABS into equivalent linear formulations. A transformation will only be performed if the model is diagnosed as nonsmooth and a transformation results in a linear model. Otherwise, the model will be solved 'as is'. ",
|
|
7
|
+
"transformNonSmooth": true
|
|
8
|
+
},
|
|
9
|
+
"variables": {
|
|
10
|
+
"comment": "9 variables are created in this section representing the amount of products to order. The x variables apply to Product 1, y variables to Product 2 and z variables to Product 3. All variables are integers with upper bound=500 and lower bound=0. ",
|
|
11
|
+
"x1": {
|
|
12
|
+
"comment": "Represents the amount of Product 1 to purchase in Period 1. ",
|
|
13
|
+
"type": "int",
|
|
14
|
+
"lower": 0,
|
|
15
|
+
"upper": 500
|
|
16
|
+
},
|
|
17
|
+
"y1": {
|
|
18
|
+
"comment": "Represents the amount of Product 2 to purchase in Period 1. ",
|
|
19
|
+
"type": "int",
|
|
20
|
+
"lower": 0,
|
|
21
|
+
"upper": 500
|
|
22
|
+
},
|
|
23
|
+
"z1": {
|
|
24
|
+
"comment": "Represents the amount of Product 3 to purchase in Period 1.",
|
|
25
|
+
"type": "int",
|
|
26
|
+
"lower": 0,
|
|
27
|
+
"upper": 500
|
|
28
|
+
},
|
|
29
|
+
"x2": {
|
|
30
|
+
"comment": "Represents the amount of Product 1 to purchase in Period 2.",
|
|
31
|
+
"type": "int",
|
|
32
|
+
"lower": 0,
|
|
33
|
+
"upper": 500
|
|
34
|
+
},
|
|
35
|
+
"y2": {
|
|
36
|
+
"comment": "Represents the amount of Product 2 to purchase in Period 2.",
|
|
37
|
+
"type": "int",
|
|
38
|
+
"lower": 0,
|
|
39
|
+
"upper": 500
|
|
40
|
+
},
|
|
41
|
+
"z2": {
|
|
42
|
+
"comment": "Represents the amount of Product 3 to purchase in Period 2.",
|
|
43
|
+
"type": "int",
|
|
44
|
+
"lower": 0,
|
|
45
|
+
"upper": 500
|
|
46
|
+
},
|
|
47
|
+
"x3": {
|
|
48
|
+
"comment": "Represents the amount of Product 1 to purchase in Period 3.",
|
|
49
|
+
"type": "int",
|
|
50
|
+
"lower": 0,
|
|
51
|
+
"upper": 500
|
|
52
|
+
},
|
|
53
|
+
"y3": {
|
|
54
|
+
"comment": "Represents the amount of Product 2 to purchase in Period 3.",
|
|
55
|
+
"type": "int",
|
|
56
|
+
"lower": 0,
|
|
57
|
+
"upper": 500
|
|
58
|
+
},
|
|
59
|
+
"z3": {
|
|
60
|
+
"comment": "Represents the amount of Product 3 to purchase in Period 3.",
|
|
61
|
+
"type": "int",
|
|
62
|
+
"lower": 0,
|
|
63
|
+
"upper": 500
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"formulas": {
|
|
67
|
+
"comment": "Formulas calculating Inventory. Initial Inventory for all products in period 1 is 0. Calculate inventory using the following formula: Initial inventory + production in period 1 - demand in period 1 + production in period 2 - demand in period 2 + production in period 3 - demand in period 3.",
|
|
68
|
+
"ix1": {
|
|
69
|
+
"comment": "Inventory for product 1 after period 1. 0 = no demand for product 1 in period 1.",
|
|
70
|
+
"formula": "x1-0"
|
|
71
|
+
},
|
|
72
|
+
"iy1": {
|
|
73
|
+
"comment": "Inventory for product 2 after period 1. 50 = demand for product 2 in period 1.",
|
|
74
|
+
"formula": "y1-50"
|
|
75
|
+
},
|
|
76
|
+
"iz1": {
|
|
77
|
+
"comment": "Inventory for product 3 after period 1. 0 = no demand for product 3 in period 1.",
|
|
78
|
+
"formula": "z1-0"
|
|
79
|
+
},
|
|
80
|
+
"ix2": {
|
|
81
|
+
"comment": "Inventory for product 1 after period 2. 20 = demand for product 1 in period 2.",
|
|
82
|
+
"formula": "ix1+x2-20"
|
|
83
|
+
},
|
|
84
|
+
"iy2": {
|
|
85
|
+
"comment": "Inventory for product 2 after period 2. 0 = no demand for product 2 in period 2.",
|
|
86
|
+
"formula": "iy1+y2-0"
|
|
87
|
+
},
|
|
88
|
+
"iz2": {
|
|
89
|
+
"comment": "Inventory for product 1 after period 2. 100 = demand for product 3 in period 2.",
|
|
90
|
+
"formula": "iz1+z2-100"
|
|
91
|
+
},
|
|
92
|
+
"ix3": {
|
|
93
|
+
"comment": "Inventory for product 1 after period 3. 0 = no demand for product 1 in period 3.",
|
|
94
|
+
"formula": "ix2+x3-0"
|
|
95
|
+
},
|
|
96
|
+
"iy3": {
|
|
97
|
+
"comment": "Inventory for product 2 after period 3. 50 = demand for product 2 in period 3.",
|
|
98
|
+
"formula": "iy2+y3-50"
|
|
99
|
+
},
|
|
100
|
+
"iz3": {
|
|
101
|
+
"comment": "Inventory for product 3 after period 3. 0 = no demand for product 3 in period 3.",
|
|
102
|
+
"formula": "iz2+z3-0"
|
|
103
|
+
},
|
|
104
|
+
"hold1": {
|
|
105
|
+
"comment": "Calculate the holding cost for period 1",
|
|
106
|
+
"formula": "IF(ix1>0,ix1*10,0)+IF(iy1>0,iy1*10,0)+IF(iz1>0,iz1*10,0)"
|
|
107
|
+
},
|
|
108
|
+
"hold2": {
|
|
109
|
+
"comment": "Calculate the holding cost for period 2",
|
|
110
|
+
"formula": "IF(ix2>0,ix2*10,0)+IF(iy2>0,iy2*10,0)+IF(iz2>0,iz2*10,0)"
|
|
111
|
+
},
|
|
112
|
+
"hold3": {
|
|
113
|
+
"comment": "Calculate the holding cost for period 3",
|
|
114
|
+
"formula": "IF(ix3>0,ix3*10,0)+IF(iy3>0,iy3*10,0)+IF(iz3>0,iz3*10,0)"
|
|
115
|
+
},
|
|
116
|
+
"purch1": {
|
|
117
|
+
"comment": "Calculate the purchasing costs for period 1",
|
|
118
|
+
"formula": "IF(x1>0,500,0)+IF(y1>0,400,0)+IF(z1>0,300,0)"
|
|
119
|
+
},
|
|
120
|
+
"purch2": {
|
|
121
|
+
"comment": "Calculate the purchasing costs for period 2",
|
|
122
|
+
"formula": "IF(x2>0,500,0)+IF(y2>0,400,0)+IF(z2>0,300,0)"
|
|
123
|
+
},
|
|
124
|
+
"purch3": {
|
|
125
|
+
"comment": "Calculate the purchasing costs for period 3",
|
|
126
|
+
"formula": "IF(x3>0,500,0)+IF(y3>0,400,0)+IF(z3>0,300,0)"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"constraints": {
|
|
130
|
+
"comment": "Ending inventory constraints (9) + Total product purchased constraints (3). Lower bound indicates the minimum inventory amount that must be on hand for each product at the end of each period.",
|
|
131
|
+
"c1": {
|
|
132
|
+
"comment": "Ending inventory for product 1 in period 1.",
|
|
133
|
+
"formula": "ix1",
|
|
134
|
+
"lower": 0
|
|
135
|
+
},
|
|
136
|
+
"c2": {
|
|
137
|
+
"comment": "Ending inventory for product 2 in period 1.",
|
|
138
|
+
"formula": "iy1",
|
|
139
|
+
"lower": 20
|
|
140
|
+
},
|
|
141
|
+
"c3": {
|
|
142
|
+
"comment": "Ending inventory for product 3 in period 1.",
|
|
143
|
+
"formula": "iz1",
|
|
144
|
+
"lower": 0
|
|
145
|
+
},
|
|
146
|
+
"c4": {
|
|
147
|
+
"comment": "Ending inventory for product 1 in period 2.",
|
|
148
|
+
"formula": "ix2",
|
|
149
|
+
"lower": 0
|
|
150
|
+
},
|
|
151
|
+
"c5": {
|
|
152
|
+
"comment": "Ending inventory for product 2 in period 2.",
|
|
153
|
+
"formula": "iy2",
|
|
154
|
+
"lower": 20
|
|
155
|
+
},
|
|
156
|
+
"c6": {
|
|
157
|
+
"comment": "Ending inventory for product 3 in period 2.",
|
|
158
|
+
"formula": "iz2",
|
|
159
|
+
"lower": 0
|
|
160
|
+
},
|
|
161
|
+
"c7": {
|
|
162
|
+
"comment": "Ending inventory for product 1 in period 3.",
|
|
163
|
+
"formula": "ix3",
|
|
164
|
+
"lower": 50
|
|
165
|
+
},
|
|
166
|
+
"c8": {
|
|
167
|
+
"comment": "Ending inventory for product 2 in period 3.",
|
|
168
|
+
"formula": "iy3",
|
|
169
|
+
"lower": 20
|
|
170
|
+
},
|
|
171
|
+
"c9": {
|
|
172
|
+
"comment": "Ending inventory for product 3 in period 3.",
|
|
173
|
+
"formula": "iz3",
|
|
174
|
+
"lower": 100
|
|
175
|
+
},
|
|
176
|
+
"c10": {
|
|
177
|
+
"comment": "Maximum purchased products in period 1 must not exceed 150.",
|
|
178
|
+
"formula": "x1 + y1 + z1",
|
|
179
|
+
"upper": 150
|
|
180
|
+
},
|
|
181
|
+
"c11": {
|
|
182
|
+
"comment": "Maximum purchased products in period 2 must not exceed 150.",
|
|
183
|
+
"formula": "x2 + y2 + z2",
|
|
184
|
+
"upper": 150
|
|
185
|
+
},
|
|
186
|
+
"c12": {
|
|
187
|
+
"comment": "Maximum purchased products in period 3 must not exceed 150.",
|
|
188
|
+
"formula": "x3 + y3 + z3",
|
|
189
|
+
"upper": 150
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"objective": {
|
|
193
|
+
"obj": {
|
|
194
|
+
"comment": "The objective function minimizes the total holding costs + the total purchasing costs.",
|
|
195
|
+
"type": "minimize",
|
|
196
|
+
"finalValue": [],
|
|
197
|
+
"formula": "hold1+hold2+hold3+purch1+purch2+purch3"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
200
|
}
|