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

本文主要是介绍【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)

这篇关于【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141628

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代