# Solving simple stochastic optimization problems with AMPL

**URL:** <https://discuss.ampl.com/t/solving-simple-stochastic-optimization-problems-with-ampl/907>\
**Category:** Support\
**Created:** [January 17, 2024, 9:21pm UTC](https://discuss.ampl.com/t/solving-simple-stochastic-optimization-problems-with-ampl/907 "2024-01-17T21:21:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Firdevs\_Uykun](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/firdevs_uykun/32/528_2.png) [@Firdevs\_Uykun](https://discuss.ampl.com/u/Firdevs_Uykun)\
**Post date:** [January 17, 2024, 9:21pm UTC](https://discuss.ampl.com/t/solving-simple-stochastic-optimization-problems-with-ampl/907/1 "2024-01-17T21:21:29Z")

</div>

For different risk measures as min of CVaR,you wrote below AMPL,I want to do for portfolio like min variance ,how can I do?

```auto
%%writefile model4.mod

param samples > 0; # number of samples
param demand{1..samples} >= 0; # demand for each sample
param cost > 0; # procurement cost of each unit
param retail >= 0; # selling price of each unit
param recover < cost; # liquidation price of each unit
param minrev; # bound on minimum revenue
param maxrev; # bound on maximum revenue
param alpha >= 0, <= 1; # value at risk

var order >= 0; # number of units to order
var sales{i in 1..samples} >= 0, <= demand[i]; # sales of each sample
var discount{1..samples} >= 0; # scraped units of each sample
var profit{1..samples} >= minrev, <= maxrev; # profit of each sample
var nu >= minrev, <= maxrev;
var excess{1..samples} >= 0, <= maxrev - minrev;

# minimize CVaR
minimize obj: nu + (1.0 / ((1 - alpha) * samples)) * sum{i in 1..samples} excess[i];

# profit of each sample
s.t. sample_profit {i in 1..samples}: profit[i] == -cost * order + retail * sales[i] + recover * discount[i];
# sales and discount of each sample
s.t. sample_sales {i in 1..samples}: sales[i] + discount[i] == order;
# relation between excess and profit of each sample
s.t. sample_excess {i in 1..samples}: -profit[i] - nu <= excess[i];

```

---

<div class="post-metadata">

**Author:** ![Firdevs\_Uykun](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/firdevs_uykun/32/528_2.png) [@Firdevs\_Uykun](https://discuss.ampl.com/u/Firdevs_Uykun)\
**Post date:** [January 18, 2024, 8:04am UTC](https://discuss.ampl.com/t/solving-simple-stochastic-optimization-problems-with-ampl/907/2 "2024-01-18T08:04:19Z")

</div>

I did not understand excess[i],how can I construct for portfolio,I want weights,there is no weights?  
I want to solve  
 ![image](https://us1.discourse-cdn.com/flex019/uploads/ampl/original/1X/3938cc5b29821f74f2353c83a7388ba04e69f980.png)  
I wrote for Markowitz minimization variance:  
weekly\_returns = train\_assets.pct\_change().fillna(method=‘bfill’)#dropna var normalde ama o 11 den 10 a dusuruyor periyodumuzu ama ben 11 de devam etmek istiyourm  
mean\_return = weekly\_returns.mean()  
weekly\_returns[“Date”] = weekly\_returns.index.format()  
weekly\_returns.set\_index(“Date”, inplace=True)  
S= np.cov(train\_assets, rowvar=False)  
ampl = AMPL()  
ampl.eval(  
r"“”  
set A ordered;  
param S{A, A};  
param mu{A};  
param lb default 0;  
param ub default 1;  
var w{A} \>= lb \<= ub;  
minimize portfolio\_variance:  
sum {i in A, j in A} w[i] \* S[i, j] \* w[j];  
s.t. portfolio\_weights:  
sum {i in A} w[i] = 1;  
“”"  
)  
ampl.set[“A”] = tickers  
ampl.param[“S”] = pd.DataFrame(S, index=tickers, columns=tickers)  
ampl.param[“mu”] = mean\_return  
ampl.option[“solver”] = “gurobi”  
ampl.solve()  
What is the equivalent form for CVaR? @fdabrandao
