# One\_period\_mean variance

**URL:** <https://discuss.ampl.com/t/one-period-mean-variance/873>\
**Category:** Support\
**Created:** [December 31, 2023, 2:51pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873 "2023-12-31T14:51:52Z")\
**Posts on this page:** 8\
**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:** [December 31, 2023, 2:51pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/1 "2023-12-31T14:51:52Z")

</div>

Hi,I am trying one period mean variance but I got solver error:  
min\_var = AMPL()  
min\_var.eval(  
r"“”

```
 set A ordered;
 
 param risk_aversion;
 param S{A, A};
 param mu{A};
 param R_min;
 param R_max;
 param Var_min;
 param Var_max;
 param lb default 0;
 param ub default 1;
 var w{A} >= lb <= ub;
        
 maximize risk_adjusted_return:
     risk_aversion*((sum {i in A} mu[i] * w[i]- R_min)/(R_max-R_min))+
     (1-risk_aversion)*((sum {i in A, j in A} w[i] * S[i, j] * w[j]- Var_min)/(Var_max - Var_min));
 s.t. portfolio_weights:
 sum {i in A} w[i] = 1;  
 

"""

```

)

min\_var.set[“A”] = stocks  
min\_var.param[“S”] = risk\_models.risk\_matrix(X, method=“sample\_cov”)  
min\_var.option[“solver”] = “gurobi”  
min\_var.param[“mu”] = expected\_returns.mean\_historical\_return(X)  
min\_var.param[“risk\_aversion”] = lr\_predictions  
min\_var.param[“R\_min”]=R\_min  
min\_var.param[“R\_max”]=R\_max  
min\_var.param[“Var\_min”]=Var\_min  
min\_var.param[“Var\_max”]=Var\_max  
min\_var.solve()  
min\_var.get\_data(“w”).to\_pandas().plot.barh()  
then

 ![image](https://us1.discourse-cdn.com/flex019/uploads/ampl/original/1X/e28b86185515e099b18f76c595b31f3df999a616.png)  
risk\_aversion=0.36340402

---

<div class="post-metadata">

**Author:** ![4er](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/4er/32/530_2.png) [@4er](https://discuss.ampl.com/u/4er)\
**Post date:** [January 1, 2024, 2:55pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/2 "2024-01-01T14:55:00Z")

</div>

AMPL is reporting an error when the `solve` command is processing your objective function:

```auto
maximize risk_adjusted_return:
     risk_aversion*((sum {i in A} mu[i] * w[i]- R_min)/(R_max-R_min))+
     (1-risk_aversion)*((sum {i in A, j in A} w[i] * S[i, j] * w[j]- Var_min)/(Var_max - Var_min));

```

The message `can't` `compute` `0.363404/0` indicates that a division by zero is occurring when AMPL tries to evaluate the coefficients in your objective. Add the following statement just before `min_var.solve()` to check the values that AMPL has for the two expressions that the objective is dividing by:

```auto
min_var.eval( "display R_max-R_min, Var_max-Var_min;" )

```

What output do you see? If `R_max-R_min` or `Var_max-Var_min` is zero, then you can check your Python program to determine the cause. Otherwise, you can get more help by posting your entire program, including the data.

---

<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 4, 2024, 8:18am UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/3 "2024-01-04T08:18:04Z")

</div>

![image](https://us1.discourse-cdn.com/flex019/uploads/ampl/original/1X/92df0102cd8d5af2831026bd94ba6fa2487699ae.png)  
R\_max=R\_min,how can I solve the issue?

---

<div class="post-metadata">

**Author:** ![4er](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/4er/32/530_2.png) [@4er](https://discuss.ampl.com/u/4er)\
**Post date:** [January 4, 2024, 9:17pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/4 "2024-01-04T21:17:27Z")

</div>

Are you expecting R\_max to be greater than R\_min? Both R\_max and R\_min are params of the model, so if you are expecting R\_max \> R\_min but AMPL is seeing R\_max = R\_min, then you should look for an error in your Python program.

Or, do you actually want your model to work when R\_max = R\_min? Then you cannot use an objective function that divides by R\_max – R\_min. You will have to reformulate the objective so that it does not divide by R\_max – R\_min. I cannot tell you what changes to make, however, since I am not familiar with the application that you are modeling.

---

<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 5, 2024, 6:05am UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/5 "2024-01-05T06:05:14Z")

</div>

R\_max and R\_min corresponding return values of variance min and variance max models,they have to be in the final model,I will do scaling,It is better when R\_max=R\_min solver still works,but how,model gives me like that.

---

<div class="post-metadata">

**Author:** ![4er](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/4er/32/530_2.png) [@4er](https://discuss.ampl.com/u/4er)\
**Post date:** [January 5, 2024, 7:18pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/6 "2024-01-05T19:18:39Z")

</div>

I suggest that you concentrate on answering the following question:

> When R\_max = R\_min, what expression do you want to use for the objective function?

If you can answer this question, then it should be possible to tell you how to write an AMPL model that works when R\_max = R\_min and also when R\_max \> R\_min.

---

<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 5, 2024, 7:47pm UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/7 "2024-01-05T19:47:37Z")

</div>

![image](https://us1.discourse-cdn.com/flex019/uploads/ampl/original/1X/674255a2be67e87bda9152512394dddfd9d503ba.png)

---

<div class="post-metadata">

**Author:** ![4er](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.ampl.com/4er/32/530_2.png) [@4er](https://discuss.ampl.com/u/4er)\
**Post date:** [January 6, 2024, 12:27am UTC](https://discuss.ampl.com/t/one-period-mean-variance/873/8 "2024-01-06T00:27:42Z")

</div>

When R\_{max} = R\_{min}, you cannot use this expression for your objective, because it becomes

{\rm max} \,\,\, \lambda \frac{R-R\_{min}}{0} - (1-\lambda) \frac{G-G\_{min}}{G\_{max}-G\_{min}}

For the case when R\_{max} = R\_{min}, you need a different expression that does not have 0 in the denominator of a fraction.
