【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/news/1522154.html

相关文章

vue如何实现路由缓存

&#xff08;以下示例皆是以vue3vitets项目为例&#xff09; 场景一&#xff1a;所有路由都可以进行缓存 在渲染路由视图对应的页面进行缓存设置&#xff0c;代码如下&#xff1a; <template><router-view v-slot"{ Component, route }"><transiti…

OT安全零死角!Fortinet OT安全平台再升级

近日&#xff0c;专注推动网络与安全融合的全球网络安全领导者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;&#xff0c;宣布对旗下业界领先的OT安全平台进行新一轮全面升级&#xff0c;此次更新旨在深化安全组网与安全运营&#xff08;SecOps&#xff09;服务的功…

图论篇--代码随想录算法训练营第五十三天打卡| 110. 字符串接龙,105.有向图的完全可达性,106. 岛屿的周长

110. 字符串接龙 题目链接&#xff1a;110. 字符串接龙 题目描述&#xff1a; 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列&#xff1a; 序列中第一个字符串是 beginStr。序列中最后一个字符串是 endStr。 每次转换只能改变一个字符…

实战项目-快速实战-springboot dataway

最后附项目源码, 开箱即用 访问地址 http://127.0.0.1:8101/interface-ui/#/ 效果图 具体怎么用, 大家还是看官网,中文文档 https://www.dataql.net/docs/dataway/ui/ui-list 项目结构 代码 DataWayApplication package com.zero.dataway;import net.hasor.spring.boot…

JS面试真题 part1

JS面试真题 part1 1、说说JavaScript中的数据类型&#xff0c;储存上的差别2、说说你了解的js数据结构3、DOM常见的操作有哪些4、说说你对BOM的理解&#xff0c;常见的BOM对象你了解哪些5、 和 区别&#xff0c;分别在什么情况使用 1、说说JavaScript中的数据类型&#xff0c;…

ceph-iscsi 手动安装过程中的一些问题记录以及解决办法

ceph-iscsi 手动安装教程 安装教程&#xff0c;建议直接看官方文档&#xff0c;猛戳传送门。官方教程是英文版的&#xff08;不知道有没有中文版&#xff09;&#xff0c;都是一些基础英语&#xff0c;问题不大&#xff0c;实在不行找个翻译软件帮帮忙&#xff0c;哈哈哈。 多…

换工作环境后, 开发环境速更步骤

防火墙问题已经解决, windows和linux已经可以链接了 右键PowerShell 关闭所有防火墙: netsh advfirewall set allprofiles state off开启所有防火墙: netsh advfirewall set allprofiles state on两种方案, 网卡, 按照文档, 全一致, 配置, 使用网线 网线,两个 路由器, 直接拉…

【Linux】Linux常用命令80条(含完整命令语句)

【Linux】Linux常用命令80条&#xff08;含完整命令语句&#xff09; 整理一些Linux指令方便大家查阅使用。以下是一些常用的 Linux 命令&#xff1a; 1. 文件和目录操作 ls&#xff1a;列出当前目录中的文件和子目录 lspwd&#xff1a;显示当前工作目录的路径 pwdcd&#xff…

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码&#xff0c;https://github.com/ultralytics/yolov5/tree/v5.0&#xff0c;解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件&#xff0c;pip install -r requirements.txt 如果作者没有…

pycharm如何安装插件,以及pycharm里面的Python Interpreter(Python解释器)的用途

一、Pycharm如何安转插件 在pycharm下面的plugins可以安装插件&#xff0c;比如图所示&#xff0c;可以安装一个Translation的插件&#xff0c;可以进行翻译。 提示&#xff1a;如果你现在已经打开某个项目了&#xff0c;想要回到图一所展示的界面改怎么做 操作如图2:File>…

如何打造高校实验室教学管理系统?Java SpringBoot助力,MySQL存储优化,2025届必备设计指南

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

WebGIS面试题(第九期)

坐标系&#xff1a; 文章目录 **坐标系&#xff1a;**1、如何使用ArcGIS进行GIS坐标系转换&#xff1f;2、Cesium中的Cartesian3坐标系的原点在哪里&#xff1f;它的轴是如何定义的&#xff1f;3、如何在Cesium中使用矩阵进行坐标系转换。4、在Cesium中&#xff0c;如何将屏幕坐…

轻松升级:Ollama + OpenWebUI 安装与配置【AIStarter】

Ollama是一个开源项目&#xff0c;用于构建和训练大规模语言模型&#xff0c;而OpenWebUI则提供了一个方便的前端界面来管理和监控这些模型。本文将指导你如何更新这两个工具&#xff0c;并顺利完成配置。 准备工作 确保你的系统已安装Git和Python环境。安装必要的依赖库&…

自用NAS系列1-设备

拾光坞 拾光坞多账号绑定青龙面板SMBWebdav小雅alist下载到NASDocker安装迅雷功能利用qBittorrentEEJackett打造一站式下载工具安装jackett插件 外网访问内网拾光客户端拾光穿透公网ipv6路由器配置ipv6拾光坞公网验证拾光坞域名验证 拾光坞 多账号绑定 手机注册拾光坞账号&am…

Day 10

232. 用栈实现队列 class MyQueue { private:stack<int> in_stack, out_stack;void in2out(){while (!in_stack.empty()){out_stack.push(in_stack.top());in_stack.pop();}} public:MyQueue(){}void push(int x){in_stack.push(x);}int pop(){if (out_stack.empty()){i…

java导出Excel接口

需求&#xff1a;需要实现一个导出的接口&#xff0c;点导出同时导出5个Excel表格&#xff0c;五种表格的数据筛选不同数据 public String export(MarketReceiveVo query) {Date winApprovalStartDate query.getWinApprovalStartDate();Date winApprovalEndDate query.getWin…

软件工程-图书管理系统的需求分析

软件需求规格说明书 目录 软件需求规格说明书 一、引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 二、任务概述 2.1目标 2.2用户特点 2.3假定和约束 三、需求规定 3.1功能划分 3.1.1系统功能组成 3.1.2功能编号和优先级 3.2功能描述 3.3性能 3.4输入输出 …

【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交

文章目录 11.8 更多别名设置别名1&#xff1a;只查看当前分支&#xff08;git b&#xff09;别名2&#xff1a;以图表形式显示自定义格式的 git 日志&#xff08;git graph&#xff09;别名3&#xff1a;查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表&#xff08;…

spring,spring_mybatis集成

Spring概述 Spring 是一个轻量级的,IOC 和 AOP 的一站式 Java 开发框架&#xff0c;是为了简化企 业级应用开发而生的。&#xff08;整个后端框架进行管理&#xff09; Ioc 即 Inversion of Control&#xff08;控制反转 把创建对象的控制权反转给sring框架&#xff09;&…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题&#xff0c;目标是开发一个计算模型&#xff0c;用于计算任意语义类别的对象数量&#xff0c;使用任意数量的“样本”&#xff08;即可能为零样本或少样本计数&#xff09;。作者提出了一个新颖的基于Transformer的架构&#xff0c;称为…