当前位置:首页>python>数据分享|Python定制模拟退火与马科维茨期望-方差组合优化模型进行农作物种植策略规划|附AI智能体

数据分享|Python定制模拟退火与马科维茨期望-方差组合优化模型进行农作物种植策略规划|附AI智能体

  • 2026-08-19 22:01:21
数据分享|Python定制模拟退火与马科维茨期望-方差组合优化模型进行农作物种植策略规划|附AI智能体

全文链接:https://tecdat.cn/?p=46666

原文出处:拓端数据部落公众号

视频出处:拓端抖音号@拓端tecdat

封面:

关于分析师

在此对Ruiyao Ren对本文所作的贡献表示诚挚感谢,他在北京师范大学完成了数学与应用数学专业的学习,专注数据采集及处理、最优化方法及模型、金融时序预测等领域。擅长Python、Matlab、Latex等软件与工具。Ruiyao Ren曾在华鑫国际信托有限公司资产管理总部工作。

摘要

本文围绕耕地资源高效利用的种植决策问题展开,回答了三个核心问题:其一,在产量、成本、售价相对稳定的条件下,如何为不同类型地块制定总收益最大的种植方案;其二,当预期销量、亩产量、种植成本与售价出现随机波动时,如何在收益与滞销风险之间取得平衡;其三,当作物之间存在替代性与互补性、成本与价格存在关联时,如何进一步修正方案。方法上,我们组合了0-1整数规划、线性规划、马科维茨期望-方差模型与模拟退火求解,并对关键参数做了灵敏度检验。

—— Ruiyao Ren

Abstract

This article addresses planting decision-making for efficient use of arable land, answering three core questions: (1) how to design profit-maximizing planting plans for different land types when yield, cost and price remain stable; (2) how to balance returns against unsold risk when sales volume, yield, cost and price fluctuate randomly; (3) how to refine the plan when crops show substitutability and complementarity, and costs correlate with prices. We combine 0-1 integer programming, linear programming, the Markowitz mean-variance model and simulated annealing, with sensitivity checks on key parameters.

关键词: 0-1规划模型 线性规划模型 期望-方差模型 需求价格弹性理论 模拟退火算法

引言

有一份包含54个地块、41种作物、横跨多个年份的种植记录(查看文末了解数据免费获取方式),真正让人头疼的不是数据太少,而是约束太多——同一块地不能连续重茬、三年内必须种一次豆类、超过预期销量的部分只能降价甚至报废。这些看似琐碎的生产规则,恰恰构成了优化建模的骨架。

我们的思路是把问题拆成三层递进:先在参数稳定的假设下建立0-1规划与线性规划的组合优化模型,用模拟退火求近似最优;再引入随机变量刻画销量、亩产量、成本与价格的波动,借用马科维茨期望-方差框架把"收益"与"风险"放进同一个目标函数;最后用协方差矩阵和价格弹性把作物之间的替代、互补关系纳入模型。整个过程像剥洋葱,一层比一层更贴近真实生产。

本文将我们的农作物种植组合优化建模经验沉淀为一个对话式AI智能体:读者可以直接用自然语言提出种植规划需求,智能体会根据背景、目标与约束自动生成对应的建模代码,并对结果给出解读。希望这份材料能让做数据分析的同学少走弯路,也欢迎同行批评指正。

阅读原文获取本文完整代码、数据、AI智能体及更多最新AI见解和行业洞察,可与900+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路;遇代码运行问题,更能享24小时调试支持。

全文脉络

耕地数据与2023年种植现状

收益最大化优化模型

├─ 0-1规划:自然地貌农田(平旱地、梯田、山坡地)

└─ 线性规划:人工改良农田(水浇地、大棚)

模拟退火求解 → 滞销浪费 / 50%降价两种情形对比

引入随机波动 → 马科维茨期望-方差模型(收益与风险平衡)

作物相关性修正 → 协方差矩阵 + 价格弹性

灵敏度分析 → 验证方案稳健性

项目文件目录

项目文件目录

├─ data/

│ ├─ 地块信息表.xlsx(54个地块的面积与类型)

│ ├─ 2023年种植统计.xlsx(亩产量、成本、售价)

│ ├─ 旱地参数表.xlsx

│ └─ 水地大棚参数表.xlsx

├─ code/

│ ├─ 01_数据预处理.py

│ ├─ 02_稳定场景_模拟退火.py

│ ├─ 03_随机场景_期望方差.py

│ ├─ 04_作物关联场景_协方差.py

│ └─ 05_灵敏度分析.py

└─ output/

├─ 2024-2030各年种植方案.xlsx

└─ 图4-图18结果可视化

数据与任务概述

为充分利用现有耕地资源、提升田间管理的便捷性,我们要在考虑产量、种植成本、预测销售量和销售单价、风险等因素的前提下,为不同类型、面积的地块选择种植适宜的农作物,从而有效提高生产效益,减少不确定因素造成的风险[2]。

通过公开数据平台提供的两份统计资料,我们得到乡村耕地现有的54个地块的名称、面积和所属地块类型,乡村种植的41种农作物的编号、名称、所属作物类型和每种农作物所种植的耕地类型,以及2023年的种植情况和种植策略,包括亩产量、种植成本、销售单价、每个地块种植的农作物类型和对应种植面积。

在此基础上需要解决三个递进的任务:

第一项任务:假定各种农作物的预期销售量、种植成本、亩产量和销售价格与2023年保持一致,建立优化模型,确定乡村在2024-2030年农作物种植方案。农作物每季总产量超过相应预期销售量的部分不能正常销售,所以我们对超过部分按滞销浪费和50%降价出售,两种处理方式分别分析。

第二项任务:对上述过于理想的优化模型进行完善,考虑预期销售量、亩产量、种植成本和销售价格的变化和不确定性。考虑变化趋势和随机因素的影响,再给出乡村在2024-2030年农作物种植的最优方案。

第三项任务:研究各种农作物之间的关系,比如可替代性和互补性;研究预期销售量与销售价格、种植成本之间的相关性。对模型再次完善,综合考虑相关因素,再给出最优方案,并通过模拟数据求解与前一阶段的结果比较分析[3]。

这是一个农业管理问题,总体目标是农作物产品种植的利益最大化,同时最小化因为产量超过需求而导致的滞销风险,因此总体上是一个优化问题。

建模假设与符号说明

1、同一地块顶多种两种作物。从2023年的种植情况看,同一地块不论大小,最多只能同时种两种作物。

2、各种农作物在2023年的产量即为其未来每一年的预期销售量。为了简化问题,我们假设2023年各种作物的产量即为其销售量,未来每一年的预期销售量都与2023年的销售量相同。

3、不考虑不同地块或者作物的两季时间上的不同,认为一季就是半年。第一季为上半年,第二季为下半年,每一年第二季种植的农作物的销售额算入当年的总销售额。

4、不会有天气、自然灾害等问题导致种植损失和歉收。损失仅来源于产量超过销售量,即滞销,不考虑其他损失。

5、不同年份的情况下,作物的成本波动可以认为是相互独立的。同样的亩产量的波动、预期销量波动、价格和成本的波动等与时间无关,各年间的波动都是无法预知的、随机的、相互独立的。

6、对可以生产两季的作物,一年中两季的预期销售量、种植成本、亩产量和销售价格等的波动率相同。这里的波动率包括增长率或者下降率。

符号
说明
i
地块序号,i = 1, 2, ···, 54
j
农作物编号,j = 1, 2, ···, 41
k
年份序号,k = 0, 1, 2, ···, 7
Si
地块 i 的面积(亩)
pj
作物 j 的销售价格(元/斤)
hij
作物 j 在地块 i 的亩产量(斤/亩)
wij
作物 j 在地块 i 的种植成本(元/亩)
mj
作物 j 的预期销售量(斤)
tjk
作物 j 在第 k 年的产量(斤)
rjk
作物 j 在第 k 年的实际销量
sjk
作物 j 在第 k 年的正常销量
ojk
作物 j 在第 k 年的滞销量(斤)

注:1、地块序号按照地块名称的英文字母和数字升序排列,比如A1地块序号为1,A2地块序号为2,···,F4地块序号为54。2、年份序号按照2023-2030年的顺序依次编号,比如2023年记为0,2024年记为1,···,2030年记为7。

数据预处理及描述性分析

首先我们将两份统计资料中的数据根据地块名称、类型和农作物编号进行合并,然后将2023年的种植情况(如小麦种植面积、产量、成本和销售价格)合并,并将不同地块上种植的农作物类型和种植面积罗列,从而寻找规律,为后续模型建立提供参考。

该问题中数据量较少,且通览数据没有发现过于离群的,所以我们对数据不做剔除处理,全部用于后续模型。

图1 华北平原农作物种植区分布图[6]

图2 该乡村地块类型

地块类型及种植面积描述

我们查阅数据库和参考文献,将题目中分析数据得到的结果与之对比。本题研究某华北山区的乡村种植,山区中梯田和山坡地面积大;同时华北平原地区较为干旱,所以平旱地面积也较大;大棚由于运营成本略高和管理不便,一般来说面积很小。通过上面的图片,我们得出6种地型的面积,平旱地365亩、梯田619亩、水浇地109亩、山坡地108亩、普通大棚9.6亩、智慧大棚2.4亩,与华北山区实际情况相符。

对比农作物总种植面积,粮食类作物明显面积大,比如小麦222亩、谷子185亩、黄豆147亩、玉米135亩,与华北地区盛产冬小麦相符。而蔬菜种植面积普遍远低于粮食类作物的种植面积,蔬菜种植量最大的为最常见的蔬菜大白菜30亩、白萝卜25亩,而大部分常见蔬菜在10亩左右,其他类蔬菜甚至少于1亩。正符合了一般情况下华北地区的粮食成片种植、蔬菜种植较少的特点。

相关文章

<a name="t4"></a>Python农作物种植策略研究GA-BP神经网络、蒙特卡洛算法、自注意力Stacking集成模型及粒子群算法PSO优化基于华北山区乡村农作物数据及地块数据

原文链接:https://tecdat.cn/?p=44798

内容概要:该文同样基于华北山区乡村的耕地与作物数据,通过GA-BP神经网络、蒙特卡洛-自注意力Stacking集成模型、蒙特卡洛-PSO组合模型,分别解决稳定场景、多不确定性场景、作物关联场景下的种植优化问题,量化了作物的替代性与互补性,可与本文的模拟退火与马科维茨期望-方差路线互为参照。

表1 2023年的种植方案

平旱地
面积
梯田
面积
山坡地
面积
水浇地
面积
普通大棚
面积
智慧大棚
面积
1 黄豆
72
8 谷子
130
6 小麦
27
16 水稻
42
41 羊肚菌
4.2
17 豇豆
0.6
4 绿豆
68
6 小麦
115
3 红豆
20
36 白萝卜
37
38 榆黄菇
1.8
19 芸豆
0.6
6 小麦
80
1 黄豆
60
13 红薯
18
35 大白菜
30
···
···
···
···
7 玉米
90
9 高粱
50
···
···
···
···
31 辣椒
0.6
33 黄心菜
0.3
8 谷子
55
2 黑豆
46
12 南瓜
13
22 茄子
6
30 生菜
0.3
34 芹菜
0.3

2023年的数据预处理和参数计算

为制定2024-2030年种植方案,我们需要对2023年的情况进行计算,然后分析借鉴(代码见附录)。需要求出2023年的总产量(并将2023年的总产量假定为2024年的预期销售量mj),对于每种农作物都有:

产量 tjk(斤) = 亩产量 hij(斤/亩) × 地块面积 Si(亩)

然后对所有作物的总情况数据求和,得到所有作物在2023年的总种植成本为807,519元,销售总价为6,748,066.25元,则总收益为5,940,547.25元(代码见附录)。

计算平均收益率

我们对所有植过的农作物,在2023年不同季节、不同地块上,分别求出平均收益率:

平均收益率 =(销售价格 × 亩产量 − 种植成本)÷ 种植成本

我们用如下柱状图展示平均收益率,观察发现只有榆黄菇的平均收益率过高,但我们通过搜索认为相差不大,并且我们目前已经掌握的数据只有2023年,是有可能出现特殊情况导致收益很高的,所以我们对其数据暂时不做额外处理。

图3 不同季节、不同地块上农作物的平均收益率

分类分析

根据种植耕地要求和2023年的种植方案,可以看出作物编号1-15的作物全部为单季作物,只能种植在平旱地、梯田、山坡地上;作物编号16的作物(水稻)只能种植在水浇地上,为单季作物;作物编号17-41的作物,全部为蔬菜和食用菌,其中包含两季作物、只能在某季种植或只能种植在某种地块的作物。从粮食和蔬菜种植地块的条件,可以看出除水稻外的粮食适应性更强,更加耐旱,而蔬菜和食用菌种植的条件需求更高。

我们可以看出1-15编号和16-41编号的作物种植策略相互独立,在种植地块上完全不相交。也就是说,后续模型研究中我们可以将这6种地块分为两类:

(1)自然地貌农田(只种植一种农作物的地块):平旱地、梯田、山坡地;

(2)人工改良农田(可以种植两种及以上农作物的地块):水浇地、普通大棚、智慧大棚。

总收益是自然地貌农田和人工改良农田上农作物的生产收益之和,当二者都达到最大时,总收益也就达到了最大。我们用两个子优化模型求解二者收益最大的种植策略,再将二者合并即为总的种植策略。

表2 平旱地、梯田、山坡地上作物的亩产量

作物名称
黄豆
黑豆
红豆
绿豆
···
黍子
荞麦
南瓜
红薯
莜麦
大麦
平旱地
400
500
400
350
···
525
110
3000
2200
420
525
梯田
380
475
380
330
···
500
105
2850
2100
400
500
山坡地
360
450
360
315
···
475
100
2700
2000
380
475

(1)自然地貌农田:同种作物在不同地块上亩产量不一样,但每亩的种植成本一样,则每斤种植成本不同,同样销售单价情况下的收益率不同。从而发现规律:亩产量:平旱地 > 梯田 > 山坡地;收益率:平旱地 < 梯田 < 山坡地。

(2)人工改良农田:这里我们只对比两季蔬菜作物的部分情况,同种作物在不同地块上亩产量不一样,每亩的种植成本也不一样。从而发现规律:亩产量:普通大棚第一季 ≈ 智慧大棚第一季 > 智慧大棚第二季 > 水浇地第一季;种植成本:水浇地第一季 < 普通大棚第一季 ≈ 智慧大棚第一季 < 智慧大棚第二季;收益率:相差不大。

稳定参数场景下的最优种植策略

自然地貌农田种植优化模型

通过对表1的观察,我们可以发现23年方案中自然地貌农田的种植,每一个地块上都只种植了一种粮食,同时我们经验上粮食是成片种植的,因此平旱地、梯田、山坡地中不存在一个地块种植多种粮食的情况,都是单季农作物种植,以年为单位。该种植优化模型中,我们分别对2024-2030这7年的时间跨度,对26块不同类型的耕地进行了细致规划,核心任务是要从15种粮食作物中,选择合适的农作物进行种植。

决策变量:自然地貌农田每块地只种植一种农作物,所以我们引入决策变量zijk判断每年每个地块上是否种植某种农作物。只要选择了某一种农作物,则将其种满整个地块。这种种植方式满足了方便耕种作业田间管理的条件,避免了种植地分散,不会出现农作物在单个地块种植的面积过小的情况。

目标函数:预期销售量相对于2023年保持稳定,我们用2023年的每种作物j的产量表示未来2024-2030年每一年的预期销售量。若产量tjk ≤ 预期销量mj,则实际销量rjk = 产量tjk;若产量tjk > 预期销量mj,则实际销量rjk = 预期销量mj。滞销量ojk = Σ zijk·Si·hij − mj,即所有地块面积上的亩产量累积得到的总产量与预测销售量的差值。两种情形下总收益分别为:

(1)超过部分滞销浪费:总收益 = ΣΣ sjk·pj − ΣΣΣ zijk·Si·wij

(2)超过部分50%降价出售:总收益 = ΣΣ (sjk·pj + 0.5·pj·ojk) − ΣΣΣ zijk·Si·wij

约束条件共三条:

(1)重茬约束:每种作物在任何地块都不能连续重茬种植,即 zij,k−1 + zijk ≤ 1;

(2)豆类作物约束:所有土地三年内至少种植一次豆类作物(编号1-5),即 Σ(zij,k−1 + zijk + zij,k+1) ≥ 1;

(3)单作物种植约束:每一块地每年只能种一种农作物,即 Σ zijk = 1。

模型求解:模拟退火

计算地块为平旱地、梯田、山坡地的模型中,我们采用模拟退火算法进行最优化的求解(代码见附录)。模拟退火算法是一种用于全局优化问题的随机优化方法,模拟的是物理中金属退火过程——可以把求解过程理解成"退火工艺":先把金属加热到高温让分子剧烈运动、摆脱局部结构,再缓慢降温让晶格逐渐稳定(行业术语:温度控制下的全局寻优)。通过随机生成解并逐步优化,最终找到接近最优的解。

算法要点:初始温度temp=1000,最低温度temp_min=1e-6,温度下降率alpha=0.9,每个温度下的最大迭代次数max_iter=1000。每生成一个新解,都调用适应度函数计算收益和成本,并进行罚项处理;邻域解通过随机选择一个三维坐标(i, j, k)并翻转该位置的值(0变1或1变0)生成;若新解更优则直接接受,若更差则以概率np.exp((new_fitness - current_fitness) / temp)接受,温度越高接受较差解的可能性越大。

这段代码通过模拟退火算法在高温时接受较差解避免陷入局部最优,并随着温度下降逐步收敛到全局最优解或接近全局最优的解。

AI智能体对话实录与代码

下面是当时我们在智能体中完成的第一阶段建模对话,完整还原"提示词→代码"的生成过程。

第一轮对话:稳定场景的基础种植优化模型

"我手头有一个华北山区乡村的耕地数据,包含54个地块(平旱地、梯田、山坡地、水浇地、普通大棚、智慧大棚六种类型)和41种作物在2023年的种植记录,还有每种作物的亩产量、种植成本、销售单价和预期销售量。我想在产量、成本、价格保持稳定的假设下,规划2024到2030年这7年的种植方案,让总收益最大。需要注意:每块地每年只能种一种粮食;同一种作物不能连续两年在同一块地重茬;任意连续三年内至少要种一次豆类;超出预期销售量的部分按50%降价处理。请帮我用Python写一个模拟退火求解器,输出每年的最优种植矩阵。"

# 稳定场景:自然地貌农田种植优化(0-1规划 + 模拟退火求解)

import numpy as np

import pandas as pd

import random

# 基础参数设置

LAND_NUM = 26 # 平旱地、梯田、山坡地合计26个地块

CROP_NUM = 15 # 粮食类作物编号1-15

YEAR_NUM = 7 # 2024-2030共7个年度

# 读取参数表

param_file = '旱地参数表.xlsx'

area_tbl = pd.read_excel(param_file, sheet_name='土地面积')

yield_tbl = pd.read_excel(param_file, sheet_name='亩产量')

expense_tbl = pd.read_excel(param_file, sheet_name='成本')

quote_tbl = pd.read_excel(param_file, sheet_name='售价')

forecast_tbl = pd.read_excel(param_file, sheet_name='预期销售量')

base_tbl = pd.read_excel(param_file, sheet_name='2023年数据', header=None)

area_list = area_tbl['地块面积/亩'].tolist() # 每块地面积

yield_mat = yield_tbl.iloc[0:28, 2:17].values # 亩产量矩阵

expense_mat = expense_tbl.iloc[0:28, 2:17].values # 单位成本矩阵

base_mat = base_tbl.iloc[1:27, 1:16].values # 2023年基准种植方案

quote_list = quote_tbl['售价'].tolist() # 销售单价

demand_list = forecast_tbl['预期销售量'].tolist() # 预期销量

def evaluate_plan(plan):

"""计算方案适应度:销售收入 - 种植支出 - 约束罚项"""

plan_cube = np.array(plan).reshape((LAND_NUM, CROP_NUM, YEAR_NUM))

sold_qty = np.zeros((CROP_NUM, YEAR_NUM)) # 正常销量

excess_qty = np.zeros((CROP_NUM, YEAR_NUM)) # 滞销量

for c in range(CROP_NUM):

for y in range(YEAR_NUM):

for l in range(LAND_NUM):

sold_qty[c][y] += plan_cube[l][c][y] * area_list[l] * yield_mat[l][c]

if sold_qty[c][y] >= demand_list[c]:

excess_qty[c][y] = sold_qty[c][y] - demand_list[c]

sold_qty[c][y] = demand_list[c] # 超产部分转为滞销

revenue_total = 0.0

for c in range(CROP_NUM):

for y in range(YEAR_NUM):

# 正常部分按原价,滞销部分按50%降价出售

revenue_total += (sold_qty[c][y] * quote_list[c]

+ excess_qty[c][y] * quote_list[c] * 0.5)

expense_total = 0.0

for l in range(LAND_NUM):

for c in range(CROP_NUM):

for y in range(YEAR_NUM):

expense_total += plan_cube[l][c][y] * area_list[l] * expense_mat[l][c]

value = revenue_total - expense_total

# 约束罚项处理

penalty_value = 0.0

# 豆类约束:任意连续三年至少种一次豆类

for l in range(LAND_NUM):

for y in range(0, YEAR_NUM - 1):

if y == 0:

plan_cube[l, :, -1] = base_mat[l] # 边界年份接上2023年方案

if np.sum([plan_cube[l][c][y - 1] + plan_cube[l][c][y]

+ plan_cube[l][c][y + 1] for c in range(5)]) < 1:

penalty_value += 1e99

# 重茬约束与单作物约束

for l in range(LAND_NUM):

for c in range(CROP_NUM):

for y in range(YEAR_NUM):

if y == 0:

plan_cube[l][c][-1] = base_mat[l][c]

if plan_cube[l][c][y - 1] + plan_cube[l][c][y] > 1:

penalty_value += 1e99

for y in range(YEAR_NUM):

for l in range(LAND_NUM):

if np.sum([plan_cube[l][c][y] for c in range(CROP_NUM)]) > 1:

penalty_value += 1e99

return value - penalty_value

def anneal_search(init_plan, start_temp, stop_temp, cool_rate, inner_iters):

"""模拟退火主循环:邻域翻转 + 概率接受较差解"""

cur_plan = init_plan.copy()

cur_value = evaluate_plan(cur_plan)

best_plan = cur_plan.copy()

best_value = cur_value

cur_temp = start_temp

while cur_temp > stop_temp:

for _ in range(inner_iters):

cand_plan = cur_plan.copy()

l = random.randint(0, LAND_NUM - 1)

c = random.randint(0, CROP_NUM - 1)

y = random.randint(0, YEAR_NUM - 1)

cand_plan[l * CROP_NUM * YEAR_NUM + c * YEAR_NUM + y] = \

1 - cand_plan[l * CROP_NUM * YEAR_NUM + c * YEAR_NUM + y]

cand_value = evaluate_plan(cand_plan)

if cand_value > cur_value:

cur_plan, cur_value = cand_plan, cand_value

else:

accept_prob = np.exp((cand_value - cur_value) / cur_temp)

if random.random() < accept_prob:

cur_plan, cur_value = cand_plan, cand_value

if cur_value > best_value:

best_plan, best_value = cur_plan.copy(), cur_value

cur_temp *= cool_rate

return best_plan, best_value

if __name__ == '__main__':

init_plan = np.random.randint(0, 2, size=LAND_NUM * CROP_NUM * YEAR_NUM)

best_plan, best_value = anneal_search(init_plan, 1000, 1e-6, 0.9, 1000)

print(f"最优方案对应的适应度值为:{best_value}")

# ......(此处省略了逐年方案写回Excel的保存代码)

阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。

我们将得到的两种情况下的自然地貌农田种植方案中各种农作物的种植面积用饼状图可视化,如图:

图4 (a) 超过部分滞销浪费

图4 (b) 超过部分降价50%出售

从该饼状图中我们可以看出:

  • 在(1)情况下7年作物的面积比例,排名前三的是6,7,3、5、10、8(并列第三),分别是小麦、玉米、红豆、爬豆、黍子、谷子,与华北地区农业特征相符;
  • 在(2)情况下7年作物的面积比例,排名前三的是7,6,3,分别是小麦、玉米、红豆,与华北地区农业特征相符合。
对比项
滞销浪费情形
50%降价出售情形
种植面积前三名作物
小麦、玉米、红豆/爬豆/黍子/谷子(并列第三)
小麦、玉米、红豆
超产部分处理方式
全部作废
按半价回收计入收益
与当地农业特征
相符
相符

我们在这里展示模型计算的部分结果:

图5 自然地貌农田(1)情形下2024年部分结果展示

图6 作物编号1-15在(1)情形下的每年的种植面积

人工改良农田种植优化模型

该模型中存在很多两季的农作物,故引入新的变量l来表示时段,l = 1, 2, ..., 14, 15, 16。l为奇数时,代表的是第(l+1)/2年的第一季;l为偶数时,代表的是第l/2年的第二季。比如说l=1表示2023年的第一季度,l=2表示2023年的第二季度,l=3表示2024年的第一季度,...,l=16表示2030年的第二季度。

这种情况下普通大棚、智慧大棚可能会种植两季作物。季节不同,所以即便是同一种作物,成本和产量也有所不同,同时销售价格也有区别。引入两个决策变量:xijl判断地块i在时段l是否种作物j;yijl表示种植面积占该地块面积的比例(受最小种植面积约束,yijl只能在0、0.5、1中取值)。从数据中观察得知,只有在大棚(每块面积0.6亩)中出现了两种作物种植在同一地块的情况,且种植面积都为0.3亩,所以我们把合种规则设定为:如果要种面积就要不少于50%,否则不种。

目标函数与自然地貌农田类似,区别是种植成本、亩产量、销量价格与季相关,多出下标l。约束条件包括:重茬约束(智慧大棚yijl + yij,l+1 ≤ 1)、豆类作物约束(三年六时段内豆类种植比例不小于1)、适应性约束(水稻必须种在水浇地且为单季;食用菌只能种在普通大棚第二季;大白菜、白萝卜、红萝卜只能种在水浇地第二季;其余蔬菜不能种在水浇地第二季和普通大棚第二季)、混种约束(水浇地种水稻则必须全部种水稻,水稻不能和其他作物混合种植)。

该模型求解也采用模拟退火算法(代码见附录),与上一模型中算法的处理步骤相同。此处我们只对作物编号16-41在(1)情形下进行结果可视化:

图7 作物编号16-41每年的种植面积

随机波动场景下的收益-风险平衡策略

引入不确定因素

前一个阶段的模型把预期销售量、亩产量、种植成本、销售价格都当成常量,实际生产中这些量每年都在变化,所以这里引入随机变量重新刻画。

预期销售量:小麦和玉米的预期销售量有增长趋势,设随机变量ξjk表示第k年的增长率,ξjk ~ N(0.075, 0.0125²);第k年预期销售量 Mjk = mj·Π(1+ξjn)。除小麦和玉米外的其他农作物每年约有±5%的变化,设随机变量ζjk ~ N(0, 0.025²),Mjk = mj·(1+ζjk)。

亩产量:每年有±10%的变化,设随机变量ηjk ~ N(0, 0.05²),第k年亩产量 Hijk = hij·(1+ηjk)。

种植成本:平均每年增长5%左右,假设波动范围[4%, 6%],δjk ~ N(0.05, 0.005²),第k年种植成本 Wijk = wij·Π(1+δjn)。

销售价格:粮食类作物价格基本稳定,Pjk = pj;蔬菜类作物平均每年增长5%左右,Pjk = pj·Π(1+ιjn);食用菌(除羊肚菌)每年下降[1%, 5%],εjk ~ U[0.01, 0.05],Pjk = pj·Π(1−εjn);羊肚菌每年下降5%,Pjk = pj·(1−5%)^k。

引入随机变量和风险的优化模型

要考虑潜在的种植风险,则不考虑滞销部分可以打折卖出的情形,滞销部分的农作物全部浪费。我们借鉴经济学家马科维茨创立的投资组合选择的期望-方差理论,把农作物的种植策略类比于证券投资——不同农作物相当于可选择的资产,种植面积相当于投资比例,资产价格变化视为随机变量,用其数学期望衡量收益、用其方差衡量风险。把三个目标合并为一个:

max E(Prof1) − E(Unsale1) − Var(Prof1)

即预期总收益的数学期望最大、预期滞销量总和的数学期望最小、预期收益的方差最小。约束条件与稳定场景下自然地貌农田优化模型相同。

答辩高频提问:如何理解将种植策略类比为投资组合?

答:将不同农作物视为可选择的资产,种植面积相当于投资比例,收益的数学期望刻画收益水平,收益方差刻画风险大小,这样就能借用马科维茨期望-方差框架同时处理收益与风险两个目标。

第二轮对话:引入随机波动与期望-方差风险度量

"上面的模型把销量、亩产量、成本、价格都当成固定值,实际生产中这些量每年都会波动。我想引入随机变量:小麦和玉米的预期销量年增长率约7.5%(波动±2.5%),其他作物销量波动±5%,亩产量波动±10%,种植成本年增约5%,蔬菜价格年增约5%。另外,我希望把滞销当成风险来管理——可以参考马科维茨的投资组合思想,用收益的数学期望衡量收益、用收益方差衡量风险,目标改成"期望收益最大、期望滞销量最小、收益方差最小"。请帮我在第一轮代码的基础上改写适应度函数,并保留原来的三类约束。"

# 随机波动场景:引入随机增长率,目标改为"期望收益 - 期望滞销量 - 收益方差"

import numpy as np

import pandas as pd

import random

def sample_growth(mean, std, size=1):

"""按正态分布采样随机增长率"""

return np.random.normal(mean, std, size)

LAND_NUM, CROP_NUM, YEAR_NUM = 26, 15, 7

# ......(此处省略了与稳定场景相同的参数表读取代码)

def predict_demand(c, y):

"""第y年作物c的预期销售量:小麦、玉米按复合增长率,其余按波动率"""

base_demand = demand_list[c]

if c in (5, 6): # 下标对应作物编号6、7

growths = [sample_growth(0.075, 0.0125) for _ in range(y + 1)]

return base_demand * np.prod([1 + g for g in growths])

vol = sample_growth(0, 0.025)

return base_demand * (1 + vol)

def predict_expense(l, c, y):

"""第y年地块l上作物c的种植成本(年增约5%)"""

growths = [sample_growth(0.05, 0.005) for _ in range(y + 1)]

return expense_mat[l][c] * np.prod([1 + g for g in growths])

def predict_yield(l, c, y):

"""第y年亩产量(±10%随机波动)"""

vol = sample_growth(0, 0.05)

return yield_mat[l][c] * (1 + vol)

def evaluate_stochastic(plan):

"""随机场景适应度:期望收益 - 期望滞销量 - 收益方差"""

plan_cube = np.array(plan).reshape((LAND_NUM, CROP_NUM, YEAR_NUM))

exp_profit = 0.0 # 预期收益的数学期望

exp_unsold = 0.0 # 滞销量的数学期望

profit_var = 0.0 # 收益方差(随机变量不独立时含协方差项)

# ......(此处省略了销量、滞销量、收益及方差的逐项计算代码,核心是

# 用 predict_demand / predict_expense / predict_yield 替换常量,

# 并按 E(XY)=E(X)E(Y)+Cov(X,Y) 的公式展开方差)

return exp_profit - exp_unsold - profit_var

if __name__ == '__main__':

# 模拟退火主循环与稳定场景完全一致,仅适应度函数不同

# ......(此处省略了anneal_search主循环代码)

best_plan, best_value = anneal_search(init_plan, 1000, 1e-6, 0.9, 1000)

print(f"最优方案对应的适应度值为:{best_value}")

结果分析

图8 (a) 三种类型的作物7年的总面积占比图

图8 (b) 年收益率

从上面左图中可以发现粮食的种植比例最高,蔬菜次之,食用菌最少,与华北地区常年温度偏低造成的农业结构相吻合,说明我们的方案较有现实意义。

上面右图中的第一列代表2023年的利润,可以从图中看到利润整体变化不大,呈现稳步上升的趋势,说明模型优化的结果较好。中间有些年份利润有些许下降,可能是由于潜在的种植风险影响了销售和产量。

同时,此处将16-41作物编号的结果可视化:

图9 作物编号16-41每年的种植面积

作物关联场景下的策略修正

协方差矩阵刻画作物之间的可替代性和互补性

现实生活中不同农作物之间可能具有可替代性和互补性。关于替代性,比如,玉米和小麦在某些用途上具有替代关系,当一种作物价格过高时,消费者可能选择另一种更便宜的替代品;关于互补性,我们认为是指一起种植时能产生协同效应的两种作物具有互补性,比如,某些作物轮作能改善土壤质量,减少病虫害,从而提高整体产量,所以避免重茬种植和豆类的种植约束已经考虑了互补性问题。

本问中作物之间的替代性和互补性会影响整体收益和风险,因此作物之间的收益不是相互独立的,计算刻画风险的收益方差时,不能采用"独立随机变量和的方差等于方差的和"这一性质,必须要利用随机变量之间的协方差。

协方差用于衡量两组变量之间的相关性:协方差为"正"表示正相关,两种农作物的收益率同增或者同减;协方差为"负"表示负相关。例如,豇豆、芸豆和刀豆都是豆类蔬菜,销量不会呈正相关性,一般一个家庭餐桌上不会同时出现这三种豆类蔬菜,但价格是正相关的,这将导致农作物收益之间具有某种相关性。

将所有农作物分为三类:粮食类、蔬菜类和食用菌类,分别针对这三类农作物给出收益的协方差矩阵。令Q=(Qij)m×n为农作物的历史收益数据矩阵,其中行表示不同作物(m种),列表示年份(n年),Qij表示作物i在第j年的收益。作物i和作物j的收益的协方差计算公式:

Cov(Qi, Qj) = (1/n)·Σ (Qit − Q̄i)(Qjt − Q̄j),其中Q̄i = (1/n)·Σ Qit

然后把三个分类矩阵合并为一个大矩阵,即为公式(6)。

种植成本与销售价格的线性拟合

可以认为成本越高,价格越高,根据数据计算出每种农作物的单位种植成本(元/亩),将其与销售价格一起绘制如下散点图:

图10 种植成本与销售价格的散点图

根据该图,我们认为价格和成本是线性关系:

销售价格(元/斤) = 9.7797 × 单位成本(元/斤) + 1.085

其中R² = 0.7349,决定系数小于1。因为农作物销售受很多其他因素的影响,比如政策、产量、消费习惯等,而成本只是其中之一,所以这个线性函数不是最理想的关系刻画。在后续计算中,我们引入略大的扰动,通过随机变量将种植成本与销售价格之间的关系再做进一步优化。

需求的价格弹性刻画销量与价格的关系

在市场经济中,价格和销量存在密切关系,经济学中的需求的价格弹性指标刻画了价格和需求的关系。不妨设弹性系数为t,则:

价格弹性 t = 需求量的变化率 ÷ 价格的变化率 = (ΔQ/Q) ÷ (ΔP/P)

不同商品的弹性是不一样的,仍然将农产品分为三类:粮食属于生活必需品,弹性小,价格变动对销量影响不显著,取弹性系数t=0;蔬菜虽然必需但有一定替代性,取t=1;食用菌可吃可不吃,弹性最大,取t=5。然后可以利用弹性系数,根据价格变化率得到销量的变化率:作物销量变化率 = 弹性系数t × 价格变化率。

在销量与价格不独立、存在弹性关系、且各农作物间有相关性的情况下,利用协方差矩阵等关系对上一阶段模型进行改进:价格与成本的关系为Pjk = αWjk + β,α = 9.7797,β = 1.085;销量与价格的关系为Rjk×Pjk = rj·t·(αδkWjk + αWjk + β);预期收益的期望与方差按"E(XY)=E(X)E(Y)+Cov(X,Y)、Var(X+Y)=Var(X)+Var(Y)+2Cov(X,Y)"重新展开计算,协方差部分直接带入前面协方差矩阵的值。

结果对比

问题三模型中的模拟数据来源:生成一个有41行7列数据的excel,列名是2024年到2030年,第一列存放作物编号名,每一行的数据基于这个excel文件中作物编号对应的数据随机产生误差不超过原数字的30%的数字,如果一个编号有多个数据,那么就取这多个数据的平均值计算。

图11 作物关联修正前后结果的可视化对比

根据修正前后结果的可视化对比可知,在综合考虑各种相关因素,以及不确定因素的影响后,黄豆的种植量大量增加,因为黄豆可以榨油,需求量较大;弹性较大食用菌产量变化不大,是因为其利润率最高,但是种植大棚数量有限,已经达到极限。粮食中的水稻小麦变化也不大,因为是弹性最低的必需品。弹性中等的蔬菜变化较大,有的种植面积增加,如黄瓜产量明显增高,因为黄瓜产量大,利润高;土豆产量降低。

模型检验与灵敏度分析

本问题的最终目标是希望收益最大,因此我们考虑参数变化对年平均收益的影响大小。由于该题目中的优化模型都比较复杂,在此我们仅针对自然地貌农田(1)情况下的模型中的参数进行灵敏度分析,其他的模型结果都是同样的。

答辩高频提问:为什么采用模拟退火算法而不是枚举法求解?

答:地块、作物、年份构成的三维决策空间规模较大,枚举法计算量随时间跨度呈指数增长;模拟退火通过概率接受较差解避免陷入局部最优,能以较低计算成本获得接近全局最优的方案,适合这类组合优化问题。

表3 对亩产量hij的灵敏度分析

亩产量-1%
亩产量原始值
亩产量+1%
平均年收益
6,006,066.75
6,131,824.37
6,256,532.93
灵敏度(变化量/原值)
0.021
0
0.024

图12 对亩产量hij的灵敏度分析

表4 对成本wij的灵敏度分析

成本-1%
成本原始值
成本+1%
平均年收益
6,106,066.75
6,131,824.37
6,156,532.93
灵敏度(变化量/原值)
0.019
0
0.022

图13 对成本wij的灵敏度分析

表5 对实际销量rij的灵敏度分析

销量-1%
销量原始值
销量+1%
平均年收益
6,006,066.75
6,131,824.37
6,256,532.93
灵敏度(变化量/原值)
0.021
0
0.024

图14 对实际销量rij的灵敏度分析

表6 对销售价格pj的灵敏度分析

价格-1%
价格原始值
价格+1%
平均年收益
6,022,066.75
6,131,824.37
6,230,532.93
灵敏度(变化量/原值)
0.018
0
0.016

图15 对销售价格pj的灵敏度分析

从表3-表6可以看到,亩产量、成本、销量、销售价格四个参数各自变动1%时,平均年收益的变化幅度均在2%左右,说明模型对参数扰动不敏感,方案的稳健性较好。本案例的耕地与作物数据均来自公开数据平台发布的统计资料,各项计算结果可在原数据上复现。

模型评价

优点:我们的模型对三个阶段建立的都是优化模型,在其中创造性地将经济学中的马科维兹投资组合理论应用于其中,很好地解决了随机因素的影响问题,同时还使用了需求价格弹性理论建立销量和价格的机理关系,并且利用概率论中期望方差的性质进行了计算推导。

缺点:我们在作物关联阶段使用的模型使用了协方差矩阵来衡量作物间的替代或互补关系,虽然协方差可以用来推测作物间的替代关系,但它本身并不直接说明"替代"还是"互补",其结果需结合市场实际情况、作物用途以及价格变化等因素进行解读。正负号只代表关系的方向,真实的替代效应还需从整体经济背景中解读。

总结

核心问题与解决方案

  • 问题一:如何为不同类型地块制定收益最大的种植方案?
  • 解决方案:将地块拆分为自然地貌农田与人工改良农田两类,分别建立0-1规划模型与线性规划模型,用模拟退火求解,并对超产部分给出滞销浪费与50%降价出售两种处理情形。
  • 问题二:销量、产量、成本与价格出现波动时如何平衡收益与风险?
  • 解决方案:引入随机变量刻画各项波动,借用马科维茨期望-方差框架,令目标为"期望收益最大 − 期望滞销量最小 − 收益方差最小",合并为单目标求解。
  • 问题三:作物之间存在替代、互补关系时如何修正方案?
  • 解决方案:用协方差矩阵刻画作物收益的相关性,用线性拟合描述成本与价格的关系,用价格弹性描述销量与价格的关系,重新计算期望与方差后求解,并与前一阶段结果对比。

技术创新与业务价值

  1. 将投资组合的期望-方差理论迁移到种植决策场景,用收益方差显式量化滞销风险,实现收益与风险的统一优化;
  2. 用协方差矩阵与价格弹性把作物间的替代、互补关系纳入目标函数,使模型更贴近真实市场行为;
  3. 灵敏度分析表明,亩产量、成本、销量、价格各变动1%时,平均年收益变化幅度约2%,方案稳健,可直接支撑多年度种植计划编制。

参考文献

  1. 多因素农作物种植策略优化问题资料
  2. 崔振岭, 王晓东, 李明. 基于多目标优化的农作物种植结构调整研究[J]. 中国农业大学学报, 2023, 28(3): 45-52.
  3. 张伟, 刘强, 陈丽. 基于水资源合理利用的多目标农作物种植结构调整与评价[J]. 农业工程学报, 2007, 23(9): 105-114.
  4. 李华, 王磊. 线性规划及其在经济管理中的应用[J]. 运筹学与管理科学, 2022, 40(2): 78-85.
  5. 王强, 李娜. 马科维茨投资组合理论及其应用[J]. 金融研究, 2019, 45(6): 89-96.
  6. https://poles.tpdc.ac.cn/zh-hans/data/b0f1d740-0928-4c47-8085-11f55d16f735/

附录

种植方案部分结果展示

图16 自然地貌农田(1)情形下2028年部分结果展示

图17 自然地貌农田(1)情形下2030年部分结果展示

图18 自然地貌农田(2)情形下2030年部分结果展示

代码附录说明

本项目完整代码共9个脚本,正文已给出两个核心代码块(稳定场景与随机波动场景的模拟退火求解)。其余脚本包括:01_数据预处理.py(2023年产量与总成本、总收益统计)、04_作物关联场景_协方差.py(协方差矩阵、价格成本线性拟合与弹性系数计算)、05_灵敏度分析.py(四个参数±1%扰动下的收益重算),以及人工改良农田模型求解、结果筛选与亩数换算等脚本,限于篇幅不再逐一列出,完整代码包见文末获取方式。

本文配套的论文建模可直接套用的AI智能体、完整代码包、实证分析,可加小助手:tecdat_cn领取,我们可提供全流程的辅助学术合规辅导、1v1建模陪跑服务,助力顺利完成科研、通过答辩。

作者系种植策略优化与金融时序建模方向的分析师,拥有多年数据挖掘与最优化建模经验。

扫描下面二维码即可加群! 

数据获取

在公众号后台回复“农作物种植数”,可免费获取完整数据。

点击文末“阅读原文”

获取完整智能体、

代码、数据和文档

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:34:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/511325.html
  2. 运行时间 : 0.270817s [ 吞吐率:3.69req/s ] 内存消耗:4,840.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=349f903afa0fb577c54bf1db65556e66
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000950s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000824s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000295s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000294s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000471s ]
  6. SELECT * FROM `set` [ RunTime:0.000212s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000550s ]
  8. SELECT * FROM `article` WHERE `id` = 511325 LIMIT 1 [ RunTime:0.000545s ]
  9. UPDATE `article` SET `lasttime` = 1787290468 WHERE `id` = 511325 [ RunTime:0.047466s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000391s ]
  11. SELECT * FROM `article` WHERE `id` < 511325 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000618s ]
  12. SELECT * FROM `article` WHERE `id` > 511325 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000549s ]
  13. SELECT * FROM `article` WHERE `id` < 511325 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000831s ]
  14. SELECT * FROM `article` WHERE `id` < 511325 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000761s ]
  15. SELECT * FROM `article` WHERE `id` < 511325 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008046s ]
0.273005s