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

2024年国赛C题第二套解题思路

 第一问:2024~2030年农作物的最优种植方案

 【问题分析】

题目要求为某乡村在2024~2030年制定农作物的最优种植方案,目的是最大化收益,并需考虑两种销售情况:

1. 超过预期销售量的部分滞销,造成浪费;

2. 超过预期销售量的部分以2023年价格的50%降价出售。

我们需要根据耕地面积、农作物亩产量、销售价格、种植成本等因素建立数学模型来计算最优种植方案。

 模型变量定义

1. 决策变量:表示第t年在第i个地块种植第j种作物的面积。

2. 参数:

    Ai:第 i 个地块的面积。

  Pj:第 j种作物的亩产量(可以为每年不变或根据具体情况使用波动模型)。

  Sj:第 j种作物的销售价格。

  Cj:第 j 种作物的种植成本。

  Dtj:第j 种作物在第t年的预期销售量。   

Rj:第 j种作物的减产风险,考虑不能重茬种植的影响。

3. 目标函数:

    我们的目标是最大化总收益,即所有作物的种植收益减去种植成本。

 建模过程

 1. 基本模型(不考虑超产滞销和降价的情况)

首先,假设作物的销售量不会超过预期,模型为一个标准的线性规划问题:

约束条件:

1. 地块面积限制:对于每个地块 i,总种植面积不能超过该地块面积:

2. 每种作物的面积非负:

3. 不同作物的种植区域不能重叠,且需考虑重茬约束:

 可以使用二元变量来引入该约束。

 2. 超过销售量部分滞销或降价的处理

滞销情况: 

对于滞销部分,只需在目标函数中引入一个限制,当产量超过预期销售量时,超过部分的收入为0

降价情况: 

如果超过部分可以按50%降价出售,则产量大于预期销售量的部分按降价后的价格计算收益:

 3. 不确定性和风险因素

 气候波动:通过引入随机变量模拟作物亩产量的年际变化(如设定为±10%)。

 市场波动:可以引入预期销售量的年增长(如玉米和小麦5%~10%的年增长率),并设定作物销售价格的波动。

 种植风险:对于作物连续种植,考虑减产风险。

 智能优化算法设计

为了求解上述模型,我可以采用智能优化算法,如遗传算法Genetic Algorithm, GA)或粒子群算法Particle Swarm Optimization, PSO)来求解。

遗传算法GA)思路

1. 编码:将每年的种植方案表示为个体(染色体),编码方式为每个作物在各地块的种植面积。

2. 初始种群生成:随机生成满足地块面积约束和不重茬约束的种植方案。

3. 适应度函数:以目标函数(收益最大化)作为适应度函数。

4. 选择、交叉、变异:通过选择、交叉和变异操作生成新的种植方案。交叉操作模拟不同方案之间的组合,变异操作对某些地块的种植方案进行微调。

5. 终止条件:迭代到一定代数或适应度函数不再显著变化时,算法终止。

该问题可以通过线性规划结合智能优化算法求解。模型主要考虑作物的销售限制、滞销和降价机制,并引入不确定性和风险因素优化种植策略。智能优化算法如遗传算法可以在复杂约束下找到接近最优的解。

【Python代码】

import random
import numpy as np
from deap import base, creator, tools, algorithms定义问题的常量
NUM_YEARS = 7   从2024到2030
NUM_CROPS = 5   作物的种类数
NUM_FIELDS = 34   地块数量耕地面积、预期销售量、销售价格和成本的模拟数据(需根据具体数据修改)
field_areas = [random.randint(20, 100) for _ in range(NUM_FIELDS)]   每个地块的面积
crop_yields = [random.uniform(2, 5) for _ in range(NUM_CROPS)]   每亩产量
crop_prices = [random.uniform(1, 10) for _ in range(NUM_CROPS)]   销售价格
crop_costs = [random.uniform(0.5, 2) for _ in range(NUM_CROPS)]   种植成本
expected_sales = [random.uniform(100, 200) for _ in range(NUM_CROPS)]   预期销售量定义个体的适应度(最大化收益)
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)初始化个体,每个个体代表一个种植方案
def init_individual():每个地块随机分配不同作物的种植面积return [random.uniform(0, field_areas[i]) for i in range(NUM_FIELDS  NUM_CROPS  NUM_YEARS)]评价函数,计算收益
def evaluate(individual):total_profit = 0for t in range(NUM_YEARS):for i in range(NUM_FIELDS):for j in range(NUM_CROPS):crop_area = individual[t  NUM_FIELDS  NUM_CROPS + i  NUM_CROPS + j]crop_yield = crop_area  crop_yields[j]sales = min(crop_yield, expected_sales[j])  crop_prices[j]if crop_yield > expected_sales[j]:sales += (crop_yield  expected_sales[j])  (crop_prices[j]  0.5)   降价销售cost = crop_area  crop_costs[j]profit = sales  costtotal_profit += profitreturn total_profit,初始化种群
toolbox = base.Toolbox()
toolbox.register("individual", tools.initIterate, creator.Individual, init_individual)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)遗传算法操作:选择、交叉和变异
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=0.1, indpb=0.2)
toolbox.register("select", tools.selTournament, tournsize=3)
toolbox.register("evaluate", evaluate)运行遗传算法
def main():pop = toolbox.population(n=100)   初始化种群hof = tools.HallOfFame(1)   记录最优解stats = tools.Statistics(lambda ind: ind.fitness.values)stats.register("avg", np.mean)stats.register("min", np.min)stats.register("max", np.max)algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=100, stats=stats, halloffame=hof, verbose=True)return hof[0]   返回最优解if __name__ == "__main__":best_solution = main()print("Best solution found:", best_solution)


http://www.ppmy.cn/devtools/108834.html

相关文章

【MacOS】mac定位服务中删除已经卸载的软件

mac定位服务中删除已经卸载的软件 网上的帖子真不靠谱 直接右键 WeTypeSettings ,查找位置,丢废纸篓即可!会提示你卸载的!

未来出行:高效智能的汽车充电桩

解析高效智能的汽车充电桩的结构设计技术要求 充电桩按照充电方式分为交流充电桩与直流充电桩、交直流一体充电桩三种。直流充电桩一般安装在高速公路,充电站等地;交流充电桩一般安装在小区、停车场、道路停车位、高速公路服务区等位置。根据国网Q/GDW4…

【爬虫软件】小红薯评论区采集工具

一、采集目标与应用场景 您好!我利用Python技术自主研发了一款高效的爬虫软件,批量收集小红薯平台上的评论,包括主评论及其下的二级评论。 为了拓宽用户群体,让不具备编程基础的小白用户也能轻松上手,我开发成了界面…

spring中添加@Test注解测试

1、添加maven依赖 <!-- 添加test方便测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><grou…

TCP/IP协议栈详解及其在现代网络中的应用

在当今数字化时代&#xff0c;网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐&#xff0c;网络都在背后发挥着至关重要的作用。而这一切的实现&#xff0c;都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什…

http和https区别

HTTP&#xff08;超文本传输协议&#xff09;和 HTTPS&#xff08;安全超文本传输协议&#xff09;是用于在互联网上传输数据的协议。它们之间的主要区别在于安全性&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;: 加密: HTTP 不对传输的数据进行加密&…

数学建模强化宝典(8)粒子群算法

前言 粒子群算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;它源于对鸟群捕食行为的研究。通过模拟鸟群中的个体相互协作和信息共享来寻找最优解&#xff0c;粒子群算法已被广泛应用于函数优化、神经网络训练、模糊系统…

Matlab simulink建模与仿真 第七章(表查询库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、表查询库中的模块概览 二、表查询模块 使用Lookup Table表查询模块&#xff0c;需要在配置窗口中建立x-y&#xff08;自变量-因变量&#xff09;离散数据对&#xff0c;x与y的维数应相同&#xff0c;x集&a…

使用debugfs

在前面,我们学习到了sysctl这一基于sysfs和seq_file这一基于procfs文件系统进行交互数据的方式,其中procfs主要是针对进程属性,而sysfs是针对内核模型的,为了保证其稳健,我们很少拿来作为调试时数据交换使用,显然printk也满足不了,那么debugfs就应运而生了。一般发行版系…

Kafka【六】Linux下安装Kafka(Zookeeper)集群

Kafka从早期的消息传输系统转型为开源分布式事件流处理平台系统&#xff0c;所以很多核心组件&#xff0c;核心操作都是基于分布式多节点的。本文这里采用三台虚拟机模拟真实物理主机搭建Zookeeper集群和kafka集群。 VMware可以使用户在一台计算机上同时运行多个操作系统&…

掌握Hive函数[1]:从基础到高级应用

目录 函数简介 单行函数 算术运算函数 数值函数 字符串函数 日期函数 流程控制函数 集合函数 案例演示 函数简介 Hive将常用的逻辑封装成函数供用户使用&#xff0c;类似于Java中的函数。这样做的好处是可以避免用户反复编写相同的逻辑代码&#xff0c;可以直接调用这些函数。…

【Flutter】Flutter安装和配置(mac)

1、准备工作 升级Macos系统为最新系统安装最新的Xcode电脑上面需要安装brew https://brew.sh/安装chrome浏览器&#xff08;开发web用&#xff09; 2.、下载flutter https://docs.flutter.dev/release/archive?tabmacos 大家网页后&#xff0c;选择对应的版本【Tips&#x…

C++复习day05

类和对象 1. 面向对象和面向过程的区别是什么&#xff1f;&#xff08;开放性问题&#xff09; 1. **抽象级别**&#xff1a;- **面向对象**&#xff1a;以对象&#xff08;数据和方法的集合&#xff09;为中心&#xff0c;强调的是数据和行为的封装。- **面向过程**&#xf…

单一职责原则介绍

一.概念介绍 单一职责原则(Single Responsibility Principle, SRP)是面向对象设计中的五大基本原则之一,它是指一个类或者模块应该仅有一个引起它变化的原因。 具体来说,单一职责原则有以下几个特点: 职责集中:一个类或模块应该专注于完成一种特定的功能或职责,而不应该承担过…

力扣9.7

115.不同的子序列 题目 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 数据范围 1 < s.length, t.length < 1000s 和 t 由英文字母组成 分析 令dp[i][j]为s的前i个字符构成的子序列中为t的前j…

ArrayList,Vector, LinkedList 的存储性能和特性

1. ArrayList ArrayList 是基于动态数组实现的列表。在底层&#xff0c;它使用一个数组来存储元素&#xff0c;并在需要时自动扩容。这种设计使得 ArrayList 在进行按索引访问时性能非常高&#xff0c;但在插入和删除操作上可能表现不如链表。 1.1 特性 动态扩容&#xff1a…

Linux 递归删除大量的文件

一般情况下 在 Ubuntu 中&#xff0c;递归删除大量文件和文件夹可以通过以下几种方式快速完成。常用的方法是使用 rm 命令&#xff0c;配合一些适当的选项来提高删除速度和效率。 1. 使用 rm 命令递归删除 最常见的方式是使用 rm 命令的递归选项 -r 来删除目录及其所有内容。…

MySQL数据库的SQL注入漏洞解析

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …

什么是大数据、有什么用以及学习内容

目录 1.什么是大数据&#xff1f; 2.大数据有什么用&#xff1f; 2.1商业与营销&#xff1a; 2.2医疗与健康&#xff1a; 2.3金融服务&#xff1a; 2.4政府与公共服务&#xff1a; 2.5交通与物流&#xff1a; 2.6教育与个性化学习&#xff1a; 3.学习大数据需要学习哪…

Elasticsearch - SpringBoot 索引与文档相关demo

文章目录 前言Elasticsearch - SpringBoot 索引与文档相关demo1. _cat/* 相关API2. 查看所有索引3. 创建索引4. 检索索引5. 删除索引6. 新增文档7. 更新文档8. 根据索引中的文档 ID 查询文档9. 删除文档前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作…