2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序

news2025/4/12 7:18:46

2024年国赛高教杯数学建模

C题 农作物的种植策略

原题再现

  根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略,有利于方便田间管理,提高生产效益,减少各种不确定因素可能造成的种植风险。
  某乡村地处华北山区,常年温度偏低,大多数耕地每年只能种植一季农作物。该乡村现有露天耕地1201亩,分散为 34 个大小不同的地块,包括平旱地、梯田、山坡地和水浇地4种类型。平旱地、梯田和山坡地适宜每年种植一季粮食类作物;水浇地适宜每年种植一季水稻或两季蔬菜。该乡村另有16个普通大棚和4个智慧大棚,每个大棚耕地面积为0.6亩。普通大棚适宜每年种植一季蔬菜和一季食用菌,智慧大棚适宜每年种植两季蔬菜。同一地块(含大棚)每季可以合种不同的作物。 详见附件 1。
  根据农作物的生长规律,每种作物在同一地块(含大棚)都不能连续重茬种植,否则会减产; 因含有豆类作物根菌的土壤有利于其他作物生长,从 2023 年开始要求每个地块(含大棚)的所有土地三年内至少种植一次豆类作物。同时,种植方案应考虑到方便耕种作业和田间管理,譬如:每种作物每季的种植地不能太分散,每种作物在单个地块(含大棚)种植的面积不宜太小,等等。2023 年的农作物种植和相关统计数据见附件 2。

  请建立数学模型,研究下列问题:
  问题 1 假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持 稳定,每季种植的农作物在当季销售。如果某种作物每季的总产量超过相应的预期销售量,超过部 分不能正常销售。请针对以下两种情况,分别给出该乡村 2024~2030 年农作物的最优种植方案,将 结果分别填入 result1_1.xlsx 和 result1_2.xlsx 中(模板文件见附件 3)。
  (1) 超过部分滞销,造成浪费;
  (2) 超过部分按 2023 年销售价格的 50%降价出售。
  问题 2 根据经验,小麦和玉米未来的预期销售量有增长的趋势,平均年增长率介于5%~10% 之间,其他农作物未来每年的预期销售量相对于 2023 年大约有±5%的变化。农作物的亩产量往往会 受气候等因素的影响,每年会有±10%的变化。因受市场条件影响,农作物的种植成本平均每年增长 5%左右。粮食类作物的销售价格基本稳定;蔬菜类作物的销售价格有增长的趋势,平均每年增长5% 左右。食用菌的销售价格稳中有降,大约每年可下降1%~5%,特别是羊肚菌的销售价格每年下降幅 度为5%。
  请综合考虑各种农作物的预期销售量、亩产量、种植成本和销售价格的不确定性以及潜在的种 植风险,给出该乡村 2024~2030 年农作物的最优种植方案,将结果填入 result2.xlsx 中(模板文件见 附件 3)。
  问题 3 在现实生活中,各种农作物之间可能存在一定的可替代性和互补性,预期销售量与销 售价格、种植成本之间也存在一定的相关性。请在问题 2 的基础上综合考虑相关因素,给出该乡村 2024~2030 年农作物的最优种植策略,通过模拟数据进行求解,并与问题 2 的结果作比较分析。
  附件 1 乡村现有耕地和农作物的基本情况
  附件 2 2023 年乡村农作物种植和相关统计数据
  附件 3 须提交结果的模板文件(result1_1.xlsx,result1_2.xlsx,result2.xlsx)

整体求解过程概述(摘要)

  本文研究最大化利用土地资源,建立栽种策略优化模型,利用贪心算法、随机扰动、蒙特卡洛、灵敏度检验等方法求解科学土地管理、超额出售、多因素时间波动、农作物替代性、互补性以及相关性等问题。
  针对问题一,定义第 t 年的第 i 季度时,在第 j 块地种植第 k 种作物种植面积为决策变量,构建了以种植经济效益最大化为目标函数,可耕种地面积、实际可售量、连作方式、地块及作物栽种等限制为约束的种植策略线性规划模型。为科学管理土地,满足种植地不宜太分散的目标,传入参数 p、 q,分别约束每块土地最多种植作物数量,每种作物最多可种植块数量。综合考虑 p、q 尽可能小与收益尽可能大。对题目给出的数据进行预处理,统一数据格式便于读取,并统计数据生成成本与产量的三维数据表。最终,使用求解器求解:超出部分滞销结果为40244799.20元,超出部分折价结果为56325297.78元;使用贪心策略求解:超出部分滞销结果为36843378.8元,超出部分折价结果为46724871.84元。这两种求解方法各有优缺点,求解器求解结果更优,但求解慢,而贪心算法则相反,根据具体需求选择方法,两种销售情况会导致结果产生较大差异,原因归结于收益大的作物在降价后仍可保持高收益,会被高频率大面积种植。
  针对问题二,考虑作物亩产量、预计销量和销售价格的波动因素,为增强风险应对能力,以最大化种植经济效益期望为目标函数,设定决策变量为波动场景下的可行策略对应的种植经济效益,增加其余参数的时间维度,在延续上一问的约束条件基础上,构建了随机规划模型。对于超过部分滞销情况,使用蒙特卡洛算法生成100组符合正态分布的随机参数序列,使用求解器在随机序列下求出100组种植策略。将分布函数离散化,可得到每组随机序列对应的概率,接着对每种规划策略进行扰动。最终得到100组随机扰动策略下,种植经济效益均值最高的种植规划策略,其中,抗波动性最强方案的种植经济效益均值为:51667432.02。
  针对问题三,基于问题二模型,目标函数与决策变量保持不变,分析作物相关性及销量-价格-成本相关性对变量的影响。对相关性强且作物类型相同的作物进行替代,比较目标函数对其替换程序的灵敏度检测其替代性,最终选择用小麦替代谷子,青椒替代辣椒,对互补性强的植物进行软约束,使其尽可能协同耕种,提升效率,如豆类轮作可提升总体产量。接着,根据销量-价格-成本关系,根据销量推算合理的成本与价格。综合考虑上述因素后,在模拟数据下求解最优种植方案的种植经济效益均值为:53023389.86,相较于第二问结果更优,符合优化的目标。

模型假设:

  1. 假设当季种植的农作物在当季销售,无库存。
  2. 假设问题一中每种农作物的未来预期销量、种植成本、亩产量和售价相较于2023年保持稳定。
  3. 假设问题二相关销量、售价等变量波动符合正态分布。
  4. 假设问题三中各种农作物预期销售量与销售价格、种植成本之间存在一定相关性。

问题分析:

  问题一的分析
  问题一中,假定后续每一年的策略规划中,其预期销售量、种植成本、亩产量都与2023年相同。基于此分别考虑超过部分滞销和按照50%折价出售的种植策略情况,可以构建线性规划模型,对连种约束和豆类种植等约束进行限制后,使用求解器进行求解或构建贪心策略,依次遍历每块土地,选取对当前土地性价比最高的作物优先进行种植。同时考虑豆类种植约束,要求任何连续三年内豆类作物种植面积大于当前土地面积,则可以保证三年内每亩地都种过一次豆类作物。
  问题二的分析
  问题二中,在问题一构建的优化模型基础上,增加了作物预期销售量、种植成本、销售价格的变化条件。为输出最优的种植方案,需要在各种不确定因素和种植风险中选择一个能够在不同的预期销售量、种植成本、销售价格的变化条件中相对都有较好表现的种植策略。求解过程可以考虑使用蒙特卡洛算法生成多个随机序列,模拟不同的现实情况。
  问题三的分析
  问题三中,基于问题二构建的增加变量扰动的优化模型,进一步考虑农作物之间的可替代性和互补性,并综合考虑预期销售量与销售价格、种植成本之间的相关性,从而使构建的种植策略优化模型更加接近现实情况。首先,可依据农作物对总收入的灵敏度进行分析替代,从而减少农作物种类,优化种植结构。同时,对预期销售量与销售价格、种植成本进行相关性约束,从而构建增加了变量扰动和作物关联因素的种植优化模型。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

import pandas as pd
import gurobipy as gp
from gurobipy import GRB
import openpyxl

# 读取Excel文件中的地块面积数据
file1 = '附件1.xlsx'
data1 = pd.read_excel(file1, sheet_name='乡村的现有耕地')
data2 = pd.read_excel(file1, sheet_name='乡村种植的农作物')

file2 = '附件2.xlsx'
data3 = pd.read_excel(file2, sheet_name='2023年的农作物种植情况')
data4 = pd.read_excel(file2, sheet_name='2023年统计的相关数据')

# 已知数据(需根据实际情况初始化)
T = 7  # 年数
I = 2  # 季节数
J = 54  # 地块数
K = 41  # 作物种类数
p = 4

M = 100000
S = data1['地块面积/亩'].tolist()
Lk = data2['Ik'].tolist()
Price = [[3.25, 7.5, 8.25, 7, 6.75,
          3.5, 3, 6.75, 6, 7.5, 40, 1.5,
          3.25, 5.5, 3.5, 7, 8, 6.75, 6.5,
          3.75, 6.25, 5.5, 5.75, 5.25, 5.5,
          6.5, 5, 5.75, 7, 5.25, 7.25, 4.5,
          4.5, 4, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 9.6, 8.1, 7.8, 4.5, 7.5,
          6.6, 6.9, 6.8, 6.6, 7.8, 6, 6.9,
          8.4, 6.3, 8.7, 5.4, 5.4, 4.8, 2.5,
          2.5, 3.25, 57.5, 19, 16, 100]]
Request = [[15700, 21850, 22400, 33040, 6975,
            170840, 132750, 71400, 30000, 12500,
            1500, 35100, 36000, 14000, 10000, 21000,
            36480, 26880, 6480, 30000, 35400, 43200,
            0, 1800, 3600, 4050, 4500, 34400, 9000, 1500,
            1200, 3600, 1800, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 810, 2160, 900, 810, 0, 0,
            0, 0, 0, 0, 810, 2160, 900, 810, 0, 0]]

df1 = pd.read_excel('cost.xlsx', sheet_name='第一季')
df2 = pd.read_excel('cost.xlsx', sheet_name='第二季')
Cost1 = df1.values.transpose()
Cost2 = df2.values.transpose()
Cost = [Cost1, Cost2]

df3 = pd.read_excel('Produce.xlsx', sheet_name='第一季')
df4 = pd.read_excel('Produce.xlsx', sheet_name='第二季')
Produce1 = df3.values.transpose()
Produce2 = df4.values.transpose()
Produce = [Produce1, Produce2]

model = gp.Model("Crop_Planting")

# 决策变量
X = model.addVars(T, I, J, K, vtype=GRB.CONTINUOUS, name="X")
Y = model.addVars(T, I, J, K, vtype=GRB.BINARY, name="Y")
Z = model.addVars(T, I, K, vtype=GRB.CONTINUOUS, name="Z")
Z_rice = model.addVars(T, range(27, 35), vtype=GRB.BINARY, name="Z_Rice")

# 定义目标函数
model.setObjective(
    gp.quicksum(Price[i][k] * Z[t, 1, k] - gp.quicksum(Cost[i][j][k] * X[t, 1, j, k] for j in range(J))
               for t in range(T) for i in range(I) for k in range(K)),
    GRB.MAXIMIZE
)

# 约束1:销量不超过作物总产量
model.addConstrs((Z[t, 1, k] <= gp.quicksum(Produce[i][j][k] * X[t, i, j, k] for j in range(J))
                 for t in range(T) for i in range(I) for k in range(K)), name="Production_Limit")

# 约束2:销量不超过市场需求
model.addConstrs((Z[t, 1, k] <= Request[i][k] for t in range(T) for i in range(I) for k in range(K)), name="Demand_Limit")

# 约束3:是否种植该作物
model.addConstrs((X[t, 1, j, k] <= M * Y[t, 1, j, k]
                 for t in range(T) for i in range(I) for j in range(J) for k in range(K)),
                name="X_UpperBound_Y")

model.addConstrs((X[t, 1, j, k] >= 0.01 * Y[t, 1, j, k]
                 for t in range(T) for i in range(I) for j in range(J) for k in range(K)),
                name="X_LowerBound_Y")

# 约束4:每块地每季度种植面积总和不能超过地块总面积
for t in range(T):
    for i in range(I):
        for j in range(J):
            model.addConstr(gp.quicksum(X[t, i, j, k] for k in range(K)) <= S[j], name=f"Area_{t}-{i}-{j}")

# 约束5:三年内必须至少种植一次豆类作物
model.addConstrs((gp.quicksum(X[t, i, j, k] * Lk[k] for t in range(2) for i in range(I) for k in range(K)) >= S[j]
                 for j in range(J)),
                name="Legume_First_Two_Years")

for j in range(J):
    for t in range(T - 2):  # 以3年为单位进行检查
        model.addConstr(gp.quicksum(X[tt, 1, j, k] * Lk[k] for tt in range(t, t + 3) for i in range(I) for k in range(K)) >= S[j], name=f"Legume_{j}_{t}")

# 约束6:同一种作物在同一片土地上不能连续两个季度种植
model.addConstrs((X[t, 1, j, k] * X[t, i + 1, j, k] <= S[j]
                 for t in range(T) for j in range(J) for k in range(K) for i in range(I - 1)),
                name="No_Consecutive_Planting")
model.addConstrs((X[t, i + 1, j, k] * X[t + 1, i, j, k] <= S[j]
                 for t in range(T - 1) for j in range(J) for k in range(K) for i in range(I - 1)),
                name="No_Consecutive_Planting")

# 约束7:最多种植p种作物
model.addConstrs((gp.quicksum(Y[t, i, j, k] for k in range(K)) <= p
                 for t in range(T) for i in range(I) for j in range(J)),
                name="Max_Three_Crops")

# 添加约束:每种作物最多种在q块地上
model.addConstrs((gp.quicksum(Y[t, i, j, k] for j in range(J)) <= q
                 for t in range(T) for i in range(I) for k in range(K)),
                name="Max_Five_Plots_Per_Crop")

# 约束 8:确保粮食作物在连续年份的第一季不能连种
model.addConstrs((X[t, 0, j, k] + X[t + 1, 0, j, k] <= S[j]
                 for t in range(T - 1) for j in range(J) for k in range(1, 16)),
                name="No_Consecutive_Years_For_Grain")

# 约束 9:编号为 1-26 的土地在第二季不种植任何作物
model.addConstrs((X[t, 1, j, k] == 0
                 for t in range(T) for j in range(26) for k in range(K)),
                name="No_Planting_Second_Season_For_Lands_1_26")
# 约束:编号为 1-26 的土地上只能种植编号为 1-15 的作物
model.addConstrs((X[t, i, j, k] == 0
                 for t in range(T) for i in range(I) for j in range(26) for k in range(15, 41)),
                name="No_Planting_Crops_16_41_On_Lands_1_26")

# 约束:编号为 1-15 的作物只能种植在编号为 1-26 的土地上
model.addConstrs((X[t, i, j, k] == 0
                 for t in range(T) for i in range(I) for j in range(26, J) for k in range(15)),
                name="No_Planting_Crops_1_15_On_Lands_27_54")

# 约束:编号为 27-34 的土地种植水稻
model.addConstrs((gp.quicksum(X[t, i, j, k] for i in range(I) for k in range(K) if k == 15) <= M * Z_rice[t, j]
                 for t in range(T) for j in range(27, 35)),
                name="Rice_Planting_Only_Once")

# 确保水稻只能种植在单季
model.addConstrs((gp.quicksum(X[t, i, j, 15] for i in range(I)) <= S[j]
                 for t in range(T) for j in range(27, 35)),
                name="Single_Season_Rice")

# 添加约束 1:如果种植了水稻,则第二季不种植任何作物
model.addConstrs((gp.quicksum(X[t, i, j, k] for k in range(K)) <= M * (1 - Z_rice[t, j])
                 for t in range(T) for j in range(27, 35)),
                name="No_Second_Season_If_Rice")

# 添加约束 2:第一季只能种植 17-34 号作物
model.addConstrs((gp.quicksum(X[t, 0, j, k] for k in range(16, 35)) == gp.quicksum(X[t, 0, j, k] for k in range(16, 35))
                 for t in range(T) for j in range(27, 35)),
                name="First_Season_Crops_17_34")

# 添加约束 3:第二季只能种植 35-37 号作物
model.addConstrs((gp.quicksum(X[t, 1, j, k] for k in range(34, 38)) == gp.quicksum(X[t, 1, j, k] for k in range(34, 38))
                 for t in range(T) for j in range(27, 35)),
                name="Second_Season_Crops_35_37")

# 添加约束:编号为 35-37 的作物只能种植在编号为 27-34 的土地上
model.addConstrs((X[t, i, j, k] == 0
                 for t in range(T) for i in range(I) for j in range(26) for k in range(34, 37 + 1)),
                name="No_Planting_Crops_35_37_On_Lands_1_26")

# 添加约束 4:编号为 38-41 的作物只能在 35-50 号地的第二季种植
model.addConstrs((X[t, i, j, k] == 0
                 for t in range(T) for j in range(35) for k in range(37, 41)),
                name="No_Planting_Crops_38_41_On_Lands_1_34")

# 添加约束 5:编号为 38-41 的作物只能种植在第二季
model.addConstrs((X[t, 0, j, k] == 0
                 for t in range(T) for j in range(35, 51) for k in range(37, 41)),
                name="No_Planting_Crops_38_41_First_Season")
# 设置相对Gap
model.setParam('MIPGap', 0.01)

# 优化模型
model.optimize()

# 输出结果
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution found with objective value: {model.objVal}")
    for i in range(I):
        for j in range(J):
            for k in range(K):
                if X[t, i, j, k].x > 0:
                    print(f"Year {t + 1}, Season {i + 1}, Land {j + 1}, Crop {k + 1}: {X[t, i, j, k].x} acres planted")
    print(f"Optimal solution found with objective value: {model.objVal}(元)")
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

CentOS/RHEL如何更换国内Yum源

在国内使用CentOS或RHEL系统时&#xff0c;默认的Yum源是国外的&#xff0c;这可能导致软件包的下载速度慢&#xff0c;甚至出现连接超时的问题。为了解决这个问题&#xff0c;我们可以将Yum源切换到国内的镜像源&#xff0c;从而大大提高软件包的下载速度和稳定性。 本文将详…

A9. Jenkins Pipeline自动化构建,飞书通知

怎么收集服务部署信息?【前置】首先Python如何操作JSON数据如何记录部署信息,什么时机统计?如何下发某一服务统计信息 ?那么怎么创建飞书通知机器人呢?编写飞书通知脚本总结下面我们接着上一篇文章《A8. Jenkins Pipeline自动化部署过程,多模块远程服务协调实战》继续往下…

利用 OpenCV 进行棋盘检测与透视变换

利用 OpenCV 进行棋盘检测与透视变换 1. 引言 在计算机视觉领域&#xff0c;棋盘检测与透视变换是一个常见的任务&#xff0c;广泛应用于 摄像机标定、文档扫描、增强现实&#xff08;AR&#xff09; 等场景。本篇文章将详细介绍如何使用 OpenCV 进行 棋盘检测&#xff0c;并…

DeepMind发布Matryoshka(套娃)量化:利用嵌套表示实现多精度LLM的低比特深度学习

本文将介绍 Google DeepMind 提出的 Matryoshka 量化技术&#xff0c;该技术通过从单个大型语言模型 (LLM) 实现多精度模型部署&#xff0c;从而革新深度学习。我们将深入研究这项创新技术如何提高 LLM 的效率和准确性。 随着深度学习模型在规模和复杂度上持续增长&#xff0c…

Java-数据结构-(HashMap HashSet)

一、Tree和Hash的区别 在上一篇文章中&#xff0c;我们讲到了"TreeMap"和"TreeSet"&#xff0c;但当我们刷题的时候却会发现&#xff0c;实际应用Map和Set时&#xff0c;却常常都只会用"HashMap"和"HashSet"&#xff0c;这是为什么呢…

el-table 结合 slot 具名插槽遍历封装列表模板

基础效果 要实现以上效果&#xff0c;可对 el-table 进行封装&#xff0c;将列配置视为数组&#xff0c;循环 el-table-column 标签模板组件 <div class"tableSlot"><el-table :data"dataList" border><el-table-columnv-for"(item, …

游戏引擎学习第108天

仓库:https://gitee.com/mrxiao_com/2d_game_2 看一下我们现在的进展 今天的工作重点是处理游戏中的Z轴问题&#xff0c;特别是如何在不同的层级之间进行移动&#xff0c;并确保Z轴的处理方式与真实世界中的透视效果一致。当前&#xff0c;游戏中的Z轴运动存在问题&#xff0…

遵循规则:利用大语言模型进行视频异常检测的推理

文章目录 速览摘要01 引言02 相关工作视频异常检测大语言模型 03 归纳3.1 视觉感知3.2 规则生成Normal and Anomaly &#xff08;正常与异常&#xff09;Abstract and Concrete &#xff08;抽象与具体&#xff09;Human and Environment &#xff08;人类与环境&#xff09; 3…

网页制作01-html,css,javascript初认识のhtml的基本标记

一、 Html简介 英文全称是 hyper text markup language,超文本标记语言,是全球广域网上描述网页内容和外观的标准. Html作为一款标记语言,本身不能显示在浏览器中.标记语言经过浏览器的解释和编译,才能正确地反映html标记语言的内容. 1.html 的基本标记 1&#xff09;头部标…

linux常用命令大全(包括抓包、网络检测、路由等,做项目一点点总结而来!)

文章目录 常用命令**apt相关****ls**&#xff1a;**cd****cp****ls -l | grep ssh**&#xff1a;会列出当前目录中包含 “ssh” 的文件或目录的详细信息。**系统资源**linux路由相关抓包工具和命令tcpdumpwiresharktshark iperf 常用命令 通过上下方向键 ↑ ↓ 来调取过往执行过…

Linux学习笔记之虚拟地址空间

1.示例引入 运行如下代码那么运行结果如下图。 #include<stdio.h> #include<unistd.h>int main() {pid_t id fork();if(id-1){printf("创建进程错误&#xff01;\n");return 1;}int size0;if(id0){//子进程while(1){printf("我是子进程&#xff0c…

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?

一、前言 作为现代互联网通信的基石&#xff0c;HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后&#xff0c;都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据&#xff1b;响应则承…

[论文阅读] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目录 一、前言二、主要贡献三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大学 & OPPO研究所的张磊教授&#xff0c;也是图像超分ISR的一个大牛了。 论文如下 SeeSR: Towards Semantics-Aware Rea…

LM Studio笔记

一、什么是 LM Studio&#xff1f; LM Studio 是一款功能强大、易于使用的桌面应用程序&#xff0c;用于在本地机器上实验和评估大型语言模型&#xff08;LLMs&#xff09;。它允许用户轻松地比较不同的模型&#xff0c;并支持使用 NVIDIA/AMD GPU 加速计算。 功能集&#xff1…

Linux CentOS 7部署Vulhub靶场

漏洞复现环境&#xff1a; 1、Linux操作系统中通过Docker部署的Vulhub靶场&#xff1a; docker docker-compose 2、Nmap扫描工具 一、部署靶场 1、安装Docker 1、下载docker yum install docker 安装完成&#xff0c;如下图&#xff1a; 2、开启docker服务 [rootlocalhost…

Golang GORM系列:GORM分页和排序

高效的数据检索和表示是应用程序开发的关键方面。GORM是健壮的Go对象关系映射库&#xff0c;它为开发人员提供了强大的工具来实现这一点。无论你是在构建动态web应用程序还是数据密集型服务&#xff0c;掌握GORM中的分页和排序使您能够提供无缝且高效的用户体验。本文我们将深入…

【怎么使用Redis实现一个延时队列?】

怎么使用Redis实现一个延时队列? 详细说明Java代码示例解释注意事项使用Redis实现延时队列通常通过有序集合(Sorted Set)来实现,利用Redis的ZSET类型及其相关命令可以很方便地实现这一功能。 有序集合中的每个元素都有一个分数(score),我们可以利用这个分数来存储消息需…

HarmonyNext上传用户相册图片到服务器

图片选择就不用说了&#xff0c;直接用 无须申请权限 。 上传图片&#xff0c;步骤和android对比稍微有点复杂&#xff0c;可能是为了安全性考虑&#xff0c;需要将图片先拷贝到缓存目录下面&#xff0c;然后再上传&#xff0c;当然你也可以转成Base64&#xff0c;然后和服务…

宝塔docker 安装oracle11G

1、拉取镜像 sudo docker pull iatebes/oracle_11g #iatebes为用户名2、查看镜像 sudo docker images3、创建并运行容器 docker run -d --privileged --name oralce11g -p 1521:1521 iatebes/oracle_11g4、登录到容器 5、进入容器并修改system用户密码 docker exec -it orac…