专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义

一、蒙特卡罗模拟介绍

        蒙特卡罗模拟(Monte Carlo Simulation)是一种基于随机采样的数值计算方法,用于解决具有不确定性复杂概率分布的问题。其核心思想是通过多次随机抽样来逼近系统的行为或目标函数的真实值,进而对系统进行评估、预测或优化。蒙特卡罗模拟被广泛应用于金融、工程、物理科学、计算机科学等领域,尤其是在无法通过解析方法直接求解问题时。

(一)背景知识

        1945年,在第二次世界大战即将结束之际,一场看似简单的纸牌游戏引发了计算领域的重大突破。这项突破最终导致了蒙特卡洛方法的诞生。参与曼哈顿计划的科学家斯坦尼斯劳·乌拉姆在康复期间深入思考了纸牌游戏中的概率问题。他意识到通过反复模拟,可以有效地近似复杂的概率问题。随后乌拉姆与同事约翰·冯·诺依曼讨论了这一想法,共同奠定了蒙特卡洛方法的理论基础。该方法的命名灵感来自摩纳哥著名的蒙特卡洛赌场,象征着其处理高风险和不确定性的特性。

(二) 蒙特卡罗模拟的优缺点

(1)优点

◾  适应性强:蒙特卡罗模拟适用于各种复杂问题,特别是在存在不确定性和随机性的系统中。

◾  直观且灵活:可以处理非线性、复杂概率分布的问题,不依赖解析解。

◾  结果稳定性:通过增加模拟次数可以提升结果的准确性和稳定性。

(2)缺点

◾  计算成本高:需要大量的随机采样和计算,模拟次数较多时,计算资源消耗较大。

◾ 收敛较慢:蒙特卡罗模拟的精度随着样本数量增加而提升,但收敛速度相对较慢。

◾ 依赖于输入分布的准确性:模拟结果依赖于输入参数的分布,如果输入数据不准确,会影响模拟的结果。

(三)蒙特卡罗模拟的基本步骤

蒙特卡罗模拟通过以下步骤进行估计:

1. 定义问题或目标函数:首先定义需要模拟的过程或系统,设定所需的参数和条件。例如,在计算积分、优化某个目标函数或评估系统的表现等。

2. 随机采样:根据问题的输入参数,生成多个随机样本。例如,从某个概率分布中抽取一组样本,用来模拟系统的不同状态。

3. 计算输出:对每一个随机样本,计算目标函数的输出值。这些输出值相当于多个模拟结果。

4. 汇总统计:将所有模拟结果进行统计分析,计算平均值、方差、置信区间等,用于估计目标函数的期望值或其他指标。

蒙特卡罗模拟的准确性随着采样次数的增加而提高;通常,采样次数越多,模拟结果越接近真实值。

(四) 应用场景

        蒙特卡罗模拟的应用场景包括但不限于以下几个方面:

1.金融风险评估

        在金融领域,蒙特卡罗模拟用于评估投资组合的风险、期权定价、信用风险等。例如,通过对不同的市场价格、利率等变量进行随机抽样,模拟资产在未来的可能收益或损失。

2.工程可靠性分析

         蒙特卡罗模拟用于评估系统或设备的可靠性。可以通过对系统关键参数(如负载、环境条件)的不同组合进行模拟,从而估算系统在各种条件下的失效概率或寿命分布。

3.物理科学中的数值计算

        在物理和化学等领域,蒙特卡罗模拟用于求解复杂的积分问题和模拟随机过程。例如,模拟粒子的随机运动路径以研究扩散、热传导等现象。

4.项目管理与决策分析

        在项目管理中,蒙特卡罗模拟用于估计项目的完成时间或成本。通过对不同工期或成本因素的随机模拟,项目经理可以更准确地预测可能的项目延误或成本超支。

(五)简单案例

        假设想估计某工厂的生产过程中的产量不确定性,工厂的生产能力受到多个因素影响,如设备故障、原料供应波动、操作员的熟练程度等。这些因素都有一定的随机性,不能准确预测。

可以通过以下步骤使用蒙特卡罗模拟来估计产量的范围:

  1. 定义随机变量

    • 机器故障的概率:10%。

    • 原料供应的波动:正态分布,均值为1000单位,标准差为50单位。

    • 操作员熟练度的影响:正态分布,均值为0.9(即操作员效率为90%),标准差为0.05。

  2. 生成随机样本

    • 在每次模拟中,随机抽取机器故障概率、原料供应量和操作员熟练度。

  3. 计算每次模拟的结果

    • 结合随机抽取的参数,计算产量。假设计算公式为:产量 = 原料供应量 × 操作员效率 ×(1 - 机器故障概率)。

  4. 统计分析

    • 经过成千上万次模拟,得到产量的概率分布。这些模拟结果帮助你评估产量的可能范围,并确定最大可能产量和最小可能产量。

    • 仿真模型

      利用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)在投资组合风险评估中,蒙特卡洛模拟主要模拟哪些变量?

在投资组合风险评估中,蒙特卡洛模拟主要模拟以下变量:

  1.  资产收益率:通过模拟资产未来的收益率分布,评估投资组合在不同市场环境下的收益表现。

  2.  波动率:模拟资产价格的波动性,衡量投资组合的风险水平。

  3.  资产间相关性:模拟不同资产之间的相关性变化,分析投资组合的分散化效果和系统性风险。

  4.  市场风险因子:模拟宏观经济变量(如利率、通胀、汇率等)或市场风险因子(如股票市场指数、信用利差等)的变化,评估其对投资组合的影响。

这些变量的模拟帮助投资者更全面地理解投资组合的风险特征,并为风险管理决策提供依据。

(3)假设你要对一个由股票和债券组成的投资组合进行蒙特卡洛模拟,需要收集哪些基础数据?

需要收集:

  • 历史收益率数据:用于估计资产的未来收益分布。

  • 各资产的历史波动率:用于衡量资产的风险水平。

  • 资产间的相关系数:用于评估资产之间的联动性。

  • 当前投资组合权重:用于确定初始投资组合的构成。

  • 无风险利率:用于计算风险溢价和折现未来现金流。

  • 投资期限:用于确定模拟的时间跨度。

  • 预期通胀率:用于调整实际收益率。

  • 交易成本:用于更准确地模拟投资组合的调整过程。

  • 税收影响:用于考虑不同资产的税务处理差异。

  • 宏观经济指标:如GDP增长率、失业率等,用于模拟经济环境变化对资产的影响。

  • 政策变化:如利率政策、财政政策等,用于模拟政策变动对市场的冲击。

  • 市场情绪指标:如投资者信心指数,用于模拟市场情绪波动对资产价格的影响。

(4)在进行蒙特卡洛模拟时,如何确定合适的模拟次数?

确定模拟次数需要考虑:

  • 精确度要求:通常最少需要1000次,要求更精确则10000次以上
    计算资源限制:次数越多耗时越长

  • 收敛性检验:当增加模拟次数对结果影响很小时,说明次数已足够

  •  经验法则:对于一般投资组合分析,5000-10000次模拟通常能提供可靠结果

(5)如何解释蒙特卡洛模拟的结果?

主要从以下几个方面解释:

  • 期望收益:所有模拟路径的平均收益

  • 风险指标:

    • VaR (Value at Risk):特定置信水平下的最大潜在损失

    • 标准差:收益的波动程度

  • 概率分布:模拟结果的分布形态

  • 极端情况:最好和最差情况的分析

(6)进行投资组合风险评估时,蒙特卡洛模拟的基本步骤是什么?

投资组合风险评估的蒙特卡洛模拟基本步骤:

  1.  定义问题和输入变量(如投资组合回报率、波动率等)。

  2.  模拟输入变量的随机分布(例如,假设回报率符合正态分布)。

  3. 重复多次随机抽样,每次计算对应结果(如投资组合价值)。

  4.  分析结果,观察概率分布、均值、方差等统计量。

(7)蒙特卡洛模拟在投资组合优化中的应用?

其主要应用包括:

  1.  生成有效前沿:通过随机生成大量可能的资产组合,蒙特卡洛模拟能够帮助投资者描绘出风险与收益之间的有效前沿,从而识别出在不同风险水平下可能获得的最优收益组合。

  2.  计算最优权重:利用蒙特卡洛模拟,投资者可以模拟不同资产权重配置下的投资结果,进而通过优化算法确定在给定风险偏好下的最优资产配置比例。

  3. 评估不同投资策略的表现:蒙特卡洛模拟允许投资者在多种市场情景下测试和比较不同投资策略的表现,从而选择出最适合当前市场环境的策略。

  4. 压力测试:通过模拟极端市场条件,蒙特卡洛模拟能够帮助投资者评估投资组合在不利市场环境下的表现和潜在风险,从而提前做好风险管理和应对策略。

(8)在投资组合风险评估中,蒙特卡洛模拟为什么需要生成大量随机样本?

生成大量随机样本是为了捕捉潜在市场条件下投资组合的所有可能结果。样本越多,模拟结果越接近真实的概率分布。这有助于评估极端情况(如极低收益或亏损)发生的可能性。

(9)蒙特卡洛模拟如何评估投资组合的“在险价值”(VaR,Value at Risk)?

步骤如下:

  1.  使用蒙特卡洛模拟生成大量投资组合未来价值的分布。

  2. 按照指定置信水平(如 95% 或 99%),确定分布的分位点。

  3. VaR 是在该置信水平下的最大可能亏损。例如,95% VaR 表示“有 5% 的概率,投资组合损失会超过 VaR 值”。

VaR 通过蒙特卡洛模拟评估,更能捕捉复杂投资组合的非线性和非正态分布特性。

(10)如何通过蒙特卡洛模拟评估投资组合的夏普比率不确定性?

步骤如下:

  1. 使用蒙特卡洛模拟生成投资组合未来的回报率分布。

  2. 对每次模拟计算投资组合的年化收益和波动率,并计算夏普比率(夏普比率 = 年化收益 / 年化波动率)。

  3. 汇总所有模拟结果,分析夏普比率的分布,这样可以了解夏普比率的不确定性范围。

(11)如何在蒙特卡洛模拟中引入相关性以反映多资产投资组合的特性?

多资产投资组合中,资产之间的相关性对组合风险影响很大。在蒙特卡洛模拟中:

  1. 使用协方差矩阵定义资产之间的相关性。

  2.  生成资产回报的随机样本时,可以使用Cholesky 分解或其他方法,确保生成的随机数满足指定的相关性结构。

  3.  基于这些相关性随机样本计算投资组合的回报分布。

(12)蒙特卡洛模拟的结果可能有哪些局限性?

蒙特卡洛模拟的局限性包括:

  1.  计算成本高:需要大量迭代,特别是在高维问题中,计算时间可能很长。

  2.  模型依赖性:模拟的结果高度依赖于输入的假设(如资产价格分布、波动率等)。如果假设不准确,结果可能误导决策。 例如,假设回报率符合正态分布,而实际市场可能存在厚尾现象。

  3.  无法预测极端事件:蒙特卡洛模拟通常依赖历史数据,难以捕捉“黑天鹅”事件等极端情况。

  4. 随机误差:尽管大样本可以减少误差,但仍会有一定的随机波动。

说明:
使用蒙特卡洛模拟时,投资者需要结合其他分析方法,并对假设进行严格的验证。

(13)与历史模拟法相比,蒙特卡洛模拟有哪些优势?

蒙特卡洛模拟的优势:

  1. 灵活性更高:可以模拟任意假设的回报分布,而历史模拟仅能基于过去数据。

  2. 可扩展性:能够引入复杂的相关性结构和非线性特性。

  3. 极端情况分析:可以通过调整输入参数测试极端情景。

然而,历史模拟法基于真实历史数据,避免了模型假设的错误,因此两者可以互为补充。

(四)依照建模步骤进行建模

(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

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

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

相关文章

全面解析文件上传下载删除漏洞:风险与应对

在数字化转型的时代&#xff0c;文件上传、下载与删除功能已经成为各类应用程序的标准配置&#xff0c;从日常办公使用的协同平台&#xff0c;到云端存储服务&#xff0c;再到社交网络应用&#xff0c;这些功能在给用户带来便捷体验、显著提升工作效率的同时&#xff0c;也隐藏…

常用的ADC芯片有哪些

硬件工程师在设计电路时经常需要用到模数转换器&#xff08;Analog-to-Digital Converter, ADC&#xff09;芯片来将模拟信号转换为数字信号。市场上有许多不同品牌和型号的ADC芯片可供选择。以下是一些知名品牌的ADC芯片及其特点&#xff1a; 1.Texas Instruments (TI) •特点…

Redis的通用命令

⭐️前言⭐️ 本文主要介绍Redis的通用命令 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主日常练习代码均已上传GitHub &#x1f4cd;内容导…

「全网最细 + 实战源码案例」设计模式——策略模式

核心思想 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一系列算法或策略&#xff0c;将它们封装成独立的类&#xff0c;并使它们可以相互替换&#xff0c;而不影响客户端的代码&#xff0c;提高代码的可维护性和扩展性。 结构 …

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…

DeepSeek辅助学术写作【对比概念】效果如何?

DeepSeek-R1在论文写作细节方面有很多好的应用。我们下面通过具体案例来逐一展示这些功能。 DeepSeek-R1在提问方面&#xff0c;可以简化提示词也能给出精准得答案。我们来一探究竟&#xff01; 对比概念(功能指数:★★★★★) DeepSeek-R1在概念对比方面的功能也非常强大。由…

单节锂电池外部供电自动切换的电路学习

文章目录 前言一、原理分析&#xff1a;①当VBUS处有外部电源输入时②当VBUS处无外部电源输入时 二、器件选择1、二极管2、MOS管3、其他 总结 前言 学习一种广泛应用的锂电池供电自动切换电路 电路存在外部电源时&#xff0c;优先使用外部电源供电&#xff0c;并为电池供电&…

Linux系统 环境变量

环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量&#xff0c;本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”&#xff0c;我们会更详细讲解&#xff1b;理解环境变量的全局…

107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World

这次先不进入靶场 看到红框里面的话就想先看看uuid是啥 定义与概念 UUID 是 Universally Unique Identifier 的缩写&#xff0c;即通用唯一识别码。它是一种由数字和字母组成的 128 位标识符&#xff0c;在理论上可以保证在全球范围内的唯一性。UUID 的设计目的是让分布式系…

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了&#xff0c;抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…

01vue3实战-----前言

01vue3实战-----前言 1.大前端时代2.技术栈3.项目大致展示4.创建Vue项目4.1Vue CLI4.2create-vue 5.参考资料 1.大前端时代 前端移动端iOS/android开发桌面端 window/mac 常用的electron框架来开发其它平台:穿戴设备、车载系统(智能汽车)、VR、AR…web3方向 2.技术栈 开发工…

使用request库实现接口测试-笔记

目录 request库request库的安装和查验request发送请求的语法获取响应结果指定内容案例 Unittest框架集成Requests库Unittest框架语法Unittest框架基础代码案例 request库 request库是python编写的&#xff0c;基于urllib的HTTP库,使用方便。 request库的安装和查验 安装&…

快速傅里叶离散变换FFT (更新中)

声明&#xff1a;参考了 y y c yyc yyc 的 blog 和 PPT (from smwc) &#xff0c;以及 w z r wzr wzr 的 blog 。 目录 Part 1 多项式Part 2 FFT概论Part 3 点值与插值Part 4 复数&#xff0c;单位根Part 5 Part 1 多项式 定义&#xff1a;对于有限数列 A 0 A_{0} A0​~ n…

【C++】STL——list的使用

目录 &#x1f495;1.带头双向链表List &#x1f495;2.list用法介绍 &#x1f495;3.list的初始化 &#x1f495;4.size函数与resize函数 &#x1f495;5.empty函数 &#x1f495;6.front函数与back函数 &#x1f495;7.push_front,push_back,pop_front,pop_back函数…

2021Java面试-基础篇

文章目录 前言一&#xff1a; Java概述 1、何为编程2、JDK1.5之后的三大版本3、JVM,JRE和JDK的关系4、什么是跨平台&#xff1f;原理是什么5、Java语言有哪些特点6、什么是字节码&#xff1f;采用字节码的最大好处是什么7、什么是Java程序的主类&#xff1f;应用程序和小程序的…

MapStruct工具类的使用

文章目录 1.简介2.作用2.1 属性拷贝2.2 类型安全2.3 性能高效2.4 自定义转换 3.如何使用3.1 创建一个maven工程项目并引入mapstruct的坐标依赖&#xff1a;3.2 源对象类3.3 目标对象类&#xff08;和源对象类中的字段属性名相同&#xff09;3.4 创建接口SyncMapper&#xff08;…

FPGA| 使用Quartus II报错Top-level design entity ““ is undefined

1、使用FPGA准备点亮LED测试下板子&#xff0c;发现这个报错Error (12007): Top-level design entity "LEDLED" is undefined 工程如上图 报错如下图 2、分析到原因是因为工程名称和顶层模块里面的module名称不一样导致 解决办法&#xff1a;修改module名称和顶层模…

LeetCode - #198 打家劫舍

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【DeepSeek】本地私有化部署 DeepSeek 模型教程

一、引言 DeepSeek 模型是一种强大的语言模型&#xff0c;本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型&#xff0c;避免数据传输到外部带来的安全风险&#xff0c;同时也能根据自身需求进行定制化配置。本教程将详细介绍如何在本地进行 DeepSeek 模型的私有…

【玩转 Postman 接口测试与开发2_016】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(上)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证1 契约测试的概念2 契约测试的工作原理3 契约测试的分类4 DeepSeek 给出的契约测试相关背景5 契约测试在 Postman 中的创建方法6 API 实例的基本用法7 API 实例的类型实…