Python 实现的运筹优化系统代码详解(0-1规划背包问题)
一、引言
在数学建模与实际决策场景的交织领域中,诸多复杂问题亟待高效且精准的解决方案。0-1 规划作为一种特殊且极为重要的优化方法,宛如一把万能钥匙,能够巧妙开启众多棘手问题的解决之门。它专注于处理决策变量仅能取 0 或 1 这两种极端状态的情况,凭借这种独特的限定,在资源分配、项目抉择、组合优化等一系列关键领域中发挥着无可替代的作用。随着数字化浪潮的迅猛推进,借助便捷且强大的编程工具来实现 0-1 规划的求解,已成为应对复杂决策问题的必然趋势。Python 以其简洁明了的语法结构和丰富多样的库资源,当之无愧地成为实现 0-1 规划的得力助手。本文将深入探索 0-1 规划在数学建模中的核心原理、广泛应用场景,并结合 Python 代码详细剖析其实现细节,通过具体实例全方位展示其应用技巧,助力读者深度理解并熟练运用 0-1 规划攻克现实难题。
二、0-1 规划原理剖析
(一)核心概念
0-1 规划本质上属于整数规划的一个特殊分支,其显著特征在于决策变量被严格限定只能取值 0 或 1。这种二元取值特性使得解空间呈现出离散且有限的形态。例如,在投资决策场景中,对于每一个投资项目,决策者只能做出投资(对应变量值为 1)或不投资(对应变量值为 0)的明确抉择,不存在模棱两可的中间状态。
(二)模型构建
一般而言,0-1 规划模型可表述为: \(\begin{align*} \max(\text{或}\min)\ & z = \sum_{i = 1}^{n}c_ix_i \\ \text{s.t.}\ & \sum_{i = 1}^{n}a_{ji}x_i \leq (\text{或}=,\geq)b_j, \ j = 1,2,\cdots,m \\ & x_i \in \{0,1\}, \ i = 1,2,\cdots,n \end{align*}\) 其中,\(x_i\)代表决策变量,\(c_i\)为目标函数系数,它决定了每个决策变量对目标函数的贡献程度;\(a_{ji}\)是约束条件系数,描述了决策变量在各个约束条件中的权重;\(b_j\)为约束条件右侧常数,限定了约束条件的边界范围。目标函数的作用在于最大化或最小化某个特定目标,如实现利润最大化、成本最小化等;而约束条件则反映了实际问题中所面临的各种限制因素,如资源的有限性、时间的紧迫性等。
(三)求解思路
鉴于 0-1 规划的解空间有限,从理论上讲,可以通过枚举所有可能的变量组合来搜寻最优解。然而,随着变量数量的不断增加,这种暴力枚举方法的计算量将呈指数级增长,迅速变得难以承受。因此,在实际应用中,通常会采用更为高效的算法,如分支定界法、割平面法等。分支定界法通过将原问题逐步分解为若干个更小的子问题,并对每个子问题进行评估和筛选,巧妙地避免了对整个解空间的盲目搜索,从而显著提高求解效率。割平面法则是通过添加额外的线性约束(即割平面)来逐步缩小可行域,进而逐步逼近最优解。
三、0-1 规划在 Python 中的实现:代码解析
(一)代码整体结构
from pulp import LpMaximize, LpProblem, LpStatus, lpSum, LpVariable, valuedef solve_zero_one_programming():# 获取用户输入的变量数量num_vars = int(input("请输入决策变量的数量: "))# 获取用户输入的目标函数系数profits = []for i in range(num_vars):profit = float(input(f"请输入目标函数中第 {i + 1} 个变量的系数: "))profits.append(profit)# 获取用户输入的约束条件系数constraints = []for i in range(num_vars):constraint = float(input(f"请输入约束条件中第 {i + 1} 个变量的系数: "))constraints.append(constraint)# 获取用户输入的最大约束值max_weight = float(input("请输入约束条件的最大限制值: "))# 创建问题problem = LpProblem("zero_to_one_Programming_Example", LpMaximize)# 定义决策变量x = [LpVariable(f"x{i}", lowBound=0, cat='Binary') for i in range(1, num_vars + 1)]# 定义目标函数problem += lpSum([profits[i] * x[i] for i in range(num_vars)])# 定义约束条件problem += lpSum([constraints[i] * x[i] for i in range(num_vars)]) <= max_weight# 求解问题problem.solve()# 输出结果print(f"The status of the problem is {LpStatus[problem.status]}")print(f"The optimal value of the problem is {value(problem.objective)}")print(f"The optimal solution is {[x[i].varValue for i in range(num_vars)]}")return value(problem.objective), [x[i].varValue for i in range(num_vars)]if __name__ == "__main__":solve_zero_one_programming()
此代码借助 Python 的pulp
库,构建了一个通用的 0-1 规划求解程序。它通过与用户的交互,精准获取问题的关键信息,从而构建出 0-1 规划模型,并完成求解以及结果输出等一系列操作。
(二)输入获取部分
# 获取用户输入的变量数量
num_vars = int(input("请输入决策变量的数量: "))# 获取用户输入的目标函数系数
profits = []
for i in range(num_vars):profit = float(input(f"请输入目标函数中第 {i + 1} 个变量的系数: "))profits.append(profit)# 获取用户输入的约束条件系数
constraints = []
for i in range(num_vars):constraint = float(input(f"请输入约束条件中第 {i + 1} 个变量的系数: "))constraints.append(constraint)# 获取用户输入的最大约束值
max_weight = float(input("请输入约束条件的最大限制值: "))
这部分代码的功能是通过input
函数,以交互式的方式获取用户输入的决策变量数量、目标函数系数、约束条件系数以及最大约束值。这些输入信息是构建 0-1 规划模型的基础数据,用户可以根据实际问题的具体情况进行灵活输入。例如,在一个资源分配问题中,目标函数系数可能代表每个资源分配方案所带来的收益,约束条件系数则可能表示每个方案对资源的消耗,而最大约束值就是可利用的资源总量。
(三)模型构建部分
# 创建问题
problem = LpProblem("zero_to_one_Programming_Example", LpMaximize)# 定义决策变量
x = [LpVariable(f"x{i}", lowBound=0, cat='Binary') for i in range(1, num_vars + 1)]# 定义目标函数
problem += lpSum([profits[i] * x[i] for i in range(num_vars)])# 定义约束条件
problem += lpSum([constraints[i] * x[i] for i in range(num_vars)]) <= max_weight
首先,使用LpProblem
类创建一个名为"zero_to_one_Programming_Example"
的最大化 0-1 规划问题实例problem
。接着,通过列表推导式定义了一系列决策变量x
,每个变量命名为x{i}
,其下限为 0,类型为Binary
,即只能取 0 或 1,这完全符合 0-1 规划对决策变量的要求。然后,利用lpSum
函数,根据之前获取的目标函数系数profits
和决策变量x
构建目标函数,并将其添加到问题problem
中。同样,依据约束条件系数constraints
、决策变量x
以及最大约束值max_weight
构建约束条件,并添加到问题中。这一系列操作将用户输入的实际问题信息转化为可求解的 0-1 规划模型。
(四)求解与结果输出部分
# 求解问题
problem.solve()# 输出结果
print(f"The status of the problem is {LpStatus[problem.status]}")
print(f"The optimal value of the problem is {value(problem.objective)}")
print(f"The optimal solution is {[x[i].varValue for i in range(num_vars)]}")return value(problem.objective), [x[i].varValue for i in range(num_vars)]
调用problem.solve()
方法对构建好的 0-1 规划问题进行求解。求解完成后,通过LpStatus
获取问题的求解状态,使用value
函数获取目标函数的最优值,通过访问决策变量的varValue
属性获取最优解中每个变量的值。最后,将求解状态、最优值以及最优解输出,同时返回最优值和最优解,以便在后续可能的操作中进行进一步处理。例如,在一个项目选择问题中,输出的最优解将明确告知决策者应该选择哪些项目,而最优值则表示选择这些项目所带来的最大收益。
四、0-1 规划在资源分配问题中的应用实例
(一)问题背景与设定
假设某企业有 10 个不同的项目可供选择开展,每个项目所需投入的资源量以及预期能够带来的利润各不相同。企业当前可调配的资源总量上限为 30 单位。我们需要通过 0-1 规划来确定参与哪些项目,从而实现总利润的最大化。这正是一个典型的 0-1 规划场景,每个项目的参与与否可分别用 0 和 1 表示,对应 0-1 规划中的决策变量。
(二)代码实现及详细解析
from pulp import LpMaximize, LpProblem, LpStatus, lpSum, LpVariable, value# 创建问题
problem = LpProblem("zero_to_one_Programming_Example", LpMaximize)
# 定义目标函数系数
profits = [540, 200, 180, 350, 60, 150, 280, 450, 320, 120]
# 定义约束系数
constraints = [6, 3, 4, 5, 1, 2, 3, 5, 4, 2]
max_weight = 30# 定义决策变量
x = [LpVariable(f"x{i}", lowBound=0, cat='Binary') for i in range(1, 11)]
# 定义目标函数
problem += lpSum([profits[i] * x[i] for i in range(0, 10)])
# 定义约束条件
problem += lpSum([constraints[i] * x[i] for i in range(0, 10)]) <= max_weight
# 求解问题
problem.solve()
print(f"The status of the problem is {LpStatus[problem.status]}")
print(f"The optimal value of the problem is {value(problem.objective)}")
print(f"The optimal solution is {[x[i].varValue for i in range(0, 10)]}")
- 问题创建: 使用
LpProblem
类创建了一个名为"zero_to_one_Programming_Example"
的最大化问题实例problem
。这里明确问题类型为最大化,意味着我们旨在最大化企业的总利润。 - 目标函数系数定义:
profits
列表存储了每个项目预期带来的利润,依次为[540, 200, 180, 350, 60, 150, 280, 450, 320, 120]
。这些值将用于构建目标函数,反映每个项目对总利润的贡献程度。例如,第一个项目若被选中(即对应的决策变量\(x_1 = 1\)),则会为总利润贡献 540 单位。 - 约束系数定义:
constraints
列表记录了每个项目所需投入的资源量,即[6, 3, 4, 5, 1, 2, 3, 5, 4, 2]
。这些值用于构建约束条件,体现每个项目对资源的消耗情况。比如,第一个项目需要消耗 6 单位资源。 - 最大约束值设定:
max_weight = 30
设定了企业可调配的资源总量上限为 30 单位。这是整个 0-1 规划模型中的关键约束条件,任何项目组合的资源消耗总和都不能超过这个值。 - 决策变量定义: 通过列表推导式创建了 10 个决策变量
x
,变量命名为x1
到x10
,每个变量的下限为 0 且类型为Binary
,即取值只能是 0 或 1。其中,x[i]
代表第\(i+1\)个项目的参与决策,\(x[i]=1\)表示选择该项目,\(x[i]=0\)表示不选择该项目。 - 目标函数构建:
problem += lpSum([profits[i] * x[i] for i in range(0, 10)])
构建了目标函数。它将每个项目的利润与对应的决策变量相乘,并对所有项目进行求和。当某个项目的决策变量为 1 时,其利润会被纳入总利润计算;若为 0,则该项目利润不参与计算。通过这种方式,目标函数能够准确反映不同项目选择组合下的总利润情况。 - 约束条件构建:
problem += lpSum([constraints[i] * x[i] for i in range(0, 10)]) <= max_weight
构建了资源约束条件。它将每个项目的资源消耗量与对应的决策变量相乘并求和,确保这个总和不超过最大资源上限 30 单位。这保证了在求解过程中得到的项目选择方案不会超出企业的资源承受能力。 - 问题求解与结果输出: 调用
problem.solve()
方法求解 0-1 规划问题。求解完成后,通过LpStatus[problem.status]
获取问题的求解状态,如是否成功找到最优解、问题是否可行等。使用value(problem.objective)
获取目标函数的最优值,即通过合理选择项目所实现的最大总利润。通过[x[i].varValue for i in range(0, 10)]
获取每个决策变量的值,从而明确哪些项目被选中,哪些项目未被选中。例如,如果x[0].varValue
为 1,说明第一个项目被选中;若为 0,则第一个项目未被选中。
(三)结果分析
运行代码后得到的求解状态为找到最优解,最优值为 2410.0,最优解为[1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0]
。这表明在资源总量上限为 30 单位的约束下,选择第 1、2、4、6、7、8、9、10 个项目能够实现总利润最大化,最大总利润为 2410 单位。通过 0-1 规划,企业能够从 10 个候选项目中,基于资源限制和利润预期,精准地确定最优的项目组合。从资源利用角度来看,被选中的项目消耗的资源总和恰好满足或接近 30 单位的上限,实现了资源的高效配置。从利润获取层面而言,这一项目组合相较于其他可能的组合,能够为企业带来最大的经济效益。这一结果为企业的项目决策提供了有力的量化支持,帮助企业在复杂的项目选择场景中,做出科学合理的决策,提升企业的整体竞争力和盈利能力。
五、0-1 规划的其他应用场景
(一)资源分配
在企业的生产运营中,常常需要将有限的资源(如资金、人力、设备等)分配到多个项目或任务中。由于资源的分配单位往往是整数,且资源总量有限,同时每个项目或任务对资源的需求和产生的效益不同,因此可以将是否为某个项目分配资源作为 0-1 决策变量,以总效益最大化为目标函数,以资源总量为约束条件,构建 0-1 规划模型来实现资源的最优配置。例如,一家软件开发公司有一定数量的程序员和一定的项目预算,需要决定将程序员分配到哪些项目中,以及是否为某些项目追加预算,以实现公司整体利润的最大化。
(二)项目选择
在投资领域,投资者面临众多的投资项目,但由于资金、时间等资源的限制,无法对所有项目进行投资。每个项目都有其预期的收益和风险,通过将是否投资某个项目作为 0-1 决策变量,结合项目的收益、风险等因素构建目标函数和约束条件,利用 0-1 规划可以帮助投资者筛选出最具价值的项目组合,在控制风险的前提下实现投资收益的最大化。例如,一个风险投资机构有一笔固定的资金,需要从多个创业项目中选择投资对象,考虑到每个项目的市场前景、技术实力、团队素质等因素,运用 0-1 规划能够确定最优的投资项目选择方案。
(三)设备购置
在制造业中,企业需要决定是否购置新的生产设备。购置新设备可能会提高生产效率、增加产品质量,但也需要投入资金并考虑设备的维护成本、场地需求等因素。通过将是否购置某台设备作为 0-1 决策变量,以企业的长期利润最大化为目标函数,同时考虑资金预算、场地空间、设备兼容性等约束条件,构建 0-1 规划模型,企业可以做出合理的设备购置决策。例如,一家汽车制造企业计划扩大生产规模,需要决定是否购买新型的冲压设备、焊接机器人等,通过 0-1 规划可以综合评估各种因素,确定最优的设备购置方案。
六、总结
0-1 规划作为一种在数学建模和实际决策中具有核心地位的优化方法,凭借其独特的二元决策变量特性,为解决复杂的资源分配、项目选择等问题提供了强大的工具。从基本原理到 Python 代码实现,再到在背包问题及其他众多领域的广泛应用,我们全面领略了其强大的功能和广泛的适用性。随着计算机技术的不断进步和实际问题复杂度的增加,0-1 规划将在更多领域发挥关键作用,为科学研究、工程实践以及商业决策等提供更加精准、高效的解决方案。希望本文能够帮助读者深入理解 0-1 规划的精髓,并在各自的工作和学习中充分挖掘其潜力,解决更多实际难题。
相关文章:
Python 实现的运筹优化系统代码详解(0-1规划背包问题)
一、引言 在数学建模与实际决策场景的交织领域中,诸多复杂问题亟待高效且精准的解决方案。0-1 规划作为一种特殊且极为重要的优化方法,宛如一把万能钥匙,能够巧妙开启众多棘手问题的解决之门。它专注于处理决策变量仅能取 0 或 1 这两种极端状…...
护网蓝初面试题
《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...
音视频学习(三十二):VP8和VP9
VP8 简介 全称:Video Processing 8发布者:原 On2 Technologies(2010 被 Google 收购)定位:开源视频压缩标准,主要竞争对手是 H.264应用: WebRTC 视频通信HTML5 <video> 标签(…...
美国mlb与韩国mlb的关系·棒球9号位
MLB(Major League Baseball,美国职业棒球大联盟)作为全球最高水平的职业棒球联赛,与韩国市场流行的“MLB”时尚品牌之间存在着授权合作关系,但两者在业务范畴和品牌定位上存在显著差异。 一、品牌授权背景:…...
免费在线PUA测试工具:识别情感操控,守护情感健康
免费在线PUA测试工具:识别情感操控,守护情感健康 你是否曾经在感情中感到困惑、不安,甚至怀疑自己?今天为大家推荐一个专业的PUA测试工具,帮助你识别是否正在经历情感操控。 测试工具链接:PUA测试工具 什么…...
nginx中的try_files指令
try_files 是 Nginx 中一个非常有用的指令,用于按顺序检查文件是否存在,并返回第一个找到的文件。如果所有指定的文件都不存在,则执行回退逻辑,如重定向到一个指定的 URI 或返回一个错误代码。 作用 文件查找:按顺序检…...
[特殊字符] 驱动开发硬核特训 · Day 4
主题:从硬件总线到驱动控制 —— I2C 协议与传感器驱动开发全解析 I2C(Inter-Integrated Circuit)总线是一种广泛用于嵌入式设备的串行通信协议,因其低成本、简单布线和多从设备支持,成为连接各种传感器(温…...
Python 实现玻璃期货数据处理、入库与分析:从代码到应用
Python 实现期货数据处理与分析:从代码到应用 引言 在金融市场中,期货数据的处理和分析对于投资者和分析师来说至关重要。Python 凭借其丰富的库和简洁的语法,成为了处理和分析期货数据的强大工具。本文将详细解读一段用于处理期货持仓和行…...
神经网络之损失函数
引言:损失函数 (Loss Function)是机器学习和深度学习中非常重要的一个概念。用于衡量模型的预测值与真实值之间的差异,从而指导模型优化其参数以最小化这种差异。 一、损失函数作用 量化误差:损失函数是将预测值和真实…...
在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)
一、准备工作 确保已安装Gogs并运行在HTTP模式(默认端口3000) 确认服务器内网IP地址(如192.168.1.100) 二、安装Apache和必要模块 sudo apt update sudo apt install apache2 -y sudo a2enmod ssl proxy proxy_http rewrite headers 三、创建SSL证书 1. 创建证书存储目录…...
printf
printf() 是 C 和 C 标准库中的一个输出函数,位于 <cstdio> 头文件中。下面为你详细介绍它的相关知识点。 1. 基本使用 printf() 函数的作用是按照指定格式将数据输出到标准输出设备(通常是控制台)。其基本语法如下: cpp …...
Leetcode 311 Sparse Matrix Multiplication 稀疏矩阵相乘
Problem Given two sparse matrices A and B, return the result of AB. You may assume that A’s column number is equal to B’s row number. Example: A [[ 1, 0, 0],[-1, 0, 3] ]B [[ 7, 0, 0 ],[ 0, 0, 0 ],[ 0, 0, 1 ] ]| 1 0 0 | | 7 0 0 | | 7 0 0 | AB …...
mysql和sqlite关于data数据的识别问题
<input type"date" name"birthday" value""> # 表单传入的日期 birthday request.form.get(birthday) # 获取日期 birthday Column(birthday, Date, comment出生日期, nullableTrue) # 数据库的数据字段模型 birthday_str request…...
2024 天梯赛——工业园区建设题解
思路 将点 i i i 视为固定点, 点 j j j 视为灵活点,其中 s i 1 s_{i} 1 si1, s j 0 s_{j} 0 sj0。维护四个队列,其中 q 0 q_{0} q0 和 q 1 q_{1} q1 分别维护还没有被选用的固定点 和 灵活点, Q 0 Q…...
亚马逊AI新功能上线:5大亮点解锁精准消费预测
在人工智能技术不断重塑跨境电商生态之际,全球电商巨头亚马逊(Amazon)再次迈出关键一步。近日,亚马逊正式对其卖家中心推出一系列基于AI的新功能,聚焦于消费数据预测、用户行为洞察、库存智能管理与个性化营销服务等方…...
opus+ffmpeg+c++实现录音
说明: opusffmpegc实现录音 效果图: step1:C:\Users\wangrusheng\source\repos\WindowsProject1\WindowsProject1\WindowsProject1.cpp // WindowsProject1.cpp : 定义应用程序的入口点。 //#include "framework.h" #include "Windows…...
ComfyUI的本地私有化部署使用Stable Diffusion文生图
什么是ComfyUI ? ComfyUI是一个基于节点流程的Stable Diffusion操作界面。以下是关于它的详细介绍: 特点与优势 高度可定制:提供丰富的节点类型,涵盖文本处理、图像处理、模型推理等功能。用户可根据需求自由组合节点࿰…...
【学习笔记17】Windows环境下安装RabbitMQ
一. 下载RabbitMQ( 需要按照 Erlang/OTP 环境的版本依赖来下载) (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang V…...
【LeetCode 热题100】55:跳跃游戏(详细解析)(Go语言版)
🚀 LeetCode 热题 55:跳跃游戏(Jump Game)完整解析 📌 题目描述 给定一个非负整数数组 nums,你最初位于数组的第一个下标。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一…...
OpenCV轮廓检测全面解析:从基础到高级应用
一、概述 轮廓检测是计算机视觉中的基础技术,用于识别和提取图像中物体的边界。与边缘检测不同,轮廓检测更关注将边缘像素连接成有意义的整体,形成封闭的边界。 轮廓检测的核心价值 - 物体识别:通过轮廓可以识别图像中的独立物体…...
微服务入门:Spring Boot 初学者指南
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 微服务因其灵活性、可扩展性和易于维护性而成为现代软件架构的重要组成部分。在本博客中,我们将探讨如何使用 Spring Boot 构建…...
Windows环境下开发pyspark程序
Windows环境下开发pyspark程序 一、环境准备 1.1. Anaconda/Miniconda(Python环境) 如果不怕包的版本管理混乱,可以直接使用已有的Python环境。 需要安装anaconda/miniconda(python3.8版本以上):Anaconda…...
嵌入式学习笔记——大小端及跳转到绝对地址
大小端以及跳转到绝对地址 0x100000 嵌入式编程中的大小端详解一、大端模式与小端模式二、判断当前系统是大端还是小端方法一:指针强制类型转换方法二:使用联合体(union) 三、结构体位段和大小端的影响四、大小端影响内存的 memc…...
eprime相嵌模式实验设计
一、含义与模型结构 该模式的实验设计至少 由两个存储不同实验材料及 属性的List和一个核心实验 过程CEP组成。子list1和 list2相嵌在父List中,CEP 可以调用List中的材料,也 可以调用list1和list2中的材 料。 二、相嵌模式的应用 应用于解决“多重随…...
编译uboot的Makefile编写
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distcleanmake ARCHarm CROSS_COMPILEarm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfigmake V1 ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j12 这三条命令中 ARCHarm 设置目标为 arm 架构, CROSS_COMP…...
Go语言常用算法实现
以下是Go语言中常用的算法实现,涵盖排序、搜索、数据结构操作等核心算法。 一、排序算法 1. 快速排序 func QuickSort(arr []int) []int {if len(arr) < 1 {return arr}pivot : arr[0]var left, right []intfor i : 1; i < len(arr); i {if arr[i] < pi…...
Windows上使用NSSM注册定时服务
适用和不适用场景 适用场景 持续运行 的脚本或程序(如 Laravel 的 schedule:run 每分钟检查任务)后台常驻 的任务或服务(如监听服务、实时同步) 不适用场景 低频次任务(如每日/每周备份) NSSM 常驻内存…...
【Gorm】模型定义
intro package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite" // GORM 使用该驱动来连接和操作 SQLite 数据库。 )type Product struct {gorm.Model // 嵌入GORM 内置的模型结构,包含 ID、CreatedAt、UpdatedAt、DeletedAt 四个字段Cod…...
程序化广告行业(65/89):AdX/SSP系统深度剖析与实战要点
程序化广告行业(65/89):AdX/SSP系统深度剖析与实战要点 大家好!一直以来,我都对程序化广告领域充满热情,这个领域发展迅速且不断涌现新的技术和模式。之前我们探讨了程序化广告的一些基础内容,…...
算法刷题记录——LeetCode篇(2.7) [第161~170题](持续更新)
更新时间:2025-04-06 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 169. 多数元素 给定一个大小为…...
conda安装指定版本python环境
1. 创建指定 Python 版本的环境 使用以下命令创建环境,并将 <env_name> 替换为你的环境名称,<python_version> 替换为具体的 Python 版本(如 3.8, 3.9 等) conda create -n <env_name> python<python_vers…...
PH热榜 | 2025-04-05
1. Comp AI 标语:开源的 Vanta 和 Drata 替代方案 介绍:这款开源的 Drata 和 Vanta 替代方案,能够帮助你在几周内,轻松满足 SOC 2、ISO 27001 和 GDPR 等合规框架的要求,而不是像往常那样拖延数月。 产品网站&#…...
C++之红黑树
目录 一、红黑树的概念 1.1、红黑树的规则 1.2、红黑树如何确保最长路径不超过最短路径的二倍 1.3、红黑树的效率 二、红黑树的实现 2.1、红黑树的结构 2.2、红黑树的插入 2.2.1、红黑树插入一个值的大概过程 2.2.2、情况一:变色 2.2.3、情…...
各个语言对不同数据结构的叫法
一、基础数据结构对比 数组(Array) C/C:固定大小数组(int arr),动态数组通过vector(C)实现 Java:固定数组(int[]),动态数组…...
蓝桥杯 web 水果拼盘 (css3)
做题步骤: 看结构:html 、css 、f12 分析: f12 查看元素,你会发现水果的高度刚好和拼盘的高度一样,每一种水果的盘子刚好把页面填满了,所以咱们就只要让元素竖着排列,加上是竖着,排不下的换行…...
算法专题(八):分治-归并排序
目录 一、排序数组 1.1 题目 2.2 思路 2.3 代码实现 二、LCR 170. 交易逆序对的总数 (数组中的逆序对) 2.1 题目 2.2 思路 方法一:快速统计出某个数前面有多少个数比它大 方法二:快速统计出某个数后面有多少个数比它小 …...
51单片机使用定时器实现LCD1602的时间显示(STC89C52RC)
本文前半部分直接给出实现(注意进位问题是秒->分->小时,用 if 嵌套即可实现),后半部分讲解定时器和中断系统。 效果展示: LCD1602电路图: 项目结构: 代码实现: main.c #…...
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务
微软2025年AI技术深度解析:从多模态大模型到企业级代理服务 一、微软AI技术全景概览 在2025年的AI领域,微软通过Azure AI Foundry、多模态大模型、企业级AI代理三大核心技术,构建了覆盖开发、部署、应用全流程的AI生态体系。根据最新财报数…...
24 设计模式总结
设计模式分类(意图) • 创建型模式:创建对象的机制,从所需要实例化的对象中解耦。 • 结构型模式:将对象或类组装到更大的结构中。 • 行为型模式:负责对象间的交互和分配职责。分类的目的是为了更抽象的了…...
【ARTS】2873.有序三元组中的最大值!
前言 仅做学习使用,侵删 什么是ARTS? 算法(Algorithm): 每周至少一道LeetCode算法题,加强编程训练和算法学习 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平 技巧 (Tip):学习至少一个技…...
Mysql进阶
目录 一.Mysql架构 1.连接层 2.服务层 3.引擎层 4.物理文件存储层 二.Mysql引擎 1.InnoDB 2.MyISAM 三.索引 1.什么是索引 2.为什么要有索引 3.索引的原理 4.索引优势 5.索引劣势 6.索引分类 主键索引 唯一索引 单值索引 组合索引(复合索引&#…...
探秘JVM内部
在我们编写Java代码,点击运行后,会发生什么事呢? 首先,Java源代码会经过Java编译器将其编译成字节码,放在.class文件中 然后这些字节码文件就会被加载到jvm中,然后jvm会读取这些文件,调用相关…...
c语言学习12天
c语言的宏定义:宏定义单纯的文本替换不会检查语法是否合法 #include #pragma 以及开头的#都属于预处理指令 预处理指令:在gcc编译套件中的cpp预处理器对程序进行编译之前所做的一些动作,如#include预处理指令就是在程序编译之前有预处理器…...
公司内网部署离线deepseek本地模型实战
企业内部可能有些数据比较敏感,不能连接互联网。deepseek来提高工作效率,这个时候你可以利用ollama在内网本地部署来实现。 本式样是先在自己电脑上用虚拟机部署好,再用U盘把虚拟机文件复制到内网去。 一、使用VMware新建WIN2022虚拟机 &a…...
rocketmq中的延迟队列使用详解
RocketMQ的延迟队列通过预设的延迟等级实现消息的定时投递,适用于订单超时、定时通知等高并发场景。以下是其核心原理、使用方式及优化策略的详细解析: 一、实现原理 延迟等级机制 RocketMQ默认提供18个固定延迟等级(1s、5s、10s、30s、1m、2…...
VB.NET Asp.Net Core模板WebAPI应用-宝塔面板Linux系统通过Docker部署
宝塔面板支持在Linux系统上部署Docker容器吗? 如何在宝塔面板上通过Docker部署VB.NET应用? Docker容器中的VB.NET Asp.Net Core WebAPI应用如何配置? 一,首先,创建一个ASP.NET Core测试项目 1.1 打开VS2019/2022,创建一个.NTE6 Core控制台应…...
4985 蜗牛
4985 蜗牛 ⭐️难度:中等 ⭐️考点:2023、省赛、动态规划 📖 📚 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc new Sc…...
springboot多模块工程打包部署运行
1、问题概述? 基于实际项目打包过程,各种配置面面俱到,已配置的可跳过。 本文以打包jar包为模板进行操作,部署方便。 在实际的开发中,项目的模块可能较多,如果都放在一个项目的目录中,势必会造成项目包中的文件冗余,难以管理,这个时候就需要使用多模块管理项目。 …...
吴恩达深度学习复盘(8)神经网络中激活函数的建模
激活函数的建模原理 到目前为止,在隐藏层等一直使用激活函数,最初通过逻辑回归建立新网络,组合多个逻辑回归单元。这表明激活函数在神经网络构建中一直存在,且最初的网络构建方式与逻辑回归相关。实际上,激活函数的种类…...
1-linux的基础知识
一.linux的文件系统结构 windows文件系统 微软windows系统将硬盘上的几个分区,用A: B: C: D:等符号标识。存取文件时一定要清楚放在那个磁盘的那个目录下。 linux文件系统 linux文件系统的组织模式犹如一颗倒置的树,这与windows文件系统有很大的差别…...