编码秘书问题(Monte Carlo)-python代码问题

开发人员

尝试通过进行Monte Carlo模拟(不使用e)在python中编写秘书问题。问题的实质在这里:https : //en.wikipedia.org/wiki/Secretary_problem

描述为:想象一个管理员想要从n个可排名的申请人中聘请最好的秘书来担任职位。申请人按随机顺序逐一面试。面试后应立即就每个特定申请人做出决定。一旦被拒绝,申请人将无法被召回。在面试过程中,管理员可以将申请人划分为目前为止所有面试的申请人,但不知道尚未见面的申请人的质量。问题是关于最大化选择最佳申请人的可能性的最佳策略(停止规则)。摘自:https : //www.geeksforgeeks.org/secretary-problem-optimal-stopping-problem/

我要对照其代码检查的表: 从算法到生活

到目前为止,这是我的python代码:

n = 7; # of applicants
m = 10000; # of repeats
plot = np.zeros(1);
        
for i in range (2,m): #multiple runs
    array = np.random.randint(1,1000,n); 
    for j in range(2,n): #over range of array 
        test = 0;
        if array[j] > array[1] and array[j] == array.max():
            plot=plot+1
            test = 1;
            break
        if array[j]> array[1]:
            test = 2;
            break

print(plot/m)
print(array)
print("j = ",j)
print("test = ",test)

我在这里的代码做错了,我无法复制表。在上面的代码中,我尝试完成7 =申请人数,并在'2'之后选出最佳申请人。

plot/m在给出申请人数的情况下应当在第三栏中输出百分比,并且“紧随其后”。

回答了!如下。

附加代码:

import numpy as np
import matplotlib.pyplot as plt
import time
plt.style.use('seaborn-whitegrid')

n = 150  #total number of applicants
nplot = np.empty([1,1])
#take = 3 #not necessary, turned into J below: 

for k in range(2,n):
    m = 10000 #number of repeats 
    plot = np.empty([1,1]);
    
     
    for j in range(1,k):    
        passed = 0
        for i in range (0,m): #multiple runs
            array = np.random.rand(k);
            picked = np.argmax(array[j:]>max(array[0:j])) + j
            best = np.argmax(array)
            if best == picked:
                passed = passed+1
        #print(passed/m)
        plot = np.append(plot,[passed/m])
    #print(plot)
    plot = plot[1:];
    x = range(1,k);
    y = plot
    #print("N = ",k)
    print("Check ",plot.argmax()," if you have ",k," applicants", round(100* plot.max(),2),"% chance of finding the best applicant")
    nplot =np.append(nplot,plot.max())
# Plot: 
nplot = nplot[1:];
x = range(2,n);
y = nplot
plt.plot(x, y, 'o', color='black');
plt.xlabel("Number of Applicants")
plt.ylabel("Probability of Best Applicant")
克里斯

这似乎可以完成工作,并且比较简单。评论:

  1. 使用argmax来确定谁是最好的秘书,或选择比另一个小组的秘书更好的秘书
  2. 从实值函数中抽取,以减少拥有两名具有相同职等的秘书的几率。

因此:

import numpy as np

n = 7
take = 2
m = 100000
passed = 0
        
for i in range (0,m): #multiple runs
    array = np.random.rand(n);
    picked = np.argmax(array[take:]>max(array[0:take])) + take
    best = np.argmax(array)
    if best == picked:
        passed = passed+1

print(passed/m)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 python Multiprocessing 并行化 Monte Carlo 方法时的问题

来自分类Dev

带有Monte Carlo Simulation计算的数据框下一行问题

来自分类Dev

在Python Monte Carlo方法中使用Gamma函数估算pi

来自分类Dev

在Python中实现Monte Carlo Markov Chain时的错误

来自分类Dev

C++ Monte Carlo 集成:如何在不求和结果的情况下多次运行代码?

来自分类Dev

用Python中的三角分布进行Monte Carlo模拟

来自分类Dev

自定义Python Monte Carlo积分函数低估了多维积分

来自分类Dev

Scala中Pi的Monte Carlo计算

来自分类Dev

4D Monte Carlo集成R

来自分类Dev

Matlab Monte Carlo集成进行循环

来自分类Dev

以下问题的 Python 代码

来自分类Dev

Python代码出现问题。目的是在输入期间编码后缀

来自分类Dev

Python编码/解码问题

来自分类Dev

Python ascii编码问题

来自分类Dev

Python unicode编码问题

来自分类Dev

Python ascii编码问题

来自分类Dev

python中的编码问题

来自分类Dev

Python JSON编码问题

来自分类Dev

Python编码问题?

来自分类Dev

使用Monte Carlo与scipy.integrate.nquad的不同积分结果

来自分类Dev

Poker-Monte-Carlo模拟的优化手评估算法

来自分类Dev

为什么这个Monte Carlo Haskell程序这么慢?

来自分类Dev

使用Monte Carlo方法并行计算Pi

来自分类Dev

为什么这个Monte Carlo Haskell程序这么慢?

来自分类Dev

使用Sucht OMP在CPU上并行化Monte Carlo

来自分类Dev

蒙特卡洛皮(Monte Carlo Pi)不准确

来自分类Dev

Python代码中的隐性问题

来自分类Dev

在Python中编译C代码的问题

来自分类Dev

我的代码中的Python 3.1“ Else:”问题