【2024数模国赛赛题思路公开】国赛C题思路丨附可运行代码丨无偿自提

news2024/12/24 3:23:30

2024年国赛C题解题思路

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%降价出售。

【题目分析】

任务:在假定农作物的销售量、种植成本、亩产量和销售价格稳定的情况下,为乡村2024-2030年制定最优的种植方案。需要考虑两种情况:

  1. 滞销浪费:超出部分无法销售,需合理分配种植面积,避免浪费。
  2. 降价出售:超出部分按50%的价格出售,这可能影响种植策略,需要平衡不同农作物的收益和种植面积。

【初步思路】

第一问的详细思路与建模过程

问题背景:

我们需要在假定农作物的销售量、种植成本、亩产量和销售价格稳定的情况下,为乡村2024-2030年制定最优种植方案。目标是最大化利润,并要考虑两种情况:

  1. 滞销浪费:超过部分无法销售,造成浪费。
  2. 降价出售:超过部分按原售价的50%处理。

【解题思路】

一、问题转化为数学模型

1. 变量定义

  • 地块变量
    • 记Ai 表示第 i 个地块的面积(亩),i=1,2,...,n,其中n=34 。
    • 每个地块可以种植不同的作物,记 Xu 为第i个地块种植第j种作物的面积(亩),j=1,2,...,m,其中 m 是作物种类。
  • 作物产量和价格
    • 记 Yj为第j种作物的单位面积产量(吨/亩),Pj 为该作物的单位售价(元/吨)。
  • 成本和收益
    • 记 Cj 为种植第j种作物的单位面积成本(元/亩)。
    • 收益为作物销售量与售价的乘积,超出销售量部分按不同情况处理。
  • 作物销售量约束
    • 设第j种作物的预期销售量为 Sj(吨),当种植量超过此值,需根据不同情况处理。

2. 目标函数

目标是最大化2024-2030年种植方案的总利润。首先,作物的总产量为:

基于此,作物的利润分为两种情况:

  1. 滞销浪费: 当 QU≤SJ 时,所有产量均以正常价格出售;当 QU>SJ 时,超过部分无法出售。总利润为:

      2. 降价出售: 当 QU>SJ 时,超过部分以50%的价格出售,收益为:

整个种植方案的总利润为所有地块和作物的利润之和:

      3. 约束条件

  • 面积约束:每个地块的作物种植面积不能超过总面积:

  • 作物适应性约束:不同地块只能种适宜的作物。例如,梯田和山坡地只能种粮食类作物,水浇地可以种水稻或蔬菜。
  • 轮作约束:每块地在三年内至少种一次豆类作物。用二进制变量 Bij 表示某季是否种植豆类作物:

二、引入智能优化算法

由于问题涉及多个地块、多种作物,并且有复杂的约束条件和非线性目标函数,使用智能优化算法(如遗传算法)更为适合。

1. 遗传算法(GA)概述

  • 编码:每个地块的种植方案表示为一个基因,整个种植方案为一个个体。
  • 适应度函数:适应度函数为目标函数,即总利润,目标是通过选择、交叉、变异操作逐步优化种植方案。
  • 操作步骤
    1. 初始种群生成:随机生成一批种植方案。
    2. 适应度评估:计算每个方案的总利润。
    3. 选择:根据适应度高低选择个体。
    4. 交叉与变异:生成新个体并确保种群多样性。
    5. 终止条件:达到设定迭代次数或适应度不再显著提高。

2. 遗传算法的公式表示

  • 选择操作:轮盘赌选择法,个体被选中的概率为:

其中 fi为第 i 个个体的适应度,N 为种群大小。

  • 交叉操作:两个种植方案交叉生成新的方案,交叉概率为Pc,生成新个体的公式为:

变异操作:随机调整种植面积,变异概率为Pm。

Python参考代码】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import linprog
import random
import seaborn as sns

# 读取农作物信息(面积、作物类型、单价、产量等)
land_data = pd.read_excel('/path/to/附件1.xlsx')
production_data = pd.read_excel('/path/to/附件2.xlsx')

# 地块面积信息
area = land_data['地块面积'].values

# 2023年农作物信息,包括单价、种植成本、产量等
crop_data = production_data[['作物类型', '产量', '单价', '种植成本', '预期销售量']].set_index('作物类型')

# 从crop_data提取变量
yield_per_acre = crop_data['产量'].values
price_per_ton = crop_data['单价'].values
cost_per_acre = crop_data['种植成本'].values

sales_expectation = crop_data['预期销售量'].values

# 变量数量
num_land_blocks = len(area)  # 地块数量
num_crops = len(crop_data)   # 作物种类数量

# 遗传算法相关参数
population_size = 50
generations = 100
mutation_rate = 0.01

# 初始化种群
def init_population(size):
    return np.random.rand(size, num_land_blocks, num_crops)

# 适应度函数,计算总利润
def fitness(individual):
    profit = 0
    for i in range(num_land_blocks):
        for j in range(num_crops):
            planted_area = individual[i, j] * area[i]
            production = planted_area * yield_per_acre[j]
            if production <= sales_expectation[j]:
                profit += production * price_per_ton[j] - planted_area * cost_per_acre[j]
            else:
                surplus = production - sales_expectation[j]
                profit += sales_expectation[j] * price_per_ton[j] + surplus * (price_per_ton[j] / 2) - planted_area * cost_per_acre[j]
    return profit

   child1.flat[point:], child2.flat[point:] = parent2.flat[point:], parent1.flat[point:]
    return child1, child2

# 变异操作
def mutate(individual):
    if np.random.rand() < mutation_rate:
        i = np.random.randint(num_land_blocks)
        j = np.random.randint(num_crops)
        individual[i, j] = np.random.rand()
    return individual

# 主遗传算法过程
def genetic_algorithm():
    population = init_population(population_size)
    best_solution = None
    best_fitness = float('-inf')
    fitness_history = []

    for generation in range(generations):
        population = selection(population)
        new_population = []

        # 交叉产生新个体
        for i in range(0, len(population), 2):
            parent1 = population[i]
            parent2 = population[min(i+1, len(population)-1)]
            child1, child2 = crossover(parent1, parent2)
            new_population.append(mutate(child1))
            new_population.append(mutate(child2))

        population = np.array(new_population)

        # 记录最佳个体
        gen_best = max(population, key=fitness)
        gen_best_fitness = fitness(gen_best)
        fitness_history.append(gen_best_fitness)

        if gen_best_fitness > best_fitness:
            best_solution = gen_best
            best_fitness = gen_best_fitness

        print(f"Generation {generation + 1}: Best Fitness = {best_fitness}")

    return best_solution, fitness_history

# 运行遗传算法
best_solution, fitness_history = genetic_algorithm()

# 总利润随代数变化趋势
plt.figure(figsize=(10, 6))
plt.plot(fitness_history, label='Total Profit')
plt.xlabel('Generations')
plt.ylabel('Profit')
plt.title('Total Profit Over Generations')
plt.legend()
plt.grid(True)
plt.show()

# 各地块的最佳作物种植方案
def plot_solution(solution):
    plt.figure(figsize=(12, 8))
    sns.heatmap(solution, annot=True, fmt=".2f", cmap='Blues', xticklabels=crop_data.index, yticklabels=land_data['地块名称'])
    plt.title("Optimal Crop Distribution Across Lands")
    plt.xlabel("Crops")
    plt.ylabel("Land Blocks")
    plt.show()

# 可视化最佳种植方案
plot_solution(best_solution)

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

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

相关文章

Word封面对齐技巧

文章目录 前言一、对齐封面1. 点击视图,添加标尺2. 选中文字,右击段落3. 点击制表符,设置制表位位置4. 鼠标点击“:”后面,点击“Tab”键5. 按住“Ctrl”键,选中没对齐的文字,点击“中文板式”,调整宽度6. 最终效果前言 本章使用的软件是WPS2019,简单介绍Word使用中封…

2024高教社杯全国大学生数学建模竞赛E题保姆级分析完整思路+代码+数据教学

2024高教社杯全国大学生数学建模竞赛E题保姆级分析完整思路代码数据教学 E题题目&#xff1a;交通流量管控 这道题目涉及一个拥有知名景区的小镇及其周边的道路交通管理问题。题目给出了一个现实中的交通场景&#xff0c;要求参赛者根据数据和交通模型&#xff0c;分析交通流量…

Axure制作圆球在区域范围内移动效果的案例

在Axure RP中&#xff0c;我们可以通过设置多个交互动作和动态面板来创建复杂的动画效果&#xff0c;比如实现一个圆球在指定区域内通过八个方向按钮控制移动的效果。以下是一个详细的步骤介绍&#xff0c;帮助你理解并制作这一效果。 预览&#xff1a; https://1zvcwx.axshare…

从被动防御到主动出击,揭秘云下一代防火墙的四大必杀技

在现代企业的网络架构中&#xff0c;边界防火墙作为第一道坚不可摧的防线&#xff0c;扮演着至关重要的角色。它不仅严格监控并过滤进出网络的数据流&#xff0c;有效阻止潜在的网络攻击、恶意软件和未经授权的访问&#xff0c;还根据企业安全策略智能地管理数据包的流向&#…

计算机毕设选题推荐-基于python的剧本杀预约服务平台【python-爬虫-大数据定制】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的剧本杀预约服务…

如何撰写SCI作者同意发表函/版权转让协议

在发表SCI论文过程中&#xff0c;有些期刊需要作者提交稿件的时候提供作者同意发表函/版权转让协议。很多期刊是在投稿系统里面就可以选择同意发表&#xff0c;或者提供模板让作者填写。但是也有期刊没提供这些。如何撰写SCI作者同意发表函/版权转让协议呢&#xff1f;附件是Sp…

哈工大机试试题合集

&#x1f370;&#x1f370;&#x1f370;hello宝子们&#xff0c;今天我们来练习哈尔滨工业大学的机试题目。加油&#xff01;fighting&#xff01;( •̀ ω •́ )✧ &#x1f369;1355 素数判定 #include<bits/stdc.h> using namespace std; bool prime(long long x)…

BUUCTF PWN wp--bjdctf_2020_babystack

第一步 checksec一下&#xff0c;该题是64位的&#xff0c;该题目大概率是一道栈溢出&#xff08;因为题目里面提到了stack&#xff09; 分析一下这个二进制保护机制&#xff1a; Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的&#xff0c;使用的是小端序…

NTC阻值与温度计算公式

float Resistance_To_Temperature(float Res,float Res_Base) {/*NTC热敏电阻的温度计算涉及到特定的公式和一些关键参数。首先&#xff0c;需要了解NTC热敏电阻的阻值与其所处温度之间的关系。这种关系通常可以通过以下公式表示&#xff1a;Rt R * EXP(B * (1/T1 - 1/T2))其中…

Learn ComputeShader 07 Post Processing

这次我们将使用计算机着色器对图像进行后处理。 要进行后处理需要将渲染图像从cpu传递给gpu&#xff0c;并在gpu对图像进行处理然后传回cpu。 首先创建一个后处理基类BasePP 首先声明需要用到的属性。 using System.Collections; using System.Collections.Generic; using …

水滴型粉碎机:轻松粉碎辣椒,小型粉碎设备之选

水滴型粉碎机有效优化了物料流动路径&#xff0c;减少了物料在粉碎过程中的阻力与死角&#xff0c;从而大幅提升了粉碎效率与均匀度。同时&#xff0c;不一样的结构还增强了设备的耐磨性和稳定性&#xff0c;延长了使用寿命&#xff0c;降低了维护成本。 粉碎机采用的粉碎技术…

【C++ 第二十章】模拟实现 shared_ptr(可以拷贝的智能指针)

本文主要讲解如果简单模拟实现库中的 shared_ptr 而不会过多的对库中的 shared_ptr 讲解 1. 初始版本 智能指针的基本框架 namespace my {template<class T>class shared_ptr{public:shared_ptr(T* ptr nullptr):_ptr(ptr){}~shared_ptr() {delete _ptr;_ptr nullptr…

信息加解密技术

一.信息加解密技术介绍 信息加解密技术是保护数据安全、防止未授权访问的重要手段。该技术主要利用数学或物理方法&#xff0c;对电子信息在传输过程和存储体中进行保护&#xff0c;确保数据的机密性、完整性和可用性。以下是对信息加解密技术的详细解析&#xff1a; 加密技术的…

三百六十行,行行用AI,AI警官助理:让文书工作不再是负担

“ 当警察在紧张的执法现场&#xff0c;AI工具能够自动转录执法记录仪中的音频&#xff0c;迅速生成警务报告&#xff0c;成为警官们的得力助手&#xff0c;极大地提高了工作效率。 ” AI警官助理&#xff1a;警务工作的革命 最近&#xff0c;一款人工智能工具在警务领域引…

C/C++ 中的算术运算及其陷阱(详解,举例分析)

在C/C编程中&#xff0c;算术运算是非常基础且常用的操作。然而&#xff0c;这些看似简单的运算背后却隐藏着一些潜在的陷阱&#xff0c;如果不加以注意&#xff0c;可能会导致程序出现难以预料的错误。本文将探讨C/C中常见的算术运算及其潜在的陷阱&#xff0c;并通过实例进行…

「Python程序设计」模块式编程:函数

​小时候&#xff0c;我们都或多或少的玩过一些积木玩具。通过把动物&#xff0c;或者是人物的各个组成部分&#xff0c;一小块&#xff0c;一小块地搭建起来&#xff0c;最终&#xff0c;就组成了我们最终想要的形状。这有点类似于乐高积木&#xff0c;通过把固定的块状物&…

Android Launcher3

一、定义与功能 Android Launcher是Android操作系统中的一个重要组件&#xff0c;它负责管理和呈现用户界面&#xff0c;包括桌面、应用程序抽屉和部件。Launcher不仅为用户提供了一个启动应用程序的入口&#xff0c;还允许用户自定义手机的主屏幕、图标、小部件布局以及一些基…

家里有宠物应该用哪款宠物空气净化器?希喂、美的真实测评

养了猫之后&#xff0c;从此我的生活开始有颜色&#xff0c;终于有声音了&#xff0c;每天下班回家终于不是直接就躺在沙发上然后洗洗就睡&#xff0c;现在有猫咪陪着我一起玩&#xff0c;甚至还会和它聊聊天&#xff0c;家里我走到哪它就跟到哪&#xff0c;身后多了一个小跟屁…

智能手机、汽车新应用,星纪魅族幸运星号”卫星即将发射

朋友们&#xff01;你想象过我们的智能手机和汽车能与卫星直接通信吗&#xff1f; 这听起来像是科幻小说里的情节&#xff0c;但很快&#xff0c;这将成为现实&#xff01;星纪魅族科技最近宣布了一个振奋人心的消息——他们将与时空道宇合作发射“星纪魅族幸运星号”卫星。这…

专业软件测试服务机构分享:小程序测试步骤和作用

在数字经济飞速发展的今天&#xff0c;小程序因其轻量、便捷的特点受到了广泛关注。作为技术服务的重要组成部分&#xff0c;软件测试成为确保小程序质量的关键环节。 一、小程序测试的定义   小程序测试是指对小程序进行系统性验证和验证的过程&#xff0c;旨在检查其功能、…