当前位置: 首页 > news >正文

记参加一次数学建模

题目请到全国大学生数学建模竞赛下载查看。
注:过程更新了很多文件,所有这里贴上的有些内容不是最新的(而是草稿)。
注:我们队伍并没有获奖,文章内容仅供一乐。

从这次比赛,给出以下赛前建议

  1. 准备代码,今年比赛的时候使用DeepSeek的人数一定不少,到时候画图、数据处理等的代码都要很久才能生成。
  2. 准备 Gurobi 求解器
  3. 充足的睡眠和一些吃的,我深熬了一夜,通宵一夜。这里需要感谢数理学院免费提供的方便面、王老吉、咖啡、西瓜、学习场地等。尽显人文关怀(这里踩一下自己的学院)
  4. 了解多一点,什么适用于哪个问题,具体怎么用可以等比赛的时候找参考资料(不然你连参考资料都不知道搜)
  5. 寻找队友,建议配置是至少两人解题,两人能写代码,一人能使用数据处理的软件(减轻代码压力),三个人都会规范地撰写公式,三个人都了解Latex,一个人熟悉Latex或文档排版和专业术语(至于最后使用什么来写论文?如果有指导老师,需要考虑他的意见)。当然也有人能独立解决。

优化、线性规划问题我稍微能做一些,从暑期的练习来看,这种题的第一题和A题是我稍微能够上手的。

[以上是赛前]


[以下是赛中]

计划是第一天(那天下午)大家每道题都试一下,最后选一道题。
事实是我们花了近两天的时间边思考边选题,我先是看了A,感觉可做,然后C的第二题我做不了,和队友讨论后决定先试试C,而第一题到次日凌晨才被我解出。(不记得了,几个比赛混乱了。)。期间看第二题和第三题没有思路,我还是偶尔会提起A题,让他们试试。直到指导老师过来,说我们C已经做了这么久,来不及做A。我才放弃A的思考,但是从第二题开始,我给到的解法我自己都觉得不靠谱,便转战后方,前线交给两个数学好的。

C 题目

这是我们最后准备放到论文里的(当然没放进去)解题步骤:
在这里插入图片描述

有一些人会在网络上公开他们的题解和思路等以吸引大家购买,我倒是不反对,建议各位看看他们的思路,有些即使是错的,还是有时候会让你“灵光一闪”,额外的,需要小心被误导。

第一题

先检查题目给的数据,做一下预处理等等,然后画几个23年的图
在这里插入图片描述

以及其他分析的图,这就看能想到多少

接下来才是真开始解题,我们可以整合题目信息得到如下约束

四张表,一张表记录“这个地块是否种植这个作物”,一张表记录“这个地块种植这个作物的面积”,一张表记录“这个地块是否种植过土豆”,一张表记录“这个地块可以种植二季度植物的面积”(横向)1. 这个地块上每个季度的作物种植面积不能比这块地的面积大2. 如果在这块地上种该作物,该作物的种植面积不得小于地块的25%(或者0.1)3. 这个地块一部分中单季作物,一部分种植双季作物(纵向)4. 该作物的年产量要大于等于23年的年产量  -- 只有粮食5. [‘平旱地’,’梯田’,’山坡’]只能种植['黄豆', '黑豆', '红豆', '绿豆', '爬豆', '小麦', '玉米', '谷子', '高粱', '黍子', '荞麦', '南瓜', '红薯', '莜麦', '大麦']  
(只有一季,单独考虑)6. 每三年每个地块至少需要种植一次['黄豆', '黑豆', '红豆', '绿豆', '爬豆']7. [‘水浇地’]《第一季》只能种植['水稻', '豇豆', '刀豆', '芸豆', '土豆', '西红柿', '茄子', '菠菜 ', '青椒', '菜花', '包菜', '油麦菜', '小青菜', '黄瓜', '生菜 ', '辣椒', '空心菜', '黄心菜', '芹菜']8. [‘水浇地’]种植双季度的面积的蔬菜种植面积9. [‘水浇地’]《第二季》只能种植['大白菜', '白萝卜', '红萝卜'],占双季的全部面积10. 每三年每个地块至少需要种植一次['豇豆', '刀豆', '芸豆']-- 只有蔬菜11. [‘普通大棚’]《第一季》只能种植[ '豇豆', '刀豆', '芸豆', '土豆', '西红柿', '茄子', '菠菜 ', '青椒', '菜花', '包菜', '油麦菜', '小青菜', '黄瓜', '生菜 ', '辣椒', '空心菜', '黄心菜', '芹菜']12. [‘普通大棚’]《第二季》只能种植['榆黄菇', '香菇', '白灵菇', '羊肚菌']13. 每三年每个地块至少需要种植一次['豇豆', '刀豆', '芸豆']14. [‘智慧大棚’]只能种[ '豇豆', '刀豆', '芸豆', '土豆', '西红柿', '茄子', '菠菜 ', '青椒', '菜花', '包菜', '油麦菜', '小青菜', '黄瓜', '生菜 ', '辣椒', '空心菜', '黄心菜', '芹菜']15. [‘智慧大棚’]两季度种植的作物不能相同16. 每三年每个地块至少需要种植一次['豇豆', '刀豆', '芸豆']

图示如下(CSDN有大小限制,所以图不够高清)
在这里插入图片描述

可以看到这是一个线性规划求最优解
需要三部分:目标函数,约束条件,决策变量。反复验证修正,得到:
在这里插入图片描述

我们可以编写代码使用Gurobi求解(建议各位在比赛前先准备好,申请许可需要时间)

#!env mathmodule
# -*- coding:utf-8 -*-
# flake8: noqa W293
"""
Name: question1.4.1_gurobi_1.5.py
Author: Kai (海***队)
Time: 2024-09-08 13:37
Describe: 
"""
import pandas as pd
import gurobipy as gp
from gurobipy import quicksum
from itertools import chain
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows# 从CSV文件中读取数据
df = pd.read_csv(r'D:\Studio\Project\2024GJB\求解\数据预处理\crop_info_table.csv')# 初始化三个空字典
unit_product_dict = {}
unit_cost_dict = {}
price_jin_dict = {}# 遍历DataFrame,构建字典
for index, row in df.iterrows():land = row['land']crop = row['crop']# 初始化 land 键的子字典if land not in unit_product_dict:unit_product_dict[land] = {}unit_cost_dict[land] = {}price_jin_dict[land] = {}# 填充字典unit_product_dict[land][crop] = float(row['unit_product'])unit_cost_dict[land][crop] = float(row['unit_cost'])price_jin_dict[land][crop] = float(row['price_jin'])land_list = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'E10', 'E11', 'E12', 'E13', 'E14', 'E15', 'E16', 'F1', 'F2', 'F3', 'F4', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'E10', 'E11', 'E12', 'E13', 'E14', 'E15', 'E16', 'F1', 'F2', 'F3', 'F4']
land_size_list = [80.0, 55.0, 35.0, 72.0, 68.0, 55.0, 60.0, 46.0, 40.0, 28.0, 25.0, 86.0, 55.0, 44.0, 50.0, 25.0, 60.0, 45.0, 35.0, 20.0, 15.0, 13.0, 15.0, 18.0, 27.0, 20.0, 15.0, 10.0, 14.0, 6.0, 10.0, 12.0, 22.0, 20.0, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 15.0, 10.0, 14.0, 6.0, 10.0, 12.0, 22.0, 20.0, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6]sale_2023 = [57000.0, 21850.0, 22400.0, 33040.0, 9875.0, 170840.0, 132750.0, 71400.0, 30000.0, 12500.0, 1500.0, 35100.0, 36000.0, 14000.0, 10000.0, 21000.0, 36480.0, 26880.0, 6480.0, 30000.0, 36210.0, 45360.0, 900.0, 2610.0, 3600.0, 4050.0, 4500.0, 35480.0, 13050.0, 1350.0, 1200.0, 3600.0, 1800.0, 1800.0, 150000.0, 100000.0, 36000.0, 9000.0, 7200.0, 18000.0, 4200.0]
plant_size_2023 = [147.0, 46.0, 60.0, 96.0, 25.0, 222.0, 135.0, 185.0, 50.0, 25.0, 15.0, 13.0, 18.0, 35.0, 20.0, 42.0, 11.8, 13.2, 1.8, 15.0, 14.9, 6.9, 0.3, 0.9, 0.9, 0.9, 0.9, 10.9, 0.9, 0.3, 0.6, 0.3, 0.3, 0.3, 30.0, 25.0, 12.0, 1.8, 1.8, 1.8, 4.2]
print("23年数据包含 ", len(sale_2023), " 份作物")# 读取 CSV 文件并设置正确的索引
bean_2023_df = pd.read_csv(r'D:\Studio\Project\2024GJB\求解\C题解\bean_2023.csv', index_col=0)
# 将 DataFrame 中的 NaN 值替换为 0
bean_2023_df.fillna(0, inplace=True)
# 打印 DataFrame 的前几行和形状
print(bean_2023_df.head())
print(bean_2023_df.shape)# 转换索引和列名为整数
bean_2023_df.index = pd.to_numeric(bean_2023_df.index)
bean_2023_df.columns = pd.to_numeric(bean_2023_df.columns)# 创建空字典
bean_2023_dict = {}# 遍历 DataFrame 的每一行和每一列
for land in bean_2023_df.index:# 每个土地创建一个新的子字典if land not in bean_2023_dict:bean_2023_dict[int(land)] = {}for crop in bean_2023_df.columns:value = bean_2023_df.at[land, crop]bean_2023_dict[int(land)][int(crop)] = value# 初始化空字典
bean_2023_sum_dict = {}# 遍历每个土地
for land, crops in bean_2023_dict.items():# 计算每个土地上所有作物的总和total_sum = sum(crops.values())# 将总和存储在新的字典中bean_2023_sum_dict[int(land)] = total_sum# 输出结果
print("23年各土地土豆种植量: ", bean_2023_sum_dict, " ", len(bean_2023_sum_dict))# 优化完成后,将plant_size结果保存到Excel工作簿
def save_to_excel(model, plant_size):# 创建一个新的工作簿wb = Workbook()# 遍历每一年份 tfor t in range(2024, 2031):results = []# 遍历土地和作物的plant_size变量,保存结果for land in range(82):for crop in range(41):value = plant_size[t][land][crop].X  # 获取优化后的值results.append([land, crop, value])# 将结果转为DataFramedf_results = pd.DataFrame(results, columns=['Land', 'Crop', 'Plant_Size'])# 创建一个新的工作表ws = wb.create_sheet(title=f'Year_{t}')# 将DataFrame写入工作表for r in dataframe_to_rows(df_results, index=False, header=True):ws.append(r)# 删除默认的工作表del wb['Sheet']# 保存Excel工作簿wb.save('plant_size_results.xlsx')print("求解结果已保存在 ", "plant_size_results.xlsx")# Kai 2024 Mathdef save_iis_to_file(model, filename):"""将 Gurobi 模型的 IIS 信息保存到文本文件中。:param model: Gurobi 模型对象:param filename: 保存 IIS 信息的文件名"""with open(filename, 'w') as file:# 输出 IIS 中的约束file.write("Model is infeasible. The following constraints form the IIS:\n")for c in model.getConstrs():if c.IISConstr:file.write(f"Constraint {c.ConstrName}: {c}\n")# 输出 IIS 中的变量边界file.write("\nThe following variable bounds are part of the IIS:\n")for v in model.getVars():if v.IISLB or v.IISUB:file.write(f"{v.VarName}: LB={v.LB}, UB={v.UB}\n")print("分析日志 已保存在 ", filename)def solve_model():model = gp.Model()# 开启日志model.setParam("LogFile", "gurobi.log")# 启用控制台输出model.setParam("OutputFlag", True)# 设置调试信息model.Params.OutputFlag = 1  # 输出更多调试信息model.Params.LogFile = "gurobi.log"  # 输出日志文件# 设置求解参数model.Params.Threads = 20  # 使用所有可用线程plant_size = {}d = {}for t in range(2024, 2031):plant_size[t] = {}d[t] = {}for land in range(82):plant_size[t][land] = {}d[t][land] = {}for crop in range(41):plant_size[t][land][crop] = model.addVar(vtype=gp.GRB.CONTINUOUS, lb=0.0, name=f"plant_size_{t}_{land}_{crop}")d[t][land][crop] = model.addVar(vtype=gp.GRB.BINARY, name="d_{}_{}".format(land, crop))model.addConstr(plant_size[t][land][crop] >= 0)model.update()# 豆类问题potato = {}for land in range(82):potato[land] = {}for t in range(2023, 2031):potato[land][t]= model.addVar(vtype=gp.GRB.CONTINUOUS, lb=0.0, name=f"potato_{land}")# =========== 干旱地、梯田、山坡 =========== for t in range(2024, 2031):for land in range(0,26):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(0,15)) <= land_size_list[land], name=f"ABC_p_s_{t}_{land}")for crop in range(0,15):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop] * 0.25 * land_size_list[land], name=f"ABC_d_{t}_{land}_{crop}")# 不能种约束for crop in range(15,41):model.addConstr(d[t][land][crop] == 0, name=f"ABC_d_not_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"ABC_p_s_not_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(0,15) for land1 in range(0,26)) <= sum(land_size_list[land2] for land2 in range(0,26))), name=f"ABC_p_s_{t}")# 重茬问题for t in range(2024, 2030):for land in range(0,26):for crop in range(0,15):model.addConstr(d[t][land][crop] * d[t+1][land][crop] == 0, name=f"ABC_same_{t}_{land}_{crop}")# 豆类计算for land in range(0,26):for t in range(2024, 2031):model.addConstr(potato[land][t] == sum(plant_size[t][land][crop] for crop in [0,5]))# =========== 水浇地 ===========# 第一季度for t in range(2024, 2031):for land in range(26,34):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop]for crop in range(15,34)) <= land_size_list[land], name=f"D_p_s_1{t}_{land}")for crop in range(15,34):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop] * 0.25 * land_size_list[land], name=f"D_d_1_{t}_{land}_{crop}")# 不能种约束for crop in chain(range(0, 15), range(34, 41)):model.addConstr(d[t][land][crop] == 0, name=f"D_d_not_1_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"D_p_s_not_1_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(15,34) for land1 in range(26,34)) <= sum(land_size_list[land2] for land2 in range(26,34))), name=f"D_p_s_1_{t}")# 重茬问题for t in range(2024, 2030):for land in range(26,34):for crop in [15]:model.addConstr(d[t][land][crop] * d[t+1][land][crop] == 0, name=f"D_same_1_{t}_{land}_{crop}")# 豆类计算for land in range(26,34):for t in range(2024, 2031):model.addConstr(potato[land][t] == sum(plant_size[t][land][crop] for crop in [16,19]))# 第二季度for t in range(2024, 2031):for land in range(54,62):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(34,37)) <= land_size_list[land], name=f"D_p_s_2_{t}_{land}")for crop in range(34,37):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop]* 0.25 * land_size_list[land], name=f"D_d_2_{t}_{land}_{crop}")# 不能种约束for crop in chain(range(0, 34), range(37, 41)):model.addConstr(d[t][land][crop] == 0, name=f"D_d_not_2_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"D_p_s_not_2_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land][crop] for crop in range(34,37) for land1 in range(54,62)) <= sum(land_size_list[land2] for land2 in range(54,62))), name=f"D_p_s_2_{t}")# 品种数量约束model.addConstr(sum(d[t][land][crop] for crop in range(34,37)) <= 1, name=f"D_crop_num_{t}_{land}")# 种植面积约束for land in range(54,62):model.addConstr(sum(plant_size[t][land][crop] for crop in range(34,37)) <= land_size_list[land] - plant_size[t][land-28][15], name=f"D_same_area_{t}_{land}")# =========== 普通大棚 ===========# 第一季度for t in range(2024, 2031):for land in range(34,50):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(16,34)) <= land_size_list[land], name=f"E_p_s_1_{t}_{land}")for crop in range(16,34):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop]* 0.25 * land_size_list[land], name=f"E_d_1_{t}_{land}_{crop}")# 不能种约束for crop in chain(range(0, 16), range(34,41)):model.addConstr(d[t][land][crop] == 0)model.addConstr(plant_size[t][land][crop] == 0, name=f"E_p_s_not_1_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(16,34) for land1 in range(34,50)) <= sum(land_size_list[land2] for land2 in range(34,50))), name=f"E_p_s_1_{t}")# 豆类计算for land in range(34,50):for t in range(2024, 2031):model.addConstr(potato[land][t] == sum(plant_size[t][land][crop] for crop in [16,19]))# 第二季度for t in range(2024, 2031):for land in range(62, 78):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(37,41)) <= land_size_list[land], name=f"E_p_s_2_{t}_{land}")for crop in range(37,41):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop]* 0.25 * land_size_list[land], name=f"E_d_2_{t}_{land}_{crop}")# 不能种约束for crop in range(0, 37):model.addConstr(d[t][land][crop] == 0, name=f"E_d_not_2_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"E_p_s_not_2_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(37,41) for land1 in range(62,78)) <= sum(land_size_list[land2] for land2 in range(62,78))), name=f"E_p_s_2_{t}")# ===========  智慧大棚 ===========for t in range(2024, 2031):for land in range(50,54):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(16,34)) <= land_size_list[land], name=f"F_p_s_1_{t}_{land}")for crop in range(16,34):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop]* 0.25 * land_size_list[land], name=f"F_d_1_{t}_{land}_{crop}")# 不能种约束for crop in chain(range(0, 16), range(34,41)):model.addConstr(d[t][land][crop] == 0, name=f"F_d_not_1_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"F_p_s_not_1_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(16,34) for land1 in range(50,54)) <= sum(land_size_list[land2] for land2 in range(50,54))), name=f"F_p_s_1_{t}")# 重茬问题for t in range(2025, 2031):for land in range(50,54):for crop in range(16,34):model.addConstr(d[t][land][crop] * d[t-1][land+28][crop] == 0, name=f"F_same_1_{t}_{land}_{crop}")# 第二季度for t in range(2024, 2031):for land in range(78,82):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] for crop in range(16,34)) <= land_size_list[land], name=f"F_p_s_2_{t}_{land}")for crop in range(16,34):model.addConstr(plant_size[t][land][crop] >= d[t][land][crop]*0.25 * land_size_list[land], name=f"F_d_2_{t}_{land}_{crop}")# 不能种约束for crop in chain(range(0, 16), range(34,41)):model.addConstr(d[t][land][crop] == 0, name=f"F_d_not_2_{t}_{land}_{crop}")model.addConstr(plant_size[t][land][crop] == 0, name=f"F_p_s_not_2_{t}_{land}_{crop}")# model.addConstr((sum(plant_size[t][land1][crop] * d[t][land1][crop] for crop in range(16,34) for land1 in range(78,82)) <= sum(land_size_list[land2] for land2 in range(78,82))), name=f"F_p_s_2_{t}")# 重茬问题for t in range(2024, 2031):for land in range(78,82):for crop in range(16,34):model.addConstr(d[t][land-28][crop] * d[t][land][crop] == 0, name=f"F_same_2_{t}_{land}_{crop}")# 豆类计算for land in chain(range(50,54), range(78,82)):for t in range(2024, 2031):model.addConstr(potato[land][t] == sum(plant_size[t][land][crop] for crop in [16,19]))# ===========  全局约束 ===========for t in range(2024,2031):for land in range(82):model.addConstr(sum(plant_size[t][land][crop] for crop in range(41)) <= land_size_list[land], name=f"G_p_s_{t}_{land}")# 三年一豆类问题(每三年一约束)for land in range(82):model.addConstr(sum(potato[land][t] for t in range(2023,2026)) >= 1e-6)model.addConstr(sum(potato[land][t] for t in range(2024,2027)) >= 1e-6)model.addConstr(sum(potato[land][t] for t in range(2025,2028)) >= 1e-6)model.addConstr(sum(potato[land][t] for t in range(2026,2029)) >= 1e-6)model.addConstr(sum(potato[land][t] for t in range(2027,2030)) >= 1e-6)model.addConstr(sum(potato[land][t] for t in range(2028,2031)) >= 1e-6)# 产量约束for t in range(2024,2031):for crop in range(41):model.addConstr(sum(plant_size[t][land][crop] * d[t][land][crop] * unit_product_dict[land][crop] for land in range(82)) >= sale_2023[crop],name=f"Y_sale_{t}_{crop}")# for t in range(2024,2031):#     for crop in range(41):#         model.addConstr(#             sum(plant_size[t][land][crop] * d[t][land][crop] for land in range(82)) >= plant_size_2023[crop],#             name=f"Y_sale_{t}_{crop}"#             )for t in range(2024,2031):for land in range(82):model.addConstr(sum(plant_size[t][land][crop] for crop in range(41)) <= land_size_list[land],name=f"I_land_size_{t}_{land}")for t in range(2024,2031):for land in range(82):for crop in range(41):model.addConstr(plant_size[t][land][crop] == d[t][land][crop] * plant_size[t][land][crop],name=f"J_plant_size_{t}_{land}_{crop}") model.update()# 载入23年豆类种植量for land in range(82):model.addConstr(potato[land][2023] == bean_2023_sum_dict[land])# 问题一目标函数# model.setObjective(#     sum(plant_size[t][land][crop] * unit_cost_dict[land][crop] * unit_cost_dict[land][crop] for t in range(2024,2031) for land in range(82) for crop in range(41)),#     gp.GRB.MINIMIZE# )# 问题二目标函数model.setObjective(sum(0.5 * (plant_size[t][land][crop] * unit_product_dict[land][crop] * price_jin_dict[land][crop] * d[t][land][crop] - sale_2023[crop] * price_jin_dict[land][crop]) + sale_2023[crop] * price_jin_dict[land][crop] - unit_cost_dict[land][crop] * plant_size[t][land][crop] * d[t][land][crop] for t in range(2024,2031) for land in range(82) for crop in range(41)),gp.GRB.MAXIMIZE)# Kai 2024 Mathmodel.optimize()# 输出结果if model.status == gp.GRB.INFEASIBLE:print("模型不可行")elif model.status == gp.GRB.UNBOUNDED:print("模型无界")if model.status == gp.GRB.OPTIMAL:print("最优解:", model.objVal)return model, plant_sizeelse:print("未找到最优解")model.computeIIS()save_iis_to_file(model, "iis_output.txt")return None, Noneif __name__ == "__main__":model, plant_size = solve_model()if model:save_to_excel(model, plant_size)  # 调用保存函数

最后可以求得答案放入要求的表格文件中,最后可以再画个图表示部分结果。(找不到图了)

第二题

第二题不确定,这里就不分享了。
最后的图挺“高级的”(不一定是对的),分享给各位
程序的总体流程如下:
在这里插入图片描述

2024:
在这里插入图片描述

2030:
在这里插入图片描述

第三题

我完全不会

A题

A题前三题要简单一些,第四第五就需要考虑一下了。我还是喜欢A题,要不是三角函数学的不好,不然我就去做A题了。这种每一步都是可以“预料”的,有点像物理题🤤。

相关文章:

记参加一次数学建模

题目请到全国大学生数学建模竞赛下载查看。 注&#xff1a;过程更新了很多文件&#xff0c;所有这里贴上的有些内容不是最新的&#xff08;而是草稿&#xff09;。 注&#xff1a;我们队伍并没有获奖&#xff0c;文章内容仅供一乐。 从这次比赛&#xff0c;给出以下赛前建议 …...

【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总

HTTP/2协议特点 gRPC基于HTTP/2协议&#xff0c;原因&#xff1a; 多路复用&#xff1a;允许在同一个TCP连接上并行传输多个请求和响应&#xff0c;即多个gRPC调用可以通过同一个连接同时进行&#xff0c;避免了HTTP/1.x中常见的线头阻塞问题&#xff0c;减少了连接建立和关闭…...

mac中加载C++动态库文件

前言 需要再mac系统下运行C开发的程序&#xff0c;通过摸索&#xff0c;初步实现了一版&#xff0c;大致记录下 1. 前提准备 安装OpenCV 使用Homebrew安装OpenCV&#xff1a; brew install opencv确认安装路径&#xff1a; brew --prefix opencv默认路径为/opt/homebrew/…...

Apollo Client 1.6.0 + @RefreshScope + @Value 刷新问题解析

问题描述 在使用 Apollo Client 1.6.0 结合 Spring Cloud 的 RefreshScope 和 Value 注解时&#xff0c;遇到以下问题&#xff1a; 项目启动时第一次属性注入成功后续配置变更时&#xff0c;Value 属性会刷新&#xff0c;但总是刷新为第一次的旧值&#xff0c;而不是最新的配…...

大语言模型 09 - 从0开始训练GPT 0.25B参数量 补充知识之数据集 Pretrain SFT RLHF

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…...

文本分类任务Qwen3-0.6B与Bert:实验见解

文本分类任务Qwen3-0.6B与Bert&#xff1a;实验见解 前言 最近在知乎上刷到一个很有意思的提问Qwen3-0.6B这种小模型有什么实际意义和用途。查看了所有回答&#xff0c;有人提到小尺寸模型在边缘设备场景中的优势&#xff08;低延迟&#xff09;、也有人提出小模型只是为了开…...

Mysql、Oracle、Sql Server、达梦之间sql的差异

1&#xff1a;分页查询 Sql Server&#xff1a; <bind name"startRow" value"(page - 1) * limit 1"/> <bind name"endRow" value"page * limit"/> SELECT *FROM (SELECT ROW_NUMBER() OVER (<if test"sortZd!…...

STM32外设AD-DMA+定时读取模板

STM32外设AD-DMA定时读取模板 一&#xff0c;方法引入二&#xff0c;CubeMX配置三&#xff0c;变量声明四&#xff0c;代码实现 (单通道) 一&#xff0c;方法引入 轮询法虽然简单&#xff0c;但 CPU 一直在忙着等待&#xff0c;效率太低。为了让 CPU 能在 ADC 转换的同时处理其…...

SQL里where条件的顺序影响索引使用吗?

大家好&#xff0c;我是锋哥。今天分享关于【SQL里where条件的顺序影响索引使用吗&#xff1f;】面试题。希望对大家有帮助&#xff1b; SQL里where条件的顺序影响索引使用吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 查询中&#xff0c;W…...

Java 接口中实现异步处理的方法

在Java中,接口本身不能直接实现逻辑(接口中的方法默认是抽象的,JDK 8+允许通过default方法提供非抽象实现,但通常不用于复杂的异步处理)。异步处理的逻辑需要在实现接口的类中通过多线程、异步框架或回调机制来实现。以下是几种常见的在接口实现类中实现异步处理<...

数值分析证明题

文章目录 第一题第二题第三题第四题第五题第六题第七题第八题第九题 第一题 例 给出 cos ⁡ x \cos x cosx&#xff0c; x ∈ [ 0 ∘ , 9 0 ∘ ] x\in[0^{\circ},90^{\circ}] x∈[0∘,90∘]的函数表&#xff0c;步长 h 1 ′ ( 1 60 ) ∘ h 1 (\frac{1}{60})^{\circ} h1′…...

深入理解二叉树:遍历、存储与算法实现

在之前的博客系列中&#xff0c;我们系统地探讨了多种线性表数据结构&#xff0c;包括顺序表、栈和队列等经典结构&#xff0c;并通过代码实现了它们的核心功能。从今天开始&#xff0c;我们将开启一个全新的数据结构篇章——树结构。与之前讨论的线性结构不同&#xff0c;树形…...

Python web 开发 Flask HTTP 服务

Flask 是一个轻量级的 Web 应用框架&#xff0c;它基于 Python 编写&#xff0c;特别适合构建简单的 Web 应用和 RESTful API。Flask 的设计理念是提供尽可能少的约定和配置&#xff0c;从而让开发者能够灵活地构建自己的 Web 应用。 https://andi.cn/page/622189.html...

【AI】用Dify实现一个模拟面试的功能

前言 Dify&#xff0c;一个将LLM转换为实际工作流的工具&#xff0c;以及火了一段时间了&#xff0c;但直到最近才开始研究它的使用&#xff08;主要前段时间在忙着自己的独立开发项目&#xff09;&#xff0c;我发现它的功能基本上满足了我对大语言模型&#xff0c;从仅对话转…...

研华服务器ASMB-825主板无法识别PCIE-USB卡(笔记本)

系统下无法识别到USB卡&#xff0c;排除硬件问题&#xff0c;系统问题。 最后在BIOS中更改此PCIE端口参数为X4X4X4X4&#xff0c;设置完成后可正常使用USB卡。 底部有问题详细解析。 针对研华主板ASMB-825安装绿联PCIE-USB卡无法识别的问题&#xff0c;结合BIOS设置调整的解决过…...

Redisson 四大核心机制实现原理详解

一、可重入锁&#xff08;Reentrant Lock&#xff09; 可重入锁是什么&#xff1f; 通俗定义 可重入锁类似于一把“智能锁”&#xff0c;它能识别当前的锁持有者是否是当前线程&#xff1a; 如果是&#xff0c;则允许线程重复获取锁&#xff08;重入&#xff09;&#xff0c;并…...

云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)

在云应用/服务的 5 层架构里&#xff0c;数据库服务层稳坐第 4 把交椅&#xff0c;堪称其中的 “硬核担当”。它的复杂程度常常让人望而生畏&#xff0c;不少人都将它视为整个架构中的 “终极挑战”。 不过&#xff0c;也有人觉得可扩展存储系统才是最难啃的 “硬骨头”&#…...

Android从单体架构迁移到模块化架构。你会如何设计模块划分策略?如何处理模块间的通信和依赖关系

从单体架构迁移到模块化架构。可能有些小伙伴已经深陷单体架构的泥潭&#xff0c;代码耦合得跟一团麻线似的&#xff0c;改个小功能都能牵一发而动全身&#xff1b;也可能有些团队在协作时&#xff0c;经常因为代码冲突或者职责不清搞得焦头烂额。相信我&#xff0c;这些问题我…...

基于MATLAB的人脸识别,实现PCA降维,用PCA特征进行SVM训练

基于MATLAB的人脸识别完整流程&#xff0c;包含PCA降维和SVM分类的实现。我们以经典的ORL人脸数据库为例&#xff0c;演示从数据加载到结果评估的全过程。 1. 数据准备与预处理​ 1.1 下载数据集​ 下载ORL人脸数据库&#xff08;40人10张&#xff0c;共400张图像&#xff09…...

AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新

技术点目录 R及Python语言及相关性研究初步二元Copula理论与实践&#xff08;一&#xff09;二元Copula理论与实践&#xff08;二&#xff09;【R语言为主】Copula函数的统计检验与选择【R语言为主】高维数据与Vine Copula 【R语言】正则Vine Copula&#xff08;一&#xff09;…...

机器学习与人工智能:NLP分词与文本相似度分析

DIY AI & ML NLP — Tokenization & Text Similarity by Jacob Ingle in Data Science Collective 本文所使用的数据是在 Creative Commons license 下提供的。尽管我们已尽力确保信息的准确性和完整性&#xff0c;但我们不对数据的完整性或可靠性做任何保证。数据的使…...

特斯拉虚拟电厂:能源互联网时代的分布式革命

在双碳目标与能源转型的双重驱动下&#xff0c;特斯拉虚拟电厂&#xff08;Virtual Power Plant, VPP&#xff09;通过数字孪生技术与能源系统的深度融合&#xff0c;重构了传统电力系统的运行范式。本文从系统架构、工程实践、技术挑战三个维度&#xff0c;深度解析这一颠覆性…...

系统提示学习(System Prompt Learning)在医学编程中的初步分析与探索

一、SPL 的核心定义 系统提示学习(SPL)是一种通过策略性设计输入提示(Prompts),引导大型语言模型(LLMs)生成特定领域行为与输出的方法。其核心在于不修改模型参数,而是通过上下文工程(Context Engineering)动态控制模型响应,使其适配复杂任务需求。 与微调(Fine-…...

使用DDR4控制器实现多通道数据读写(十二)

一、章节概括 这一节使用interconnect RTL ip核将DDR4与四个读写通道级联&#xff0c;在测试工程中&#xff0c;将四个通道同时写入/读出地址与数据&#xff0c;并使用modelsim仿真器仿真&#xff0c;四个通道同时发送写请求或读请求后&#xff0c;经过interconnect后&#xff…...

PCIe数据采集系统详解

PCIe数据采集系统详解 在上篇文章中&#xff0c;废了老大劲儿我们写出了PCIe数据采集系统&#xff1b;其中各个模块各司其职&#xff0c;相互配合。完成了从数据采集到高速存储到DDR3的全过程。今天我们呢就来详细讲解他们之间的关系&#xff1f;以及各个模块的关键点&#xff…...

小白级通信小号、虚拟小号查询技术讲解

手机号构成与归属地原理 手机号码由国家代码、运营商代码和用户号码等部分组成。全球手机号段由国际电信联盟&#xff08;ITU&#xff09;统一规划&#xff0c;各国通信管理机构负责分配具体号段。在我国&#xff0c;通过解析手机号码前几位&#xff0c;就能确定其所属运营商及…...

【爬虫】DrissionPage-4

官网文档&#xff1a;https://www.drissionpage.cn/browser_control/browser_options 一、核心对象与初始化 1. 类定义 作用&#xff1a;管理Chromium内核浏览器的启动配置&#xff0c;仅在浏览器启动时生效。导入方式&#xff1a;from DrissionPage import ChromiumOptions…...

数据通信原理 光纤通信 期末速成

一、图表题 1. 双极性不归零、单极性不归零、曼彻斯特码、抑制载频2ASK&#xff0c;2PSK、2DPSK信号的波形 双极性不归零 和 单极性不归零&#xff1a;不归零意思是 0 低 1 高 非归零编码&#xff08;NRZ&#xff09;&#xff1a;用不同电平表示二进制数字&#xff0c;常以…...

Java微服务架构实战:Spring Boot与Spring Cloud的完美结合

Java微服务架构实战&#xff1a;Spring Boot与Spring Cloud的完美结合 引言 随着云计算和分布式系统的快速发展&#xff0c;微服务架构已成为现代软件开发的主流模式。Java作为一门成熟的编程语言&#xff0c;凭借其强大的生态系统和丰富的框架支持&#xff0c;成为构建微服务…...

React底层架构深度解析:从虚拟DOM到Fiber的演进之路

一、虚拟DOM&#xff1a;性能优化的基石 1.1 核心工作原理 React通过JSX语法将组件转换为轻量级JavaScript对象&#xff08;即虚拟DOM&#xff09;&#xff0c;而非直接操作真实DOM。这一过程由React.createElement()实现&#xff0c;其结构包含元素类型、属性和子节点等信息&a…...

今日行情明日机会——20250516

上证缩量收阴线&#xff0c;小盘股表现相对更好&#xff0c;上涨的个股大于下跌的&#xff0c;日线已到前期压力位附近&#xff0c;注意风险。 深证缩量收假阳线&#xff0c;临近日线周期上涨末端&#xff0c;注意风险。 2025年5月16日涨停股行业方向分析 机器人概念&#x…...

小结:网页性能优化

网页性能优化是提升用户体验、减少加载时间和提高资源利用率的关键。以下是针对网页生命周期和事件处理的性能优化技巧&#xff0c;结合代码示例&#xff0c;重点覆盖加载、渲染、事件处理和资源管理等方面。 1. 优化加载阶段 减少关键资源请求&#xff1a; 合并CSS/JS文件&a…...

2025年PMP 学习十五 第10章 项目资源管理

2025年PMP 学习十五 第10章 项目资源管理 序号过程过程组1规划沟通管理规划2管理沟通执行3监控沟通监控 项目沟通管理包括为确保项目的信 息及时且恰当地规划、收集、生成、发布、存储、检索、管理、控制、监 警和最终处理所需的过程&#xff1b; 项目经理绝大多数时间都用于与…...

速通RocketMQ配置

配置RocketMQ又出问题了&#xff0c;赶紧记录一波 这个是我的RocketMQ配置文件 通过网盘分享的文件&#xff1a; 链接: https://pan.baidu.com/s/1UUYeDvKZFNsKPFXTcalu3A?pwd8888 提取码: 8888 –来自百度网盘超级会员v9的分享 里面有这三个东西 里面还有一些broker和names…...

宇宙中是否存在量子现象?

一、宇宙中的量子现象 好的&#xff0c;请提供具体的搜索词或意图&#xff0c;以便进行检索和生成简洁的回答。 好的&#xff0c;请提供具体的搜索词或意图&#xff0c;以便进行检索和生成简洁的回答。 量子涨落与宇宙结构 早期宇宙的量子涨落&#xff08;微观尺度的不确定性…...

背包问题详解

一、问题引入&#xff1a;什么是背包问题&#xff1f; 背包问题是经典的动态规划问题&#xff0c;描述如下&#xff1a; 有一个容量为 m 的背包 有 n 个物品&#xff0c;每个物品有体积 v 和价值 w 目标&#xff1a;选择物品装入背包&#xff0c;使总价值最大且总体积不超过…...

oracle linux 95 升级openssh 10 和openssl 3.5 过程记录

1. 安装操作系统&#xff0c;注意如果可以选择&#xff0c;选择安装开发工具&#xff0c;主要是后续需要编译安装&#xff0c;需要gcc 编译工具。 2. 安装操作系统后&#xff0c;检查zlib 、zlib-dev是否安装&#xff0c;如果没有&#xff0c;可以使用安装镜像做本地源安装&a…...

Tomcat发布websocket

一、tomcal的lib放入文件 tomcat-websocket.jar websocket-api.jar 二、代码示例 package com.test.ws;import com.test.core.json.Jmode;import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.util.concurrent.CopyOnWriteArraySet; imp…...

[思维模式-41]:在确定性与不确定性的交响中:人类参与系统的韧性密码。

前言&#xff1a; “任何信息系统&#xff0c;无论怎么复杂&#xff0c;哪怕是几万人同时开发的系统&#xff0c;如无线通信网络&#xff0c;通过标准、设计、算法、完毕的测试、过程的管控等&#xff0c;都是可预测和确定性的。 一个系统&#xff0c;一旦叠加了人的元素和因素…...

维智定位 Android 定位 SDK

概述 维智 Android 定位 SDK是为 Android 移动端应用提供的一套简单易用的定位服务接口&#xff0c;为广大开发者提供融合定位服务。通过使用维智定位SDK&#xff0c;开发者可以轻松为应用程序实现极速、智能、精准、高效的定位功能。 重要&#xff1a;为了进一步加强对最终用…...

Vue3:脚手架

工程环境配置 1.安装nodejs 这里我已经安装过了&#xff0c;只需要打开链接Node.js — Run JavaScript Everywhere直接下载nodejs&#xff0c;安装直接一直下一步下一步 安装完成之后我们来使用电脑的命令行窗口检查一下版本 查看npm源 这里npm源的地址是淘宝的源&#xff0…...

Android native崩溃问题分析

最近在做NDK项目的时候&#xff0c;出现了启动应用就崩溃了&#xff0c;崩溃日志如下&#xff1a; 10:41:04.743 A Build fingerprint: samsung/g0qzcx/g0q:13/TP1A.220624.014/S9060ZCU4CWH1:user/release-keys 10:41:04.743 A Revision: 12 10:41:04.743 A ABI: arm64…...

Playwright vs Selenium:2025 年 Web 自动化终极对比指南

1. 引言 Web 自动化领域正在迅速发展&#xff0c;在 2025 年&#xff0c;Playwright 与 Selenium 之间的选择已成为开发团队面临的重要决策。Selenium 作为行业标准已有十多年&#xff0c;而 Playwright 作为现代替代方案&#xff0c;以卓越的性能和现代化特性迅速崛起。 本指…...

数据结构(3)线性表-链表-单链表

我们学习过顺序表时&#xff0c;一旦对头部或中间的数据进行处理&#xff0c;由于物理结构的连续性&#xff0c;为了不覆盖&#xff0c;都得移&#xff0c;就导致时间复杂度为O&#xff08;n&#xff09;&#xff0c;还有一个潜在的问题就是扩容&#xff0c;假如我们扩容前是10…...

Python 中的 typing.ClassVar 详解

一、ClassVar 的定义和基本用途 ClassVar 是 typing 模块中提供的一种特殊类型&#xff0c;用于在类型注解中标记类变量&#xff08;静态变量&#xff09;。根据官方文档&#xff0c;使用 ClassVar[…] 注释的属性表示该属性只在类层面使用&#xff0c;不应在实例上赋值 例如&…...

主流数据库运维故障排查卡片式速查表与视觉图谱

主流数据库运维故障排查卡片式速查表与视觉图谱 本文件将主文档内容转化为模块化卡片结构&#xff0c;并补充数据库结构图、排查路径图、锁机制对比等视觉图谱&#xff0c;以便在演示、教学或现场排障中快速引用。 &#x1f4cc; 故障卡片速查&#xff1a;连接失败 数据库检查…...

Unity:延迟执行函数:Invoke()

目录 Unity 中的 Invoke() 方法详解 什么是 Invoke()&#xff1f; 基本使用方法 使用要点 延伸功能 ❗️Invoke 的局限与注意事项 在Unity中&#xff0c;延迟执行函数是游戏逻辑中常见的需求&#xff0c;比如&#xff1a; 延迟切换场景 延迟播放音效或动画 给玩家时间…...

医学影像系统性能优化与调试技术:深度剖析与实践指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

【HTML5学习笔记1】html标签(上)

web标准&#xff08;重点&#xff09; w3c 构成&#xff1a;结构、表现、行为&#xff0c;结构样式行为相分离 结构&#xff1a;网页元素整理分类 html 表现&#xff1a;外观css 行为&#xff1a;交互 javascript html标签 1.html语法规范 1&#xff09; 所有标签都在…...

SearchIndexablesProvider

实现的 provider 根据索引添加文档可知&#xff0c;该 provider 需要继承自 frameworks/base/core/java/android/provider/SearchIndexablesProvider.java 类&#xff0c;并且添加权限 android.permission.READ_SEARCH_INDEXABLES。过滤 Settings 代码&#xff0c;可以轻易找到…...