@frontlinesystems/rason-mcp-server 2026.5.0
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 -0
- package/README.md +282 -0
- package/examples/EXAMPLES_REFERENCE.md +128 -0
- package/examples/Optimization/Conic/AirlineHubConic.json +112 -0
- package/examples/Optimization/Conic/AirlineHubConic2.json +109 -0
- package/examples/Optimization/Conic/AirlineHubConic3.json +112 -0
- package/examples/Optimization/Conic/AirlineHubConic4.json +100 -0
- package/examples/Optimization/Conic/AirlineHubConic5.json +102 -0
- package/examples/Optimization/DataBinding/ProductMixCsv.json +82 -0
- package/examples/Optimization/DataBinding/ProductMixCsv4.json +96 -0
- package/examples/Optimization/DataBinding/ProductMixExcel.json +74 -0
- package/examples/Optimization/DataBinding/ProductMixExcel1.json +87 -0
- package/examples/Optimization/DataBinding/ProductMixExcel11.json +109 -0
- package/examples/Optimization/DataBinding/ProductMixExcel2.json +78 -0
- package/examples/Optimization/DataBinding/ProductMixTab.json +90 -0
- package/examples/Optimization/DataBinding/ProductMixTab1.json +74 -0
- package/examples/Optimization/DataBinding/ProductMixTab2.json +78 -0
- package/examples/Optimization/Linear/Inventory.json +200 -0
- package/examples/Optimization/Linear/Matop.json +120 -0
- package/examples/Optimization/Linear/ProductMix.json +98 -0
- package/examples/Optimization/Linear/ProductMix2.json +73 -0
- package/examples/Optimization/Linear/ProductMix3.json +50 -0
- package/examples/Optimization/Linear/ProductMix4.json +57 -0
- package/examples/Optimization/Linear/ProductMixCsv1.json +106 -0
- package/examples/Optimization/Linear/ProductMixCsv2.json +106 -0
- package/examples/Optimization/Linear/ProductMixSQL11.json +82 -0
- package/examples/Optimization/Linear/Rowop.json +127 -0
- package/examples/Optimization/NonLinear/AirlineHub.json +64 -0
- package/examples/Optimization/NonLinear/AirlineHub2.json +48 -0
- package/examples/Optimization/NonLinear/AirlineHub3.json +48 -0
- package/examples/Optimization/NonSmooth/Inventory2.json +160 -0
- package/examples/Optimization/Quadratic/PortfolioOpt.json +56 -0
- package/examples/Optimization/Quadratic/PortfolioOpt2.json +66 -0
- package/examples/Optimization/WithUncertainty/GasCompanyChance.json +79 -0
- package/examples/Optimization/WithUncertainty/GasCompanyRecourse.json +79 -0
- package/examples/Optimization/WithUncertainty/ProjectSelect.json +78 -0
- package/examples/Optimization/WithUncertainty/ProjectSelect2.json +82 -0
- package/examples/Optimization/WithUncertainty/ProjectSelect3.json +85 -0
- package/examples/Optimization/WithUncertainty/ProjectSelect4.json +75 -0
- package/examples/Simulation/CandyStoreSalesUsingSIP.json +148 -0
- package/examples/Simulation/CollegeFundGrowth1.json +424 -0
- package/examples/Simulation/CollegeFundGrowth1SIPModel.json +28 -0
- package/examples/Simulation/CollegeFundGrowth2.json +416 -0
- package/examples/Simulation/CollegeFundGrowthSIP.json +402 -0
- package/examples/Simulation/GBMSimulationModel.json +237 -0
- package/examples/Simulation/YieldManagement(Sim).json +70 -0
- package/examples/Simulation/YieldManagement2(Sim).json +73 -0
- package/examples/calculation/DMNExamples/DMN Box Fun with typeDef result.json +54 -0
- package/examples/calculation/DMNExamples/DMN Context example.json +69 -0
- package/examples/calculation/DMNExamples/DMN DT with typeDef result.json +43 -0
- package/examples/calculation/DMNExamples/FEEL Date Time example.json +28 -0
- package/examples/calculation/DMNExamples/FEEL For iteration example.json +66 -0
- package/examples/calculation/DMNExamples/FEEL For with two indices.json +16 -0
- package/examples/calculation/DMNExamples/FEEL For with typeDef result.json +88 -0
- package/examples/calculation/DMNExamples/FEEL If Then Else example.json +26 -0
- package/examples/calculation/DMNExamples/FEEL List example.json +38 -0
- package/examples/calculation/DMNExamples/FEEL List operator.json +17 -0
- package/examples/calculation/DMNExamples/FEEL List with typeDef collection.json +37 -0
- package/examples/calculation/DMNExamples/FEEL Some or Every example.json +66 -0
- package/examples/calculation/DecisionTables/DT Datasource example.json +53 -0
- package/examples/calculation/DecisionTables/DT Date and Time examples.json +92 -0
- package/examples/calculation/DecisionTables/DT Expression example.json +32 -0
- package/examples/calculation/DecisionTables/DT Hit Policy examples.json +137 -0
- package/examples/calculation/DecisionTables/DT Loan Recommend model.json +82 -0
- package/examples/calculation/DecisionTables/DT Loan Strategy Model and Predictive CSV-XML.json +219 -0
- package/examples/calculation/DecisionTables/DT Loan Strategy model and Datasource.json +286 -0
- package/examples/calculation/DecisionTables/DT Loan Strategy model and Predictive.json +204 -0
- package/examples/calculation/DecisionTables/DT Loan Strategy model by scratch.json +214 -0
- package/examples/calculation/DecisionTables/DT Output Order example.json +40 -0
- package/examples/calculation/DecisionTables/DT Unique example.json +39 -0
- package/examples/calculation/TypeDefinitions/TypeDefCF.json +65 -0
- package/examples/calculation/TypeDefinitions/TypeDefDT.json +58 -0
- package/examples/datamining/AffinityAnalysis/AssociationRules.json +52 -0
- package/examples/datamining/Classification/DecisionTree.json +91 -0
- package/examples/datamining/Classification/DiscriminantAnalysis.json +82 -0
- package/examples/datamining/Classification/Ensembles/Bagging.json +67 -0
- package/examples/datamining/Classification/Ensembles/Boosting.json +68 -0
- package/examples/datamining/Classification/Ensembles/RandomTrees.json +92 -0
- package/examples/datamining/Classification/FindBestModel.json +87 -0
- package/examples/datamining/Classification/LogisticRegression.json +83 -0
- package/examples/datamining/Classification/NaiveBayes.json +79 -0
- package/examples/datamining/Classification/NearestNeighbors.json +85 -0
- package/examples/datamining/Classification/NeuralNetwork.json +93 -0
- package/examples/datamining/Clustering/Hierarchical.json +55 -0
- package/examples/datamining/Clustering/KMeans.json +72 -0
- package/examples/datamining/DataSources/DelimitedFile.json +50 -0
- package/examples/datamining/DataSources/JSONFile.json +50 -0
- package/examples/datamining/DataSources/MSAccessDatabase.json +50 -0
- package/examples/datamining/DataSources/MSExcelTable.json +51 -0
- package/examples/datamining/DataSources/MSSQLDatabase.json +50 -0
- package/examples/datamining/DataSources/ODATATable.json +50 -0
- package/examples/datamining/DataSources/ODBCDatabase.json +50 -0
- package/examples/datamining/FeatureSelection/LinearWrapping.json +54 -0
- package/examples/datamining/FeatureSelection/LogisticWrapping.json +57 -0
- package/examples/datamining/FeatureSelection/Univariate.json +79 -0
- package/examples/datamining/Regression/DecisionTree.json +82 -0
- package/examples/datamining/Regression/Ensembles/Bagging.json +63 -0
- package/examples/datamining/Regression/Ensembles/Boosting.json +63 -0
- package/examples/datamining/Regression/Ensembles/RandomTrees.json +79 -0
- package/examples/datamining/Regression/FindBestModel.json +87 -0
- package/examples/datamining/Regression/LinearRegression.json +125 -0
- package/examples/datamining/Regression/NearestNeighbors.json +78 -0
- package/examples/datamining/Regression/NeuralNetwork.json +83 -0
- package/examples/datamining/Scoring/JSONClassifier.json +63 -0
- package/examples/datamining/Scoring/JSONClassifierNN.json +63 -0
- package/examples/datamining/Scoring/JSONClusterizer.json +38 -0
- package/examples/datamining/Scoring/JSONForecaster.json +50 -0
- package/examples/datamining/Scoring/JSONLinearRegression.json +57 -0
- package/examples/datamining/Scoring/JSONPCA.json +42 -0
- package/examples/datamining/Scoring/JSONRegressor.json +57 -0
- package/examples/datamining/Scoring/JSONTransformer.json +39 -0
- package/examples/datamining/Scoring/PMMLClassifier.json +43 -0
- package/examples/datamining/Scoring/PMMLForecaster.json +44 -0
- package/examples/datamining/Scoring/PMMLRegressor.json +39 -0
- package/examples/datamining/Scoring/PMMLTransformer.json +39 -0
- package/examples/datamining/Simulation/LinearRegressionSimulation.json +118 -0
- package/examples/datamining/Simulation/SyntheticDataGeneration.json +109 -0
- package/examples/datamining/Simulation/pmml-risk-scoring.json +63 -0
- package/examples/datamining/Summarizer/Summarization.json +55 -0
- package/examples/datamining/TextMining/LatentSemanticAnalysis.json +52 -0
- package/examples/datamining/TextMining/TfIdf-FileData.json +66 -0
- package/examples/datamining/TextMining/TfIdf-InlineData.json +56 -0
- package/examples/datamining/TimeSeries/AddHoltWinters.json +80 -0
- package/examples/datamining/TimeSeries/Arima.json +75 -0
- package/examples/datamining/TimeSeries/DoubleExponential.json +66 -0
- package/examples/datamining/TimeSeries/Exponential.json +65 -0
- package/examples/datamining/TimeSeries/LagAnalysis.json +49 -0
- package/examples/datamining/TimeSeries/MovingAverage.json +66 -0
- package/examples/datamining/TimeSeries/MulHoltWinters.json +66 -0
- package/examples/datamining/TimeSeries/NoTrendHoltWinters.json +66 -0
- package/examples/datamining/Transformation/Binning.json +70 -0
- package/examples/datamining/Transformation/CanonicalVariateAnalysis.json +48 -0
- package/examples/datamining/Transformation/CategoryReduction.json +52 -0
- package/examples/datamining/Transformation/Factorization.json +51 -0
- package/examples/datamining/Transformation/MissingDataHandling.json +84 -0
- package/examples/datamining/Transformation/OneHotEncoding-DataInline.json +55 -0
- package/examples/datamining/Transformation/OneHotEncoding-DatainFile.json +49 -0
- package/examples/datamining/Transformation/PartitionTimeSeries.json +49 -0
- package/examples/datamining/Transformation/Partitioning-DF.json +73 -0
- package/examples/datamining/Transformation/Partitioning.json +47 -0
- package/examples/datamining/Transformation/PartitioningWithOversampling-DF.json +66 -0
- package/examples/datamining/Transformation/PartitioningWithOversampling.json +45 -0
- package/examples/datamining/Transformation/PrincipalComponentsAnalysis.json +53 -0
- package/examples/datamining/Transformation/Rescaling.json +68 -0
- package/examples/datamining/Transformation/Sampling.json +44 -0
- package/examples/datamining/Transformation/StratifiedSampling.json +47 -0
- package/examples/flow/SQLServerTransform.json +261 -0
- package/examples/flow/dm-calc-pipeline.json +278 -0
- package/examples/flow/dm-pipeline-simulation.json +114 -0
- package/examples/flow/opt-sim-pipeline.json +160 -0
- package/examples/flow/sim-dm-pipeline.json +107 -0
- package/examples/flow/sim-sim-pipeline.json +137 -0
- package/examples/index.json +4679 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/DataFiltering/ListwithFilter.json +53 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/ProductMix5.json +58 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/compoundWhileStatement.json +36 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/ifThenElseStatement.json +34 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/Loops/nestedLoop.json +26 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/ParallelArray.json +48 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/indexedArray.json +70 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/nonParallelArray.json +50 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/sumAggregateExample.json +338 -0
- package/examples/rason-features/Arrays_Loops_Tables/ArrayExamples/tsp.json +62 -0
- package/examples/rason-features/BoxIterators/Box_Fun_Loop_Iter_Sim_RASON.json +191 -0
- package/examples/rason-features/BoxIterators/Box_Fun_Loop_Sim_RASON.json +76 -0
- package/examples/rason-features/BoxIterators/Box_Fun_Sim_RASON.json +109 -0
- package/examples/rason-features/BoxIterators/Box_Iter_SIM_RASON.json +69 -0
- package/examples/rason-features/BoxIterators/Box_Iterator_Calc_Loop.json +183 -0
- package/examples/rason-features/BoxIterators/Box_Iterator_with_typeDef_partial.json +79 -0
- package/examples/rason-features/BoxLambdaExamples/BoxFunOptimize.json +155 -0
- package/examples/rason-features/BoxLambdaExamples/BoxFunSimulate.json +119 -0
- package/examples/rason-features/BoxLambdaExamples/LambdaFunOptimize.json +143 -0
- package/examples/rason-features/BoxLambdaExamples/LambdaFunSimulate.json +82 -0
- package/examples/rason-features/ReferenceGuide/RGFirehouseLocation.json +69 -0
- package/examples/rason-features/ReferenceGuide/RGFirehouseLocationConic.json +114 -0
- package/examples/rason-features/ReferenceGuide/RGProductMixCsv1.json +108 -0
- package/examples/rason-features/ReferenceGuide/RGProductMixExcel11.json +117 -0
- package/examples/rason-features/ReferenceGuide/RGProductMixSQL11.json +108 -0
- package/examples/rason-features/UserGuide/UGAirlineHubCSV.json +67 -0
- package/examples/rason-features/UserGuide/UGForecast.json +51 -0
- package/examples/rason-features/UserGuide/UGProductMix1.json +49 -0
- package/examples/rason-features/UserGuide/UGProductMix2.json +49 -0
- package/examples/rason-features/UserGuide/UGProductMixTab1.json +68 -0
- package/examples/rason-features/UserGuide/UGProductMixTab2.json +77 -0
- package/examples/rason-features/UserGuide/UGProductMixTab3.json +67 -0
- package/examples/rason-features/UserGuide/UGProductMixTab4.json +71 -0
- package/examples/rason-features/UserGuide/UGProductMixTab5.json +68 -0
- package/examples/rason-features/UserGuide/UGProjectSelect0.json +92 -0
- package/examples/rason-features/UserGuide/UGProjectSelect1.json +75 -0
- package/examples/rason-features/UserGuide/UGProjectSelect2.json +75 -0
- package/examples/rason-features/UserGuide/UGYieldManagement1.json +62 -0
- package/examples/rason-features/UserGuide/UGYieldManagement2.json +62 -0
- package/examples/rason-features/UserGuide/UGYieldManagement3.json +64 -0
- package/out/index.cjs +361 -0
- package/package.json +76 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProductMixTable3",
|
|
3
|
+
"modelDescription": "RASON Product Mix Example: This example solves the same model as UGProductMixTable1, except that this example passes a SPARSE table (as in UGProductMixTable2) and uses the sortIndexCols property within the parts table.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"indexSets": {
|
|
6
|
+
"part": {
|
|
7
|
+
"value": ["chas", "tube", "cone", "psup", "elec"]
|
|
8
|
+
},
|
|
9
|
+
"prod": {
|
|
10
|
+
"value": ["tv", "stereo", "speaker"]
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"data": {
|
|
14
|
+
"parts": {
|
|
15
|
+
"comment": "If the sortIndexCols (or sort) property is used, all indexCols will be sorted alphabetically. (Note: The properties sort and sortIndexCols perform the same function.) Otherwise, the table will be sorted as entered. In this example, the order for the prod indexCol will be: speaker, stereo, tv. While the order for the part indexCol will be: chas, cone, elec, psup, tube.",
|
|
16
|
+
"indexCols": ["part", "prod"],
|
|
17
|
+
"sortIndexCols": true,
|
|
18
|
+
"value": [
|
|
19
|
+
["chas", "tv", 1],
|
|
20
|
+
["tube", "tv", 1],
|
|
21
|
+
["cone", "tv", 2],
|
|
22
|
+
["psup", "tv", 1],
|
|
23
|
+
["elec", "tv", 2],
|
|
24
|
+
["chas", "stereo", 1],
|
|
25
|
+
["cone", "stereo", 2],
|
|
26
|
+
["psup", "stereo", 1],
|
|
27
|
+
["elec", "stereo", 1],
|
|
28
|
+
["cone", "speaker", 1],
|
|
29
|
+
["elec", "speaker", 1]
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"profits": {
|
|
33
|
+
"comment": "Profit per unit for TVs, Steroes and Speakers.",
|
|
34
|
+
"dimensions": ["prod"],
|
|
35
|
+
"value": [75, 50, 35]
|
|
36
|
+
},
|
|
37
|
+
"inventory": {
|
|
38
|
+
"dimensions": ["part"],
|
|
39
|
+
"value": [450, 250, 800, 450, 600]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"variables": {
|
|
43
|
+
"comment":"The x array is dimensioned using the prod index.",
|
|
44
|
+
"x": {
|
|
45
|
+
"dimensions": ["prod"],
|
|
46
|
+
"value": 0,
|
|
47
|
+
"lower": 0,
|
|
48
|
+
"finalValue": []
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"constraints": {
|
|
52
|
+
"for(p in 'part')": {
|
|
53
|
+
"comment": "parts[p, ] retrieves coefficients for all products containing the part, cone. parts[,'tv'] would retrieve coefficients for all parts used to build a TV. Both results are vertical arrays.",
|
|
54
|
+
"cons[p]": {
|
|
55
|
+
"formula": "sumproduct(parts[p, ], x)",
|
|
56
|
+
"upper": "inventory"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"objective": {
|
|
61
|
+
"total": {
|
|
62
|
+
"formula": "sumproduct(x, profits)",
|
|
63
|
+
"type": "maximize",
|
|
64
|
+
"finalValue": []
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProductMixTable4",
|
|
3
|
+
"modelDescription": "RASON Product Mix Example: Solves the same model as UGProductMixTable3. However, in this example, the inventory values are also entered as a table. Also, the constraints are entered in standard form, i.e. sumproduct(x,parts)-inventory <= 0",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"indexSets": {
|
|
6
|
+
"part": {
|
|
7
|
+
"value": ["chas", "tube", "cone", "psup", "elec"]
|
|
8
|
+
},
|
|
9
|
+
"prod": {
|
|
10
|
+
"value": ["tv", "stereo", "speaker"]
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"data": {
|
|
14
|
+
"parts": {
|
|
15
|
+
"indexCols": ["part", "prod"],
|
|
16
|
+
"value": [
|
|
17
|
+
["chas", "tv", 1],
|
|
18
|
+
["elec", "stereo", 1],
|
|
19
|
+
["tube", "tv", 1],
|
|
20
|
+
["cone", "tv", 2],
|
|
21
|
+
["cone", "stereo", 2],
|
|
22
|
+
["chas", "stereo", 1],
|
|
23
|
+
["cone", "speaker", 1],
|
|
24
|
+
["psup", "tv", 1],
|
|
25
|
+
["psup", "stereo", 1],
|
|
26
|
+
["elec", "tv", 2],
|
|
27
|
+
["elec", "speaker", 1]
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"profits": {
|
|
31
|
+
"dimensions": ["prod"],
|
|
32
|
+
"value": [75, 50, 35]
|
|
33
|
+
},
|
|
34
|
+
"inventory": {
|
|
35
|
+
"comment": "In this example, the inventory values are given in a table.",
|
|
36
|
+
"indexCols": ["part"],
|
|
37
|
+
"value": [
|
|
38
|
+
["chas", 450],
|
|
39
|
+
["tube", 250],
|
|
40
|
+
["cone", 800],
|
|
41
|
+
["psup", 450],
|
|
42
|
+
["elec", 600]
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"variables": {
|
|
47
|
+
"x": {
|
|
48
|
+
"comment": "The x array is dimensioned using the prod index.",
|
|
49
|
+
"dimensions": ["prod"],
|
|
50
|
+
"value": 0,
|
|
51
|
+
"lower": 0,
|
|
52
|
+
"finalValue": []
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"constraints": {
|
|
56
|
+
"comment": "Constraints are entered in standard form, i.e. sumproduct(parts, x) - inventory <= 0. parts[p, ] retrieves coefficients for all products containing the part, cone. parts[,'tv'] would retrieve coefficients for all parts used to build a TV. Both results are vertical arrays.",
|
|
57
|
+
"for(p in 'part')": {
|
|
58
|
+
"cons[p]": {
|
|
59
|
+
"formula": "sumproduct(parts[p, ], x) - inventory[p]",
|
|
60
|
+
"upper": 0
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"objective": {
|
|
65
|
+
"total": {
|
|
66
|
+
"formula": "sumproduct(x, profits)",
|
|
67
|
+
"type": "maximize",
|
|
68
|
+
"finalValue": []
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProductMixTable5",
|
|
3
|
+
"modelDescription": "RASON Product Mix Example: This example solves the same model as UGProductMixTable1 through 4. In this example, 1. the inventory values are supplied as upper bounds to each of the parts constraints, 2. The final values of the profits table will be included in the result, 3.Each constraint is entered separately.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"data": {
|
|
6
|
+
"parts": {
|
|
7
|
+
"indexCols": ["part", "prod"],
|
|
8
|
+
"value": [
|
|
9
|
+
["chas", "tv", 1],
|
|
10
|
+
["elec", "stereo", 1],
|
|
11
|
+
["tube", "tv", 1],
|
|
12
|
+
["cone", "tv", 2],
|
|
13
|
+
["cone", "stereo", 2],
|
|
14
|
+
["chas", "stereo", 1],
|
|
15
|
+
["cone", "speaker", 1],
|
|
16
|
+
["psup", "tv", 1],
|
|
17
|
+
["psup", "stereo", 1],
|
|
18
|
+
["elec", "tv", 2],
|
|
19
|
+
["elec", "speaker", 1]
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"profits": {
|
|
23
|
+
"comment": "In this example, the profits table will be returned in the results, due to the presence of the finalValue property.",
|
|
24
|
+
"dimensions": ["prod"],
|
|
25
|
+
"value": [75, 50, 35],
|
|
26
|
+
"binding": "get",
|
|
27
|
+
"finalValue": []
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"variables": {
|
|
31
|
+
"x": {
|
|
32
|
+
"dimensions": ["prod"],
|
|
33
|
+
"value": 0,
|
|
34
|
+
"lower": 0,
|
|
35
|
+
"finalValue": []
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"constraints": {
|
|
39
|
+
"comment": "Each constraint is entered separately. Recall that parts['cone', ] retrieves coefficients for all products containing the part, cone, and parts[,'tv'] would retrieve coefficients for all parts used to build a TV. Both results are vertical arrays. The inventory data is supplied as an upper bound to each constraint.",
|
|
40
|
+
"c1": {
|
|
41
|
+
"formula": "sumproduct(parts['chas',], x)",
|
|
42
|
+
"upper": 450
|
|
43
|
+
},
|
|
44
|
+
"c2": {
|
|
45
|
+
"formula": "sumproduct(parts['tube',], x)",
|
|
46
|
+
"upper": 250
|
|
47
|
+
},
|
|
48
|
+
"c3": {
|
|
49
|
+
"formula": "sumproduct(parts['cone',], x)",
|
|
50
|
+
"upper": 800
|
|
51
|
+
},
|
|
52
|
+
"c4": {
|
|
53
|
+
"formula": "sumproduct(parts['psup',], x)",
|
|
54
|
+
"upper": 450
|
|
55
|
+
},
|
|
56
|
+
"c5": {
|
|
57
|
+
"formula": "sumproduct(parts['elec',], x)",
|
|
58
|
+
"upper": 600
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"objective": {
|
|
62
|
+
"total": {
|
|
63
|
+
"formula": "sumproduct(x, profits)",
|
|
64
|
+
"type": "maximize",
|
|
65
|
+
"finalValue": []
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProjectSelect0Example",
|
|
3
|
+
"modelDescription": "RASON Example - Simulation Optimization: This example is discussed in the chapter, Defining Your Stochastic Optimization Model, within the RASON User Guide, downloadable from the Help tab. This example is a capital budgeting problem, where the projects being considered for funding have uncertain future cash flows. In this example, simulation optimization is used to find a solution using the Evolutionary Engine. Assume eight different capital projects are proposed for funding in your company. Each one has a known initial investment. Each project has a 90% chance of success, and if a project succeeds, it will have an uncertain (but positive) future cash flow. Funding all eight projects would require a total initial investment of $2.5 million, but our capital budget is only $1.5 million. Hence, we must choose a subset of the projects to fund that will maximize our expected total future cash flow, while ensuring that our total initial investment does not exceed our $1.5 million budget.",
|
|
4
|
+
"comment": "Note that modelType is set to 'optimization', rather than 'simulation'. If modelType=simulation and POST rason.net/api/model/{nameorid}/solve is called to solve a stochastic optimization model, the workflow engine will run a simulation, only. In order to solve the model using stochastic optimization, you must specify 'modelType' = 'optimization'.",
|
|
5
|
+
"modelType": "optimization",
|
|
6
|
+
"modelSettings": {
|
|
7
|
+
"comment": "When the model option simulationOptimization is set to True, the Evolutionary engine will be used to solve the model. The idea behind simulation optimization is straightforward: For each set of values for the decision variables considered by the optimizer, we perform one simulation, a compute user-specified summary measure – such as PsiMean(cash) in the Project Selection model – for the constraints and/or objective that depend on uncertainty. The optimizer uses these summary measures to decide what set of values it should try next for the decision variables – and the process is repeated. The great strength of simulation optimization is its generality – but this is also its weakness: It requires a new simulation at each step of the optimization, and because the method assumes no structure in the model, in general the number of steps can grow exponentially with the number of variables and constraints. ",
|
|
8
|
+
"simulationOptimization": true,
|
|
9
|
+
"numTrials": 1000
|
|
10
|
+
},
|
|
11
|
+
"engineSettings": {
|
|
12
|
+
"comment": "The random seed setting is set to 1 in order to create reproducible results.",
|
|
13
|
+
"randomSeed": 1
|
|
14
|
+
},
|
|
15
|
+
"variables": {
|
|
16
|
+
"x": {
|
|
17
|
+
"comment": "The x decision variable array will hold our 0-1 (binary) decision variables. If a variable is set to 1, the project is selected. If a variable is set to 0, the project is not selected.",
|
|
18
|
+
"dimensions": [ 8 ],
|
|
19
|
+
"type": "binary",
|
|
20
|
+
"finalValue": []
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"uncertainVariables": {
|
|
24
|
+
"comment": "To model the uncertainty in this problem, PSI functions are used that define uncertain variables with probability distributions within the uncertainVariables section. ",
|
|
25
|
+
"successCashFlow": {
|
|
26
|
+
"comment": "The uncertain variable, successCashFlow models the cash flow of a successful project. It is created here with 8 elements. Then the array is populated using the PsiTriangular() function, specifying a minimum, most likely and maximum cash flow for each of the 8 projects.",
|
|
27
|
+
"dimensions": [ 8 ]
|
|
28
|
+
},
|
|
29
|
+
"successCashFlow[1]": {
|
|
30
|
+
"comment": "Models cash flow for project 1.",
|
|
31
|
+
"formula": "PsiTriangular(400000, 500000, 900000)"
|
|
32
|
+
},
|
|
33
|
+
"successCashFlow[2]": {
|
|
34
|
+
"comment": "Models cash flow for project 2.",
|
|
35
|
+
"formula": "PsiTriangular(500000, 750000, 1250000)"
|
|
36
|
+
},
|
|
37
|
+
"successCashFlow[3]": {
|
|
38
|
+
"comment": "Models cash flow for project 3.",
|
|
39
|
+
"formula": "PsiTriangular(500000, 1000000,1500000)"
|
|
40
|
+
},
|
|
41
|
+
"successCashFlow[4]": {
|
|
42
|
+
"comment": "Models cash flow for project 4.",
|
|
43
|
+
"formula": "PsiTriangular(400000, 600000, 900000)"
|
|
44
|
+
},
|
|
45
|
+
"successCashFlow[5]": {
|
|
46
|
+
"comment": "Models cash flow for project 5.",
|
|
47
|
+
"formula": "PsiTriangular(250000, 500000, 750000)"
|
|
48
|
+
},
|
|
49
|
+
"successCashFlow[6]": {
|
|
50
|
+
"comment": "Models cash flow for project 6.",
|
|
51
|
+
"formula": "PsiTriangular(300000, 500000, 600000)"
|
|
52
|
+
},
|
|
53
|
+
"successCashFlow[7]": {
|
|
54
|
+
"comment": "Models cash flow for project 7.",
|
|
55
|
+
"formula": "PsiTriangular(200000, 450000, 700000)"
|
|
56
|
+
},
|
|
57
|
+
"successCashFlow[8]": {
|
|
58
|
+
"comment": "Models cash flow for project 8.",
|
|
59
|
+
"formula": "PsiTriangular(400000, 500000, 700000)"
|
|
60
|
+
},
|
|
61
|
+
"successProbability": {
|
|
62
|
+
"comment": "To model the chance of success we create the variable successProbability (within formulas) using the probability distribution, =PsiBinomial(1,0.9). On each trial, this distribution returns 1 with probability 90% and 0 with probability 10%.",
|
|
63
|
+
"dimensions": [ 8 ],
|
|
64
|
+
"formula": "PsiBinomial(1, 0.9)"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"formulas": {
|
|
68
|
+
"comment": "In formulas, cash multiplies the net cash flow from each project, expected cash flow minus the initial investment, by the x array which holds our binary decision variables.",
|
|
69
|
+
"initialInvest": {
|
|
70
|
+
"value": [ 325000, 450000, 550000, 300000, 150000, 250000, 150000, 325000 ]
|
|
71
|
+
},
|
|
72
|
+
"cash": {
|
|
73
|
+
"formula": "sumproduct(successCashFlow * successProbability - initialInvest, x)"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"constraints": {
|
|
77
|
+
"comment": "Inside constraints, invest calculates the constraint that ensures that the total initial investment does not exceed $1,500,000, (initialInvest multiplied by the 0-1 decision variables in the x array).",
|
|
78
|
+
"invest": {
|
|
79
|
+
"formula": "sumproduct(initialInvest, x)",
|
|
80
|
+
"upper": 1500000
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"objective": {
|
|
84
|
+
"comment": "The objective maximizes the expected mean of cash by setting the chanceType property to ExpVal. ",
|
|
85
|
+
"total": {
|
|
86
|
+
"type": "maximize",
|
|
87
|
+
"formula": "cash",
|
|
88
|
+
"chanceType": "ExpVal",
|
|
89
|
+
"finalValue": []
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProjectSelect1Example",
|
|
3
|
+
"modelDescription": "RASON Stochastic Optimization Example: This example is a Stochastic LP and is discussed in the chapter, Defining Your Stochastic Optimization Model, within the RASON User Guide (downloadable from the Help tab). The original model, UGProjectSelect0 (Examples -- Models discussed in User Guide -- UGProjectSelect0.json) is solved via Simulation Optimization. However, there are two additional methods besides simulation optimization that can solve Stochastic LPs, stochastic programming and robust optimization. For this model, we will choose a transformation to Stochastic Programming Deterministic Equivalent by replacing simulationOptimization: True with transformStochastic: deterministicEquivalent in modelSettings.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"modelSettings": {
|
|
6
|
+
"comment": "To use stochastic programming deterministic equivalent, set transformStochastic to deterministicEquivalent. The number of trials is set to 1000, the default. The rest of the model remains unchanged from the original example, UGProjectSelect0. ",
|
|
7
|
+
"transformStochastic": "deterministicEquivalent",
|
|
8
|
+
"numTrials": 1000
|
|
9
|
+
},
|
|
10
|
+
"engineSettings": {
|
|
11
|
+
"randomSeed": 1
|
|
12
|
+
},
|
|
13
|
+
"variables": {
|
|
14
|
+
"x": {
|
|
15
|
+
"dimensions": [ 8 ],
|
|
16
|
+
"type": "binary",
|
|
17
|
+
"finalValue": []
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"uncertainVariables": {
|
|
21
|
+
"c": {
|
|
22
|
+
"dimensions": [ 8 ]
|
|
23
|
+
},
|
|
24
|
+
"d": {
|
|
25
|
+
"dimensions": [ 8 ],
|
|
26
|
+
"formula": "PsiBinomial(1, 0.9)"
|
|
27
|
+
},
|
|
28
|
+
"c[1]": {
|
|
29
|
+
"formula": "PsiTriangular(400000, 500000, 900000)"
|
|
30
|
+
},
|
|
31
|
+
"c[2]": {
|
|
32
|
+
"formula": "PsiTriangular(500000, 750000, 1250000)"
|
|
33
|
+
},
|
|
34
|
+
"c[3]": {
|
|
35
|
+
"formula": "PsiTriangular(500000, 1000000,1500000)"
|
|
36
|
+
},
|
|
37
|
+
"c[4]": {
|
|
38
|
+
"formula": "PsiTriangular(400000, 600000, 900000)"
|
|
39
|
+
},
|
|
40
|
+
"c[5]": {
|
|
41
|
+
"formula": "PsiTriangular(250000, 500000, 750000)"
|
|
42
|
+
},
|
|
43
|
+
"c[6]": {
|
|
44
|
+
"formula": "PsiTriangular(300000, 500000, 600000)"
|
|
45
|
+
},
|
|
46
|
+
"c[7]": {
|
|
47
|
+
"formula": "PsiTriangular(200000, 450000, 700000)"
|
|
48
|
+
},
|
|
49
|
+
"c[8]": {
|
|
50
|
+
"formula": "PsiTriangular(400000, 500000, 700000)"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"formulas": {
|
|
54
|
+
"f": {
|
|
55
|
+
"value": [ 325000, 450000, 550000, 300000, 150000, 250000, 150000, 325000 ]
|
|
56
|
+
},
|
|
57
|
+
"cash": {
|
|
58
|
+
"formula": "sumproduct(c * d - f, x)"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"constraints": {
|
|
62
|
+
"invest": {
|
|
63
|
+
"formula": "sumproduct(f, x)",
|
|
64
|
+
"upper": 1500000
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"objective": {
|
|
68
|
+
"total": {
|
|
69
|
+
"type": "maximize",
|
|
70
|
+
"formula": "cash",
|
|
71
|
+
"chanceType": "ExpVal",
|
|
72
|
+
"finalValue": []
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGProjectSelect2Example",
|
|
3
|
+
"modelDescription": "RASON Stochastic Optimization Model: Robust Counterpart: This example is a Stochastic LP. This example is not directly discussed in the Defining Your Stochastic Optimization Model. Rather, this example simply uses the 3rd and final method to solve a stochastic LP. Recall that UGProjectSelect0 solved via simulation optimization and UGProjectSelect1 solved via stochastic transformation using the deterministic method. This example uses the stochastic transformation using the robust counterpart method. To use robust counterpart, simply enter 'robustCounterpart' for 'transformStochastic' in 'modelSettings'. The remainder of the model remains unchanged from UGProjectSelect1.",
|
|
4
|
+
"modelType": "optimization",
|
|
5
|
+
"modelSettings": {
|
|
6
|
+
"comment": "To use the robust counterpart method, simply enter 'transformStochastic':'robustCounterpart'.",
|
|
7
|
+
"transformStochastic": "robustCounterpart",
|
|
8
|
+
"numTrials": 1000
|
|
9
|
+
},
|
|
10
|
+
"engineSettings": {
|
|
11
|
+
"randomSeed": 1
|
|
12
|
+
},
|
|
13
|
+
"variables": {
|
|
14
|
+
"x": {
|
|
15
|
+
"dimensions": [ 8 ],
|
|
16
|
+
"type": "binary",
|
|
17
|
+
"finalValue": []
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"uncertainVariables": {
|
|
21
|
+
"c": {
|
|
22
|
+
"dimensions": [ 8 ]
|
|
23
|
+
},
|
|
24
|
+
"d": {
|
|
25
|
+
"dimensions": [ 8 ],
|
|
26
|
+
"formula": "PsiBinomial(1, 0.9)"
|
|
27
|
+
},
|
|
28
|
+
"c[1]": {
|
|
29
|
+
"formula": "PsiTriangular(400000, 500000, 900000)"
|
|
30
|
+
},
|
|
31
|
+
"c[2]": {
|
|
32
|
+
"formula": "PsiTriangular(500000, 750000, 1250000)"
|
|
33
|
+
},
|
|
34
|
+
"c[3]": {
|
|
35
|
+
"formula": "PsiTriangular(500000, 1000000,1500000)"
|
|
36
|
+
},
|
|
37
|
+
"c[4]": {
|
|
38
|
+
"formula": "PsiTriangular(400000, 600000, 900000)"
|
|
39
|
+
},
|
|
40
|
+
"c[5]": {
|
|
41
|
+
"formula": "PsiTriangular(250000, 500000, 750000)"
|
|
42
|
+
},
|
|
43
|
+
"c[6]": {
|
|
44
|
+
"formula": "PsiTriangular(300000, 500000, 600000)"
|
|
45
|
+
},
|
|
46
|
+
"c[7]": {
|
|
47
|
+
"formula": "PsiTriangular(200000, 450000, 700000)"
|
|
48
|
+
},
|
|
49
|
+
"c[8]": {
|
|
50
|
+
"formula": "PsiTriangular(400000, 500000, 700000)"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"formulas": {
|
|
54
|
+
"f": {
|
|
55
|
+
"value": [ 325000, 450000, 550000, 300000, 150000, 250000, 150000, 325000 ]
|
|
56
|
+
},
|
|
57
|
+
"cash": {
|
|
58
|
+
"formula": "sumproduct(c * d - f, x)"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"constraints": {
|
|
62
|
+
"invest": {
|
|
63
|
+
"formula": "sumproduct(f, x)",
|
|
64
|
+
"upper": 1500000
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"objective": {
|
|
68
|
+
"total": {
|
|
69
|
+
"type": "maximize",
|
|
70
|
+
"formula": "cash",
|
|
71
|
+
"chanceType": "ExpVal",
|
|
72
|
+
"finalValue": []
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGYieldManagement1Example",
|
|
3
|
+
"modelDescription": "RASON Single Simulation Example: This model is discussed in the chapter, Defining a Simulation Model within the Rason User Guide (downloadable from the Help tab). This example is a simple airline revenue management model, also known as a yield management model. the subsequentexamples, UGYieldManagement2 and UGYieldManagement3, will transform this simple simulation model, first into a parameterized model in the next example and then a simulation optimization model in the third example. The example files that are discussed are: UGYieldManagement1.json (a simple simulation model), UGYieldManagement2.json (a model with multiple parameterized simulations) and UGYieldManagement3.json (a simulation optimization model). You can open each example by clicking RASON Examples on the Editor page, then Example models discussed in RASON User Guide.",
|
|
4
|
+
"comment": "The model depicts a hypothetical airline flight from San Francisco to Seattle. The flight has 100 seats, and tickets are $200 per seat. Some passengers who purchase tickets are 'no-shows' whose seats will be empty; in this example we assume that such passengers receive a refund of 50% of their purchase price. To utilize their 'perishable inventory' of seats, the airline would like to sell more than 100 tickets for each flight. But we assume that Federal regulations require that any ticketed passenger who is unable to board the flight due to overbooking is entitled to compensation of 125% of the ticket price. The airline would like to know how much revenue it will generate from each flight, less refunds for no-shows and compensation for 'bumped' passengers. To perform a single simulation (with 1,000 Monte Carlo trials) using click POST rason.net/api/model to POST the model to the RASON Server and then POST rason.net/api/model/{nameorid}/simulate to run the simulation.",
|
|
5
|
+
"modelType": "simulation",
|
|
6
|
+
"modelSettings": {
|
|
7
|
+
"comment": "Sets the number of simulations to 1, the default, and the number of trials to 1000, also the default.",
|
|
8
|
+
"numSimulations": 1,
|
|
9
|
+
"numTrials": 1000
|
|
10
|
+
},
|
|
11
|
+
"engineSettings": {
|
|
12
|
+
"randomSeed": 1
|
|
13
|
+
},
|
|
14
|
+
"data": {
|
|
15
|
+
"comment": "The data section holds constant values used in the model such as ticket price, plane capacity, number of tickets sold, the refund percentage for a no show passenger and the refund percentage for any 'bumped' passengers. ",
|
|
16
|
+
"price": {
|
|
17
|
+
"comment": "ticket price",
|
|
18
|
+
"value": 200
|
|
19
|
+
},
|
|
20
|
+
"capacity": {
|
|
21
|
+
"comment": "number of seats on the plane",
|
|
22
|
+
"value": 100
|
|
23
|
+
},
|
|
24
|
+
"sold": {
|
|
25
|
+
"comment": "number of tickets sold",
|
|
26
|
+
"value": 110
|
|
27
|
+
},
|
|
28
|
+
"refund_no_shows": {
|
|
29
|
+
"comment": "refund percentage for a passenger who misses their flight.",
|
|
30
|
+
"value": 0.5
|
|
31
|
+
},
|
|
32
|
+
"refund_overbook": {
|
|
33
|
+
"comment": "refund percentage for any 'bumped' passengers",
|
|
34
|
+
"value": 1.25
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"uncertainVariables": {
|
|
38
|
+
"no_shows": {
|
|
39
|
+
"comment": "The uncertain quantity in this model is the number of no-shows; hence we should model this with an uncertain variable. The number of no-shows will depend on the number of tickets sold. After some research, it is decided to use a LogNormal distribution to model the number of no-shows. The expected value of this uncertain variable will be returned in the results, due to the presence of the 'mean' property.",
|
|
40
|
+
"formula": "PsiLogNormal(0.1*sold, 0.06*sold)",
|
|
41
|
+
"mean": []
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"formulas": {
|
|
45
|
+
"comment": "Within formulas, the formula for show_ups contains the ROUND(no_shows,0) function to ensure that the number of no-shows is an integer value – and this is used to compute the net revenue in the revenue uncertain function.",
|
|
46
|
+
"show_ups": {
|
|
47
|
+
"formula": "sold - Round(no_shows, 0)"
|
|
48
|
+
},
|
|
49
|
+
"overbook": {
|
|
50
|
+
"formula": "Max(0, show_ups - capacity)"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"uncertainFunctions": {
|
|
54
|
+
"revenue": {
|
|
55
|
+
"comment": "The airline would like to know how much revenue it will generate from each flight, less refunds for no-shows and compensation for 'bumped' passengers. This net revenue amount is calculated in revenue within uncertainFunctions, for any specific number of tickets sold (110 above) and number of no-shows (5 above). The expected value of this uncertain function, along with the function's percentiles and all 1000 trial values will be returned in the results, due to the presence of the 'mean', percentiles and trials properties, respectively.",
|
|
56
|
+
"formula": "price*(sold - refund_no_shows*Round(no_shows, 0) - refund_overbook*overbook)",
|
|
57
|
+
"mean": [],
|
|
58
|
+
"percentiles": [],
|
|
59
|
+
"trials": []
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGYieldManagement2Example",
|
|
3
|
+
"modelDescription": "RASON Parametric Simulation Model: In the simulation results for the original model, UGYieldMangement1, the mean or expected net revenue is about $20,000. The 10th percentile equals 19,950, which infers that if 110 tickets are sold, the revenue earned is almost as much as a full flight 90% of the time. (Full flight revenue = 100*200) This leads to the question, should we sell more tickets? How many tickets can we sell in order to increase revenue? One could simply enter various values for 'sold', each time recording the revenue value to see if it increases or decreases. However, entering the parameter PsiSimParam() allows multiple values to be entered and simulations performed, all at once!",
|
|
4
|
+
"comment": "In this example, a simulation parameter has been entered into a new section, 'parameters', and the number of simulations (numSimulations) has been set to 41 within 'modelSettings'. RASON will perform 41 simulations. In the first simulation, a value of 110 will be used for 'sold'. In the 2nd simulation, a value of 111 will be used for sold, in the third, a value of 112, etc...all the way to the 41st simulation which will use 150 for 'sold' ",
|
|
5
|
+
"modelType": "simulation",
|
|
6
|
+
"modelSettings": {
|
|
7
|
+
"comment": "Set the number of simulations to 41 to run 41 simulations, each with a different value for 'sold'. To see the results of just one of the simulations, use the simulationIndex property, for example 'simulationIndex':5 will return results of (only) the 5th simulation.",
|
|
8
|
+
"numSimulations": 41,
|
|
9
|
+
"numTrials": 1000
|
|
10
|
+
},
|
|
11
|
+
"engineSettings": {
|
|
12
|
+
"randomSeed": 1
|
|
13
|
+
},
|
|
14
|
+
"parameters": {
|
|
15
|
+
"comment": "The PsiSimParam will vary the value for 'sold' each time a simulation is performed. Each value of the PsiSimParam will be returned in the results due to the presence of the finalValue property.",
|
|
16
|
+
"sold": {
|
|
17
|
+
"formula": "PsiSimParam(110,150)",
|
|
18
|
+
"finalValue": []
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"data": {
|
|
22
|
+
"comment": "The data section remains unchanged from UGYieldManagement1, except sold has been deleted as it now appears in the parameters section above.",
|
|
23
|
+
"price": {
|
|
24
|
+
"value": 200
|
|
25
|
+
},
|
|
26
|
+
"capacity": {
|
|
27
|
+
"value": 100
|
|
28
|
+
},
|
|
29
|
+
"refund_no_shows": {
|
|
30
|
+
"value": 0.5
|
|
31
|
+
},
|
|
32
|
+
"refund_overbook": {
|
|
33
|
+
"value": 1.25
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"uncertainVariables": {
|
|
37
|
+
"comment": "This section remains unchanged from UGYieldManagement1.",
|
|
38
|
+
"no_shows": {
|
|
39
|
+
"formula": "PsiLogNormal(0.1*sold, 0.06*sold)",
|
|
40
|
+
"mean": []
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"formulas": {
|
|
44
|
+
"comment": "This section remains unchanged from UGYieldManagement1.",
|
|
45
|
+
"show_ups": {
|
|
46
|
+
"formula": "sold - Round(no_shows, 0)"
|
|
47
|
+
},
|
|
48
|
+
"overbook": {
|
|
49
|
+
"formula": "Max(0, show_ups - capacity)"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"uncertainFunctions": {
|
|
53
|
+
"comment": "This section remains unchanged from UGYieldManagement1.",
|
|
54
|
+
"revenue": {
|
|
55
|
+
"formula": "price*(sold - refund_no_shows*Round(no_shows, 0) - refund_overbook*overbook)",
|
|
56
|
+
"mean": [],
|
|
57
|
+
"percentiles": [],
|
|
58
|
+
"trials": []
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modelName": "UGYieldManagement3Example",
|
|
3
|
+
"modelDescription": "RASON Simulation Optimization Model: Running multiple parameterized simulations in UGYieldManagement2, and examining the results has given us a good deal of information about the behavior of this simulation model. However, if we take just a few more steps we can answer the question, 'How many tickets should we sell to realize the maximum expected net revenue?' By changing 'sold' from a simulation parameter to a decision variable, we can setup a simulation optimization model. See the Defining Your Stochastic Optimization chapter within the RASON User Guide for a complete discussion of this example and also the previous examples UGYieldManagement 1 and 2.",
|
|
4
|
+
"comment": "Change the modelType property to 'optimization'. If left at 'modelType':'simulation' as in UGYieldManagement 1 and 2, only a simulation will be performed, not a simulation optimization.",
|
|
5
|
+
"modelType": "optimization",
|
|
6
|
+
"modelSettings": {
|
|
7
|
+
"comment": "Replace numSimulations: 41 with simulationOptimization: True in modelSettings. Setting simulationOptimization to true will run a simulation optimization. The evolutionary engine must be selected in engineSettings below.",
|
|
8
|
+
"simulationOptimization": true,
|
|
9
|
+
"numTrials": 1000
|
|
10
|
+
},
|
|
11
|
+
"engineSettings": {
|
|
12
|
+
"comment": "In order to run a simulation optimization, you must set the engine to 'Evolutionary'. The random seed option is set to provide reproducible results.",
|
|
13
|
+
"engine": "Evolutionary",
|
|
14
|
+
"randomSeed": 1
|
|
15
|
+
},
|
|
16
|
+
"variables": {
|
|
17
|
+
"comment": "Replace parameters with variables and define sold as an integer variable (since we can't sell fractional tickets) with a lower bound of 0 (since we can't sell a negative number of tickets). We are interested in the value of this variable in the solution, so we must ask for the finalValue to be returned in the Result.",
|
|
18
|
+
"sold": {
|
|
19
|
+
"lower": 0,
|
|
20
|
+
"upper": 500,
|
|
21
|
+
"type": "integer",
|
|
22
|
+
"finalValue": []
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"data": {
|
|
26
|
+
"comment": "The data section remains unchanged from UGYieldManagement 2.",
|
|
27
|
+
"price": {
|
|
28
|
+
"value": 200
|
|
29
|
+
},
|
|
30
|
+
"capacity": {
|
|
31
|
+
"value": 100
|
|
32
|
+
},
|
|
33
|
+
"refund_no_shows": {
|
|
34
|
+
"value": 0.5
|
|
35
|
+
},
|
|
36
|
+
"refund_overbook": {
|
|
37
|
+
"value": 1.25
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"uncertainVariables": {
|
|
41
|
+
"comment": "The uncertainVariables section remains unchanged from UGYieldManagement 2.",
|
|
42
|
+
"no_shows": {
|
|
43
|
+
"formula": "PsiLogNormal(0.1*sold, 0.06*sold)"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"formulas": {
|
|
47
|
+
"comment": "The formulas section remains unchanged from UGYieldManagement 2.",
|
|
48
|
+
"show_ups": {
|
|
49
|
+
"formula": "sold - Round(no_shows, 0)"
|
|
50
|
+
},
|
|
51
|
+
"overbook": {
|
|
52
|
+
"formula": "Max(0, show_ups - capacity)"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"objective": {
|
|
56
|
+
"comment": "The objective section remains unchanged from UGYieldManagement 2.",
|
|
57
|
+
"revenue": {
|
|
58
|
+
"formula": "price*(sold - refund_no_shows*Round(no_shows, 0) - refund_overbook*overbook)",
|
|
59
|
+
"chanceType": "ExpVal",
|
|
60
|
+
"type": "maximize",
|
|
61
|
+
"finalValue": []
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|