---
# System prepended metadata

title: 1. Secretary problem by simulation

---

# 1. Secretary problem by simulation

## Problem Description:

We will see N=100 job candidates whose levels are random between 0 and 10. We see the candidates one-by-one, and after seeing each candidate, we have to make a decision on the spot whether to hire this candidate or not. This decision is irrevocable and we cannot change our mind later! We want to _maximize the probability to hire the best out of the N candidates_.

To do so, we will implement the following policy:

* Reject the first R candidates.
* Then hire the first one we see that is better than the best among the first R.

Write a program that decides the optimal threshold R using simulations.


```python=
def simulate(R):
    assert 1 <= R <= 99
    
    lvls = [random.randint(0,10) for i in range(100)]
    max_lvl = max(lvls)
    
    highest_lvl_in_R = 0
    for i in range(R):
        lvl = lvls[i]
        if lvl > highest_lvl_in_R:
            highest_lvl_in_R = lvl
            
    for i in range(100-R):
         lvl = lvls[i]
        
        if lvl >= highest_lvl_in_R:
            if max_lvl == lvl:
                return 1
            else:
                return 0
    
    return 0
   
   
def simulation_process():
    succeses = [0 for i in range(100)]
    
    for i in range(1,100):
        for j in range(1000):
            succeses[i] += simulate(i) 
    

    return succeses.index(max(succeses))

    



            
```
