通过案例研究二项分布和泊松分布之间关系(2)

news2025/4/17 14:36:37

通过案例研究二项分布和泊松分布之间关系

    • 2. 汽车出事故的概率p与保险公司盈利W之间的关系
    • 3.通过遗传算法多次迭代计算控制p为多少时公司盈利最大
      • (1) 计算过程
      • (2) 结果及分析(计算过程详见附录二程序)
    • 4.改变思路求解固定p为0.01时,保险费用如何设置公司可获得最大利润
      • (1)计算过程
      • (2) 结果及分析(计算过程详见附录三程序):
  • 结论分析
    • 附录二
    • 附录三
    • 附录四

书接上回

2. 汽车出事故的概率p与保险公司盈利W之间的关系

运输公司共有n=600辆汽车参加保险,每辆车的保险费用为C=1000,每辆车的赔偿金额为L=10000,在一年内每辆汽车出事故的概率为p,且每辆汽车之间是否出事故相互独立, 因此一年内出事故的汽车数量X服从二项分布:X∼b(n,p),其中n=600,p=0.01。
由于保险公司的总盈利为 n ∗ C − X ∗ L , n*C-X*L, nCXL,
我们利用发生事故车辆的期望值,即E(X)=n×p,以此作为预期的事故数量来简化总盈利的计算,故简化后的保险公司总盈利为
W = n × C − n × p × L , W=n×C-n×p×L, W=n×Cn×p×L,
同时上式可以作为W和p之间的关系表达式。
根据上式可以反推出p的表达式
p = ( n × C − W ) / ( n × L ) , p=(n×C-W)/(n×L), p=(n×CW)/(n×L),
代入W=200000,可以求得当盈利200000时p为多少,作为盈利200000的预期事故发生概率的值。
下面将根据上述推导结果,计算并绘制W和p之间的关系图像,如下图II所示.
图II:公司盈利W和每辆车出事故概率p的关系
根据图II所示,公司的盈利W和每辆车出事故的概率p之间的关系是线性递减的。当W=200000时,对应预期的p=0.0067,从而给出了二者的关系,更有利于分析。

3.通过遗传算法多次迭代计算控制p为多少时公司盈利最大

(1) 计算过程

⮚ 适应度函数:利用泊松分布计算出事故数量不超过 k m a x ( k m a x = ( n × C − W ) / L ) kmax(kmax=(n×C-W)/L) kmax(kmax=(n×CW)/L)的累计概率(即未盈利的概率),然后用其补集得到盈利的概率。
⮚ 种群和选择:创建一个初始种群,其中的概率值在[0,0.1]之间,从当前种群中依据适应度选择较高的个体作为父代。
⮚交叉和变异:实现了简单的单点交叉和基于概率的变异。
交叉:基于父代生成两个子代,通过加权平均的方式创建新的个体。
变异:在一定概率下对个体产生小的随机扰动,增强多样性。
⮚迭代:运行遗传算法,通过多次迭代改进种群,寻找最佳事故概率
⮚可视化和输出:输出最终的最佳事故概率及其对应的最大盈利概率,并绘制盈利概率随事故概率变化的图形。

(2) 结果及分析(计算过程详见附录二程序)

图III:事故概率与盈利概率的关系(限制p 小于等于 0.1)
如果事故概率可控制,对于保险公司盈利最大的事故概率为p=0.0699。
由可视化的输出可以看出,当我们固定概率区间为[0,0.1]时,这一限制基于现实生活中事故发生的概率通常不会太高。限制概率有助于保险公司设计出更具有可用性的保险产品,同时控制风险并保持可持续发展。在实际应用中,概率不仅仅是一个理论概念,而是用于制定实际决策的工具。通过掌握如何计算和应用概率,我们能更好地理解和管理不同情况下的风险。

4.改变思路求解固定p为0.01时,保险费用如何设置公司可获得最大利润

保持原有条件p和L不变,找到通过遗传算法得到的最佳的每辆车的保险费用。

(1)计算过程

⮚适应度函数:
我们确保计算出的利润高于p时返回该利润,否则返回负无穷,使得这些不符合盈利条件的个体在选择中被排除。
⮚初始化种群:
在500到5000元的范围内随机产生初始保险费用。生成初始的保险费用种群。
⮚选择:
根据适应度选择具有较高适应度的保险费用个体作为“父代”进行交叉和变异通过计算适应度的概率分布,根据适应度高的个体赋予更高的选择概率。
⮚交叉和变异:
基于父代生成两个新个体(子代)采用加权平均方式,产生新的保险费用。通过随机扰动操作对个体进行修改,增加种群的多样性,确保算法不至于陷入局部最优解生成新个体并保证其保险费用在合理的范围内。
⮚输出结果:
在迭代结束后,输出最佳保险费用C和最大利润,并将两者之间的关系可视化。将利润函数的变化与最佳保险费用进行对比,用图形更直观地展示结果。通过比较当前最佳个体与上一代最佳个体,并在条件下确定是否终止外层循环

(2) 结果及分析(计算过程详见附录三程序):

图IV:保险费用与利润的关系
最佳保险费用C=4183.30元。
最大利润: 1909980.94元。
根据图像及迭代输出的结果进行分析,本次迭代进行了200×1000次的充分迭代,最终输出的结果中最佳保险费用稳定在4683.54元附近,最终的最大利润稳定在2210126.09元附近,对保险公司保险费用的设定上提供了一定的参考价值。

结论分析

本实验通过具体实际的案例研究了二项分布和泊松分布之间关系,并列讨论了案例中保险公司最大盈利W与汽车出事故的概率p之间的关系,具体结论如下:
二项分布是描述n重伯努利试验中某事件成功的次数,而泊松分布是描述在固定的时间或空间内,某事件发生的次数。根据泊松定理可知,当二项分布中的参数n很大,p很小的时候,且λ=n×p保持为常数时,二项分布可以由泊松分布近似,本实验结合具体案例从定量的角度再次印证了泊松定理的正确性。
本实验将二项分布和泊松分布进行对比,并且对问题中的保险公司一年赚钱不少于200000元的概率进行了求解,并展开对保险公司保险费用的定价和保险公司盈利最大值的探讨,充分分析了两个分布的关系,并对实际的生产进行了探究。

附录二

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson
from tqdm import tqdm  # 导入 tqdm 库

# 定义遗传算法参数
POPULATION_SIZE = 100  # 种群大小
GENERATIONS = 100  # 迭代代数
MUTATION_RATE = 0.1  # 变异率
CONVERGENCE_THRESHOLD = 1e-5  # 收敛阈值

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 保险公司参数
n = 600  # 汽车数量
C = 1000  # 每辆车的保险费
L = 100000  # 每辆车的赔偿金额
P = 200000  # 保险公司希望盈利不少于的金额

def fitness_function(p):
    """计算给定事故概率 p 的适应度"""
    k_max = (n * C - P) // L
    prob = 1 - poisson.cdf(k_max, n * p)  # 计算盈利概率
    return prob

def create_population(size):
    """创建初始种群(生成的概率范围在0到0.1之间)"""
    return np.random.rand(size) * 0.1  # 确保范围在 [0, 0.1] 之间

def select_parents(population, fitness_scores):
    """选择适应度较高的父代"""
    probabilities = fitness_scores / fitness_scores.sum()  # 适应度比例
    idx = np.random.choice(np.arange(len(population)), size=2, p=probabilities)
    return population[idx]

def crossover(parents):
    """进行单点交叉"""
    point = np.random.rand()  # 生成交叉点
    child1 = parents[0] * point + parents[1] * (1 - point)
    child2 = parents[1] * point + parents[0] * (1 - point)
    return np.clip([child1, child2], 0, 0.1)  # 保证子代在 [0, 0.1] 之间

def mutate(individual):
    """进行变异操作"""
    if np.random.rand() < MUTATION_RATE:
        return np.clip(individual + np.random.normal(0, 0.01), 0, 0.1)  # 变异范围控制在 [0, 0.1]
    return individual

# 多次迭代直到得到稳定的最佳事故概率
stable_best_prob = None
converged = False

for iteration in tqdm(range(100), desc="Outer Iterations", unit="iteration"):
    population = create_population(POPULATION_SIZE)

    for generation in range(GENERATIONS):
        # 向量化计算所有个体的适应度
        fitness_scores = np.array([fitness_function(p) for p in population])
        new_population = []

        for _ in range(POPULATION_SIZE // 2):
            parents = select_parents(population, fitness_scores)  # 选择父代
            children = crossover(parents)  # 交叉
            new_population.extend(map(mutate, children))  # 变异

        population = np.array(new_population)

    # 找到当前最佳个体
    best_p = population[np.argmax(fitness_scores)]

    # 检查稳定性
    if stable_best_prob is None:
        stable_best_prob = best_p
    elif abs(best_p - stable_best_prob) < CONVERGENCE_THRESHOLD:
        converged = True
    stable_best_prob = best_p  # 更新稳定值

max_profit_probability = fitness_function(stable_best_prob)

print(f"最佳事故概率 p: {stable_best_prob:.4f}")
print(f"最大盈利概率: {max_profit_probability:.4f}")

# 可视化结果
plt.figure(figsize=(16, 9))  # 设置输出图像画幅为16:9
x = np.linspace(0, 0.1, 100)
y = [fitness_function(p) for p in x]
plt.plot(x, y, label='盈利概率')
plt.scatter(stable_best_prob, max_profit_probability, color='red', label='最佳解')
plt.title('事故概率与盈利概率的关系(限制 p ≤ 0.1)',fontsize=16)
plt.xlabel('事故概率 p',fontsize=14)
plt.ylabel('盈利概率',fontsize=14)
plt.legend()
plt.grid()
plt.show()

附录三

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson
from tqdm import tqdm  # 导入 tqdm 库

# 定义遗传算法参数
POPULATION_SIZE = 100  # 种群大小
INNER_GENERATIONS = 200  # 内层迭代代数
OUTER_GENERATIONS = 1000 # 外层迭代代数
MUTATION_RATE = 0.1  # 变异率
CONVERGENCE_THRESHOLD = 1e-5  # 收敛阈值

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 保险公司参数
n = 600  # 汽车数量
p = 0.01  # 每辆车出事故的概率
L = 100000  # 每辆车的赔偿金额
P = 200000  # 保险公司希望盈利不少于的金额

def fitness_function(C):
    """计算给定保险费用 C 的适应度"""
    k_expected = n * p  # 预期出事故的数量
    profit = n * C - k_expected * L  # 利润计算

    # 使得目标是在最大化利润的同时,满足盈利条件
    if profit >= P:
        return profit  # 返回利润
    else:
        return 0  # 如果不满足条件则返回0,表示适应度为0

def create_population(size):
    """创建初始种群(生成的保险费用范围在500到5000之间)"""
    return np.random.uniform(500, 5000, size)  # 保险费用在500到5000元之间

def select_parents(population, fitness_scores):
    """选择适应度较高的父代"""
    probabilities = fitness_scores / fitness_scores.sum()  # 适应度比例
    idx = np.random.choice(np.arange(len(population)), size=2, p=probabilities)
    return population[idx]

def crossover(parents):
    """进行单点交叉"""
    point = np.random.rand()  # 生成交叉点
    child1 = parents[0] * point + parents[1] * (1 - point)
    child2 = parents[1] * point + parents[0] * (1 - point)
    return np.clip([child1, child2], 500, 5000)  # 保证子代在[500, 5000]之间

def mutate(individual):
    """进行变异操作"""
    if np.random.rand() < MUTATION_RATE:
        return np.clip(individual + np.random.normal(0, 100), 500, 5000)  # 变异范围控制在 [500, 5000]
    return individual

# 多次迭代直到得到稳定的最佳保险费用
stable_best_prob = None
converged = False

for outer_iteration in tqdm(range(OUTER_GENERATIONS), desc="Outer Iterations", unit="iteration"):
    population = create_population(POPULATION_SIZE)

    for inner_generation in range(INNER_GENERATIONS):
        fitness_scores = np.array([fitness_function(c) for c in population])  # 计算适应度得分
        new_population = []

        for _ in range(POPULATION_SIZE // 2):
            parents = select_parents(population, fitness_scores)  # 选择父代
            children = crossover(parents)  # 交叉
            new_population.extend(map(mutate, children))  # 变异

        population = np.array(new_population)

    # 找到当前最佳个体
    best_p = population[np.argmax(fitness_scores)]

    # 检查稳定性
    if stable_best_prob is None:
        stable_best_prob = best_p
    elif abs(best_p - stable_best_prob) < CONVERGENCE_THRESHOLD:
        converged = True
    stable_best_prob = best_p  # 更新稳定值

max_profit_probability = fitness_function(stable_best_prob)

print(f"最佳保险费用 C: {stable_best_prob:.2f} 元")
print(f"最大利润: {max_profit_probability:.2f} 元")

# 可视化结果
plt.figure(figsize=(16, 9)) 
x = np.linspace(500, 5000, 100)
y = [fitness_function(c) for c in x]
plt.plot(x, y, label='利润函数')
plt.scatter(stable_best_prob, max_profit_probability, color='red', label='最佳 C')
plt.title('保险费用与利润的关系',fontsize=16)
plt.xlabel('保险费用 C (元)',fontsize=14)
plt.ylabel('利润 (元)',fontsize=14)
plt.legend()
plt.grid()
plt.show()

附录四

import numpy as np
import matplotlib.pyplot as plt

# 保险公司参数
n = 600  # 汽车数量
C = 1000  # 每辆车的保险费
L = 100000  # 每辆车的赔偿金额

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 定义出事故的概率范围
p_values = np.linspace(0, 0.1, 100)  # 从0到0.1取100个点
W_values = n * (C - p_values * L)  # 计算对应的盈利

# 计算当盈利为200000时的p值
target_profit = 200000
p_calculated = (n * C - target_profit) / (n * L)  # 计算概率p
if p_calculated < 0 or p_calculated > 0.1:
    print("计算结果不在合理范围内。")
else:
    print(f"当公司盈利为 {target_profit} 元时,事故概率 p = {p_calculated:.4f}")

# 绘制盈利与概率的关系图
plt.figure(figsize=(10, 6))
plt.plot(p_values, W_values, label='盈利 W', color='blue')
plt.axhline(0, color='red', linestyle='--', label='零盈利线')  # 添加零盈利线
plt.axvline(p_calculated, color='purple', linestyle='--', label=f'p = {p_calculated:.4f}')  # 紫色虚线
plt.scatter(p_calculated, target_profit, color='red', label='盈利 = 200000')  # 红色点

plt.title('公司盈利 W 与每辆车出事故概率 p 的关系',fontsize=16)
plt.xlabel('每辆车出事故的概率 p',fontsize=14)
plt.ylabel('公司盈利 W (元)',fontsize=14)
plt.legend()
plt.grid()
plt.xlim(0, 0.1)  # 限制 x 轴范围
plt.ylim(-50000, 600000)  # 限制 y 轴范围以进行良好查看
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2284458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RISC-V读书笔记4

目录 乘法与除法 RV32F 和 RV32D&#xff1a;单精度和双精度浮点数 原子操作 压缩指令 向量 乘法与除法 RV32M属于扩展的指令&#xff0c;主要扩展的就是便捷的乘法和除法指令。 除法&#xff1a; 商 (被除数− 余数) 除数 被除数 除数 商 余数 余数 被除数− (商 …

【Uniapp-Vue3】request各种不同类型的参数详解

一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get&#xff0c;post和put 三种&#xff0c;默认是get请求。…

大数据学习之SCALA分布式语言三

7.集合类 111.可变set一 112.可变set二 113.不可变MAP集合一 114.不可变MAP集合二 115.不可变MAP集合三 116.可变map一 package com . itbaizhan . chapter07 //TODO 2. 使用 mutable.Map 前导入如下包 import scala . collection . mutable // 可变 Map 集合 object Ma…

基于微信小程序的电子商城购物系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

2000-2020年各省第二产业增加值占GDP比重数据

2000-2020年各省第二产业增加值占GDP比重数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、第二产业增加值占GDP比重 4、范围&#xff1a;31省 5、指标解释&#xff1a;第二产业增加值占GDP比重…

【Docker】Docker入门了解

文章目录 Docker 的核心概念Docker 常用命令示例&#xff1a;构建一个简单的 C 应用容器1. 创建 C 应用2. 创建 Dockerfile3. 构建镜像4. 运行容器 Docker 优势学习 Docker 的下一步 **一、Docker 是什么&#xff1f;****为什么 C 开发者需要 Docker&#xff1f;** **二、核心概…

java求职学习day18

常用的设计原则和设计模式 1 常用的设计原则&#xff08;记住&#xff09; 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 &#xff08;1&#xff09;开闭原则&#xff08;Open Close Principle…

初阶2 类与对象

本章重点 上篇1.面向过程和面向对象初步认识2.类的引入---结构体3.类的定义3.1 语法3.2 组成3.3 定义类的两种方法&#xff1a; 4.类的访问限定符及封装4.1 访问限定符4.2封装---面向对象的三大特性之一 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小 8.this指…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

深度剖析C++17中的std::optional:处理可能缺失值的利器

文章目录 一、基本概念与设计理念二、构建与初始化&#xff08;一&#xff09;默认构造&#xff08;二&#xff09;值初始化&#xff08;三&#xff09;使用std::make_optional&#xff08;四&#xff09;使用std::nullopt 三、访问值&#xff08;一&#xff09;value()&#x…

MySQL用户授权、收回权限与查看权限

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

【Maui】注销用户,采用“手势”点击label弹窗选择

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 方法一&#xff1a;前端绑定3.2 方法二&#xff1a;后端绑定3.3 注销用户的方法 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创…

如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt

文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…

Object类(2)

大家好&#xff0c;今天我们继续来看看Object类中一些成员方法&#xff0c;这些方法在实际中有很大的用处&#xff0c;话不多说&#xff0c;来看。 注&#xff1a;所有类都默认继承Object类的&#xff0c;所以可调用Object类中的方法&#xff0c;如equals&#xff0c;也可以发生…

BGP分解实验·11——路由聚合与条件性通告(3)

续接上&#xff08;2&#xff09;的实验。其拓扑如下&#xff1a; 路由聚合的负向也就是拆分&#xff0c;在有双出口的情况下&#xff0c;在多出口做流量分担是优选方法之一。 BGP可以根据指定来源而聚合路由&#xff0c;在产生该聚合路由的范围内的条目注入到本地BGP表后再向…

MOS的体二极管能通多大电流

第一个问题&#xff1a;MOS导通之后电流方向可以使任意的&#xff0c;既可以从D到S&#xff0c;也可以从S到D。 第二个问题&#xff1a;MOS里面的体二极管电流可以达到几百安培&#xff0c;这也就解释了MOS选型的时候很少考虑体二极管的最大电流&#xff0c;而是考虑DS之间电流…

C语言【基础篇】之流程控制——掌握三大结构的奥秘

流程控制 &#x1f680;前言&#x1f99c;顺序结构&#x1f4af; 定义&#x1f4af;执行规则 &#x1f31f;选择结构&#x1f4af;if语句&#x1f4af;switch语句&#x1f4af;case穿透规则 &#x1f914;循环结构&#x1f4af;for循环&#x1f4af;while循环&#x1f4af;do -…

Node.js下载安装及环境配置教程 (详细版)

Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型&#xff0c;使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…

【文星索引】搜索引擎项目测试报告

目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…