【C题成品论文2已出】24数学建模国赛C题第二套成品论文(附参考代码)免费分享

news2024/11/13 10:31:35

假设:每个地块每年种植一种农作物。

针对问题一

单目标优化问题,定义决策变量,定义目标函数、定义约束条件、数据预处理、使用整数规划,编程解决问题。

定义决策变量:

Xt,i:在第t年种植第i种作物的亩数

Y t,i:第t年第i种作物总产量从, Y t,i= Xt,I ×亩产量

Ktji:第t年在第j块地上种种植i种作物

Z t,i:在第t年销售的第i种作物的数量Z t,i= min(Y t,i,预期销售量)

Wti:超过预期销售量的部分,Wti:= max(0, Y t,i - 预期销售量)

目标函数:问题1 目标是最大化利润

其中、T的取值范围 [2024,2030],I的取值范围:[1,41]、P为售价、q为种植成本、b为浪费成本

目标函数:问题2 考虑滞销部分做降价处理

其中、T的取值范围 [2024,2030],I的取值范围:[1,41]、α为折扣率(取值0.5)、P为售价、q为种植成本、b为浪费成本

约束条件:

面积约束:

1.

每个地块(含大棚)的所有土 地三年内至少种植一次豆类作物

2.

每种作物在同一地块(含大棚)不连续重茬种植

3.

使用离散最优化中的整数规划求解:

在一些情况下,一个离散最优化问题可以简单地用列出所有可能情况的方法求解.对另一些问题,可以采用连续模型,然后用舍入的方法求出最接近的整数解:当连续的决策变量变为离散变量时非线性规化问题通常会难解得多.没有连续性后可行域会变得很复杂,通常用图或树结构来描述.对一些类型的问题已经开发出了有效的求解算法,对这些算法的改进是一个非常活跃的研究领域,但与连续的情形一样,迄今还没有求解离散最优化问题的普遍的有效方法.

针对问题一的问题,我们采用整数规划,整数规划是线性规划的离散情形。它除了是应用最广泛的离散最优化算法之外,与线性规划的相似性也使我们易于比较离散模型和连续模型、另一个优点是大多数线性规划序软件也可以解整数规划问题。

PuLP 是一个建模语言,它允许用户以类似于AMPL的方式描述线性规划问题。使用PuLP,你可以定义决策变量、目标函数、约束条件等,本题采用python的PuLP包中的CBC求解器来找到最优解。

【参考代码】

import pulp as pl
import pandas as pd
import numpy as np
df = pd.read_excel('附件1.xlsx')
#地块名称
dkmc=df['地块名称'].tolist()
# 种植地方、种植作物类型、年份
zw = df['作物名称'].tolist()
years=['2024','2025','2026','2027','2028','2029','2030']
seaborn=[1,2]
# 豆类
doulei=[1,2,3,4,5,17,18,19]
#读入数据
df1 = pd.read_excel('附件2.xlsx', sheet_name='Sheet1', header=0)
df2 = pd.read_excel('附件2.xlsx', sheet_name='Sheet2', header=0)
#农作物亩产量
acr=df2['亩产量/斤']
#农作物单价
danjia=df2['销售单价/(元/斤)']
#农作物种植成本
chengben=df2['种植成本/(元/亩)']
#种植面积
zzmj=df2['种植面积/亩']
mbxl=acr*zzmj
#第一小问
model_one =pl.LpProblem('pro_one',pl.LpMaximize)
#决策变量
x = pl.LpVariable.dicts('Area',(dkmc,zw,years),lowBound=0,cat='Integer')
#目标函数:最大化利润
if(acr*x[dkmc][zw][years][seaborn]<=mbxl):
    max_profit1=pl.lpSum([
        danjia*pl.lpSum(acr*x[dkmc][zw][years][seaborn])])
else:
    max_profit1 = pl.lpSum([
        danjia * pl.lpSum(acr * mbxl)])
model_one+=max_profit1
#约束
for i in dkmc:
    for j in years:
        for k in seaborn:
            model_one+=pl.lpSum([x[i][crop][j][k]for crop in dkmc])<=dkmc[i]
for i in dkmc:
    for j in years:
        model_one+=pl.pSum([x[i][j][season] for i in doulei for season in seaborn])>=zzmj[i]/3
for i in dkmc:
    for j in years[:-1]:
        for k in seaborn:
            for l in acr:
                model_one += x[i][j][k][l]
x[i][j+1][k][l]==0
model_one.solve()

# 第二种情况
model_two = pl.LpProblem("Max_Profit2", lp.LpMaximize)

x=pl.LpVariable.dicts("Area",("plots","crops","years","seasons"), lowBound=0,cat='Integer')

if(acr*x[dkmc][zw][years][seaborn]<=mbxl):
    max_profit1=pl.lpSum([
        danjia*pl.lpSum(acr*x[dkmc][zw][years][seaborn])])
else:
    max_profit1 = pl.lpSum([
        danjia * pl.lpSum(acr * mbxl)])+0.5(danjia-mbxl)*pl.lpSum([ danjia * pl.lpSum(acr * mbxl)])
model_two+=max_profit1

#约束
for i in dkmc:
    for j in years:
        for k in seaborn:
            model_one+=pl.lpSum([x[i][crop][j][k]for crop in dkmc])<=dkmc[i]
for i in dkmc:
    for j in years:
        model_one+=pl.pSum([x[i][j][season] for i in doulei for season in seaborn])>=zzmj[i]/3
for i in dkmc:
    for j in years[:-1]:
        for k in seaborn:
            for l in acr:
                model_one += x[i][j][k][l]
x[i][j+1][k][l]==0
model_two.solve()
print('输出结果',model_two.solve())
print('输出结果',model_two.solve())

针对问题二

优化目标:考虑风险,合理分配不同农作物在不同地块的种植面积,进行不确定性建模,使得收益最大化。

定义决策变量:

Ktji:第t年在第j块地上种种植i种作物

使用算法

目标函数:与问题一相似,不同点在于销售、亩产量、成本、价格现在是随机变量。

算法:

贝叶斯网络

贝叶斯网络可用有向无环图 G=(V, E)进行表 示,其中 V 是节点的集合,每个节点代表一个可观测变量或隐变量,E 是边的集合,每条边表示一个 有向关系,其联合概率分布可因子化为

式中:为G中v的父节点的集合

在态势评估中多采用因果式贝叶斯网络,用父节点表示原因,子节点表示结果。种植面积、亩产量、种植成本、销售单价、用父节点表示,预期销量为子节点,用节点间的有向边表示 其因果关系,节点间条件概率表示关系强度。

假设训练数据为,其分布为深度生成模型主要用来接近数据数据的联合分布,其中为模型参数,可参数化为一个DNN,通过最小化2个概率分布之间的统计散度,实现

基于深度贝叶斯网络学习的态势评估模型

贝叶斯网络的核心功能就是推理,即根据已知部分信息来推测未知变量的状态,推理通常分为两类:准确推理:通过数学严格计算得到精确的结果,近似推理,在计算复杂或数据量庞大时使用。针对问题二,采用近似推理进行建模。

计算流程:

1.对题给2023年数据附件1与附件2进行数据预处理与清洗,获得预期销量与影响因素,生成输入数据集。

2.基于专家经验法,设计贝叶斯网络;

3,将数据集输入贝叶斯网络模型,采用带有层次记忆模块的深度神经网络模型学习影响因素的概率,并进行近似推理,推理过程调用python语言的变分自编码器。两者共同完成模型的训练。

4,结合设定的评估指标将结果进行输出。

基于深度贝叶斯网络学习的态势评估模型如图:

基于深度神经网络的贝叶斯评估模型,能对不确定性进行良好建模。从图 1 可以看出,深度生成模型自顶向下学习联合概率分布,主要使用大量无标注数据,并进行基于变分自编码器的推理。同时,使用层次记忆模块存储深度神经网络提取的大量局部特征。

深度神经网络-贝叶斯网络模型原理

针对某个训练数据集,其数据x都由隐变量集合生成。其中最顶层隐变量为,依据输入的计算低级生成数据

然后采用线性组合策略从记忆模块中提取信息

其中,,是sigmoid函数,通过该函数控制,可以更好的调整神经元的权重和偏差。

将逐元素的多层感知机定义为组合函数,即:

模型推理原理

推理采用变分自编码器VAE,其结构如下图

.

自编码器VAE结构图

网络模型为

其中正则化项为局部重建误差,相对权重为参数,采用随机梯度下降算法进行优化。

数学建模计算

应用问题所给数据构建贝叶斯网络模型,采用提出的基于生成模型的深度贝叶斯网络对BN进行学习和推理其中子节点表示种植面积、亩产量、种植成本、销售单价,父节点表示预期产量。

贝叶斯条件概率表

p

P(p1=yes/P)

P(p1=no/P)

P(p2=yes/P)

P(p2=no/P)

yes

0.7

0.3

0.8

0.2

No

0.3

0.7

0.2

0.8

模型评估

采用Deep M-VAEBN、基于随机梯度下降算法和基于粒子群的ITFS-BN方法,检验模型不确定性建模能力。。ITFS-BN 把主观判断或经验与实际数据结合起来,根据态势评估补充战场中发生的新信息,利用 ITFS-BN 公式修正先验概 率,从而改善概率估计的准确度。PSOSA-ITFS-BN方法中,采用 ITFS-BN 更新行为节点先验概率后,基于 Deep M-VAEBN,ITFS-BN 和 PSOSA ITFS-BN 的空袭计划、侦察子计划和攻击子计划的可信度如下表:

算法名称

Deep M-VAEBN

ITFS-BN

PSOSA-ITFS-BN

可信度

0.954

0.950

0.951

可以看出三种方法都能得出态势评估结果,且可信度相近,Deep M-VAEBN 识别的可信度略高。从条件概率的产生方法看,Deep M-VAEBN 方法中 BN 条件概率主要 由深度生成模型学习自动得到,而 ITFS-BN 和 PSOSA-ITFS-BN 方法中 BN 条件概率由专家直接设定。但专家直接设定条件概率无法表达全部不确 定性,且主观性强。Deep M-VAEBN 方法对多源异类数据进行处理和特征提取,再经由生成模型学习与表达各种不确定性,能够解决上述问题。PSOSA-ITFS-BN 虽然利用基于粒子群与模拟退火的混合算法对方法进行了排序和优化,但效果提高的不明显。随着自建数据集的扩充和增加数据标注量,Deep M-VAEBN 方法的优势将逐渐显现出来。

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

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

相关文章

如何规划Web项目

项目规划 规划步骤 1. 用户故事 从用户的角度描述应用程序的功能。所有用户故事放在一起描述了整个应用程序 2. 功能 3. 流程图&#xff08;我们将去构建什么&#xff09; 4. 架构&#xff08;我们如何去构建他&#xff09; 下一步就是开发步骤&#xff08;使用代码来实现我…

聊聊资源调度

资源调度 般分为两个阶段&#xff1a; 是实现物理资源的虚拟化&#xff08;即资源的抽象&#xff09;于当前机器的性能越来越好&#xff0c;硬件配置越来越高&#xff0c;直接用物理机跑业务比较浪费&#xff0c;所以将物理机分割成更小单位的虚拟机&#xff0c;这样可以显著提…

“人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB

重要更新 1. “人大金仓”正式更名为“电科金仓”&#xff0c;完整名称“中电科金仓&#xff08;北京&#xff09;科技股份有限公司”&#xff0c;突出金仓是中国电子科技集团有限公司在基础软件领域产品( [1] ) 。据悉人大金仓在上半年营收入为9056万元&#xff0c;净利润约21…

idea中配置Translation插件完成翻译功能

文章目录 idea下载插件配置有道云阿里云百度翻译开放平台 idea下载插件 idea中安装Translation插件 使用方法&#xff1a;右下角选择翻译引擎&#xff0c;鼠标选中想翻译的部分&#xff0c;右键翻译即可 之前一直用的微软的翻译&#xff0c;不需要配置&#xff0c;但是最近微软…

Unity Adressables 使用说明(七)诊断工具(Diagnostic tools)

Addressables 包含诊断工具&#xff0c;用于分析你的 Addressables setup、performance 和 build result 。 Addressables Profiler Module Addressables Profiler 是一个 Unity 编辑器 Profiler 模块&#xff0c;可以用来了解从 Addressables 加载的内容。 前提条件 必须启…

【LeetCode】06.Z字形变换

题目要求 解题思路 首先映入我们脑海的就是暴力。这一方法可行&#xff0c;但是时间复杂度空间复杂度很高&#xff0c;因此我们使用找规律的方法。这样的话我们可以模拟插入下标&#xff0c;这样的话很容易发现首行和末行插入的位置刚好是d2*n-2&#xff0c;而中间行的两个位置…

Linux环境中安装java环境(JDK8环境)

需求背景&#xff1a; 给国产服务器&#xff08;银河麒麟V10&#xff09;中安装项目运行环境&#xff0c;安装java环境&#xff01;具体如下 下载jdk包 访问Oracle官网下载jdk包&#xff1a;Java Downloads | Oracle 中国 选择对应的cpu架构进行下载 https://download.csdn.…

OpenCV视频处理练习案例-学习篇

需要实现的功能&#xff1a; 用OpenCV打开一段视频&#xff0c;将每一帧画面压缩成540p&#xff0c;对画面进行垂 直翻转&#xff0c;转为黑白&#xff0c;然后添加高斯噪声&#xff0c;把处理好的每一帧画面保存 成一个mp4文件保存到本地 Python代码如下&#xff1a; impor…

第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon

案例一&#xff1a; 权限维持-域环境&单机版-自启动 自启动路径加载 路径地址 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\ ##英文C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动\ ##中文…

Tensorflow常见激活函数 -- Tensorflow自学笔记10

激活函数 激活函数是用来加入非线性因素的&#xff0c;因为线性模型的表达能力不够。引入非线性激活函数&#xff0c;可使深层神经网络的表达能力更加强大。 一. 什么是优秀的激活函数&#xff1f; 优秀的激活函数应满足: 1. 非线性: 激活函数非线性时&#xff0c;多层神经网…

泛微E9 Ecology9-JS应用高级进阶视频教程(重磅)

泛微E9 Ecology9【JS 应用】高级进阶视频教程震撼登场&#xff01;点击下载 引言&#xff1a; 随着企业数字化转型的深入&#xff0c;掌握泛微E9的高级开发技能已经成为众多IT技术人员和企业信息化从业者不可或缺的竞争优势。而作为泛微E9二次开发中的重要组成部分&#xff0…

AVL 树的旋转

什么是 AVL 树&#xff1f; AVL 树是一种自平衡二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff0c;以其发明者 G. M. Adelson-Velsky 和 E. M. Landis 的名字命名。它的特点是对于任意一个节点&#xff0c;其左右子树的高度差&#xff08;平衡因子&#…

生成树协议(STP:802.1D、RSTP:802.1w、MSTP:802.1s)

在二层网络中&#xff0c;如果没有生成树协议&#xff0c;会带来哪些问题: 1、广播风暴 2、MAC地址表飘移 3、重复数据帧接收 回顾生成树有哪些术语: 1、根桥 为了破除环路&#xff0c;生成树网络首先要选举出一个首脑&#xff0c;头脑&#xff0c;首领。叫做根桥&#xff0c;…

信号有效带宽

根据傅里叶变换可以知道信号带宽是无穷大的&#xff0c;这对实际应用是帮助不大的&#xff0c;所以有了有效带宽的概念&#xff0c;可能大家知道常用的经验公式&#xff1a;O.35/Tr或者0.5/Tr等&#xff0c;那这个公式是怎么来的呢&#xff1f;有效带宽又是什么含义呢&#xff…

C++入门(01)VisualStudio2022社区版HelloWorld

文章目录 1. 下载社区版2. 安装3. 启动4. 创建新项目5. C空项目6. 项目名称和位置7. 创建后&#xff0c;出现“新增功能”&#xff0c;关闭即可8. 解决方案和项目9. 新建源文件10. 编辑第一个C程序11. 运行该程序12. Debug文件夹13. 用好Microsoft Learn 1. 下载社区版 访问&a…

C语言字面量和常量

目录 引言 1. 字面量 1.1 字符字面量 1.2 整型字面量 1.3 浮点字面量 2. 常量 2.1 使用预处理器指令 #define 定义常量 2.1.1 语法格式 2.1.2 使用举例 2.2 使用 const 关键字定义常量 2.3 使用 #define 和 const 定义常量的区别 引言 看了一些博文&#xff0c;有的文…

HarmonyOS(55) error: install releaseType target not same 解决方案

releaseType not same 问题现象解决方法参考资料 问题现象 在DevEco Studio 链接真机运行时发现如下错误&#xff1a; 09/06 08:40:45:905: Install Failed: error: failed to install bundle. code:9568258 error: install releaseType not same. 09/06 08:40:45:966: View …

集成电路学习:什么是SDK软件开发工具包

SDK&#xff1a;软件开发工具包 SDK&#xff0c;即Software Development Kit&#xff08;软件开发工具包&#xff09;&#xff0c;是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解…

全国计算机二级考试C语言篇3——选择题

C语言部分——C语言概述 1.程序模块化的优点 程序模块化的优点在于它可以使程序的开发、维护和复用变得更简单。下面是一些主要的优点&#xff1a; 降低复杂度&#xff1a;模块化可以将复杂的问题分解成更小的、更易管理的部分。 可维护性&#xff1a;模块化使得代码更易于维护…

前缀列表(ip-prefix)配置

一. 实验简介 本来前缀列表是要和访问控制列表放在一起讲的&#xff0c;但是这里单拎出来是为了更详细的讲解两者的区别 1.前缀列表针对IP比访问控制更加灵活。 2.前缀列表在后面被引用时是无法对数据包进行过滤的 实验拓扑 二. 实验目的 R4路由器中只引入子网LoopBack的…