专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义
一、蒙特卡罗模拟介绍
蒙特卡罗模拟(Monte Carlo Simulation)是一种基于随机采样的数值计算方法,用于解决具有不确定性或复杂概率分布的问题。其核心思想是通过多次随机抽样来逼近系统的行为或目标函数的真实值,进而对系统进行评估、预测或优化。蒙特卡罗模拟被广泛应用于金融、工程、物理科学、计算机科学等领域,尤其是在无法通过解析方法直接求解问题时。
(一)背景知识
1945年,在第二次世界大战即将结束之际,一场看似简单的纸牌游戏引发了计算领域的重大突破。这项突破最终导致了蒙特卡洛方法的诞生。参与曼哈顿计划的科学家斯坦尼斯劳·乌拉姆在康复期间深入思考了纸牌游戏中的概率问题。他意识到通过反复模拟,可以有效地近似复杂的概率问题。随后乌拉姆与同事约翰·冯·诺依曼讨论了这一想法,共同奠定了蒙特卡洛方法的理论基础。该方法的命名灵感来自摩纳哥著名的蒙特卡洛赌场,象征着其处理高风险和不确定性的特性。
(二) 蒙特卡罗模拟的优缺点
(1)优点
◾ 适应性强:蒙特卡罗模拟适用于各种复杂问题,特别是在存在不确定性和随机性的系统中。
◾ 直观且灵活:可以处理非线性、复杂概率分布的问题,不依赖解析解。
◾ 结果稳定性:通过增加模拟次数可以提升结果的准确性和稳定性。
(2)缺点
◾ 计算成本高:需要大量的随机采样和计算,模拟次数较多时,计算资源消耗较大。
◾ 收敛较慢:蒙特卡罗模拟的精度随着样本数量增加而提升,但收敛速度相对较慢。
◾ 依赖于输入分布的准确性:模拟结果依赖于输入参数的分布,如果输入数据不准确,会影响模拟的结果。
(三)蒙特卡罗模拟的基本步骤
蒙特卡罗模拟通过以下步骤进行估计:
1. 定义问题或目标函数:首先定义需要模拟的过程或系统,设定所需的参数和条件。例如,在计算积分、优化某个目标函数或评估系统的表现等。
2. 随机采样:根据问题的输入参数,生成多个随机样本。例如,从某个概率分布中抽取一组样本,用来模拟系统的不同状态。
3. 计算输出:对每一个随机样本,计算目标函数的输出值。这些输出值相当于多个模拟结果。
4. 汇总统计:将所有模拟结果进行统计分析,计算平均值、方差、置信区间等,用于估计目标函数的期望值或其他指标。
蒙特卡罗模拟的准确性随着采样次数的增加而提高;通常,采样次数越多,模拟结果越接近真实值。
(四) 应用场景
蒙特卡罗模拟的应用场景包括但不限于以下几个方面:
1.金融风险评估
在金融领域,蒙特卡罗模拟用于评估投资组合的风险、期权定价、信用风险等。例如,通过对不同的市场价格、利率等变量进行随机抽样,模拟资产在未来的可能收益或损失。
2.工程可靠性分析
蒙特卡罗模拟用于评估系统或设备的可靠性。可以通过对系统关键参数(如负载、环境条件)的不同组合进行模拟,从而估算系统在各种条件下的失效概率或寿命分布。
3.物理科学中的数值计算
在物理和化学等领域,蒙特卡罗模拟用于求解复杂的积分问题和模拟随机过程。例如,模拟粒子的随机运动路径以研究扩散、热传导等现象。
4.项目管理与决策分析
在项目管理中,蒙特卡罗模拟用于估计项目的完成时间或成本。通过对不同工期或成本因素的随机模拟,项目经理可以更准确地预测可能的项目延误或成本超支。
(五)简单案例
假设想估计某工厂的生产过程中的产量不确定性,工厂的生产能力受到多个因素影响,如设备故障、原料供应波动、操作员的熟练程度等。这些因素都有一定的随机性,不能准确预测。
可以通过以下步骤使用蒙特卡罗模拟来估计产量的范围:
-
定义随机变量:
-
机器故障的概率:10%。
-
原料供应的波动:正态分布,均值为1000单位,标准差为50单位。
-
操作员熟练度的影响:正态分布,均值为0.9(即操作员效率为90%),标准差为0.05。
-
-
生成随机样本:
-
在每次模拟中,随机抽取机器故障概率、原料供应量和操作员熟练度。
-
-
计算每次模拟的结果:
-
结合随机抽取的参数,计算产量。假设计算公式为:产量 = 原料供应量 × 操作员效率 ×(1 - 机器故障概率)。
-
-
统计分析:
-
经过成千上万次模拟,得到产量的概率分布。这些模拟结果帮助你评估产量的可能范围,并确定最大可能产量和最小可能产量。
-
仿真模型:
利用Plant Simulation2404版本的Python模块可以非常方便地进行模拟仿真;模型如下图所示。

模型中定义设备故障率,原材料供应波动因子,生产工效数据以及仿真模拟的次数定义。最后系统统计输出当前条件下的产能输出的直方分布,就可以确定当前系统的配置可能的产能。如下图所示分布,,可以看出当前的最可能的产出为890。
-

二、案例实现
(一)网络搜索、随机猜测与蒙特卡洛模拟
为了直观理解蒙特卡洛模拟,我们可以考虑一个估算π值的例子。想象一个特殊的飞镖游戏:你被蒙上眼睛,随机向一个大正方形飞镖靶投掷飞镖。这个正方形内有一个圆形目标。目标是通过这个游戏来估计π的值。
圆的面积与正方形面积的比率是π/4。因此,如果投掷大量飞镖,落在圆内的飞镖数量与总飞镖数量的比率应该近似于π/4。将这个比率乘以4,就得到了π的估计值。
(1)随机猜测
import random
import plotly.graph_objects as go
import numpy as np# 设置猜测次数
num_guesses = 6# 生成单位圆的坐标
theta = np.linspace(0, 2 * np.pi, 100)
unit_circle_x = np.cos(theta)
unit_circle_y = np.sin(theta)# 进行多次猜测
for i in range(num_guesses):# 在2到4之间随机猜测pi的值pi_guess = random.uniform(2, 4)# 根据猜测生成圆的坐标radius = pi_guess / np.pi # 修正:将猜测的pi值与单位圆的半径进行比较circle_x = radius * np.cos(theta)circle_y = radius * np.sin(theta)# 创建散点图fig = go.Figure()# 添加猜测的圆fig.add_trace(go.Scatter(x=circle_x,y=circle_y,mode='lines',line=dict(color='blue', width=3),name='Estimated Circle'))# 添加单位圆fig.add_trace(go.Scatter(x=unit_circle_x,y=unit_circle_y,mode='lines',line=dict(color='green', width=3),name='Unit Circle'))# 更新图形布局fig.update_layout(title=f"Fig1{chr(97 + i)}: Randomly Guessing Pi: {pi_guess}",width=600,height=600,xaxis=dict(constrain="domain",range=[-1.5, 1.5] # 修正:扩大范围以便显示所有圆),yaxis=dict(scaleanchor="x",scaleratio=1,range=[-1.5, 1.5] # 修正:扩大范围以便显示所有圆))# 显示图形fig.show()
结果:这段代码生成了一系列图形(图1a到图1f),展示了随机猜测π值的结果。每次猜测都会生成一个不同大小的圆,与实际的单位圆(绿色)进行比较。

(2)蒙特卡洛方法
# Monte Carlo Estimation of Pi
# 导入必要的库
import random
import math
import plotly.graph_objects as go
import plotly.io as pio
import numpy as np# 设置飞镖数量
num_darts = 10000
darts_in_circle = 0# 存储飞镖坐标
x_coords_in, y_coords_in, x_coords_out, y_coords_out = [], [], [], []# 设置图形数量
num_figures = 6
darts_per_figure = num_darts // num_figures# 生成单位圆
theta = np.linspace(0, 2 * np.pi, 100)
unit_circle_x = np.cos(theta)
unit_circle_y = np.sin(theta)# 模拟投掷飞镖
for i in range(num_darts):x, y = random.uniform(-1, 1), random.uniform(-1, 1)if math.sqrt(x**2 + y**2) <= 1:darts_in_circle += 1x_coords_in.append(x)y_coords_in.append(y)else:x_coords_out.append(x)y_coords_out.append(y)# 每投掷 darts_per_figure 次飞镖后绘制一次图形if (i + 1) % darts_per_figure == 0:pi_estimate = 4 * darts_in_circle / (i + 1)estimated_circle_radius = math.sqrt(pi_estimate / math.pi) # 修正:正确计算估计圆的半径estimated_circle_x = estimated_circle_radius * np.cos(theta)estimated_circle_y = estimated_circle_radius * np.sin(theta)fig = go.Figure()fig.add_trace(go.Scattergl(x=x_coords_in,y=y_coords_in,mode='markers',name='Darts Inside Circle',marker=dict(color='green', size=4, opacity=0.8)))fig.add_trace(go.Scattergl(x=x_coords_out,y=y_coords_out,mode='markers',name='Darts Outside Circle',marker=dict(color='red', size=4, opacity=0.8)))fig.add_trace(go.Scatter(x=unit_circle_x,y=unit_circle_y,mode='lines',name='Unit Circle',line=dict(color='green', width=3)))fig.add_trace(go.Scatter(x=estimated_circle_x,y=estimated_circle_y,mode='lines',name='Estimated Circle',line=dict(color='blue', width=3)))fig.update_layout(title=f"Figure {chr(97 + (i + 1) // darts_per_figure - 1)}: Thrown Darts: {(i + 1)}, Estimated Pi: {pi_estimate:.6f}",width=600,height=600,xaxis=dict(constrain="domain", range=[-1, 1]),yaxis=dict(scaleanchor="x", scaleratio=1, range=[-1, 1]),legend=dict(yanchor="top", y=0.99, xanchor="left", x=0.01))fig.show()# 保存图形为图片pio.write_image(fig, f"fig2{chr(97 + (i + 1) // darts_per_figure - 1)}.png")
结果:这段代码生成了另一系列图形,展示了使用蒙特卡洛方法估计π的过程。绿点表示落在圆内的飞镖,红点表示落在圆外的飞镖。


(3)网络搜索
from sklearn.model_selection import GridSearchCVhyperparameters = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],'penalty': ['l1', 'l2']}grid_search = GridSearchCV(LogisticRegression(), hyperparameters, cv=5, scoring='roc_auc')grid_search.fit(X_train, y_train)best_params = grid_search.best_params_print(f'Best hyperparameters: {best_params}')best_model = grid_search.best_estimator_y_pred_best = best_model.predict(X_test)accuracy_best = accuracy_score(y_test, y_pred_best)roc_auc_best = roc_auc_score(y_test, y_pred_best)print("Grid Search Method " + f'Accuracy of the best model: {accuracy_best}')print("Grid Search Method " + f'ROC-AUC of the best model: {roc_auc_best}')
(4)分析总结
网格搜索方法通过评估超参数空间中所有可能组合的性能来选择"最佳"超参数。它使用交叉验证来评估每种组合在训练数据的不同子集上的平均性能。这种方法可以系统地探索整个超参数空间,但当超参数数量增加时,计算成本会急剧上升。
相比之下,蒙特卡洛方法随机采样超参数空间,并在整个训练集上评估模型性能。这种方法不使用交叉验证,因此可能更容易受到过拟合的影响。但是它能够更快地探索大型超参数空间,并且在计算资源有限的情况下可能更为实用。
(二)直观案例——用图表展示全过程
蒙特卡洛模拟是一种数学建模的办法,可以让您看到所有可能的结果,通过随机计算去模拟以前的历史数据,并预测未来的项目在差不多的情况下会出现哪些结果,您可以依靠这些数据做出更多决定。
(1)步骤一 定义过程输入与输出
首先,我们先定义输入,以及它们的分布情况。
过程输入会在回归输出里列出来,工程师们对每个变量的典型均值和标准差那可都很熟悉,他们能够从 Minitab Statistical Software 中复制用来描述过程的回归方程,然后把它粘贴到 Engage 的 Monte Carlo 工具里,这样就能像下图这样轻松输入关键信息。

接下来我们再来验证模型,Engage 会以超级快的速度运行 50000 次模拟,您也可以自己指定更大或者更小的次数值。

Engage 能用能力分析典型输出解释结果;能运行模拟并确定后续做法,对不令人满意的过程提出改进步骤;知道控制均值比控制变异性容易,提出进行参数优化以找到合适均值设置。
(2)步骤 2:定义参数优化的目标和搜索范围
在这个阶段,我们希望 Engage 能找到最佳均值输入设置组合减少缺陷,我们可通过参数优化指定目标并定义输入变量合理搜索范围。

模拟结果出来了!

我们可以看到缺陷百分比下降了,在表中还可以看到最佳的输入设置,但 Ppk 统计量仍低,Engage 还会推荐后续改进步骤。

(3)步骤三 控制变异性
到目前为止,我们已经通过优化均值输入设置减少缺陷,但还需减少过程输入变异性,减少变异性较难,Engage 的创新图表可以帮助确定哪些输入控制变异性可最大程度减少缺陷数量。

图中找带倾斜直线的输入可减小标准差降低输出变异性,图中找带倾斜直线的输入可减小标准差降低输出变异性,带平直直线的输入可放宽公差;斜率相等时可尝试减小几个输入标准差,利用过程知识确定减少量,可点击线上点或用表中下拉菜单更改设置。
(4)最终的结论

成功啦!过程中的缺陷数量减少了,Ppk 统计量达到了1.34,高于基准值。假定表展示新设置和标准差,如果我们再次运行参数优化,相信我们的缺陷会更少。
(三)在量化投资组合优化中的应用案例
(1)蒙特卡洛模拟在量化投资中怎么用?
通过大量随机抽样来模拟不确定性,从而得到可能结果的概率分布。在量化投资中,它通过生成大量随机场景来模拟资产价格走势,帮助投资者理解风险和收益的分布。
蒙特卡洛模拟常用于投资组合的收益和风险评估。例如,通过模拟一个投资组合在不同市场条件下的表现,投资者可以估计未来的收益分布以及可能面临的风险。
在量化投资中,蒙特卡洛模拟还可以用于期权定价、资产价格预测以及对非线性或者复杂金融模型的求解。
(2)在投资组合风险评估中,蒙特卡洛模拟主要模拟哪些变量?
在投资组合风险评估中,蒙特卡洛模拟主要模拟以下变量:
-
资产收益率:通过模拟资产未来的收益率分布,评估投资组合在不同市场环境下的收益表现。
-
波动率:模拟资产价格的波动性,衡量投资组合的风险水平。
-
资产间相关性:模拟不同资产之间的相关性变化,分析投资组合的分散化效果和系统性风险。
-
市场风险因子:模拟宏观经济变量(如利率、通胀、汇率等)或市场风险因子(如股票市场指数、信用利差等)的变化,评估其对投资组合的影响。
这些变量的模拟帮助投资者更全面地理解投资组合的风险特征,并为风险管理决策提供依据。
(3)假设你要对一个由股票和债券组成的投资组合进行蒙特卡洛模拟,需要收集哪些基础数据?
需要收集:
-
历史收益率数据:用于估计资产的未来收益分布。
-
各资产的历史波动率:用于衡量资产的风险水平。
-
资产间的相关系数:用于评估资产之间的联动性。
-
当前投资组合权重:用于确定初始投资组合的构成。
-
无风险利率:用于计算风险溢价和折现未来现金流。
-
投资期限:用于确定模拟的时间跨度。
-
预期通胀率:用于调整实际收益率。
-
交易成本:用于更准确地模拟投资组合的调整过程。
-
税收影响:用于考虑不同资产的税务处理差异。
-
宏观经济指标:如GDP增长率、失业率等,用于模拟经济环境变化对资产的影响。
-
政策变化:如利率政策、财政政策等,用于模拟政策变动对市场的冲击。
-
市场情绪指标:如投资者信心指数,用于模拟市场情绪波动对资产价格的影响。
(4)在进行蒙特卡洛模拟时,如何确定合适的模拟次数?
确定模拟次数需要考虑:
-
精确度要求:通常最少需要1000次,要求更精确则10000次以上
计算资源限制:次数越多耗时越长 -
收敛性检验:当增加模拟次数对结果影响很小时,说明次数已足够
-
经验法则:对于一般投资组合分析,5000-10000次模拟通常能提供可靠结果
(5)如何解释蒙特卡洛模拟的结果?
主要从以下几个方面解释:
-
期望收益:所有模拟路径的平均收益
-
风险指标:
-
VaR (Value at Risk):特定置信水平下的最大潜在损失
-
标准差:收益的波动程度
-
-
概率分布:模拟结果的分布形态
-
极端情况:最好和最差情况的分析
(6)进行投资组合风险评估时,蒙特卡洛模拟的基本步骤是什么?
投资组合风险评估的蒙特卡洛模拟基本步骤:
-
定义问题和输入变量(如投资组合回报率、波动率等)。
-
模拟输入变量的随机分布(例如,假设回报率符合正态分布)。
-
重复多次随机抽样,每次计算对应结果(如投资组合价值)。
-
分析结果,观察概率分布、均值、方差等统计量。
(7)蒙特卡洛模拟在投资组合优化中的应用?
其主要应用包括:
-
生成有效前沿:通过随机生成大量可能的资产组合,蒙特卡洛模拟能够帮助投资者描绘出风险与收益之间的有效前沿,从而识别出在不同风险水平下可能获得的最优收益组合。
-
计算最优权重:利用蒙特卡洛模拟,投资者可以模拟不同资产权重配置下的投资结果,进而通过优化算法确定在给定风险偏好下的最优资产配置比例。
-
评估不同投资策略的表现:蒙特卡洛模拟允许投资者在多种市场情景下测试和比较不同投资策略的表现,从而选择出最适合当前市场环境的策略。
-
压力测试:通过模拟极端市场条件,蒙特卡洛模拟能够帮助投资者评估投资组合在不利市场环境下的表现和潜在风险,从而提前做好风险管理和应对策略。
(8)在投资组合风险评估中,蒙特卡洛模拟为什么需要生成大量随机样本?
生成大量随机样本是为了捕捉潜在市场条件下投资组合的所有可能结果。样本越多,模拟结果越接近真实的概率分布。这有助于评估极端情况(如极低收益或亏损)发生的可能性。
(9)蒙特卡洛模拟如何评估投资组合的“在险价值”(VaR,Value at Risk)?
步骤如下:
-
使用蒙特卡洛模拟生成大量投资组合未来价值的分布。
-
按照指定置信水平(如 95% 或 99%),确定分布的分位点。
-
VaR 是在该置信水平下的最大可能亏损。例如,95% VaR 表示“有 5% 的概率,投资组合损失会超过 VaR 值”。
VaR 通过蒙特卡洛模拟评估,更能捕捉复杂投资组合的非线性和非正态分布特性。
(10)如何通过蒙特卡洛模拟评估投资组合的夏普比率不确定性?
步骤如下:
-
使用蒙特卡洛模拟生成投资组合未来的回报率分布。
-
对每次模拟计算投资组合的年化收益和波动率,并计算夏普比率(夏普比率 = 年化收益 / 年化波动率)。
-
汇总所有模拟结果,分析夏普比率的分布,这样可以了解夏普比率的不确定性范围。
(11)如何在蒙特卡洛模拟中引入相关性以反映多资产投资组合的特性?
多资产投资组合中,资产之间的相关性对组合风险影响很大。在蒙特卡洛模拟中:
-
使用协方差矩阵定义资产之间的相关性。
-
生成资产回报的随机样本时,可以使用Cholesky 分解或其他方法,确保生成的随机数满足指定的相关性结构。
-
基于这些相关性随机样本计算投资组合的回报分布。
(12)蒙特卡洛模拟的结果可能有哪些局限性?
蒙特卡洛模拟的局限性包括:
-
计算成本高:需要大量迭代,特别是在高维问题中,计算时间可能很长。
-
模型依赖性:模拟的结果高度依赖于输入的假设(如资产价格分布、波动率等)。如果假设不准确,结果可能误导决策。 例如,假设回报率符合正态分布,而实际市场可能存在厚尾现象。
-
无法预测极端事件:蒙特卡洛模拟通常依赖历史数据,难以捕捉“黑天鹅”事件等极端情况。
-
随机误差:尽管大样本可以减少误差,但仍会有一定的随机波动。
说明:
使用蒙特卡洛模拟时,投资者需要结合其他分析方法,并对假设进行严格的验证。
(13)与历史模拟法相比,蒙特卡洛模拟有哪些优势?
蒙特卡洛模拟的优势:
-
灵活性更高:可以模拟任意假设的回报分布,而历史模拟仅能基于过去数据。
-
可扩展性:能够引入复杂的相关性结构和非线性特性。
-
极端情况分析:可以通过调整输入参数测试极端情景。
然而,历史模拟法基于真实历史数据,避免了模型假设的错误,因此两者可以互为补充。
(四)依照建模步骤进行建模
(1)代码实现
以下是建立蒙特卡洛模型的基本步骤:
1.定义参数
设置模型所需的参数,包括模拟次数、投资金额、各项资产的预期回报率、波动性和相关性矩阵等。
2.设置随机变量的分布
根据历史数据或设定的假设,定义每个随机变量的概率分布。以投资组合为例,每只资产的回报率可能假设符合正态分布,并设定其均值和标准差。
3.生成随机权重
使用 numpy.random.dirichlet 函数生成权重,确保在模拟中保持各资产的权重总和为1。
4.执行蒙特卡洛模拟
使用循环进行多次模拟,每次模拟生成一组资产的回报率样本,将这些样本代入模型公式中,计算每个模拟场景的投资组合回报率。然后将这些结果保存下来。
下面是一个简单的示例代码:

代码说明
1.参数设置:
定义了模拟次数、投资组合的资产数量、每个资产的预期回报率和波动性。
2.权重生成:
随机生成每次模拟的资产权重组合。
3.蒙特卡洛模拟:
生成每个资产的回报样本,计算投资组合的总回报。
4.结果分析与可视化:
输出平均回报率、标准差及 95% 置信区间,并展示投资组合回报率分布的直方图。
5.输出
该代码将输出投资组合的平均年回报率、标准差以及置信区间,并显示蒙特卡洛模拟的回报率分布图。

(2) 模型优缺点
1优点:蒙特卡洛模型可以处理高度复杂的系统,且适用于多种不确定性条件;相比传统解析方法,它对问题的数学描述要求较低。
缺点:模拟结果的准确性依赖于样本数量,计算量较大;此外,对模型和分布的假设要求较高,误差不可避免。
学习资料:
[1]学术漫谈 | 蒙特卡罗模拟
[2]一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
[3]穿越数据迷雾:Monte Carlo模拟全景探索
[4]CICC科普栏目|一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
[5]蒙特卡洛模拟在量化投资中的使用
[6]1.Monte Carlo and Quasi-Monte Carlo Methods 2006
2.Monte_Carlo_Methods_in_Financial_Engineering_Paul_Glasserman_
3.SAS for Monte Carlo Studies A Guide for Quantitative Researchers
相关文章:
专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义
一、蒙特卡罗模拟介绍 蒙特卡罗模拟(Monte Carlo Simulation)是一种基于随机采样的数值计算方法,用于解决具有不确定性或复杂概率分布的问题。其核心思想是通过多次随机抽样来逼近系统的行为或目标函数的真实值,进而对系统进行评估…...
云端智慧:创业公司如何以全球视野选择最佳平台,实现业务新高度
2016年8月,一个名叫Bryce Adams的人辞去了自己原本很稳定的工作,开始追逐梦想:为使用WooCommerce(一种开源的WordPress数字商务插件)的公司开发一种能提供各类报表解决方案的应用。为此他成立了Metorik公司ÿ…...
【工具变量】中国省级八批自由贸易试验区设立及自贸区设立数据(2024-2009年)
一、测算方式:参考C刊《中国软科学》任晓怡老师(2022)的做法,使用自由贸易试验区(Treat Post) 表征,Treat为个体不随时间变化的虚拟变量,如果该城市设立自由贸易试验区则赋值为1,反之赋值为0&am…...
猫眼Java开发面试题及参考答案(上)
详细介绍项目,像项目中如何用 Redis,用到 Redis 哪些数据类型,项目中遇到哪些问题,怎么解决的 在我参与的一个电商项目中,Redis 发挥了至关重要的作用。这个电商项目主要是为用户提供商品浏览、购物车管理、订单处理等一系列功能。 在项目中使用 Redis 主要是为了提升系统…...
WSL2中安装的ubuntu开启与关闭探讨
1. PC开机后,查询wsl状态 在cmd或者powersell中输入 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 22. 从windows访问WSL2 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 23. 在ubuntu中打开一个工作区后…...
Linux抢占式内核:技术演进与源码解析
一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.28 NumPy+Matplotlib:科学可视化的核心引擎
2.28 NumPyMatplotlib:科学可视化的核心引擎 目录 #mermaid-svg-KTB8Uqiv5DLVJx7r {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KTB8Uqiv5DLVJx7r .error-icon{fill:#552222;}#mermaid-svg-KTB8Uqiv5…...
C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】
C#面试题(中级篇),详细讲解,帮助你深刻理解,拒绝背话术!-CSDN博客 简单工厂模式 优点: 根据条件有工厂类直接创建具体的产品 客户端无需知道具体的对象名字,可以通过配置文件创建…...
【深度学习入门_机器学习理论】朴素贝叶斯(NaiveBayes)
本部分主要为机器学习理论入门_熟悉朴素贝叶斯算法,书籍参考 “ 统计学习方法(第二版)”。 学习目标: 熟悉条件概率、先验概率、后验概率、全概率,熟悉朴素贝叶斯算法原理与推判断过程;熟悉参数估计&#…...
docker pull Error response from daemon问题
里面填写 里面解决方案就是挂代理。 以虚拟机为例,将宿主机配置端口设置,https/http端口设为7899 配置虚拟机的http代理: vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写,wq保存 [Service] Environment…...
javaEE-8.JVM(八股文系列)
目录 一.简介 二.JVM中的内存划分 JVM的内存划分图: 堆区:编辑 栈区:编辑 程序计数器:编辑 元数据区:编辑 经典笔试题: 三,JVM的类加载机制 1.加载: 2.验证: 3.准备: 4.解析: 5.初始化: 双亲委派模型 概念: JVM的类加…...
25.02.04 《CLR via C#》 笔记 13
核心机制 第二十章 异常和状态管理 什么是异常:异常指成员没有完成它的名称所宣称的行动;异常是程序运行过程中用来表示错误并处理的机制,错误可以是更广义的,包括程序中未捕获的问题或逻辑缺陷。异常处理机制(try-c…...
git 项目的更新
更新项目 当自己的本地项目与 远程的github 的仓库已经建立远程连接时, 则直接按照下面的步骤, 将本地的项目代码更新到远程仓库。 # Stage the resolved file git add README.md <file1> <file2># To stage all changes: git add .# Comm…...
【Rust自学】17.3. 实现面向对象的设计模式
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 17.3.1. 状态模式 状态模式(state pattern) 是一种面向对象设计模式,指的是一个值拥有的内部状态由数个状态对象(…...
51c视觉~CV~合集10
我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV创建自定义图像滤镜 热图滤镜 这组滤镜提供了各种不同的艺术和风格化光学图像捕捉方法。例如,热滤镜会将图像转换为“热图”,而卡通滤镜则提供生动的图像,这些图像看起来…...
如何安全地管理Spring Boot项目中的敏感配置信息
在开发Spring Boot应用时,我们经常需要处理一些敏感的配置信息,比如数据库密码、API密钥等。以下是一个最佳实践方案: 1. 创建配置文件 application.yml(版本控制) spring:datasource:url: ${MYSQL_URL:jdbc:mysql…...
Docker小游戏 | 使用Docker部署2048网页小游戏
Docker小游戏 | 使用Docker部署2048网页小游戏 前言项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署2048网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置四、访问2048网页小游戏五、总结前言 在当今快速发展的技术世…...
RabbitMQ深度探索:消息幂等性问题
RabbitMQ 消息自动重试机制: 让我们消费者处理我们业务代码的时候,如果抛出异常的情况下,在这时候 MQ 会自动触发重试机制,默认的情况下 RabbitMQ 时无限次数的重试需要认为指定重试次数限制问题 在什么情况下消费者实现重试策略…...
Linux网络 | 进入数据链路层,学习相关协议与概念
前言:本节内容进入博主讲解的网络层级中的最后一层:数据链路层。 首先博主还是会线代友友们认识一下数据链路层的报文。 然后会带大家重新理解一些概念,比如局域网交换机等等。然后就是ARP协议。 讲完这些, 本节任务就算结束。 那…...
芝法酱学习笔记(2.6)——flink-cdc监听mysql binlog并同步数据至elastic-search和更新redis缓存
一、需求背景 在有的项目中,尤其是进销存类的saas软件,一开始为了快速把产品做出来,并没有考虑缓存问题。而这类软件,有着复杂的业务逻辑。如果想在原先的代码中,添加redis缓存,改动面将非常大,…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
n8n:解锁自动化工作流的无限可能
在当今快节奏的数字时代,无论是企业还是个人,都渴望提高工作效率,减少重复性任务的繁琐操作。而 n8n,这个强大的开源自动化工具,就像一位智能的数字助手,悄然走进了许多人的工作和生活,成为提升…...
在 Vue 的template中使用 Pug 的完整教程
在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug? Pug(原名 Jade)是一种高效的网页模板引擎,通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签,使用缩进定义结构,…...
【学习记录】Office 和 WPS 文档密码破解实战
文章目录 📌 引言📁 Office 与 WPS 支持的常见文件格式Microsoft Office 格式WPS Office 格式 🛠 所需工具下载地址(Windows 官方编译版)🔐 破解流程详解步骤 1:提取文档的加密哈希值步骤 2&…...
