Solver Platform SDK - Monte Carlo Simulation Example
Monte Carlo Simulation Example
The following example code is written in C#, but it's almost identical in C++, and very similar in Visual Basic, VB.NET, Java, and MATLAB. Complete example source codein all these languages is included with the Solver Platform SDK.
// Example program calling the Monte
Carlo Simulation engine.
// Given two uncertain variables X and Y with distributions:
// X = [automatically fitted to sample data] and Y = PsiNormal(1,1)
// Perform 1000 trials and calculate the functions: X + Y and X * Yprivate Engine_Action
SimEvaluator_OnEvaluate(Evaluator evaluator)
{
// First, we ask for the current
uncertain variable values
double [] Var =
evaluator.Problem.VarUncertain.Value.Array;
m_Log.Dump("Evaluation x1 = " + Var[0] +
", x2 = " + Var[1] + ", Trial = " +
evaluator.Problem.Engine.Stat.FunctionEvals);
// We compute the function values
given the current variable values
evaluator.Problem.FcnUncertain.Value[0] = Var[0] +
Var[1]; // X+Y
evaluator.Problem.FcnUncertain.Value[1] = Var[0] *
Var[1]; // X*Y
return Engine_Action.Continue;
}private void Example18()
{
m_Log.Clear();
try
{
int nvars = 2, nfcns = 2;
double [] correl = new double [] { 1.0, 0.5,
0.5, 1.0 };
double [] sample = new double [] //
for distribution fitting
{-3.44,0.69,-0.11,1.25,0.73,-1.66,1.57,-1.64,-0.51,-0.19,
1.24,-0.96,1.40,-0.01,-0.77,0.91,-0.72,0.85,-0.20,0.59,
1.65,1.40,0.19,-1.38,-0.45,-0.71,1.25,-1.18,-0.33,2.33,
0.73,-0.75,-0.63,-1.06,-0.71,0.33,-0.82,0.43,0.10,0.88,
0.11,-0.88,0.02,-0.94,0.05,-0.06,-1.87,-2.03,-0.89,1.14};
using (Problem problem = new Problem(Solver_Type.Simulate, nvars, nfcns))
{
problem.Evaluators[Eval_Type.Sample].OnEvaluate += new
EvaluateEventHandler(SimEvaluator_OnEvaluate);
problem.Solver.NumTrials =
1000;
Distribution dist = new Distribution();
dist.InitSample(sample); // set up the sample
dist.AutoFit(true,
0.95); // continuous data, 95% confidence
if (dist.FitSuccess)
{
m_Log.Dump("Distribution Type = " + dist.Name);
for (int i=0; i< dist.NumParams;i++)
m_Log.Dump("Param[" + i + "] = " + dist.Params[i]);
}
else return; //
fitting unsuccessful
problem.Model.VarDistribution[0] = dist; //
assign the fitted distribution
problem.Model.VarDistribution[1] = // define
an analytic distribution
new Distribution("PsiNormal(1,1)");
problem.Model.DistCorrelations = //
define the correlations
new DoubleMatrix(Array_Order.ByRow, nvars, nvars, correl);
problem.Solver.Simulate(); // perform the
simulation
m_Log.Dump("Status = " +
problem.Solver.SimulateStatus);
//
display simulation results
m_Log.Dump("\r\nStatistics
on Uncertain Variables");
for (int i = 0; i < nvars; i++)
m_Log.Dump("\r\nVariable " + i);
m_Log.Dump("Minimum = " +
problem.VarUncertain.Statistics.Minimum[i]);
m_Log.Dump("Maximum = " +
problem.VarUncertain.Statistics.Maximum[i]);
m_Log.Dump("Mean = " +
problem.VarUncertain.Statistics.Mean[i]);
m_Log.Dump("StdDev = " +
problem.VarUncertain.Statistics.StdDev[i]);
m_Log.Dump("Variance = " +
problem.VarUncertain.Statistics.Variance[i]);
m_Log.Dump("Skewness = " +
problem.VarUncertain.Statistics.Skewness[i]);
m_Log.Dump("Kurtosis = " +
problem.VarUncertain.Statistics.Kurtosis[i]);
m_Log.Dump("10th Percentile = " +
problem.VarUncertain.Percentiles[i, 9]);
m_Log.Dump("90th Percentile = " +
problem.VarUncertain.Percentiles[i, 89]);
m_Log.Dump("\r\nStatistics
on Uncertain Functions");
for (int i = 0; i < nfcns; i++)
m_Log.Dump("\r\nFunction " + i);
m_Log.Dump("Minimum = " +
problem.FcnUncertain.Statistics.Minimum[i]);
m_Log.Dump("Maximum = " +
problem.FcnUncertain.Statistics.Maximum[i]);
m_Log.Dump("Mean = " +
problem.FcnUncertain.Statistics.Mean[i]);
m_Log.Dump("StdDev = " +
problem.FcnUncertain.Statistics.StdDev[i]);
m_Log.Dump("Variance = " +
problem.FcnUncertain.Statistics.Variance[i]);
m_Log.Dump("Skewness = " +
problem.FcnUncertain.Statistics.Skewness[i]);
m_Log.Dump("Kurtosis = " +
problem.FcnUncertain.Statistics.Kurtosis[i]);
m_Log.Dump("10th Percentile = " +
problem.FcnUncertain.Percentiles[i,9]);
m_Log.Dump("90th Percentile = " +
problem.FcnUncertain.Percentiles[i,89]);
}
}
catch (SolverException ex)
{
m_Log.Dump("Exception " +
ex.ExceptionType);
m_Log.Dump("Exception " +
ex.Message);
}
}
< Back to Monte Carlo Simulation Summary
< Back to Solver Platform SDK Product Overview
|
Platform Capabilities
What's New in Version 9.0
Problem Size and Speed
New Kinds of Problems
Upward Compatibility
Language/OS Support
Source Code Examples
Object-Oriented API
Wizards and IntelliSense
MPS, LP, OSiL Files
Server Applications
Monte Carlo Simulation
Linear Programming
Mixed-Integer Problems
Portfolio Optimization-QP
Conic Optimization-SOCP
Nonlinear Optimization
Global Optimization
Genetic Algorithms
Constraint Programming
Plug-in Solver Engines
Download Free Trial
How to Order Your Copy
Support and Upgrades
Runtime Licensing

Risk Solver Platform is an
integrated superset of Premium
Solver Platform and Risk Solver
with best-of-breed simulation,
best-of-breed optimization, and
new stochastic programming and
robust optimization capabilities
you can't get anywhere else.
Premium Solver Platform, our
premier tool for conventional
optimization, uses new PSI
Technology to automatically
analyze and transform your
Excel model. It solves every type
and size of problem, using built-in
and plug-in Solver Engines.
Premium Solver, our basic
upgrade for the Excel Solver,
solves up to 10X larger problems
at much higher speed, and
solves new kinds of problems
with our Evolutionary Solver.

Risk Solver Platform is an
integrated superset of Premium
Solver Platform and Risk Solver
with best-of-breed simulation,
best-of-breed optimization, and
new stochastic programming and
robust optimization capabilities
you can't get anywhere else.
Risk Solver Premium integrates
all the features of Premium Solver and Risk Solver, with far
superior optimization and higher
performance, easier to use
simulation, for about the same
price as competitive products for
Monte Carlo simulation.
Risk Solver is the easiest and
fastest tool available for risk
analysis of your Excel models,
using Monte Carlo simulation.
Evaluate thousands of scenarios
in seconds, and see instantly
updated charts and statistics,
each time you ask "what if".
Software Developer Tools:
Solver Platform SDK makes it
easy to solve any type or size of
optimization problem in your
Visual Basic, VB.NET, C/C++,
C#, Java, or MATLAB program.
And it's easy to deploy your
application with our flexible
licensing for software vendors
and corporate developers.
|