简单的Python编程解决概率统计中的最优化问题

晚上刚上完课,朋友就发来消息询问,如何用MATLAB求取不同情况下的最小值

聊天截图

具体的函数表达式

可以看出 EM 是一个由kp共同决定的二元函数,它是一个数学期望(这里省略了原题干,有兴趣的读者可在文章的末尾留言

说实话,笔者并不熟悉 MATLAB 的相关操作,MATLAB 是一个商用的数学建模分析仿真软件,同时也是一门编程语言。但是求解这个最优化问题,我们完全可以用到我们在课堂上学到的 Python 知识.

程序在 Anaconda带的 dupyter notebook 中运行

def optimize(min_k,p): 
    EM_list = []     
    k_list = []
    for k in range(min_k,min_k**2,1):
        EM = 1 - k*(1-p)**k + k
        EM_list.append(EM)
        k_list.append(k)
    min_value = min(EM_list)
    index = EM_list.index(min_value)
    best_k = k_list[index]
    answer = [min_value, best_k]
    return answer

optimize(10,0.0001)

运行的结果还不错,符合我们数学系高材生老沈的预期:

[1.0099955011997892, 10]

那我们接下来继续探索下去,找一找 minimum value of EM responding to the variation of p 的规律

result_list = []
p = 0.0001
while p <= 0.001:
    result_list.append(optimize(10,p))
    p += 0.0001
for i in range(0,9):
    print(result_list[i])

The result of this coding block generally shows us the pattern, which is illustrated bellow:

[1.0099955011997892, 10]
[1.0199820095966388, 10]
[1.0299595323829926, 10]
[1.0399280767462624, 10]
[1.0498876498688219, 10]
[1.059838258928039, 10]
[1.0697799110962176, 10]
[1.0797126135406678, 10]
[1.0896363734236783, 10]

看起来,随着单个事件的概率上升(在该例中是群体发病概率),需要的分组检测次数 to identify the illness 会略有增加。其实在这个例子中都是 2 次。

好了,以上就是今天的分享~

谢谢您的阅读!

你可能感兴趣的:(简单的Python编程解决概率统计中的最优化问题)